lunes, 12 de abril de 2010

Primer proyecto con Microcontroladores PIC (Led intermitente con Pic 16f84a)


En la siguiente entrada abordare un proyecto con microcontroladores, mas específicamente el hacer un led intermitente, el "Hola mundo" de los microcontraladores. Para ello utilizaremos el software que he añadido recientemente a mi blog, que es Pic Simulator IDE, el que nos entrega un entorno de desarrollo para la programación de estos microcontroladores, como también poder simular su actuar (aunque por ahora solo se vera la generación del .hex, para Simulación  en el mismo entorno, revisen la entrada en donde publique el programa). Y para ver o simular lo que estamos programando usaremos Proteus, programa que también ya había subido al blog y pueden encontrarlo en entradas anteriores.


Si hasta ahora no has entendido nada de lo que e dicho, te recomiendo no seguir y leer sobre microcontroladores y aprender lo básico de electrónica, esta entrada no esta dedicada a enseñar que es un microcontrolador o a enseñar electrónica, solo quiero explicar o enseñar a trabajar con el entorno de trabajo Pic Simulator IDE y su simulación en Proteus. Por lo tanto si no sabes nada de electronica y menos de microc0ntroladores, primero te invito a revisar las siguientes paginas:

http://www.neoteo.com/microcontroladores.neo

http://r-luis.xbot.es/descarga/files/ebasica.pdf

Tutorial de electrónica digital 1
Tutorial de electrónica digital 2
Tutorial de electrónica digital 3
Tutorial de electrónica digital 4
Tutorial de electrónica digital 5

Después de esta introducción vamos a lo nuestro.

Primero: el datasheet de este pic lo encontramos aquí --> http://ww1.microchip.com/downloads/en/devicedoc/35007b.pdf

Segundo: el pinout de este integrado lo podemos ver en la siguiente imagen:


En donde Vss es el negativo o tierra, y VDD el positivo.


Tercero: debemos montar el siguiente circuito:



Cuarto: ya con esto podemos empezar a hacer lo mas interesante de todo esto, que es PROGRAMARLO.


Para ello, debemos abrir el Pic Simulator IDE (que obviamente ya descargaron e instalaron) le damos a Options --> Select microcontroller --> buscamos el 16F84A


Ahora vamos a Options--> Configuration Bits y nos aseguramos de que el Watchdog este desactivado, el power up timer este activo y el oscilador en modo XT (mirar datasheet pág. 24).

Ahora vamos a Tools --> BASIC Compiler y se nos abrirá la ventana en donde escribiremos nuestro código. El código que escribiremos ahí sera el siguiente:



Ahora explicare linea a linea:


AllDigital : esta linea lo que hace es desabilitar todos las funciones especificas de los pines como comparadores, entradas o salidas seriales, etc, dejandolas simplemente como una entrada o salida digital, es decir, puede dejarse en un estado alto o bajo. (5 volts, 0 volts).


TRISB=%00000000 : esta linea dice al puerto B (TRISA si se quiere trabajar con el puerto A) que sus pines seran todas salidas, el % indica que es un binario y cada numero (bit) representa un Pin del puerto, en donde si le ponemos 0 a ese pin lo estamos declarando como una salida y si le ponemos un 1 lo estamos declarando como una entrada. Para este proyecto esta linea también puede haber sido : TRISB.0=0 , dado que solo ocupamos el pin 0 del puerto B, y los demás pines no nos interesan.


loop: estamos marcando una etiqueta dentro del codigo, en donde luego podemos llamarlo y seguir desde ese punto hacia adelante, en otras palabras, es una marca en el código a la cual podremos luego llamar.


High RB0: aqui estamos poniendo en un estado alto (5 volts) al pin 0 del puerto B (RB0), esta linea tambien puede haber sido : PORTB.0=1  en donde decimos que el pin 0 del puerto B le estamos asignando un 1, que en electrónica digital nos representa un estado alto.


WaitMs 1000: aquí estamos provocando una pausa de 1000 milisegundos o lo equivalente a 1 segundo.


Low RB0: aqui estamos poniendo en un estado bajo (0 volts) el pin 0 del puerto B, esta linea tambien puede haber sido : PORTB.0=0  en donde decimos que el pin 0 del puerto B le estamos asignando un 0, que en electrónica digital nos representa un estado bajo.


WaitMs 1000: aquí estamos provocando una pausa de 1000 milisegundos o lo equivalente a 1 segundo.


Goto loop: aquí estamos diciendo que nuestro código va a volver o saltar en donde se encuentre la etiqueta "loop" y seguir con el programa desde esa etiqueta, con lo cual estaríamos como bien dice el nombre de la etiqueta generando un loop infinito.


End: fin del programa. (en este caso nunca llegara ahí dado que al colocar Goto loop anteriormente,  el código saltara arriba y comenzara otra vez a hacer lo programado)


En pocas palabras lo que hicimos fue, primero configurar los puertos, luego poner en alto un pin (en el que tenemos conectado el led), esperamos un cierto tiempo, luego lo ponemos a bajo, esperamos otro cierto tiempo y luego volvemos a repetir lo mismo..


Ahora solo queda Compilar y cargar nuestro código.. para ello vamos a Tools--> luego a Compile & Assemble & Load, o simplemente presionamos F9, nos pedirá, donde guardar el código o proyecto y en esa misma dirección generara el archivo .HEX .


Ahora para simular y ver que es lo que realmente hace, con el .hex listo y con el circuito en proteus ya hecho, hacemos doble click en el microcontrolador y en "Program File" seleccionan el archivo .hex generado, luego solo echan a andar la simulación y verán su Led parpadeando (Si no les a funcionado algo hicieron mal, revisen nuevamente todo.. mas abajo dejo una carpeta con el proyecto hecho.)


Ahora si quieren ir probando ya con este código o ir agregando mas leds, solo deben detener la simulación, hacer los cambios que quieran en el programa, compilan (F9) y si no an cambiado de dirección el .hex, ejecutan o echan a andar la simulación (con esto digo que si hacen cambios al .hex, el proteus solo se actualiza si es que no an cambiando el .hex de dirección, por lo cual no es necesario decirle donde esta el .hex cada vez que modifican el programa).


Como opcion de investigacion o de prueba utilicen el comando Toggle el cual hace cambiar de estado un un pin, es decir si esta en alto lo deja a bajo o si esta en bajo lo deja en alto, con lo cual pueden acortar un poco el código, que quizás para este proyecto es muy poco provechoso, pero luego cuando hagan proyectos mas grandes, ahorrarse un poco de código, les vendrá muy bien, dado que cabe recordar que estos microcontroladores no tienen una gran memoria, así que no se pueden dar lujos de derrochar memoria.


Y eso es todo, si quieren llevarlo a la realidad deben hacerse de un grabador de Pic's como este --> http://213.97.130.124/progs/pipo2/pipo2.htm el cual es muy fácil hacerlo. O para mas información al respecto lean este enlace --> http://r-luis.xbot.es/project/grab_pic.html


Acá les dejo los archivos del proyecto, simulación en  proteus y el .hex y .bas del Pic Simulator IDE.




Hasta la próxima!


Pic Simulator IDE

 


Pic Simulator IDE es un entorno de programación integrado para microcontroladores o microprocesadores, que además de permitir la creación de programas en lenguaje assembler incorpora un muy completo BASIC, con soporte para dispositivos 1-wire, LCD, RS-232y muchos más.

Otro aspecto destacable es la inclusión de una gran cantidad de módulos de E/S que simulan exactamente lo que esta pasando en nuestro programa, incluidos un módulo LCD, teclado, osciloscopio,displays de 7 segmentos entre otros.

La pagina de dicho productos es: http://www.oshonsoft.com/

En la siguiente dirección (acá) podemos encontrar una muy buena explicacion de las funcionalidades del programa y en esta otra dirección (acá) podemos encontrar un tutorial acerca del lenguaje del programa (Basic), tambien acá tenemos un manual de referencia hecho por el creador del programa, en donde encontramos información sobre declaraciones, operaciones matemáticas que soporta el lenguaje, estructuras, elementos básicos del lenguaje, etc..

Descarga