TUTORIAL: Programación de microcontroladores - Entrega 2

Ariel Palazzesi . Vista 60522 veces
TUTORIAL: Programación de microcontroladores  - Entrega 2
Continuamos aprendiendo todo lo necesario para poder crear nuestros propios circuitos con microcontroladores.

  • En la entrega anterior de este tutorial vimos como construir un programa que, una vez cargado en el microcontrolador, hacia que un LED conectado a un pin del PORTB encendiese y apagase con una frecuencia de 500 milisegundos. Hoy aprovecharemos ese mismo ejemplo para ver como compilar el programa BASIC y como utilizar el WinPIC800 para enviarlo al microcontrolador.

    Una vez que hemos escrito el programa en la ventana “BASIC Compiler” del PIC SIMULATOR IDE, debemos compilarlo. Este proceso se encarga de transformar el código que hemos escrito (un fichero “.BAS”) en un lenguaje muy parecido al ingles a una serie de bytes que hace lo mismo pero en un idioma comprensible por el microcontrolador. Este nuevo fichero tendrá como extensión “.HEX”.

    Para compilar, simplemente utilizamos la opción “Tools” --> “Compile & Assemble” (F8). Si además queremos que el fichero resultante se cargue en el simulador para poder estudiarlo sin necesidad de grabarlo en un PIC real, usamos la opción siguiente: “Tools” --> “Compile & Assemble & Load” (F9). En entregas posteriores del tutorial veremos como simular nuestros programas.

    Si no hemos cometido errores de sintaxis, el compilador creará el fichero .HEX y nos mostrará el mensaje de la figura 2:
    • Figura 1: el programa en la ventana “BASIC Compiler” Figura 1: el programa en la ventana “BASIC Compiler”
    • Figura 2: el compilador creará el .HEX y nos mostrará este mensaje. Figura 2: el compilador creará el .HEX y nos mostrará este mensaje.

    Este mensaje es muy importante, así que explicaremos línea a línea su contenido.

    La primera línea solamente nos informa que la compilación tuvo éxito.

    La segunda nos dice que tamaño tiene el fichero generado, medido en cantidad de “palabras” (words). En el caso de los PICs de la serie 16F cada palabra tiene 14 bits de largo.

    En el tercer renglón tenemos el tamaño total de la memoria del PIC que estemos utilizando también expresado en “words”. Esta información, junto con la de la línea anterior, es útil durante el desarrollo de un programa ya que nos da una idea de cuanto espacio nos queda disponible para nuestro programa.

    La cuarta linea nos informa de la carpeta en donde se guardo el archivo .ASM y el nombre que tiene, que es el mismo que el del fichero .BAS pero con diferente extensión. Este fichero es un “paso intermedio” que realiza el compilador, pasando nuestro programa BASIC a ASM, antes de crear el HEX. Los más curiosos pueden utilizar el contenido del fichero ASM para aprender algo sobre la programación en ese lenguaje.

    En quinto lugar tenemos la carpeta y nombre del fichero LST generado.

    La sexta línea nos informa de la ubicación del fichero HEX. Es importante tomar nota de su nombre y ubicación, ya que es el que deberemos abrir desde WinPIC800 para enviarlo al PIC. La carpeta en que esta este fichero es la misma en la que estaba guardado el fichero .BAS que escribimos en primer lugar.

    Ya estamos listos para el segundo paso: utilizar WinPIC800 para enviar el programa al microcontrolador. Vamos a asumir que tanto este programa como el driver del GTP-USB+ (o el programador que vayamos a utilizar) están correctamente instalados, y que el programador esta conectado y listo para funcionar.

    Lo primero es asegurarnos de que el WinPIC800 este correctamente configurado. Para ello dispone en el menú principal de la opción “Configuración”. En “Hardware” nos aseguraremos que el programador elegido sea el nuestro (figura 3). En “Software” hay una serie de solapas y opciones (figura 4) que básicamente configuran los mensajes que recibiremos (o no) al utilizar el programa. En general, las opciones por defecto funcionarán correctamente para todos.
    • Figura 3: Seleccionamos nuestro programador. Figura 3: Seleccionamos nuestro programador.
    • Figura 4: las opciones por defecto funcionarán correctamente para todos. Figura 4: las opciones por defecto funcionarán correctamente para todos.

    La figura 5 ilustra el paso siguiente: desde las listas que están a la derecha de la ventana principal del WinPIC800 seleccionamos la familia y modelo del microcontrolador que vamos a utilizar. Este debe coincidir con el que seleccionamos en el PIC SIMULATOR IDE, ya que el programa que se generó está especialmente concebido para ese modelo en particular. Como familia seleccionamos “PIC 16F” y como modelo “16F628A”.

    Una vez que hemos hecho esto, WinPIC800 “sabe” como deberá enviar los datos al programador. Otro punto a tener en cuenta en esta etapa del proceso es la posición que debe ocupar el PIC en el zócalo ZIF del programador. Si tenemos dudas, podemos utilizar la ayuda incorporada en el programa, mediante la opción marcada con un círculo rojo en la figura 6. Luego, debemos ir al menú “Archivo” --> “Abrir” y cargar el fichero HEX que generamos con el PIC SIMULATOR IDE.

    El led bicolor del GTP-USB+ estará en verde si todo esta correctamente instalado, por lo que podemos proceder a enviar el fichero. Para ello, presionamos el icono “Grabar Todo” que se ve en la figura 7, y en un par de segundos tenemos nuestro PIC grabado. El mensaje que veremos será el de la figura 8.
    • Figura 5: seleccionamos la familia y modelo del microcontrolador. Figura 5: seleccionamos la familia y modelo del microcontrolador.
    • Figura 6: Posición del PIC en el zócalo ZIF. Figura 6: Posición del PIC en el zócalo ZIF.
    • Figura 7: el icono “Grabar Todo”. Figura 7: el icono “Grabar Todo”.
    • Figura 8: ya tenemos nuestro PIC grabado. Figura 8: ya tenemos nuestro PIC grabado.
    Para probar que todo funciona, tenemos que armar el circuito y alimentarlo con 5V de corriente continua. Veremos (si todo esta bien) el LED encendiendo y apagando cada medio segundo. Esto es así por que la corriente que circula por el proviene del pin 9 del PIC (a través de la resistencia de 220 ohms), y cada vez que el pin se pone en estado bajo deja de circular por el, apagándolo.

    Seguramente la parte mas compleja y que mas tiempo nos ha llevado en esta practica es la de armar el circuito. El programa se escribe fácilmente, y si hay errores, se puede corregir sin complicaciones. La etapa de generación del fichero HEX y la grabación del mismo en el microcontrolador también es muy simple. Seria muy bueno podernos evitar el trabajo de tener que armar un circuito físico diferente cada vez que realizamos una práctica, ya que a lo largo de este tutorial realizamos muchas.

    La solución a este problema viene de la mano de las denominadas “placas entrenadoras”. Estas placas tienen, por lo general, un zócalo para colocar el microcontrolador, y proveen una serie de “periféricos” listos para usar, tales como pulsadores, LEDs, pantallas LCD, algún buzzer, reles, salidas RS-232, USB y casi todo lo que podamos imaginar. Por lo general, su precio aumenta junto con sus prestaciones, y su valor comienza en unos 30 o 40 euros para las simples, hasta varios cientos por las más completas. Por supuesto, se trata de una buena inversión por que nos ahora tiempo y dinero empleado en crear prototipos cada vez.

    Afortunadamente, los lectores de NeoTeo pueden armar su propia placa entrenadora. De hecho, hemos publicado dos: una para PICs de 18 pines, y otra para los más grandes, de 40 pines. Estas placas son muy básicas, solo tienen el PIC y 3 o 4 pulsadores y LEDs. Pero tienen un par de ventajas importantes: su costo es muy bajo, y son totalmente ampliables mediante módulos, por lo que podemos ir construyéndolos a medida que los necesitamos, y nos quedan para las prácticas siguientes.

    Las prácticas de los capítulos siguientes estarán pensadas como para ser realizadas sobre estas placas entrenadoras, para ahorrar tiempo. Por supuesto, como también brindaremos el circuito eléctrico en cada caso, no habrá problemas si quieren seguir trabajando como hasta ahora.

    A continuación, y para terminar por hoy, les muestro como modificar el ejemplo de la entrega anterior para que funcione sobre la placa entrenadora de 18 pines. La única cosa que hay que cambiar es el pin utilizado para conectar el LED. En el ejemplo original usamos un pin del PORTB, pero en la placa entrenadora (si no tenemos ningún modulo adicional de E/S) solo tenemos LEDs conectados a los pines 4, 5, 6 y 7 del PORTA. Así que el programa debería utilizar alguno de ellos. Supongamos que nos decidimos por usar el pin 7 del PORTA (de ahora en más, PORTA.7. El programa modificado quedaría así:

    AllDigital

    TRISA = %01111111
    TRISB = %00000000

    loop:
    PORTA.7 = 1
    WaitMs 500
    PORTA.7 = 0
    WaitMs 500
    Goto loop


    Los cambios efectuados también incluyen la línea 3 (TRISA = %01111111) ya que tenemos que indicar que el PORTA.7 se utilizara como salida. La figura 10 muestra como tenemos que configurar la sección “Options” -->“Configuration Bits” para que el microcontrolador funcione correctamente en la placa entrenadora. Lo mas importante es que le estamos indicando que no usaremos cristal para el oscilador, y que esos dos pines (PORTA.6 y PORTA.7) estarán disponibles como entrada/salida.

    La figura 11 muestra el trainer funcionado, con el LED rojo que indica que esta alimentado, y el verde encendido. El círculo rojo indica la posición que tiene que tener el jumper en PORTA.7 para que se comporte como salida. Si tienen alguna duda sobre el entrenador, pueden releer el artículo correspondiente. En el video se ve claramente como destella el LED.


    Con esto damos por terminada la segunda entrega. Les recuerdo que en los foros pueden plantear sus dudas. Hasta la próxima semana.
    • Figura 9: El entrenador para PICs de 18 pines. Figura 9: El entrenador para PICs de 18 pines.
    • Figura 10: "Configuration bits" en PIC SIMULATOR IDE. Figura 10: "Configuration bits" en PIC SIMULATOR IDE.
    • Figura 11: el trainer funcionado. Figura 11: el trainer funcionado.
      Lee la primera parte del tutorial.

¿Y tú, qué opinas?

  • #1 César...
    César... domingo, 22 de abril de 2007, 06:07

    buenisimo, explicado detalladamente. Felicitaciones....espeor el proximo numero....chauuu ;)

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #2 César...
    César... domingo, 22 de abril de 2007, 06:09

    buenisimo, explicado detalladamente. Felicitaciones....espeor el proximo numero....chauuu ;)

    Responder >> Attention Minus Plus Votos: 1 de 1
  • #3 Fer
    Fer martes, 24 de abril de 2007, 17:03

    Exelente tuto, junto con el primero.. Hace un tiempo que no programo PICS, lo hice en la secundaria para entrgar proyectos anuales. Hicimos una casa inteligente y un control de entrada de personal que se implemento en la base de la fuerza aerea en quilmes. En su momento usaba el PIC BASIC para hacer el programa, salvo las partes que tenian que ser mas rapidas que lo hacia directo en assembler. Y para probarlo hay un entorno de simulacion muy bueno. El PROTEUS... Ahi podes simular todo el circuito, incluyendo el Micro.. podes ponerle teclados matriciales, lcd y lo mejor de todo, tiene una pantalla de HyperTerminal para hacer comunicacion RS-232 con el pic. Si pones mas de 1 y queres p... Leer más

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #4 GUIVI
    GUIVI martes, 20 de noviembre de 2007, 10:30

    NECESITO AYUDA NO ENTIENDO POR QUE EN EL PIC BASIC IDE CUANDO PONGO ALLDIGITAL EN LA PRIMERA LINEA Y QUIERO ENSAMBLAR DICE ERROR SINTAXIS

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #5 Ariel Palazzesi
    Ariel Palazzesi martes, 20 de noviembre de 2007, 11:37

    Hola GUIVI! Seguramente pasa una de las dos cosas siguientes: a) Tienes una version antigua del compilador, que no reconce ese comando. En ese caso, recuerda que tu licencia te permite descargar de la web del fabricante la ultima version sin cargo. Actualizate, y solucionado el problema. b) El micro que estas usando no tiene entradas analogicas en el portA (un 16F84, por ejemplo), y por eso el compilador "protesta" cuando le toca compilar ALLDIGITAL. Saludos!

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #6 ect00000
    ect00000 jueves, 08 de mayo de 2008, 22:44

    por favor ayuda, programo con picbasicpro el prosesador pic 671 de 8 pines pero aunque le programe la instruccion if then que es condicional no la respeta por favor colegas diganme que hacer gracias

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #7 <a href="../../foro/member.php?u=6721" target="_self">marshall_260</a>
    marshall_260 jueves, 08 de mayo de 2008, 23:50

    #6Hola ect0000!
    ¿Podrias postear el codigo que te da el error? De esa forma podriamos ayudarte mejor.

    Saludos.

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #8 ect00000
    ect00000 viernes, 09 de mayo de 2008, 17:39

    #7Lo raro es que no me marca ningun error ya que se compila exitosamente incluso al programar no hay problema pero cuando mando la señal a la entrada que programo como condicional simplemente no la toma encuenta gracias por el interes Ariel y si me puedes ayudar lo agradecere mucho valga la redundancia saludos!

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #9 ect00000
    ect00000 viernes, 09 de mayo de 2008, 17:44

    #7como ovservacion te digo que en el circuito pic16f84a no tengo problema es solo con el de ocho pines pero a veces el programa que hago es muy pequeño y creo que valdria la pena usar los procesadores pequeños gracias Ariel y saludos!

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #10 ect00000
    ect00000 viernes, 09 de mayo de 2008, 18:04

    perdon si no supe explicarme pero la programacion que hago en el pic16f84 que si funciono la condicional, en el pic12c761 no trabajo ,me ignora la señal que mando a una entrada gracias por la ayuda y no se como hacer que acepte la condicional en estos procesadores pequeños saludos!

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #11 <a href="../../foro/member.php?u=15999" target="_self">juane10</a>
    juane10 lunes, 08 de diciembre de 2008, 15:51

    hola a todos el tutorial es fantastico gracias por el tiempo si me pudieran ayudar en configurar el puerto A como comparador que no lo tengo tan clara
    gracias

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #12 ejamess
    ejamess lunes, 30 de marzo de 2009, 13:03

    #3hola te escribo desde cali colombia sur america y neceito tu ayuda debo entregar un programa software para trabajar un motor paso a paso con el pic 16f877 y no he sido posible necesito tu ayudora por favor

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #13 aobregon
    aobregon martes, 23 de junio de 2009, 17:52

    por que no se puede modiicar el programa de programa de un microcontrolador

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #14 jhon f lopez
    jhon f lopez domingo, 02 de agosto de 2009, 00:55

    excelente, que metodologia tan admirable...la verdad estoy muy interesado en seguir aprendiendo con ustedes..me gustaria que me den unas direciones especificas donde consular mas sobre estos temas o donde tengo mas acceso a lo que ustedes enseñan.

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #15 hernan dario morantes
    hernan dario morantes martes, 20 de julio de 2010, 05:08

    cuantes istrucciones son y cuales son

    Responder >> Attention Minus Plus Votos: 0 de 0
  • #16 idide12
    idide12 martes, 07 de febrero de 2012, 20:48

    esto me parece muy bueno y bien detallado, dado que es la primera vez que voy a realizar un trabajo con microcontroladores, y lo que quiero es que me abra y cierre persianas, 4 en concreto, ¿me recomendais algún microcontrolador en particular? gracias

    Responder >> Attention Minus Plus Votos: 0 de 0
  • Cargando...Cargando...

  • nuevo comentario
    Nombre

    Campo obligatorio

    Email

    Escriba una dirección de correo electrónico con el formato sunombre@ejemplo.com.

    Campo obligatorio

 
Ir arriba