You are on page 1of 7

ICSP: Cómo Usar "Programación Serial En Circuito" con

Microcontroladores PIC
Escrito por Raúl Alvarez.

http://tecbolivia.com/index.php/articulos-y-tutoriales-microcontroladores/19-icsp-como-
usar-qprogramacion-serial-en-circuitoq-con-microcontroladores-pic

Cuando se desarrollan sistemas microcontrolados resulta muy ineficiente tener que sacar
el PIC de su circuito para reprogramarlo una y otra, y otra vez... Si el proyecto es
relativamente largo, esto no solamente consume un tiempo considerable, sino que
también puede afectar la vida útil del PIC (los pines podrían doblarse y romperse) y si se
está prototipando en breadboard, también se reduce la vida útil del breadboard.

En este tutorial se muestra un circuito práctico con la conexión de todas las señales ICSP
para programar y reprogramar el PIC "en circuito", sin la necesidad de extraerlo de su
circuito de aplicación. Este tutorial sirve a su vez como un desarrollo introductorio de los
conceptos básicos de la Programación Serial En Circuito (ICSP).

Video Demostrativo

¿Que es ICSP?

ICSP es el acrónimo de la frase en inglés: "In Circuit Serial Programming" (Programación


Serial En Circuito); es una tecnología incluida en todos los microcontroladores PIC de
Microchip más recientes y posibilita la reprogramación de los mismos sin que sea
necesaria la remoción de éstos de su circuito de aplicación. Esta característica es
extremadamente útil no solamente en la etapa de desarrollo debido a que ahorra tiempo y
trabajo, sino que su utilidad se extiende a la etapa de mantenimiento y actualización de
los sistemas, dando la posibilidad de reprogramar los mismos "en el campo" en sus
respectivas placas ya soldadas, ya sea para corregir errores de software o para la mejora
del sistema con la implementación de nuevas funciones.

Este método de programación (lectura, escritura y verificación) no es exclusivo de los


microcontroladores Microchip, ya que otras marcas como Atmel, Parallax y otros usan
también métodos similares conocidos de manera genérica como ISP (In System
Programming) y en la arquitectura de Procesadores ARM se utiliza un método similar
conocido como JTAG.

Programadores ICSP

Todos los modelos recientes de microcontroladores PIC se programan usando ICSP con
voltaje alto de programación y una variante con LVP (LVP es "Low Voltage
Programming" - más adelante hablaremos de esto). Así mismo, todos los programadores
modernos de PIC utilizan este método para programarlos, aunque esto no sea aparente en
algunos programadores que cuentan por ejemplo con un socket ZIF, como el mostrado en
la figura.

En el caso de los programadores con socket ZIF, El método de programación sigue siendo
ICSP (Programación En Circuito), sólo que en este caso todas las señales ICSP están
cableadas al socket ZIF; sin embargo debido a que el PIC debe ser removido del circuito
para ubicarlo en el socket, se contradice el propósito inicial de la idea, la cual es
justamente no remover el PIC de su circuito. Para los principiantes el uso del socket ZIF
es más conveniente; sin embargo para quien debe realizar un trabajo de largo aliento, con
muchas iteraciones de re-programación, programar el PIC sin tener que removerlo cada
vez de su circuito es mucho más conveniente.

En la siguiente fotografía vemos un ejemplo de un sistema siendo programado "en


circuito":

Señales y Conexiones en el Cabezal ICSP

Las señales conectadas entre el PIC y el dispositivo programador para realizar la escritura,
lectura y verificación del programa son las siguientes:

 VPP (Voltaje de Programación): Es un voltaje entre 12-14 VDC aplicado al pin


MCLR/VPP del PIC, y es usado para poner al PIC en estado de programación.
 PGC (Program Clock): Señal de reloj provista al PIC para sincronía.
 PGD (Program Data): Línea serial de datos para escritura, lectura y verificación de la
memoria de programa (ROM Flash) del microcontrolador.
 VDD (Voltaje de Alimentación 5/3.3 VDC): Voltaje de alimentación provisto al PIC.
En el caso de los programadores Pickit 2 y Pickit 3, estos primeramente consultan este
pin para verificar si el PIC ya está siendo alimentado externamente (recomendado) de
otro modo, existe la posibilidad de configurar al programador para que éste mande voltaje
de alimentación al PIC a través de esta línea.
 GND (Ground): Conexión a tierra.
El siguiente diagrama de circuito muestra un método muy usual para la implementación
de ICSP:

Como se puede observar, el método ICSP utiliza pines en el microcontrolador que


también pueden cumplir potencialmente otras funciones; en el caso del PIC16F628A
tenemos por ejemplo:

 El pin RA5/MCLR/VPP, además de ser el pin VPP es el pin RA5 del puerto A y la entrada
de reset (MCLR).
 El pin RB7/T1OSI/PGD, además de la conexión serial de datos para la programación
(PGD) es también el pin RB7 del Puerto B y la entrada de oscilador del Timer1 (T1OSI).
 El pin RB6/T1OSO/T1CKI/PGC, es la entrada de reloj para ICSP, además de ser el pin
RB6 del Puerto B, la salida de oscilador del Timer1(T1OSO) y la entrada de reloj del
Timer 1 (T1CKI).
Por tanto, los pines anteriores cumplen básicamente dos funciones: 1) Funciones
relacionadas a la aplicación principal del circuito, y 2) Funciones para la conexión con el
dispositivo programador que posibilite la lectura, escritura y verificación de la memoria
de programa "en circuito".

Circuito de Aislación

Para que la programación se lleve a cabo de manera correcta y segura, es necesario aislar
el circuito de aplicación del circuito de programación. El circuito ejemplo mostrado en la
figura anterior nos muestra de qué manera se puede lograr esto:

 Conectar un diodo de señal (como el 1N4148 u otro similar) entre el pin MCLR/VPP y
el circuito de reset (resistencia + capacitor) de la aplicación. Esto aisla al circuito de reset
y la fuente de voltaje del microcontrolador de los 12-13 voltios generados por VPP en el
momento de la programación.
 Conectar otro diodo de señal entre el pin VDD y la alimentación de voltaje del circuito
de aplicación. Esto posibilita que en caso de que el VDD del circuito del microcontrolador
esté encendido, éste sea aislado de la alimentación de voltaje provista por el programador;
en todo caso es más recomendable y seguro usra la alimentación propia del circuito de
aplicación para energizar el PIC que usar la alimentación de voltaje provista por el
programador, sobre todo para los principiantes.
 Conectar resistencias (típicamente 10K) entre los pines PGD y PGC y el circuito de
aplicación a fin de que la reactancia vista desde estos pines no afecte la integridad de las
señales de datos y reloj utilizadas en la escritura, lectura y verificación del programa. Si
la aplicación lo permite, es recomendable dejar libres estos pines para ser usados
exclusivamente para la programación ICSP.

Respecto a la aislación de los pines PGD y PGC es importante recalcar que si bien este
típico ejemplo de circuito de aislación funciona para la mayoría de los casos, no es una
receta segura para todos, y en algunos casos podría requerirse ligeras modificaciones o
incluso un planteamiento diferente para lograr dicha aislación.

Depuración con ICSP


Cabe notar también que ICSP, aparte de proveer el método para la escritura, lectura y
verificación del código de programa en el microcontrolador, provee también métodos
para la depuración y la emulación "en circuito"; capacidades que vienen adicionalmente
implementadas en ciertos dispositivos conocidos en inglés como
"programers/debuggers/emulators" (programadores/depuradores/emuladores). Ambas
capacidades adicionales complementan grandemente la "caja de herramientas" de todo
desarrollador de sistemas microcontrolados.

Programación Con Bajo Voltaje (LVP)

La Programación Con Bajo Voltaje LVP (Low Voltaje Programming) es una opción
adicional de programación presente en los PICs la cual permite obviar VPP (12-14 VDC)
y utilizar bajo voltaje. Para ello los PICs cuentan con otro pin denominado PGM (el pin
RB4/PGM en el caso del PIC16F628A) a través del cual el dispositivo programador toma
control del PIC para su programación. Los detalles de este método salen del alcance de
este tutorial, simplemente añadiremos que, si se va a usar ICSP con VPP (12-14 VDC), es
recomendable dejar deshabilitada la Programación Con Bajo Voltaje (LVP) en el
microcontrolador (mediante la escritura del bit correspondiente en la palabra de
configuración (registro CONFIG) del microcontrolador, esto para evitar
desprogramaciones accidentales del PIC. La desventaja de LVP es que cualquier ruido o
pico de voltaje más o menos fuerte puede desprogramar accidentalmente el PIC, por lo
cual, es mejor deshabilitarlo y usar la programación ICSP con voltaje alto.

Conclusión

Implementar ICSP se hace imprescindible en un proyecto que requiere muchas


iteraciones de re-programación en la etapa de desarrollo; por otra parte brinda también la
posibilidad de actualización y mejora del programa cuando los componentes ya están
soldados en la placa y el sistema ya está en funcionamiento. Para quienes nunca antes
programaron "en circuito", implementarlo puede parecer un poco intimidante al principio,
sin embargo es un paso necesario a dar, a fin de mejorar la eficiencia en el desarrollo de
sistemas microcontrolados.

Nada reemplaza la adecuada investigación y búsqueda de información antes de probar


herramientas y técnicas nuevas para uno, por lo cual es muy recomendable revisar
también la documentación oficial de fabricante respecto a la Programación Serial En
Circuito, a fin de contar con la información detallada y de primera mano respecto a este
tópico.

You might also like