TUTORIAL: Programacin de microcontroladores - Entrega 1
La electrnica ha evolucionado mucho. Casi todo lo que hasta hace unos aos se hacia mediante un grupo (a veces muy numeroso) de circuitos integrados conectados entre si, hoy se puede realizar utilizando un microcontrolador y unos pocos componentes adicionales. De todos los fabricantes de microcontroladores que existen, los ms elegidos por los hobbystas suelen ser los modelos de Microchip, en gran parte debido a la excelente documentacin gratuita que proporciona la empresa para cada modelo. El lenguaje nativo de estos microcontroladores es el ASM, y en el caso de la familia 16F solo posee 35 instrucciones. Pero el ASM es un lenguaje que esta mucho ms cerca del hardware que del programador, y gracias a la miniaturizacin que permite incorporar cada vez ms memoria dentro de un microcontrolador sin aumentar prcticamente su costo, han surgido compiladores de lenguajes de alto nivel. Entre ellos se encuentran varios dialectos BASIC y C. El BASIC resulta bastante ms simple de aprender. Antes de comenzar a ver los temas programacin en si mismos, debemos aclarar algunos conceptos bsicos sobre los microcontroladores para poder entender lo que hace cada instruccin BASIC. Eso ser muy til para los que vayan a comenzar a programar a partir de este artculo. Lo ms interesante de trabajar con microcontroladores es que se necesitan conocimientos tanto de electrnica (hardware) como de programacin (software) as que a lo largo de estos tutoriales iremos viendo temas de ambas disciplinas, ya que ntimamente vinculadas. Un microcontrolador es como un ordenador en pequeo: dispone de una memoria donde se guardan los programas, una memoria para almacenar datos, dispone de puertos de entrada y salida, etc. A menudo se incluyen puertos seriales (RS-232), conversores analgico/digital, generadores de pulsos PWM para el control de motores, bus I2C, y muchas cosas ms. Por supuesto, no tienen ni teclado ni monitor, aunque podemos ver el estado de teclas individuales o utilizar pantallas LCD o LED para mostrar informacin. En general, por cada cuatro ciclos de reloj del microcontrolador se ejecuta una instruccin ASM (una instruccin BASIC consta generalmente de mas de una instruccin ASM). Esto significa que un PIC funcionando a 20MHz puede ejecutar 5 millones de instrucciones por segundo. Los pines del PIC se dedican casi en su totalidad a los puertos que mencionbamos anteriormente. El resto (2 o mas) son los encargados de proporcionar la alimentacin al chip, y a veces, un sistema de RESET. Desde BASIC es posible saber si un pin esta en estado alto (conectado a 5V o a un 1 lgico) o en estado bajo (puesto a 0V o a un 0 lgico). Tambin se puede poner un pin de un puerto
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (1 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
a 1 o 0. De esta manera, y mediante un rele, por ejemplo, se puede encender o apagar una luz, motor, maquina, etc. Uno de los microcontroladores ms famosos de todos los tiempos ha sido, sin duda, el 16F84A, que ya es considerado obsoleto. Un buen reemplazo es el 16F628A, y es el que utilizaremos en la mayora de los ejemplos y proyectos que veamos. La disposicin de sus pines es la siguiente:
Funcin de los pines del 16F628A
Como podemos ver, los pines 1, 2, 3, 4, 15, 16, 17 y 18 tienen el nombre de RAx. Esos pines conforman el puerto A, PORTA de ahora en ms. Los pines 6 al 13 forman parte del puerto B (PORTB). El pin 5 es el que se conectara al negativo de la fuente de alimentacin. El 14 ir conectado a 5V. Como habrn notado, muchos de los pines tienen ms de una descripcin. Esto se debe a que pueden utilizarse de varias maneras diferentes, seleccionables por programa. Por ejemplo, el pin 4 sirve como parte del PORTA, como RESET (MCLR = Master Clear) y como tensin de programacin (Vpp) No es mala idea descargar desde la web de Microchip la hoja de datos de este microcontrolador (esta en ingls) para tenerla siempre a mano. Ahora bien Cmo colocamos el programa dentro del PIC? Para ello necesitamos algunas herramientas. Por un lado, es necesario un quemador de PICs, como el que publicamos en NeoTeo, o alguno de los varios disponibles comercialmente. Uno que me gusta particularmente es el GTP-USB+, ya que al funcionar conectado al puerto USB es muy veloz. Adems, necesitaremos un software que enve el programa al PIC. Para ello usaremos el WinPIC800, que es un excelente soft gratuito. Y tambin vamos a necesitar un compilador, para traducir nuestro programa en BASIC al ASM que es capaz de entender el PIC. Despus de mirar varios candidatos, en este momento parece una buena eleccin el PIC SIMULATOR IDE, que no solo es un excelente compilador de BASIC, si no que adems (y por solo 29 euros) ofrece un entorno de simulacin de nuestros circuitos. Existe una versin de prueba que se puede bajar gratuitamente desde aqu.
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (2 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
El GTP USB+, un excelente programador de micros y memorias. El WinPic800 enviara el programa al PIC.
El PIC SIMULATOR IDE, entorno de programacion BASIC.
Para comenzar, usaremos un PIC 16F628A.
El primer ejemplo que veremos, equivalente al hola mundo de cualquier otro entorno de programacin, consiste en encender y apagar continuamente un LED conectado a uno de los pines del micro. Utilizaremos el circuito siguiente:
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (3 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
Nuestro primer ejemplo.
A diferencia de un programa de ordenador, donde uno escribe el programa, lo compila, lo ejecuta y ya, en el mundo de los microcontroladores hay que, previamente, definir el tipo de microcontrolador que se va a utilizar, cual va a ser su frecuencia de clock, como va a ser el circuito en que se va a utilizar el mismo, etc. En primer lugar, vamos a aprovechar el oscilador interno del 16F628A y nos evitaremos el cristal y condensadores asociados. El puerto B del micro tiene su pin 9 conectado a un LED mediante una resistencia de 220ohms, que tienen como funcin limitar la corriente que circula por el LED. Esta ser nuestra "salida". El circuito debe alimentarse con 5v bien filtrados y regulados. Volviendo a nuestro programa, vamos a escribir el "hola mundo" de los microcontroladores: encender un LED. El primer paso es elegir en PIC SIMULATOR IDE, desde el men "Opciones" -> "Select Microcontroller", el microcontrolador PIC16F628A. Luego, debemos configurar los bits correspondientes, como se ve en las figuras de ms abajo. Lo destacable por ahora de esta configuracin es que estamos dejando la memoria (FLASH y EEPROM) sin proteccin, que el pin RESET se va a comportar como I/O y que usaremos como oscilador el oscilador interno INTRC.
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (4 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
"Opciones" -> "Select Microcontroller" "Opciones" -> "Configuration Bits"
Una vez hecho esto, arrancamos el editor de BASIC (presionando CTRL-C, por ejemplo), y escribimos el siguiente cdigo: AllDigital TRISA = %11111111 TRISB = %00000000 loop: PORTB.3 = 1 WaitMs 500 PORTB.3 = 0 WaitMs 500 Goto loop Vamos a analizarlo lnea por lnea para entender su funcionamiento: La lnea 1 utiliza la sentencia AllDigital para convertir todos los pines del micro en pines de E/S. Esto equivale a deshabilitar los comparadores, conversores A/D y todos los mdulos que pudiese tener nuestro microcontrolador. No es la nica manera de hacer esto, pero si la mas sencilla. Las lneas 3 y 4 convierten todos los pines del puerto A en entradas ( TRISA = %11111111 ) y los del puerto B en salidas ( TRISB = %00000000 ). El "%" indica que el numero que viene a continuacin esta en binario. Se podra haber escrito, por ejemplo TRISB = 0 y hubiera sido lo mismo. Personalmente me gusta esta manera, ya que "veo" el estado de cada pin. Por supuesto, es valido activar como entrada algunos pines, y como salidas otros, haciendo algo parecido a TRISB = %11000111.
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (5 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
En la lnea 6 encontramos una "etiqueta" ( loop: ). Esta no hace nada, solo sirve como referencia para enviar el flujo del programa a esa lnea desde otro lugar, mediante la sentencia "Goto". La lnea 7 pone en "1" el pin correspondiente a PORTB.3, de manera que en el pin 9 del microcontrolador habr 5V. Esta tensin har que circule una corriente a travs de la resistencia limitadora y el LED1, haciendo que este se encienda, ya que el ctodo se encuentra conectado a 0V. En 8 tenemos la sentencia WaitMs 500. WaitMs se encarga de hacer una pausa en milisegundos. La duracin de la pausa esta dada por el nmero que sigue a la instruccin, en este caso 500 milisegundos, o medio segundo. Luego, en 9, otra vez se vuelve a poner en 0 el pin 9, mediante PORTB.3 = 0 , lo que provoca que ese pin se ponga a 0V, y no haya mas circulacin de corriente a travs de la resistencia y del LED, con lo que este se apaga. En la lnea 10 se hace nuevamente una pausa de medio segundo, y por ultimo, la lnea Goto Loop hace que el programa contine en la lnea 6 (que es donde esta la etiqueta Loop). El programa se repite indefinidamente, encendiendo el LED medio segundo, apagndolo otro medio segundo. Con esto, terminamos la primera entrega de este tutorial. Solamente hemos araado la superficie de un mundo apasionante. No te pierdas la segunda entrega la prxima semana.
Proyecto con un microcontrolador.
+ 85
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (6 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
Ver otras entradas sobre: Electrnica Tutoriales Enviar a Comentarios24 Permalink Si te interesa este contenido agregate el RSS de NeoTeo Ir a la Portada jueves, 12 de abril de 2007 12:32 Por: Ariel Palazzesi
Enlaces relacionados
Comentarios Excelente yo hace unos meses empece con esto de los pic por que estudio ingenieria en electronica y gracias a las bases que ya traia de programacion se me facilito demasiado aunque aun si no trajera esas bases resulta muy facil aprenderlo, me parece muy bien que empiecen con este tutorial y mas sabiendo que lo que ustedes estan proponiendo para programas y eso es lo mismo que uso actualmente, bien estare pendiente de los demas tutoriales sale. PolloMorrison http://poyo.wordpress.com jueves, 12 de abril de 2007 22:34
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (7 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
Pero exelente...lo habia estado esperamdo, yo era uno de esos que pedia articuos sobre micros jajjaj.....veo que se han cambiado de compilador, pero he escuchado que este es bien bueno, ais que espero que me de buenos resultados, y respondiendo a la pregunta, Yo me anotooo!....saludos;) Cesar..... jueves, 12 de abril de 2007 23:49 Exelente no hay ms que decir!! Jero viernes, 13 de abril de 2007 16:17 Saludos, amigos electrnicos. Cualquier duda que tengais, referirla a nuestros foro, exactamente al tema Tutorial de Programacion de Microcontroladores, as los podemos asistir como corresponde y ms ordenadamente. Max www.neoteo.com viernes, 13 de abril de 2007 23:06 Tienes que ser ms original y no PLAGIAR tutoriales de los dems. EL original lo encontrareis en: http://www.ucontrol.com.ar/ Saludos. Xavi lunes, 16 de abril de 2007 21:36 Hola Xavi! Antes que nada, gracias por salir en mi defensa. Si te fijas, uControl es mi pagina web. Pero lo que ahi alli es un tutorial sobre el PIC SIMULATOR IDE, y aqui tenemos uno sobre programacion, incluyendo toda la parte relacionada con el hard, y los programas necesarios para poder programar correctamente un microcontrolador. Aqui veremos ademas del BASIC la forma de encarar un proyecto, como resolver la conexion de cargas en las salidas o el uso de diferentes sensores (temperatura, humedad, etc.), asi que no dejes de mirar todas las semanas. Un abrazo. Ariel Palazzesi lunes, 16 de abril de 2007 21:47 Xavi, no se si notaste que el que escribe aqui es el mismo de ucontrol :) fede martes, 17 de abril de 2007 12:10
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (8 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
No encontre que estuviese igual al tutorial de ucontrol. Ademas es del mismo autor que el que escribio aca. Encuentro que el aporte est buenisimo....asi que espero que sigas con esos aportes tan buenos, estare semanalmente por aqui entonces.......saludos ;) Csar...... mircoles, 18 de abril de 2007 08:20 Hola a todos, encuentro genial la pagina y sus informaciones. estaba viendo el tutorial del ADC0804 controlado por Puerto paralelo y quiero hacer unas pruebas. quiero conectarle una seal analoga de electrocardiograma. como puedo modificar el programa para que pueda leerlo en tiempo real ???.. Bueno, gracias amigos..chaops.. Jos Ignacio. TUTO sbado, 05 de mayo de 2007 03:17 Hola TUTO! Lamentablemente, mis pobres conocimientos de Visual Basic no alcanzan para una aplicacion como la que sugieres. Pero el chip que mencionas (y el puerto paralelo del PC tambien)tiene la velocidad suficiente para hacer un muestreo de las seales provenientes del corazon. Estamos hablando de seales debajo de los 200Hz. Eso si, la seal ser muy dbil, asi que tendrs que acondicionarla previamente con un amplificador operacional como minimo. Comentanos tus resultados! Saludos. Ariel Palazzesi sbado, 05 de mayo de 2007 15:16 Hola, si, eso creo que har. primero dejar la seal entre unos 0 y 5 volts. Pero el programa que tu tienes, solo me lle el dato cuando yo lo requiero cierto ?
Hola..si..amplificar la seal para dejarla entre 0 -5 volts.. pero el programa q tu tienes le el digito cuando yo quiero cierto ?.. Tuto
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (9 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
TUTO sbado, 05 de mayo de 2007 23:38 Exacto. El ADC0804 tiene un pin que sirve para indicarle que debe comenzar a digitalizar el dato que tiene en su entrada. Despues de unos pocos milisegundos, ese dato esta disponible en las salidas. No lo recuerdo de memoria, pero en su datasheet esta seguro. Si queres, pasame una direccion de correo y te envio la datasheet, asi manejas los tiempos sin problemas. Saludos. Ariel Palazzesi domingo, 06 de mayo de 2007 00:41 trabajo en electronica industrial ,quiero aprender a programar microcontroladores ,puesto que necesito hacer algunos proyecticos .gracias joaquin ortiz domingo, 22 de julio de 2007 03:44 podrian ustedes recomendarmen una pagina tutorial para aprender a programar microcontroladores gracias jogozo@terra.com.co domingo, 22 de julio de 2007 03:54 interesante nestor www.pro-maq.com.ar domingo, 23 de septiembre de 2007 05:14 Muy buen articulo, espero que trates mas adelante la programacion con lenguaje C nestor www.pro-maq.com.ar sbado, 20 de octubre de 2007 22:02 Muy bueno pero en mi pais se me ase dificil conseguir las herramientas que se necesitan para programar los micro, No existe otra forma? locoxp mircoles, 31 de octubre de 2007 23:11
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (10 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
Hola LocoXp! Lamentablemente, no hay manera de programar un PIC sin tener un programador. Si te fijas, en NeoTeo hay un programador para armar. Y es muy simple de hacer! Saludos. Ariel Palazzesi mircoles, 31 de octubre de 2007 23:32 Hola Nestor! Es posible que en el futuro hagamos algo con CCS, aunque por lo general los articulos serian demasiado extensos. Pero quizas dividienlos en entregas se pueda hacer. Gracias por la idea. Ariel Palazzesi mircoles, 31 de octubre de 2007 23:34 Mano, muy bueno pero no tengo forma de conseguir el sircuito GTP USB+ asi que me quedo con las ganas de aprender locoxp mircoles, 31 de octubre de 2007 23:37 gracias a su repuesta solucione lo de la sentencia alldigital actualize la version ya probe y pude compilar y simular varios programas paso siguiente como lo uso con el mplab gracias por la ayuda soy nuevo en esto GUIVI martes, 20 de noviembre de 2007 14:17 me parece muy bien la forma como narra las instruciones los congratulo exelenta pagina Oswaldo Marquez martes, 04 de diciembre de 2007 12:45 Hola , muy bueno los tutoriales de micros, la consulta es si hay posibilidad de conseguirlos a todos en algun archivo pdf , rar o parecido. Sigan asi, saludos !!! Ruben martes, 04 de diciembre de 2007 19:01 hola amigo mi pregunta es esta programacion va acer en codigo C++ si es megustaria mucho porque quiero aprender la progamacion yo lo ago en asembrer despues me mandan decir quetengo que acer para cer como un usuario mas..
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (11 of 12)13/02/2008 11:59:27 a.m.
TUTORIAL: Programacin de microcontroladores - Entrega 1
http://www.neoteo.com/tabid/54/ID/3168/Title/TUTORIAL...acion_de_microcontroladores_-_Entrega_1/Default.aspx (12 of 12)13/02/2008 11:59:27 a.m.