domingo, 15 de febrero de 2015

TELECOMUNICACIONES

Programar PIC

Índice de contenidos

Introducción

Con programar un PIC nos referimos a transferir y almacenar el programa en el PIC, no a generar o escribir el programa que contiene. Este proceso comienza con un archivo de tipo HEX, que especifica exactamente como deben quedar la memoria de programa y la memoria de datos no volatil (EEPROM) del microcontrolador. El proceso de la programación consiste en copiar el archivo HEX en el PIC.

Programador de PIC

Para programar un PIC debe utilizarse un ordenador, como por ejemplo un PC. Sin embargo no existe, en principio, forma de conectar directamente a un PIC con un PC para programarlo. Es necesario utilizar un dispositivo hardware llamado programador el cual interconecta un puerto de entrada/salida del PC por un lado y el PIC por el otro.
Existen muchos modelos de programadores, tanto comerciales como para construirlos uno mismo.

Conexión del lado del PC

Del lado del PC existen programadores que utilizan el puerto paralelo, otros el puerto serie (COM port) y otros el puerto USB.
De los modelos para construir uno mismo los mas simples utilizan el puerto serie, como es el caso de los basados en el diseño JDM.
Un problema importante es que tanto el puerto serie como el paralelo no están disponibles en los portátiles actuales y cada vez es menos común en los equipos de sobremesa. Los programadores USB pueden realizarse con un PIC con USB pero incluso estos modelos necesitan a su vez programarse, aunque sólo sea la primera vez, mediante un programador (al menos hasta donde sabemos).
Los conversores USB-serie comerciales, que crean un puerto serie virtual en el PC, no sirven. Al menos en pruebas realizadas con el programador serie JDM.

Conexión del lado del PIC

Por el lado del PIC este puede programarse de dos maneras:
  • Insertándolo directamente en un zócalo en el programador
  • Con el PIC insertado en el circuito de aplicación y programándolo mediante el llamado ICSP.

Programación por zócalo

En este caso el programador proporciona algún sistema de zócalos para insertar PIC de distintos tamaños y proporcionar las conexiones necesarias para su programación.

Programación ICSP

El programador ICSP conecta el PIC mientras está conectado en el circuito de aplicación.
Este método evita tener que manipular el PIC. Al evitar tener que insertarlo en el programador con zócalos y luego en la aplicación no se corre el riesgo de deteriorarlo, partiendo alguna patilla o por descargas electrostáticas. También permite programar PIC SMD y por último permite que un dispositivo montado se pueda programar justo antes de salir para su comercialización y así disponga de la última versión del programa del PIC.
Ver ICSP

Bootloader

El uso de un bootloader permite actualizar fácilmente el programa del PIC sin necesidad de utilizar un programador específico, utilizándo una conexión serie RS232 o USB.
Para mas información ver bootloader.

Modos de programación

Existen dos maneras de programar un PIC, la estándar y la de baja tensión o LVP la cual sólo soportan algunos modelos de PIC (no por ejemplo el PIC16F84A).

Programación estándar

La programación estándar requiere de cinco señales. Una de ellas, la Vpp, a 13 voltios:
  • 1- VPP: Tensión de programación de unos 13 voltios; cuando es aplicada, el microcontrolador entra en el modo Programación.
  • 2- VDD: Alimentación positiva.
  • 3- VSS: Alimentación negativa
  • 4- ICSPDAT o PGD: Datos de Programación; es una línea de datos bidireccional síncrona serie.
  • 5- ICSPCLK o PGC: Reloj de Programación; es una línea unidireccional síncrona serie de reloj que va desde el programador hasta el microcontrolador.

Programación a baja tensión

Existen microcontroladores PIC con capacidad de programación a baja tensión (LVP), es decir, no necesitan de una tensión Vpp de 13v. En este tema sin embargo se trata la programación estándar (a 13V) y no la programación de baja tensión, así que en los PIC con capacidad LVP pero que vamos a programar con el sistema estándar, debemos deshabilitar la función LVP en los ajustes de configuración (mediante el uso de LVP = off en los registros de configuración). Si no lo hacemos (o además de hacerlo para asegurarnos) debemos colocar la patilla de programación de baja tensión (PGM o LVP) a nivel bajo (Vss) cuando se realice la programación, por ejemplo, mediante una resistencia de 1 a 100K para tirar a masa esta patilla. Un pin PGM que se deja flotante (sin conectar) o en la condición de nivel alto, puede interferir con la programación y producirse errores.

Pines de LVP

  • Para la mayoría de los PIC de la serie 16F , RB3 funciona también como pin PGM.
  • En la serie 18F, por lo general, es RB5 la que necesitamos poner a nivel bajo.
  • Para los 16F62x y 16F64x, se necesita que RB4 sea puesto a 0.
Debemos consultar el datasheet correspondiente del microcontrolador a programar para la identificación de este pin.

Programación de PIC a 3,3 voltios

Algunos microcontroladores PIC no pueden alimentarse a 5V. Funcionan a una tensión de alimentación inferior, como 3,3 V . En este caso se requieren circuitos adicionales en la programación en circuito.
Puede consultarse mas información en la página de Microchip buscándo los tipos: PIC18FxxJ, PIC18FxxK, PIC24xJ y dsPIC33FJ

Programación con MCLR como I/O

Conviene configurar MCLR como un pin de RESET. El programador trata de reajustar el PIC al principio del proceso de programación. Si el pin MCLR se configura como una entrada, el programador puede tener problemas para poner el PIC en el modo programación. Esto es especialmente problemático si el PIC ha sido previamente programado y se establecen el reloj de programación o las líneas de datos como salidas.
En algunos montajes no hay suficientes pines para permitir el uso de un RESET, siendo necesario que MCLR sea utilizado como una entrada. Esto es habitual en pequeños PIC de 8 pines. En estos casos conviene configurar el reloj y la patilla de datos como entradas y colocar un retardo en el inicio del código principal. Esto permitirá al conectar la alimentación del PIC comenzar el proceso de programación, mientras el retardo se está ejecutando.
Por ejemplo, utilizando pseudocódigo, en un programa destinado al PIC12F675, podemos comenzar con:
 
TRIS FF 'Todos los pines como entrada
PAUSA 1000  'Espera un segundo
TRIS XX 'Pines según convenga
Se pone un tris para que todas las patillas actúen como entrada, un retardo de 1 seg y despues un tris para cambiar las patillas a salida o entrada según convenga. Además los pines por donde se programa (CK y DATA) son también entradas al principio.
Todo esto permite la reprogramación del PIC sin problemas.

Patillas de programación

En los datasheet suministrados por el fabricante Microchip (accesibles desde su página de Internet) están detallados los pines adecuados para la conexión de un programador para cada tipo de dispositivo PIC.
En general la disposición de los pines según el microcontrolador es la siguiente:
Microcontroladores de 8 pines línea 12F:
  • Pin 1 = Vdd (voltaje positivo)
  • Pin 4 = Vpp (voltaje de programación)
  • Pin 6 = Ck (ICSPCLK – PGC)
  • Pin 7 = Data (ICSPDAT - PGD)
  • Pin 8 = Gnd (negativo Vss)
Microcontroladores de 18 pines línea 16F:
  • Pin 14 = Vdd (voltaje positivo)
  • Pin 4 = Vpp (voltaje de programación)
  • Pin 12 = Ck (ICSPCLK – PGC)
  • Pin 13 = Data (ICSPDAT - PGD)
  • Pin 5 = Gnd (negativo Vss)
Microcontroladores de 28 pines línea 16F / 18F:
  • Pin 20 = Vdd (voltaje positivo)
  • Pin 1 = Vpp (voltaje de programación)
  • Pin 27 = Ck (ICSPCLK – PGC)
  • Pin 28 = Data (ICSPDAT - PGD)
  • Pin 8 - 19 = Gnd (negativo Vss)
Microcontroladores de 40 pines línea 16F / 18F:

  • Pin 11 - 32 = Vdd (voltaje positivo)
  • Pin 1 = Vpp (voltaje de programación)
  • Pin 39 = Ck (ICSPCLK – PGC)
  • Pin 40 = Data (ICSPDAT - PGD)
  • Pin 12 - 31 = Gnd (negativo Vss)



No hay comentarios:

Publicar un comentario