Introducción a los Microcontroladores:
Un microcontrolador es un chip o circuito integrado que contiene todos los elementos de una CPU ( Procesador, RAM, ROM, E/S). Estos dispositivos nacieron a finales de la década del 70′ para brindar una solución a los caros y complejos sistemas basados en lógica discreta.
Cotidianamente vemos cientos de aplicaciones donde se usan los microcontroladores tales como los hornos eléctricos digitales, los automóviles, los PLC en la industria, etc.
En este curso aprenderemos a usar 2 familias o marcas de dispositivos: los PIC de la empresa MICROCHIP y los AVR de la empresa ATMEL, ambos muy utilizados dentro del ámbito del aficionado y también dentro de la industria.
Estas 2 familias de dispositivos son del tipo RISC ( conjunto de instrucciones reducido ). Esto quiere decir que su conjunto de instrucciones es muy reducido en el orden de 30 a 200 instrucciones que se ejecutarán, salvo alguna de ellas, en el orden de 1 ciclo de máquina.
En las siguientes fotografías podemos ver 2 dispositivos: Un PIC16F877A de Microchip y un ATmega328P de ATMEL respectivamente.
Estructura básica de un microcontrolador:
En la imagen podemos ver los componentes básicos de cualquier microcontrolador. Los componentes que componen cada dispositivo suelen variar según el fabricante y la arquitectura que posea.
Arquitectura de un Microcontrolador:
Básicamente existen 2 tipos de arquitecturas:
Von Neumann
Hardvard
Arquitectura Von Neumann:
la unidad de proceso o CPU está conectada a una memoria única que contiene las instrucciones del programa y los datos. La longitud de las instrucciones está limitada por la unidad de longitud de los datos, por lo tanto el microprocesador debe hacer varios accesos a la memoria para buscar instrucciones complejas.
La velocidad de operación está limitada por el efecto cuello de botella que significa un único bus para datos e instrucciones, lo que impide superponer ambos tiempos de acceso.
Arquitectura Hardvard:
En este tipo de arquitectura, la memoria de datos está separa de la memoria de programa por lo que están conectadas a la CPU mediante buses separados totalmente independientes que pueden ser de distinto ancho. Debido a esto el tamaño de las instrucciones no está relacionado con el de datos y por lo tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de programa. Así se logra mayor velocidad y una menor longitud del programa.
Otras de las características es que el tiempo de acceso a las instrucciones puede superponerse con el de datos, logrando una mayor velocidad de operación.
Tanto los microcontroladores de la firma microchip como los microcontroladores de la firma ATMEL son de arquitectura Hardvard.
Características principales de los PIC:
Reducido número de instrucciones.
1 solo acumulador W de uso implícito.
Todas las posiciones de la RAM funcionan como registros de origen y/o de destino de operaciones matemáticas y otras funciones.
Una pila de hardware para almacenar instrucciones de regreso de funciones.
El espacio de datos está relacionado con el CPU, puertos, y los registros de los periféricos.
Las instrucciones se ejecutan en 1 ciclo de máquina ( 4 ciclos de reloj ).
Características principales de los AVR:
Ejecución eficiente de código C compilado.
registros X,Y,Z para el manejo de punteros.
Núcleo multiacumulador.
Todas las instrucciones salvo algunas instrucciones de salto ocupan 1 ciclo de máquina que equivale a 1 o 2 ciclos de reloj.
Herramientas de desarrollo gratuitas bajo GNU.
Permite la programación IN – CIRCUIT.
Ya hemos visto las principales características que definen a los microcontroladores PIC y AVR. En la próxima veremos que herramientas necesitamos para trabajar con los mismos.
En el anterior apartado vimos que era un microcontrolador sus características principales además de un chequeo rápido a su arquitectura.
A lo largo de este curso veremos como programar los diferentes dispositivos para que cumplan con una tarea determinada por el usuario, por lo tanto necesitamos de un lenguaje en el que desarrollaremos nuestros programas. Ya sea para PIC o AVR existen multitud de compiladores tanto de pago como de libre distribución.
Para este fin hemos elejido el lenguaje C debido a que posee grandes ventajas entre las cuales podemos destacar:
Gran portabilidad entre diferentes compiladores con muy pocos cambios en el código fuente.
Ofrece una gran flexibilidad a la hora de programar, debido a que el usuario puede tomar un estilo único, basandose en las estructuras propias del lenguaje.
Acceso a la memoria de bajo nivel mediante el uso de punteros.
Permite crear estructuras con tipos de datos definidos por el usuario.
Gran cantidad de ejemplos e información en la web.
Muchas de las herramientas aprovechadas para desarrollar aplicaciones usando microcontroladores podemos ubicarlas haciendo una rápida búsqueda en la web. Para facilitar la tarea de dicha búsqueda al lector, enumeramos las más utilizadas a continuación…
Herramientas software necesarias:
Tanto para los microcontroladores PIC como para AVR existen multitud de herramientas que podemos usar ya sea de pago o de libre distribución. Para el desarrollo de nuestro curso necesitaremos esencialmente 3:
Compilador de C.
IDE de desarrollo.
Depurador / Simulador.
Programador / Grabador.
Compiladores de C:
Como habíamos mencionado previamente los dispositivos de la familia AVR fueron creados con la idea de ejecutar código C compilado de manera eficiente.
AVRGCC es en la actualidad uno de los mejores compiladores de C de distribución gratuita que podemos encontrar; posee todas las características del C standar (véase ANSI C).
Para el caso de los microcontroladores PIC, existen muchos compiladores, pero el más usado por el público aficionado es el C de la firma CCS ; la desventaja con este software es que es de pago. Podríamos haber elejido cualquier otro compilador de los muchos que hay pero es el que mejor relación ( cantidad de dispositivos soportados / precio / funcionalidad ) posee.
IDE de desarrollo:
Tanto para los dispositivos de la familia ATMEL y MICROCHIP existen múltiples plataformas de desarrollo.
Para ATMEL tenemos AVR – Studio 4.
Este software puede o no, actuar en conjunto con AVRGCC, permitiendo al usuario ordenar sus proyectos, y además de ello dar posibilidad de corregir, simular y grabar en el microcontrolador el programa desarrollado.
Una desventaja menor que presenta este sistema es la integración de lenguaje ensamblador embebido en código C; operación que en WINAVR ( AVRGCC ) se facilita declarando los programas o trozos de código escritos en el ensamblador cómo funciones externas anexadas al código principal.
Para la familia de microcontroladores PIC existe el MPLAB. Esta plataforma de programación al igual que AVR Studio, nos ofrece la posibilidad de tener ordenado nuestros proyectos, como así también simular, corregir errores y grabar en el dispositivo el programa que se está desarrollando.
Herramientas hardware necesarias:
Como asi también escribimos nuestros programas, los compiladores generan un código ejecutable de manera análoga a un ejecutable en Windows o Linux. El mismo, tiene una extensión «.hex» ( véase formato «.hex» ).
Para poder insertar el programa escrito en el dispositivo necesitamos de una herramienta externa que permita enlazar la memoria de dicho dispositivo con un software de grabación, vulgarmente llamado «quemador».
En el mercado coexisten muchas herramientas que cumplen con esta función, pero las más utilizadas por desarrolladores aficionados y profesionales ( debido a las características que poseen ) son las siguientes:
PICKIT 2 ( empresa MICROCHIP ).
AVR-ISPMK 2 ( empresa ATMEL ).
A modo ilustrativo, les brindo la fotografía de ambas herramientas…
PICKIT 2:
Este programador creado por la empresa MICROCHIP, en conjunto con la plataforma MPLAB nos será útil para programar los microcontroladores PIC. En la red existen muchos clones del mismo, por lo que para ahorrar costos más adelante mostraré cómo fabricar uno.
A TENER EN CUENTA: una investigación que realicé recientemente muestra que esta herramienta sirve para grabar microcontroladores PIC y AVR, sin efectuar ninguna modificación en el Hardware y Firmware del programador. Solo con una pequeña aplicación podemos añadir esta funcionalidad, la misma será desarrollada posteriormente.
AVR-ISPMK 2:
Este dispositivo producido por la empresa ATMEL en conjunto con la suite AVR Studio será utilizado para grabar los microcontroladores AVR. Al igual que con el PICKIT 2 existen muchos clónicos en la red, por lo tanto posteriormente también les enseñaré cómo fabricar uno…
Para la próxima profundizaremos en el uso de las herramientas antes explicadas. Espero que les haya servido.
Anteriormente vimos las herramientas que hacían falta para poder desarrollar aplicaciones con microcontroladores PIC y AVR. En este apartado veremos como se programan ambos tipos de dispositivos.
Programación de microcontroladores PIC:
Los microcontroladores PIC se graban mediante un sistema llamado ICSP (In circuit serial programming), por el cual se puede grabar la memoria de programa, la memoria de datos y la palabra de configuración.
Al utilizar este sistema obtenemos 3 ventajas principalmente:
Reducimos el tiempo de desarrollo, ya que no hay que sacar el dispositivo de la placa base donde se encuentre, solo hay que conectar el programador a su zócalo ICSP.
Reducimos la fatiga mecánica de los pines microcontrolador al no tener que cambiarlo de lugar para ser programado.
Podemos correjir errores y probar programas directamente en la tarjeta de aplicación.
Modo grabación:
Para realizar la grabación, el PIC debe estar en modo grabación. Existen varias maneras de entrar en este modo, que dependen del PIC usado. Una manera consiste en introducir una tensión de 12 voltios por el pin MCLR. (El otro método es el denominado de bajo voltaje o LVP). Usando este método hay que introducir 5 voltios por la pata RB3/PGM según sea PIC16F o PIC18F (Véase manual de programación de cada familia de dispositivos).
En la siguiente imágen se muestra un ejemplo de un circuito para hacer que el PIC entre en modo programación. Cada vez que se suelte el botón de reset podemos acceder a los servicios de grabación. En cuanto el botón sea pulsado el dispositivo entrará en modo reset iniciando todos sus registros internos.
Arquitectura:
Un vez en modo programación, se tiene acceso a una serie de servicios a través del protocolo ICSP. Este protocolo se describe en dos niveles o capas:
Capa física .
Capa de comandos.
En el nivel físico se especifica cómo se transmiten los bits (temporizaciones, tiempos de sincronismo, etc) y en el de comandos qué tramas hay que enviar para tener acceso a los diferentes servicios.
Nivel físico:
Para realizar la comunicación se utiliza un protocolo serie síncrono. Son necesarios dos hilos, del puerto B:
Pin de datos (DATA O PGD) RB7 (PIC16F/18F). Este pin es bidireccional.
Pin de reloj (CKL O PGC) RB6 (PIC16F/18F).
En la imágen vemos los pines utilizados en un PIC16F.
Los detalles de funcionamiento son los siguientes:
Primero se envían los bits menos significativos.
Los datos se toman en el flanco de bajada del reloj.
El periodo mínimo del reloj es de 200ns para una frecuencia de 5Mhz.
El tiempo de setup (tiempo que deben estar los datos antes de que llegue el flanco de bajada) y el tiempo de hold (el que deben estar después de producirse el flanco de bajada) son de 100ns.
Los comandos que se envían al PIC son de 6 bits y los datos de 14 bits en caso de usar microcontroladores de la línea 16F y 16 bits en caso de usar dispositivos de la línea 18F. Los datos son bidireccionales, se pueden enviar al PIC o leerlos desde él. En la transmisión de los datos hay que colocar un bit de start y un bit de stop, que tienen el valor 0. En total se necesitan 16 flancos de bajada para el envío de los datos, y 6 flancos de bajada para los comandos. Para los PIC de la línea 18F se usan 18 flancos de bajada.
Envío de comandos: 6 flancos de bajada (6 bits).
Envío de datos: 16 flancos de bajada. (14 bits + 1 bit start + 1 bit stop). Para PIC18F (16 bits + 1 bit start + 1 bit stop).
Los datos son bidireccionales: se pueden enviar al PIC o recibirlos de él.
El tiempo mínimo entre el envío de un comando y la lectura o escritura de un dato, debe ser de 1 microsegundo.
Nivel de comandos:
En este nivel se encuentran los diferentes comandos del servicio de grabación , existen variedad comandos diferentes según la familia de dispositivos que se esté usando. Estos comandos son usados para grabar un dato en la memoria de programa, leer un dato de la memoria de datos, entrar en el modo de programación.
Estos comandos están descriptos en la hoja de datos de cada dispositivo por lo cuál el lector puede buscarlos por su cuenta entrando a la página de microchip y buscando la guía de programación de cada familia.
Programación de microcontroladores AVR:
Los microcontroladores AVR se graban mediante un sistema similar al que se usa para los microcontroladores PIC llamado ISP (In system programming), por el cual se puede grabar la memoria de programa, la memoria de datos y la palabra de configuración.
Las ventajas de usar este sistema son las mismas que se presentan al usar el ICSP de los PIC.
Modo grabación:
A diferencia de los microcontroladores PIC, los dispositivos de la familia AVR se diferencian por no necesitar alto voltaje para el proceso de grabación sino que usan el mismo voltaje de alimentación para todas sus operaciones.
Para entrar en modo de programación lo hacen mediante comandos específicos según sea la familia de dispositivos usada.
Arquitectura:
La arquitectura usada es la misma que para los microcontroladores PIC basada en 2 capas, una física y otra de comandos.
Nivel físico:
Para realizar la comunicación se usa el protocolo SPI, que simplifica el protocolo de grabación. El mismo consiste en una comunicación serial Full – Duplex (transmite y recibe datos a la misma vez) , obteniendo una mayor velocidad a la hora de comunicarse con el dispositivo.
En total este sistema usa 4 cables para poder entablar la comunicación mediante SPI.
MISO: Entrada – Master y Salida – esclavo (Señal de datos SPI).
MOSI: Salida – Master y Entrada – esclavo (Señal de datos SPI).
SCK: Señal de reloj.
RST: Pin de reset del microcontrolador.
En la imágen vemos la distribución de pines utilizados para la comunicación de un microcontrolador de la familia AVR:
Una breve descripción de funcionamiento es la siguiente:
El dispositivo entra en modo programación solo luego de un ciclo de reset.
Los primeros comandos son enviados luego de un periodo de 20ms.
Los comandos tienen un formato de 4 bytes a diferencia de los PIC que los comandos tienen una longitud de 6 bytes.
El primer comando enviado es el comando de «habilitar modo programación»
Se identifica el dispositivo mediante los comandos apropiados.
Se comienzan los ciclos de lectura/escritura de la memoria de programa, memoria de datos y fusibles.
Este reseña sobre el funcionamiento es básica y solo sirve para que el lector tenga una reseña sobre su funcionamiento. En caso de querer profundizar más sobre el tema hay que descargar la guía del protocolo ISP de la página de ATMEL.
Nivel de comandos:
Estos comandos están descriptos en la hoja de datos de cada dispositivo por lo cuál el lector puede buscarlos por su cuenta entrando a la página de ATMEL y buscando la guía de programación de cada familia.
A nosotros no nos interesará los comandos de cada familia ya que es trabajo del programador (hardware), ejecutarlos.
Hasta ahora hemos visto lo básico para poder entender el proceso de grabación de ambas familias de dispositivos. En la próxima entrega empezaremos a estudiar la construcción de un grabador para trabajar con las 2 familias de dispositivos descriptos.
[resaltado] Este artículo fue escrito originalmente por Jonathan Moyano para Ikkaro[/resaltado]