Programación de Microcontroladores PIC en C con Ubuntu utilizando el ICD2 de Microchip y el IDE para PIC Piklab basado en el compilador SDCC (Small Device C Compiler)

Programación de Microcontroladores PIC con un lenguaje de alto nivel como el C en LINUX.

Biblioman

6/30/20096 min read

En este tutorial veremos paso a paso cómo programar Microcontroladores PIC con un lenguaje de alto nivel como el C en LINUX. Para ello vamos a utilizar las siguientes herramientas:

Hardware:

Programador y depurador en circuito ICD2 de Microchip, puedes obtener más información sobre el aquí.

Placa demo de desarrollo PICDEM 2 PLUS, el esquema y toda la información de la placa la tienes aquí.

Software:

Piklab es un IDE para programar PIC desde Linux, desde él podemos escribir el código fuente de nuestro programa, compilarlo y construir el proyecto con diferentes compiladores y luego programar nuestro PIC con diferentes programadores. Puedes obtener más información de este proyecto de software libre desde aquí.

SDCC (Small Device C Compiler). Es un compilador para Microcontroladores de código libre que está disponible para diferentes plataformas entre ellas Linux. Puedes obtener más información aquí.

La distribución de Linux que vamos a utilizar como sistema operativo va a ser Ubuntu 9.04.

Empezaremos por instalar el software, para ello abrimos una consola y escribimos lo siguiente:

sudo apt-get install piklab sdcc

Esto es así de fácil porque tanto piklab como sdcc ya se encuentran en los repositorios de Ubuntu.Una vez hecho esto podremos acceder a Piklab desde Aplicaciones-Programación:

Al hacer clic en Piklab se nos lanzará el IDE:

Ahora tenemos que configurarlo, para ello seleccionamos en el menú Programador-Settings…
Se nos abrirá la siguiente ventana:

Donde seleccionaremos la opción de Seleccionar Programador, en la parte derecha donde pone programador en uso buscaremos Programador ICD2 y en la pestaña Selección de Puerto seleccionaremos Serie. El ICD2 tiene dos formas de conectarse a nuestro PC: por un puerto serie (conector Db9) ó a través de un puerto USB mucho más rápido y aconsejable, aquí vamos a ver las dos formas. Si hemos seleccionado la opción del puerto serie y tenemos conectado el ICD2 tal y como se muestra en la figura de abajo, nos saldrá que la conexión es correcta.

Ahora seleccionamos la pestaña que pone Específico y en Carpeta de firmware tendremos que poner la ruta a la carpeta donde se encuentran los drivers del ICD2, para que el Sistema Operativo se pueda comunicar con el dispositivo Hardware.

Ahora hay que copiar esa carpeta con todo su contenido y pegarla en nuestro sistema Ubuntu donde queramos, por ejemplo yo la he pegado dentro de mi carpeta personal:

Ahora solo nos queda seleccionar ese directorio, haciendo clic en el icono que hay en forma de carpeta al lado del campo de texto y pulsar el botón OK para aceptar los cambios:

Bueno, llegado hasta aquí alguno se preguntará donde están los drives para Linux del ICD2. Pues bien el ICD2 está pensado en principio para que funcione sobre el Software Mplab de Microchip que solo funciona sobre plataformas Windows y por tanto no hay un paquete con los drivers para descargar desde la página del fabricante, pero los desarrolladores de Piklab lo que han hecho es dar la opción de poder utilizar los drivers que en un principio estaban pensados para Windows en Linux. Aunque todo esto pueda parecer complicado vamos a ver qué fácil es: Lo que necesitamos es instalar el paquete de instalación de MPLAB en una plataforma que tenga Windows instalado, si no tienes ningún PC con una partición que tenga este sistema operativo instalado puedes crearte una máquina virtual con Virtual Box, VMware ,etc. ó también puedes instalarlo en Linux a través de wine. Yo lo he hecho desde un portátil en el que aún tengo Windows XP instalado.

El software MPLAB es gratis y te lo puedes descargar desde aquí

Una vez descargado el instalador, se instala como cualquier aplicación de Windows. Pues bien, una vez instalado nos vamos al directorio donde se ha instalado y buscamos la carpeta ICD2 según se muestra en la figura de abajo:

Y listo, ya tenemos instalado los drivers de nuestro dispositivo ICD2 para que funcione en Linux.
Ahora para comprobar que todo funciona bien, vamos a escribir un programa en C para el PIC 16F877 utilizando el IDE de Piklab, vamos a compilarlo y a construir nuestro proyecto utilizando el compilador SDCC que habíamos instalado y vamos a programar nuestro PIC con el ICD2 todo ello sin salir del entorno de Piklab.
Empezamos creando un nuevo proyecto, para ello seleccionamos Proyecto-Nuevo proyecto… y en la ventana que nos aparece le ponemos un nombre al proyecto, la ruta donde queremos que se guarde nuestro proyecto, seleccionamos el PIC que queremos programar en este caso 16F877 y en compilador seleccionamos Small Device C Compiler y pulsamos sobre Next

Nos aparecerá una nueva ventana donde seleccionaremos crear plantilla de archivo fuente, para que Piklab se encargue de hacernos el esqueleto de nuestra aplicación.

Una vez que pulsemos sobre Finish, Piklab nos mostrara el proyecto creado, en la ventana de edición tendremos que adaptar la plantilla creada a las necesidades de nuestro programa. El ejemplo que yo he creado hace parpadear el led conectado a la patilla RB1 del PIC a intervalos de un segundo. Fijaros en la parte de abajo, ya está seleccionado el tipo de programador que vamos a utilizar y con qué compilador se va a generar el proyecto. Si seleccionamos en el menú Construir-Construir Proyecto… y miramos en la traza de compilación veremos que nuestro proyecto se ha generado con éxito.

Bien ahora solo nos queda programar nuestro PIC, para ello seleccionamos en el menú Programador – Programar y observamos en la traza de de Programación que la operación se realiza con éxito según se muestra en la figura de abajo:

Bien, si desconectamos el cable RJ-11 que une el ICD2 con la tarjeta de demostración, veremos cómo parpadea el Led a intervalo de un segundo.

CONEXIÓN DEL ICD2 AL PC UTILIZANDO LA CONEXIÓN USB

Si utilizamos la conexión USB, la velocidad con la que programaremos el PIC será mayor, además tendremos más fiabilidad frente a errores de programación. Vamos a ver como se hace:

Conexiones: haremos las conexiones según se muestra en la figura de abajo:

Abriremos la ventana de configuración del programador ICD2 y en la pestaña Selección de Puerto, seleccionaremos USB y pulsaremos OK, según se muestra en la figura de abajo:

Aparentemente ya debería de funcionar, pero no es así, por seguridad Linux no permite el acceso directo por software a los dispositivos USB.

Para solucionarlo seguiremos los siguientes pasos:

1.- Abrimos el editor de textos Gedit con derechos de administrador, para ello simplemente escribimos en la terminal: sudo gedit.

2.- Nos vamos al directorio: /etc/udev/rules.d, creamos un nuevo archivo y lo llamamos: 026_microchip.rules según se muestra en la figura de abajo.

3.- Una vez creado el archivo lo editamos y escribimos lo siguiente:

#ICD2
SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="8000", MODE="0660", GROUP="microchip"
#ICD21
SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="8001", MODE="0660", GROUP="microchip"

Y guardamos el fichero según se muestra en la figura de abajo.

4.- Abrimos la terminal y creamos el grupo "microchip" escribiendo: groupadd microchip

5.- Ya solo queda adicionar tu cuenta de usuario al grupo microchip escribiendo: adduser nombre_usuario microchip

6.- Reiniciamos el ordenador.

Una vez hecho esto ya podemos programar el PIC con el ICD2 a través de un puerto USB.

Como veis programar Microcontroladores PIC con ICD2 en Ubuntu es muy sencillo. Si no disponéis de este programador, Piklab da la posibilidad de utilizar otros, algunos de ellos fáciles de construir por nosotros mismos. Lo mismo ocurre con los compiladores, tenemos varios disponibles para elegir el que mas nos guste.

Aquí tienes un vídeo de demostración del ejemplo: