viernes, 05 de diciembre de 2008
Ayúdanos a crecer, haz NeoTeo tu página de inicio RegistrarseIniciar sesión

TUTORIAL: Programación de microcontroladores - Entrega 1

Por: Ariel Palazzesi  @  jueves, 12 de abril de 2007  Nota vista 44725 veces
Muchos lectores de NeoTeo se han mostrado interesados en la programación de microcontroladores. Desde hoy tendrán en forma semanal una entrega de este tutorial que les mostrará como hacerlo. ¿Te apuntas?
¿te interesa?
423 -27
450 votos
La electrónica ha evolucionado mucho. Casi todo lo que hasta hace unos años 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 más elegidos por los hobbystas suelen ser los modelos de Microchip, en gran parte debido a la excelente documentación 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 más cerca del hardware que del programador, y gracias a la miniaturización que permite incorporar cada vez más memoria dentro de un microcontrolador sin aumentar prácticamente su costo, han surgido compiladores de lenguajes de alto nivel. Entre ellos se encuentran varios dialectos BASIC y C. El BASIC resulta bastante más simple de aprender.

Antes de comenzar a ver los temas programación en si mismos, debemos aclarar algunos conceptos básicos sobre los microcontroladores para poder entender lo que hace cada instrucción BASIC. Eso será muy útil para los que vayan a comenzar a programar a partir de este artículo.

Lo más interesante de trabajar con microcontroladores es que se necesitan conocimientos tanto de electrónica (hardware) como de programación (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 pequeño: 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 analógico/digital, generadores de pulsos PWM para el control de motores, bus I2C, y muchas cosas más. Por supuesto, no tienen ni teclado ni monitor, aunque podemos ver el estado de teclas individuales o utilizar pantallas LCD o LED para mostrar información.

En general, por cada cuatro ciclos de reloj del microcontrolador se ejecuta una instrucción ASM (una instrucción BASIC consta generalmente de mas de una instrucción 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 mencionábamos anteriormente. El resto (2 o mas) son los encargados de proporcionar la alimentación 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” lógico) o en “estado bajo” (puesto a 0V o a un “0” lógico”). También se puede poner un pin de un puerto 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 más 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 mayoría de los ejemplos y proyectos que veamos. La disposición de sus pines es la siguiente:
Función 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 más. 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 alimentación. El 14 irá conectado a 5V.

Como habrán notado, muchos de los pines tienen más de una descripción. 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 tensión de programación (Vpp)

No es mala idea descargar desde la web de Microchip la hoja de datos de este microcontrolador (esta en inglés) para tenerla siempre a mano.

Ahora bien ¿Cómo 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. Además, necesitaremos un software que envíe el programa al PIC. Para ello usaremos el WinPIC800, que es un excelente soft gratuito.

Y también vamos a necesitar un compilador, para “traducir” nuestro programa en BASIC al ASM que es capaz de entender el PIC. Después de mirar varios candidatos, en este momento parece una buena elección el PIC SIMULATOR IDE, que no solo es un excelente compilador de BASIC, si no que además (y por solo 29 euros) ofrece un entorno de simulación de nuestros circuitos. Existe una versión de prueba que se puede bajar gratuitamente desde aquí.
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 programación, consiste en encender y apagar continuamente un LED conectado a uno de los pines del micro. Utilizaremos el circuito siguiente:
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 función 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 más abajo.

Lo destacable por ahora de esta configuración es que estamos dejando la memoria (FLASH y EEPROM) sin protección, que el pin RESET se va a comportar como I/O y que usaremos como oscilador el oscilador interno INTRC.

"Opciones" -> "Select Microcontroller"
"Opciones" -> "Configuration Bits"

Una vez hecho esto, arrancamos el editor de BASIC (presionando CTRL-C, por ejemplo), y escribimos el siguiente código:

AllDigital

TRISA = %11111111
TRISB = %00000000

loop:
PORTB.3 = 1
WaitMs 500
PORTB.3 = 0
WaitMs 500
Goto loop


Vamos a analizarlo línea por línea para entender su funcionamiento:

La línea 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 módulos que pudiese tener nuestro microcontrolador. No es la única manera de hacer esto, pero si la mas sencilla.

Las líneas 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 continuación esta en binario. Se podría 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.

En la línea 6 encontramos una "etiqueta" ( loop: ). Esta no hace nada, solo sirve como referencia para enviar el flujo del programa a esa línea desde otro lugar, mediante la sentencia "Goto".

La línea 7 pone en "1" el pin correspondiente a PORTB.3, de manera que en el pin 9 del microcontrolador habrá 5V. Esta tensión hará que circule una corriente a través de la resistencia limitadora y el LED1, haciendo que este se encienda, ya que el cátodo se encuentra conectado a 0V.

En 8 tenemos la sentencia WaitMs 500. WaitMs se encarga de hacer una pausa en milisegundos. La duración de la pausa esta dada por el número que sigue a la instrucción, 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 circulación de corriente a través de la resistencia y del LED, con lo que este se apaga.

En la línea 10 se hace nuevamente una pausa de medio segundo, y por ultimo, la línea Goto Loop hace que el programa continúe en la línea 6 (que es donde esta la etiqueta Loop).

El programa se repite indefinidamente, encendiendo el LED medio segundo, apagándolo otro medio segundo.

Con esto, terminamos la primera entrega de este tutorial. Solamente hemos arañado la superficie de un mundo apasionante. No te pierdas la segunda entrega la próxima semana.
Proyecto con un microcontrolador.


Artículo Siguiente
Un siglo en escamas
Artículo Anterior
The Coop, social networking en Firefox
CopyRight
Prohibida su copia total con o sin fines comerciales. Copias parciales deben citar la fuente.

 

URL Trackback para esta noticia:
Votos: 0 de 0
PolloMorrison
PolloMorrison
PolloMorrison
12/04/2007
22:34:17
#1   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.
     Responder 
Votos: 0 de 0
Cesar.....
Cesar.....
Cesar.....
12/04/2007
23:49:52
#2   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;)
     Responder 
Votos: 0 de 0
Jero
Jero
Jero
13/04/2007
16:17:07
#3   Exelente no hay más que decir!!
     Responder 
Votos: 0 de 0
Max
Max
Max
13/04/2007
23:06:20
#4   Saludos, amigos electrónicos. Cualquier duda que tengais, referirla a nuestros foro, exactamente al tema Tutorial de Programacion de Microcontroladores, así los podemos asistir como corresponde y más ordenadamente.
     Responder 
Votos: 0 de 0
Xavi
Xavi
Xavi
16/04/2007
21:36:17
#5   Tienes que ser más original y no PLAGIAR tutoriales de los demás. EL original lo encontrareis en: http://www.ucontrol.com.ar/ Saludos.
     Responder 
Votos: 0 de 0
Ariel Palazzesi
Ariel Palazzesi
Ariel Palazzesi
16/04/2007
21:47:42
#6   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.
     Responder 
Votos: 1 de 1
fede
fede
fede
17/04/2007
12:10:21
#7   Xavi, no se si notaste que el que escribe aqui es el mismo de ucontrol :)
     Responder 
Votos: 0 de 0
César......
César......
César......
18/04/2007
8:20:36
#8   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 ;)
     Responder 
Votos: 0 de 0
TUTO
TUTO
TUTO
05/05/2007
3:17:24
#9   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 señal analoga de electrocardiograma. como puedo modificar el programa para que pueda leerlo en tiempo real ???.. Bueno, gracias amigos..chaops.. Josè Ignacio.
     Responder 
Votos: 0 de 0
Ariel Palazzesi
Ariel Palazzesi
Ariel Palazzesi
05/05/2007
15:16:54
#10   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 señales provenientes del corazon. Estamos hablando de señales debajo de los 200Hz. Eso si, la señal será muy débil, asi que tendrás que acondicionarla previamente con un amplificador operacional como minimo. ¡Comentanos tus resultados! Saludos.
     Responder 
Votos: 2 de 2
TUTO
TUTO
TUTO
05/05/2007
23:38:55
#11   Hola, si, eso creo que haré. primero dejaré la señal 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 señal para dejarla entre 0 -5 volts.. pero el programa q tu tienes le el digito cuando yo quiero cierto ?.. Tuto
     Responder 
Votos: 0 de 0
Ariel Palazzesi
Ariel Palazzesi
Ariel Palazzesi
06/05/2007
0:41:27
#12   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.
     Responder 
Votos: 0 de 0



22/07/2007
3:44:01
#13   trabajo en electronica industrial ,quiero aprender a programar microcontroladores ,puesto que necesito hacer algunos proyecticos .gracias joaquin ortiz
     Responder 
Votos: 0 de 0



22/07/2007
3:54:21
#14   podrian ustedes recomendarmen una pagina tutorial para aprender a programar microcontroladores gracias jogozo@terra.com.co
     Responder 
Votos: 0 de 0
nestor
nestor
nestor
23/09/2007
5:14:44
#15   interesante
     Responder 
Votos: 0 de 0
nestor
nestor
nestor
20/10/2007
22:02:03
#16   Muy buen articulo, espero que trates mas adelante la programacion con lenguaje C
     Responder 
Votos: 0 de 0
locoxp
locoxp
locoxp
31/10/2007
23:11:39
#17   Muy bueno pero en mi pais se me ase dificil conseguir las herramientas que se necesitan para programar los micro, No existe otra forma?
     Responder 
Votos: 0 de 0
Ariel Palazzesi
Ariel Palazzesi
Ariel Palazzesi
31/10/2007
23:32:29
#18   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.
     Responder 
Votos: 0 de 0
Ariel Palazzesi
Ariel Palazzesi
Ariel Palazzesi
31/10/2007
23:34:18
#19   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.
     Responder 
Votos: 0 de 0
locoxp
locoxp
locoxp
31/10/2007
23:37:14
#20   Mano, muy bueno pero no tengo forma de conseguir el sircuito GTP USB+ asi que me quedo con las ganas de aprender
     Responder 
 
 
Datos  Login Registrarse
Usuario
   
Email
Website