TUTORIAL: Programación de microcontroladores - Entrega 1

TUTORIAL: Programación de microcontroladores – Entrega 1

10 Flares Twitter 6 Facebook 0 Google+ 4 Pin It Share 0 Email -- 10 Flares ×

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?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:

TUTORIAL: Programación de microcontroladores   Entrega 1

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í.

TUTORIAL: Programación de microcontroladores   Entrega 1

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:

TUTORIAL: Programación de microcontroladores   Entrega 1

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.

TUTORIAL: Programación de microcontroladores   Entrega 1

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.


  • LONCHERAS

    Que buen tutorial.

  • TIN

    soy nuevo en esto y deverdad les agradesco por que esta q me sirve de mucho
    deberian acer mas de estoss tutoriales q nos sirven de mucho
    muchas gracias atte tin

  • eldimas

    esta pagina no tiene mucha informacion reciente para los jovenes
    a y le voy al tigres

  • cris

    Hola si me pueden ayudar, tengo el siguiente requerimiento con una señal de 0-10V de referencia necesito modular de 0-24v en 1A de salida, si alguen sabe como lo puedo hacer con un PIC se los agredeceria mucho
    0v de referencia 0v de potencia
    10v de referencia 24v de potencia

  • oscar

    buen tutorial es de bastante probecho soy estudiante de instrumentacion y en verdad me sirve de mucho pero una pregunta como se la agrega la instrucion de tiempo hay alguna ecuacion

  • Fem_zombie

    Buenas:

    Vamos a ver , queria saber si existe algun progama para programar el micro 80C537 en c++,(aunque su mejor funcionalidad de c++ sea para objetos )

    un saludo

  • marco becerra

    veo que es bueno el sitio de consulta

  • alfonso

    hola a todos mi nombre alfonso herrera, soy nuevo en este foro, les pido el favor que me
    ayuden donde puedo conseguir un tutorial para programar los pic con mikrobasic, muchas gracias a todos. mi correo es "soportel@hotmail.com"

  • alfonso

    Hola, Saludos a todos, estoy aprendiendo a programar pic y nesecito la ayuda de alguno
    del foro donde puedo encotrar un tutorial sobre MikroBasic, agradeciendoles la ayuda
    mi correo: soportel@hotmail.com

    alfonso

  • cesar reyes

    ola muchachos como estan ustedes me podrian hacer el favor de enviarme ejemplos de programacion al correo se los agradesco

  • mariog

    buen manual s entiende bien

  • freddy

    les felicito por esta ayuda a los que apenas comensamos
    en este maravilloso mundo de la programacion gracias saludos y bendiciones atte freddy

  • richard

    esta muy bien explicado…gracias

  • julián

    muy bueno!me es util,lo voy a leer..

  • julián

    muy bueno,me es util…lo voy a leer!!

  • julián

    muy bueno,me es util…lo voy a leer,saludos

  • neisser

    por k no son tan realistas eseslenguajes de alto nivel es muy facil hasta yo mismo entenderia jajajaj bueno les digo aprenda a prograamr en lenguaje ensamblador y masssss++++++++++++

  • yurick

    hola ,me encanta el foro ,que buena ayuda

  • yurick

    hola el foro es lo maximo

  • mark33sv

    Lo importante es no discutir de quien es, sino la informacion buena que se encuentra. Si el autor es el mismo, supongo aqui tienen sus reglas. Gracias y visitare tmabien el otro website que mencionan.
    Y sumando, esta listo la segunda parte de este tutorial?
    Avisenme regreso dentro de poco. :)

    La Inteligencia compartida, es el fruto de las naciones emergentes.

  • Fernando

    Sigo esta pagina desde hace 1 año, y la verdad he sacado el maximo provecho de ella.
    Muchas gracias Mario por hacerme perder el miedo a los PICs.
    Eres lo maximo.

  • Adrián Rendón

    Para Ariel Palazzesi:

    Hola, acabo de leer tu tutorial de programación de microcontroladores – entrega 1 y me pareción muy completo e interesante. Mi pregunta es básicamente para preguntarte que microcontrolador me recomiendas usar para la siguiente aplicación:

    Necesito estar tomando datos desde un sensor de temperatura cada 10 min, 24 hrs al día, 365 días al año. Por cada día, deseo generar un archivo en xml y que se pueda guardar en memoria hasta 7 días seguidos antes de que un operador recupere los datos y se pueda reiniciar la memoria.
    Además de esto, quiero también tener una salida usb para conectar a una computadora, extraer los datos (archivos xml) y enviarlos a un servidor web.
    Es posible hacer todo lo anterior con un microcontrolador? Y en caso afirmativo, cual me recomendarías usar?
    Muchas gracias por tu atención y tiempo!

    Adrián Rendón

  • Marcelo L. Vivanco.-

    Antes q nada, felicitaciones por el tutorial, coincido con Uds yo también me siento muy cómodo con el Basic debe ser porque comencé con este lenguaje y los Pic en el siglo pasado 1985, recuerdo que mi primera pc compré Z80 de 2k de Ram , alli teniamos cursor en varios modos K M L y teniamos q tipear un simple juego de oruga de esos q vienen en los celulares por horas para llenar esos 2K… bueno nada estoy siguiendo el tuto y me es bien simple. Los tiempos cambian y ahora también uso el 16f628 y tambien estoy buscando un pic q se conecta al USB,ya q por alli por ser tan rapido la coneccion es la unica manera de programarlo (claro a mi modulo de GPS) Cuando se comienza a comprender es extremadamente sencillo y nos permite conocer mejor la arquitectura interna de los Pic.-

  • juan

    si la verdad esque un pinche maestro hijo de la chingada nos atormenta todos los dias haciendo puros pinches ejemplos de esta maldita aberracion del diablo su nombre es gerardo nava maldito quemado y como es el unico desgraciado que da esta maldita materia de lenguaje ensamblador el da clases en el TESOEM LA PAZ a y si le entregas las practicas y te pregusta y no le contestas te manda al nepe y ya no te la califica por eso espero me sirba su informacion gracias

  • glisel

    muy interesante tu informacion .. pero yo quiero una informacion mas profunda de lo que son las aplicaciones de pic…nose si me puedes ayudar

  • PABLO RODRIGUEZ

    buenas para todos muy buen tutorial acabo de encontrarlo. como consigo todas las entregas.
    gracias por su ayuda.

    att:pablo

  • GILMER

    Amigo excelente tu trabajo, me ayudo a comprender como empezar en el mundo de los pics, espero que sigas con mas tutoriales. gracias

  • Paqui

    Muy bueno, la verdad estos comenzando con esto, y el artículo me parece estupendo

  • Argimiro

    Muy buena explicación del tema. Hace ya algún tiempo he estado buscando buen material al respecto. Quero seguir el tutorial para entrarle a este hermoso mundo de la automatización con todos los hierros.
    Gracias por aportarnos estos conocimientos. Saludos…

  • WILLIAM

    EXELENTEPARA QUIENES HOY EMPESAMOS.
    CUANDO HAY MAS O COMO PODEMOS AVANZAR???

  • jose antonio palacios martinez

    cinceramente nececito aprender como leer una memoria de carro tengo una que lee memorias eepron que se llama omega plus pero no se como poner los bits con que se lee si ay un alma que me pueda ayudar estaria agradecido estas se leen con 8 bits mi correo es este palaciosmartinez1@hotmail.com

  • Anónimo

    Hola a todos, me baje los tutoriales porque en mi casa no tengo internet, pero cuando los abro me aparece un fondo que no me deja ver las letras, seguro me falta alguna cosa pero no se cual. Las tengo que seleccionar y así las puedo leer, si mando a imprimir ahí si sale perfecto pero siguiendo con la ayuda a el planeta preferiría seguir leyendo en pantalla aunque reconozco que a veces se hace difícil.Ojala alguien me pueda ayudar. Los tutoriales están todos buenísimos, un saludo a Ariel que lo sigo también en uControl

  • Hernan T

    Hey buen aporte me gustaría saber cuando sale el segundo modulo.

  • MIPINGAENTUCULO

    MTEANSE EL MICROPROCESADOR AL POTOO LUEGO LES CONECTO MI "CABLE" POR LA BOCA Y QUE COMIENCE LA PROGRAMACION :D

  • edisson

    me parece un tema muy interesante que quiero aprender ya que tengo conciencia de que es el bum de la electrónica y de la ciencia

  • isaias

    compa y tienen pdf de este tuto, pa bajarlo e imprimirlo

  • Anónimo

    hola la verdad me encanta esto de los pic y soy aficionado pero no con sigo un codigo en asm que me pueda guiar o en css por que tengo este compilador si alguien me puede dar una manito le agradeceria
    he visto tutoriales pero en realidad vengo ensayando con mplab y pic-c compiler,,,,gracias por su atencion
    cualquier cosa que sepan por fa,,ultraplaycucuta@hotmail.com

  • kike

    muy, pero muy bueno felicitaciones por este buen tutorial q insita a aprender y desarrollar los potenciales y talentos que tenemos como seres humanos, bien por el tutorial q el Señor lo bendiga men

  • eduardo

    EXelente tutorial!!, espero que sigan subiendo mas hacerca de la programacion de un microcontrolador

  • David

    Buen aporte, estoy iniciando en esto de los pic

  • william posada

    EXELENTE TUTORIAL MUY CLARO Y MUY SENCILLO LO HACEN VER LA VERDAD ES APASIONANTE Y SERIA ESPECTACULAR PODER DESCARGARLOS MUCHAS GRACIAS

  • Pedro

    Hola, estuve leyendo detenidamente esta primera parte, e hice todo lo que indicas para realizar el programa y simularlo en el PIC SIMULATOR IDE, pero en mi caso el led enciende y se queda encendido, debería de encender y apagar continuamente, pero no lo hace… espero la segunda entrega … gracias

  • jose hernandez

    cuando tengo mas de 50 lineas que debo de hacer disculpen pero estoy aprendiendo muy bueno el tutorial por cierto

  • chirinito

    exelente. me quiero apuntar.

    chirinito. 2013

  • Lita Noble

    Excelente!!,muy entendida la informacion,apenas me ando introduciendo en esta programacion y la encontre facil de entender.
    Gracias!!

  • Ignacio

    tremenda inniciativa se valora mucho lo que haces, sigue asi !

  • Anónimo

    me parece exelente este tutorial es un gran aporte y mas porque la manera en que lo espesificas es muy practica a la ora de entender dichas instrucciones ahora me gustaria saber como lo sigo

  • jose luis

    Tan difícil sería hacer un IDE como el de arduino y una versión del bootloader para pics? Me sorprende que la gente use tanto los pics, y que los Arduinos sean ATMega. La verdad esque creo q cualquier proyecto se podría llevar a cabo con un ATMega, y l ser tan fácil de programar, no entiendo cómo alguien podría preferir pic.
    por todo lo demás, buen tuto ;)

  • http://www.trebolman.blogspot.com Aurel Benjamin

    Comienzo a estudiar electrónica, estos tutoriales me ayudarán mucho. Gracias Ariel!