Empezamos en el blog con el apasionante (y nuevo para mí) mundo de los microcontroladores.
Al principio sobre todo hablaremos de microcontroladores PIC.
A ver si aprendemos poco a poco
Luego de ver en la anterior entrega como es el proceso de grabación de un microcontrolador, nos dimos cuenta de que para realizar dicho proceso necesitamos de una herramienta hardware: "el programador o grabador". El programador nos permite cargarle al dispositivo, ya sea de la familia AVR o PIC, el programa que nosotros desarrollemos en un lenguaje de programación determinado.
¿Qué programador escoger?
Dentro del mercado existen muchas opciones a la hora de elegir una herramienta para programar microcontroladores. Tanto Microchip como ATMEL ofrecen sus propias herramientas:
El problema radica en que las mismas pueden valer desde los U$S 50 hasta los U$S 200, demasiado dinero si solo queremos usarlo para fines educativos.
En la web pueden encontrar de forma gratuita multitud de dispositivos de programación con un costo de fabricación mínimo. Entre ellos podemos destacar los siguientes por su funcionalidad:
En el desarrollo de este curso usaremos 2 familias de dispositivos diferentes, por lo que armar 2 programadores aumentaría el costo de desarrollo. Para evitar esto busqué en la web una forma de plasmar en una sola herramienta la capacidad de programar ambos tipos de microcontroladores ; la solución está en usar el programador pickit2 clone. El mismo nos permite programar casi toda la familia de microcontroladores PIC y en conjunto con la aplicación que pueden encontrar en esta página de internet: http://pickit2.isgreat.org/ , también vamos a poder usarlo para grabar dispositivos AVR.
El costo total para el armado del pickit2 clone es de aproximadamente U$S 25. Un precio razonable para una herramienta que nos permite grabar PIC y AVR.
Algunas características que posee este dispositivo son las siguientes:
Empezando a diseñar el hardware:
El hardware del programador podemos diseñarlo de 2 formas básicamente:
Yo voy a optar por diseñarlo mediante el ordenador usando un programa de diseño asistido específico para electrónica.
Voy a utilizar el Eagle PCB, este software es uno de los más utilizados en el ambiente semiprofesional debido a su fácil uso y la gran cantidad de librerías de componentes que posee.
No es objeto de este curso el mostrarles como usar el Eagle pero veré de subir un tutorial paso a paso para mostrarles como funciona.
En la próxima entrega les enseñaré como queda el circuito impreso diseñado y también que componentes tienen que comprar para armarlo.
Luego de haber visto como programaremos nuestros dispositivos nos queda solamente empezar a encarar su construcción. En primera instancia quiero decirles que la construcción del programador se hará paso a paso para ver los detalles del armado.
Como les había dicho anteriormente el PCB ( Placa de circuito impreso), había elejido diseñarlo usando una herramienta de dibujo asistido por ordenador. Para mi gusto particular he usado Eagle PCB, pero pueden usar cualquier otro que se adapte a sus necesidades.
Luego de algunas horas de diseño pude terminar una versión preliminar del Pickit2 clone que usaremos para nuestras prácticas con microcontroladores.
En la siguiente imágen podemos ver como quedó el PCB.

Aquí vemos como quedaron distribuidas las pistas del circuito y también la distribución física de los componentes.
Debido a que algunos usuarios a veces tienen problemas con la identificación de algunos componentes claves del circuito , pondré imágenes a modo ilustrativo. Esto les ayudará a la hora de comprar y no cometer equivocaciones.
El primer componente que vemos en el circuito impreso es el conector USB tipo B. Muchos me han preguntado si se puede usar otro conector que no sea ese, la respuesta es SI.
En caso de modificar el tipo de conector utilizado , el usuario tendrá que modificar el diseño añadiendo el conector por su cuenta modificando el archivo de diseño del circuito impreso.
En la siguiente imágen les dejo el formato del conector utilizado en este diseño en conjunto con el cable que debemos comprar.

Este es el conector usado , hay que pedirlo como conector USB tipo B para circuito impreso.
El cable tiene que ser el siguiente:

Este cable hay que pedirlo como una extensión USB con conector tipo B de un lado y conector macho tipo A del otro.
Luego veremos el componente principal de nuestra herramienta, el PIC18F2550. Este microcontrolador se encargará de gestionar las comunicaciones con el host mediante el puerto USB como así también realizará todas las tareas de grabación / lectura y verificación de los diferentes dispositivos que debamos utilizar.
Este componente es una de las piezas más caras del programador con un valor aproximado en el mercado de U$S 9 la unidad.
En la siguiente fotografía vemos como es la apariencia de dicho componente para no confundirlo con otro. Quizás la imágen no es necesaria, pero para alguien novato en este mundo quizás le ayude a no cometer errores en la compra.

Por último tenemos el conector ICSP/ISP donde irán conectados los diferentes microcontroladores PIC/AVR que utilizaremos en nuestras práticas de programación.

Una vez que tengamos todos los componentes que necesitamos procedemos a soldar. Lo ideal es comenzar por los componentes más pequeños como diodos , puentes y resistencias. Luego seguir por los más grandes como integrados y conectores.
Recomiendo que todos los componentes se suelden con un cautín a 250º usando estaño de .75mm de diámetro. Tanto el cautín como el estaño lo pueden comprar en cualquier tienda de electrónica.
Una vez armado el circuito del programador , procederemos a conectarlo a una PC con puerto USB. Al conectarlo por primera vez aparecerá un cartel indicandonos que se ha conectado un dispositivo HID y luego mostrará que se ha instalado correctamente.
Imágen al conectarlo por primera vez.

Una vez que se han instalado los drivers automáticamente me aparecerá un cartel indicando que el dispositivo está listo para poder usarlo.

Bueno hasta aquí ya tenemos el programador listo para poder usarlo. En la próxima les mostraré como enlazarlo con el software de programación y ya podremos empezar con nuestras prácticas.
En el adjunto les pongo los archivos para que armen el programador como así también la lista de componentes que necesitan comprar.
http://www.mediafire.com/file/goq8o66j4d26yt6/PICKIT2.zip
Luego de estudiar como se arma el programador , les voy a mostrar como usar el software de programación para PIC's. Más adelante les enseñaré como enlazarlo al IDE de programación.
A continuación de haber conectado el dispositivo a la PC y que la misma lo haya reconocido, debemos ejecutar el programa de control del mismo. Este software se descarga de forma gratuita desde la página de microchip buscando el link de descarga en este enlace: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023805
Una vez instalado el software de programación deberá quedarles una ventana como la que muestro en la imagen.

Como podemos ver tiene varias funciones pero aquí explicaremos sólo las más importantes.
1° PASO: Conectar el dispositivo (en este caso PIC), a programar en los pines ICSP del grabador. Recordar siempre que puertos de conexión utilizados para este proceso son los siguientes:
Estos pines varían según el microcontrolador utilizado. Conectar el PIC y luego el programador a la PC, una vez realizado esto, iniciar el software de grabación.
2° PASO: Cuando inicie la aplicación, detectará automáticamente el dispositivo conectado y habilitará las funciones de grabación / lectura / borrado, etc.
Cuando hallamos realizado ambos pasos tendremos listo nuestro programador para poder trabajar.
FUNCIONES DEL SOFTWARE DE PROGRAMACIÓN:
Estas son algunas de las funciones que se encuentran dentro del software que maneja el grabador. Hay que tener en cuenta que esta aplicación solo sirve para grabar microcontroladores PIC, si queremos grabar microcontroladores AVR tendremos que usar otras herramientas software que explicaremos más adelante.
Abrir un archivo hex:
Para poder abrir un archivo de programa .hex, deberemos hacer click en la pestaña file y luego import hex. Allí se abrirá una ventana para que busquemos el archivo que necesitamos grabar al microcontrolador. Una vez que hallamos abierto el archivo , visualizaremos el mismo en la ventana de la aplicación.
Grabar dispositivo:
Usando esta función activamos los servicios de programación que posee el microcontrolado usado, al igual que explicabamos en entregas anteriores del tutorial.
Para poder grabar la memoria del programa del dispositivo utilizado hacemos click en el botón: Write. Al principio veremos una barra de progreso que nos irá indicando el porcentaje de memoria grabada, luego de que termina el proceso, nos mostrará si la grabación se ha realizado con exito o si ha habido algún inconveniente o error.
Como podemos ver en la aplicación hay 2 ventanas diferenciadas:
Estas 2 ventanas muestran la memoria de programa y de datos respectivamente. Si nuestro programa tiene algún dato que guardar en la memoria eeprom , el mismo se visualizará en la ventana correspondiente.
En caso de queramos grabar solo un tipo de memoria habilitaremos o no los casilleros enabled que posee cada ventana , lo que nos permitirá trabajar con los dos tipos de memoria por separado.
Borrar dispositivo:
Esta función borra por completo la memoria de programa y de datos. En caso de que querramos conservar los datos guardados en la memoria EEPROM solo deshabilitaremos la casilla enabled de la memoria de datos.
El botón Erase es el encargado de esta tarea.
Chequeo de dispositivo en blanco:
A través de esta utilidad, podremos comprobar si el proceso de borrado de la memoria del dispositivo se ha realizado correctamente. En caso de tener algún programa grabado en la memoria de programa, la aplicación nos mostrará un error, debido a que no se cumple la condición de memoria en blanco.
Leer dispositivo:
Lee la memoria de programa y la de datos y vuelca el contenido en los ventanas de visualización. La barra de progreso mostrará el porcentaje de memoria leida y un mensaje nos mostrará si el proceso ha tenido exito o no.
Esta función la brinda el botón read del menú de comando.
Guardar archivo hex:
Una vez leida la memoria de programa asi también como la memoria de datos, el programador tiene la opción de guardar el contenido de dicha lectura. Para esto vamos a file - export hex, allí el programa guardará los datos leidos en formato hexadecimal.
Con esto ya tenemos listo el hardware y software necesario para poder programar. Ahora nos queda comenzar a diseñar un pequeño entrenador para realizar las prácticas de programación que realizaremos de manera continua en las diferentes lecciones.
En esta entrega empezaremos a diseñar un entrenador para las familias de microcontroladores PIC y AVR. Para poder emprender el diseño de la placa de entrenamiento necesitaremos el software Eagle PCB versión 5.10 o superior.
Para el desarrollo de este curso usaremos 2 placas de entrenamiento diferentes para poder utilizar ambas familias de dispositivos. Esto se debe a que los PIC y AVR no comparten la misma distribución de pines dentro de sus dispositivos, por lo tanto diseñar una placa que se adapte a ambas familias de microcontroladores resultaría impráctico.
Dos pautas a tener en cuenta a la hora de diseñar este tipo de circuitos son las siguientes:
Necesitamos que nuestro entrenador nos de las mejores características al mejor precio ya que la premisa de este curso es el hecho de no tener que gastar grandes cantidades de dinero para aprender a programar.
Las especificaciones técnicas de nuestra placa de entrenamiento serían las siguientes:
Fuente de alimentación:
Como fuente de alimentación de nuestro sistema usaremos un transformador de 220v / 110v C.A (Corriente Alterna) a 12v C.C (Corriente continua), con una capacidad de carga de 1.5 a 2A. Este dispositivo pueden adquirirlo en cualquier tienda de electrónica o electricidad a un precio no mayor de U$S 6.
En la fotografía pueden ver el aspecto del mismo.

La tensión que entrega el transformador, no es compatible con las especificaciones del entrenador de 5v / 1A. Por esto necesitaremos un dispositivo externo llamado regulador de voltaje, el mismo entrega una tensión de salida fija regulada a partir de una tensión de entrada variable.
El dispositivo ideal para cumplir esta tarea es el LM7805 de ST semiconductores. Este circuito integrado de 3 pines entrega una tensión de 5v a la salida con una capacidad de carga de 1A, usando solo 2 capacitores como componentes externos asociados.

Microcontrolador:
El microcontrolador que usaremos en nuestras primeras prácticas de programación tiene que cumplir los requisitos mostrados más arriba de poseer una memoria de programa de 2Kb y una memoria de datos o memoria RAM de 128 bytes.
Para la familia de dispositivos AVR usaremos el ATtiny2313 con un costo de U$S 3. En cuanto a la familia de dispositivos microchip PIC utilizaremos el PIC16F628A con un costo similar al ATtiny2313.
En las fotografías podemos ver ambos microcontroladores.
Microcontrolador AVR que usaremos.

Microcotrolador de Microchip que usaremos.

Ambos dispositivos necesitan una fuente de reloj para poder sincronizar todas las operaciones internas de la CPU. Debido a esto usaremos un cristal externo de 4Mhz.
Comunicaciones RS232:
En muchas de nuestras prácticas necesitaremos un monitor para poder correjir errores en nuestros programas, visualizar mensajes, introducir datos al sistema,etc. Para este propósito usaremos el puerto de comunicaciones RS232 ya que es la forma más económica de visualizar datos.
Más adelante veremos el uso de las pantallas LCD, como un método alterno al uso del puerto RS232 para visualizar mensajes.
Como elemento hardware para las comunicaciones usaremos el circuito integrado MAX232 que adapta los niveles de tensión del microcontrolador para poder comunicarse con el puerto serie de la PC.

Para poder conectar elementos externos a nuestro entrenador usaremos conectores del tipo ICD o Molex. Estos conectores ofrecen muy poca fatiga mecánica , por lo tanto son ideales para las prácticas en donde se conectan y desconectan dispositivos de forma continua.
En la próxima entrega les mostraré el diseño final del circuito y la placa de circuito impreso para que puedan armarlo. A esta altura tendríamos que tener el programador y nuestra placa de entrenamiento listas para poder dar comienzo a nuestras prácticas de programación.
En la anterior entrega vimos los elementos necesarios para poder construir un entrenador para microcontroladores PIC y AVR. En esta edición vamos a ver la construcción de la placa para microcontroladores AVR.
Las características finales de nuestro entrenador, para dispositivos AVR, son las siguientes:
En la imagen podemos ver como están distribuidos los diferentes componentes que integran la placa.
Esta placa de desarrollo contiene todo lo necesario para poder realizar las prácticas de programación del curso que dictaremos.
En total serán aproximadamente 70 a 80 prácticas que se distribuirán a través de las sucesivas entregas del curso.
Todas las pruebas se realizarán utilizando una placa experimental donde conectaremos los componentes asociados al entrenador, como pueden ser:
Una imagen de la placa experimental que usaremos es la siguiente.

Todas los programas de ejemplo se realizarán integramente en C de AVR - GCC. Las prácticas vendrán acompañadas con un pequeño video de explicación para que les quede un documento explicativo de cada práctica.
En la próxima entrega les mostraré la placa de desarrollo que utilizaremos para los microcontroladores PIC.
Una vez montados ambos entrenadores, les enseñaré algunas pruebas de funcionamiento para dejar todo listo para comenzar a programar.
En entregas anteriores vimos como crear la placa del Pickit2 y próximamente veremos el diseño de las placas de entrenamiento que nos servirán para el desarrollo de nuestros ejemplos y tutoriales de programación.
Todas las placas de desarrollo, incluida la placa del programador están diseñadas en un software de dibujo asistido llamado EaglePCB. Usando este programa podemos crear nuestros circuitos impresos partiendo de un esquemático previamente diseñado, utilizando herramientas de facil uso.

En este tutorial enseñaré las funciones básicas del programa para que el usuario sea capaz de empezar a trabajar en un proyecto concreto. Algunas características destacables de este programa son las siguientes:
Personalización del Eagle:
El software Eagle permite personalizar ciertos aspectos del programa, tales como la configuración de menús, teclas de función o colores de pantalla. Muchos de estos aspectos se pueden realizar desde el menú Options en el panel de control o en un editor de ventanas.
El interfaz de usuario se puede personalizar mediante un clic en options/User interface en el menú del panel de control. Este tutorial da por supuesto que se utilizarán las configuraciones por defecto, más adelante se explicarán como hacer modificaciones en caso de ser necesario.
Interfaz de usuario de Eagle:
Eagle se ha diseñado de tal modo que cualquier acción se realiza mediante un comando. Normalmente el usuario selecciona los comandos de la barra de herramientas que se encuentra a la izquierda de la ventana de trabajo, haciendo clic's sobre los iconos. Pero existe otra opción, que es introducir los comandos mediante texto en la barra superior de la ventana de trabajo.
Ventana de trabajo:
En esta imagen tenemos la ventana de trabajo del editor de PCB. Como podemos apreciar de arriba hacia abajo, tenemos la barra de menú, barra de herramientas activas, barra dinámica de parámetros y coordenada de pantalla con línea de comando. A la izquierda encontramos la barra de herramientas de comando.
En la próxima imagen vemos la ventana de trabajo del editor de esquemas que tiene la misma distribución que la ventana del editor de PCB.
Comandos: Como vimos anteriormente, los comandos del editor de esquemas / PCB, se pueden seleccionar introduciéndolos por teclado o seleccionándolos con el ratón mediante clic's en los iconos o en las opciones del menú. Podemos ver entonces, como ejemplo , las formas para introducir el comando info. En el desarrollo de este tutorial usaremos el modo de hacer clic en el ícono del comando usado, debido a una cuestión de comodidad. El usuario puede usar el modo de trabajo que le resulte más ameno. EaglePCB permite trabajar usando un editor de proyectos (Usado en proyectos complejos principalmente). Al proyecto se le pueden agregar los diferentes esquemáticos y placas de circuito impreso que el mismo contenga. Así como también se pueden crear esquemáticos y circuitos impresos por separado en proyectos más simples.
En la próxima entrega seguiremos trabajando en la descripción y funcionamiento de este exelente programa.
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:
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:
Características principales de los AVR:
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:
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:
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:
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:
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:
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:
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.
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:
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.
Meta nos presenta un manual básico de Winpic800 para principiantes.
Con este manual podréis realizar pruebas paso a paso con el grabador TE20x o similares.
De manera muy simple,el winpic800 se usa para enviarle el software al PIC. Se puede descargar en Winpic800
El manual podéis visualizarlo desde la web de meta o descargarlo como archivo adjunto en este post.
Y aunque aún está en construcción os dejo la web del autor, que seguro que nos dará mucho de sí.
Un par de buenos tutoriales sobre programación PIC usando el Winpic800 son:
Recopilamos web interesantes sobre los microcontroladores.
Se ha lanzado el número uno de MicroControl una nueva revista gratuita de electrónica.

En este primer número entre otras cosas hablan sobre como crear placas decircuitos impresos para nuestro proyectos.
Un buen recurso gratis. Esperamos que sigan en esta línea.
Descargala directamente Revista Micro Control