Buscar en este blog

miércoles, 22 de diciembre de 2010

GPSim simulador para microcontroladores PIC en GNU/Linux

El programa GPSim permite simular código fuente escrito para un microcontrolador PIC.

El mismo cuenta con varios módulos (LED's, display LCD, display 7 segmentos, USART, Switch, etc.) que permiten simular muchos de los circuitos básicos que se puedan crear con un PIC.

Módulos que se instalan por defecto con el GPSim (versión 0.22.0)

Para probar algunas de sus funcones, hice un programa en assembler consistente de un contador de 0 a 9.

La idea es entonces simularlo conectándole al PIC un display 7 segmentos.
A su vez, para probar el osciloscopio (logic probe) que trae el GPSim, voy a conectar a este, algunos de los pines del PIC.

Para simular en el GPSim voy a utilizar un archivo ".cod" y un archivo ".conf".

El segundo de estos archivos le indica al GPSim qué componentes (led, display 7 segmentos, etc.) voy a utilizar y cómo los debe conectar entre ellos y al PIC. Una alternativa a utilizar este archivo ".conf" es realizar las conexiones desde el entorno gráfico del GPSim.

Código a simular

El código del contador a compilar lo encuentran acá. Está escrito en assembler.

Para compilarlo utilizo el compilador "gpasm". Para esto abren una línea de comandos en la carpeta donde descargaron el archivo anterior con el código y ejecutan (yo tengo guardado el archivo con el nombre "contador.asm"):

gpasm -p 16F628A contador.asm

Esto genera, entre otros, un archivo de extensión ".cod" (contador.cod) que es uno de los que voy a utilizar con el GPSim.

Conexión de módulos

Ahora lo que hago es crear un archivo de extension ".conf" (contador.conf), donde le indico al GPSim la carpeta (directorio) donde se encuentran los módulos a cargar y cómo son las conexiones que debe realizar entre el PIC, el display y el osciloscopio.

El archivo de configuración a crear tiene el siguiente contenido (lo guardo con el nombre "contador.conf" en el mismo directorio que "contador.cod"):

#cargar la libreria con los modulos
module lib /usr/lib/libgpsim_modules.so.0

#crear display 7 segmentos
module load led_7segments L7

#crear 7 nodos para conectar el display y el PIC entre si
node nl0 nl1 nl2 nl3 nl4 nl5 nl6

#usar los nodos para conectar el display y el PIC entre si
attach nl0 pin(porta0) L7.seg0
attach nl1 pin(porta1) L7.seg1
attach nl2 pin(porta2) L7.seg2
attach nl3 pin(porta3) L7.seg3
attach nl4 pin(porta4) L7.seg4
attach nl5 pin(porta5) L7.seg5
attach nl6 pin(porta6) L7.seg6

#conectar los pines 0, 3 y 5 del PORTA del PIC a los canales 0, 1 y 2 del osciloscopio del GPSim respectivamente
#notar que en este caso no es necesario utilizar nodos
scope.ch0="porta0"
scope.ch1="porta3"
scope.ch2="porta5"


Simulación

Ahora sí, en una línea de comandos, ejecuto lo siguiente para inciar el GPSim (en modo gráfico):

gpsim -c contador.conf -s contador.cod

Le damos "run" y comienza la simulación. En "Windows > Breadboard" pueden ver el display y el PIC y en "Windows > Scope" el osciloscopio.

El programa creado para el contador no es muy útil en la práctica ya que no tiene delays entre mostrar un dígito y el siguiente; por lo que el contador aumenta muy rápido y seguramente no se puedan distinguir los distintos números.

En la simulación esto no es problema porque la ejecuto con la ocpión "100ms" que lo que hace es añadir un delay de 100ms (entre la ejecución de uno y otro cíclo de reloj del PIC).

PIC mostrando los números en un display 7 segmentos

Algunos de los pines del PIC conectados al osciloscopio del GPSim
Fuentes

1 comentario:

  1. Excelente aporte, muy bien explicado y educativo

    ResponderEliminar