martes, 28 de febrero de 2012

Microcontrolador PIC y Ejemplo de su Programación

Antes de realizar la tarea PIC(la cual ya tengo algunas ideas, y la mayoría de las cosas que necesito), me puse a investigar sobre diversas cosas sobre los PIC, como su programación y su funcionamiento. Esto lo hice para saber como realizar las conexiones, ya que previamente había trabajado con los GAL en algunos proyectos básicos, y estoy familiarizado con ciertas reglas, como que cierto pin del chip debe ir a tierra y otro debe ir a a corriente.
Aunque no lo parezca esto es muy importante, sin saber esto uno puede simplemente quemar el microchip y darlo por perdido, es por esto que decidí investigar primero al respecto. Primero que nada ¿Qué es un PIC?.

PIC - Descripción


Los PIC(Peripheral Interface Controller) son una familia de microcontroladores fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instrument.


Los hay disponibles de distintas capacidades, desde algunos tipos básicos con poca memoria, hasta los que tienen convertidores Analógico a Digital (ADC) incluidos o incluso los que llevan dentro PWMs (Pulse Width Modulators = Moduladores de Ancho de Pulso)

Mi PIC - PIC16F628A

El PIC que compré, es el PIC16F628A, lo cual lo hace diferente a los demás y con diferentes características. El PIC16F628A cuenta con programación de bajo voltaje, modo reloj de baja velocidad, oscilador interno de 4MHz, memoria, y otras cosas más.

Las especificaciones del PIC16F628A:


 Parameter Name Value
 Program Memory Type Flash
 Program Memory (KB) 3.5
 CPU Speed (MIPS) 5
 RAM Bytes 224
 Data EEPROM (bytes) 128
 Digital Communication Peripherals 1-A/E/USART,
 Capture/Compare/PWM Peripherals 1 CCP
 Timers 2 x 8-bit, 1 x 16-bit
 Comparators 2
 Temperature Range (C) -40 to 125
 Operating Voltage Range (V) 2 to 5.5
 Pin Count 18

Ahora para saber que tipo de conexiones podemos hacer, y que funciones tiene cada pin, necesitamos ver el diagrama del PIC en cuestión. Este dirá para que sirve cada pin del PIC, y donde debemos conectar a positivo y negativo para darle alimentación. El diagrama es el siguiente:

Viendo esto es difícil entender que es cada cosa, además de los voltajes positivo y negativo. Para esto se puede usar la siguiente tabla que describe el significado de cada pin.

Nombre del Pin 
Descripción
RA0/AN0
Puerto bidireccional.
Entrada del comparador análogo
RA1/AN1
Puerto bidireccional.
Entrada del comparador análogo
RA2/AN2/Vref
Puerto bidireccional.
Entrada del comparador análogo. Salida VREF
RA3/AN3/CMP1
Puerto bidireccional.
Entrada del comparador análogo. Salida del comparador 1
RA4/T0CKI/CMP2
Puerto bidireccional.
Input del timer 0.
Salida del comparador 2
RA5/MCLR/VPP
Puerto bidireccional.
Master Clear. Cuando es configurado, es un reset activo en el dispositivo. Voltaje de salida programado.
RA6/OSC2/CLKOUT
Puerto bidireccional.
Oscilador de cristal de salida.
Salida de reloj con un 1/4 de la frecuencia de OSC1.
RA7/OSC1/CLKIN
Puerto bidireccional.
Oscilador de cristal de entrada. Entrada de reloj externo.
RB0/INT
Puerto bidireccional (8 bits).
Interruptor externo
RB1/RX/DT
Puerto bidireccional (8 bits).
I/O de datos sincronizados.
Puerto recibidor USART.
RB2/TX/CK
Puerto bidireccional (8 bits).
Puerto transmisor USART.
I/O de reloj sincronizado
RB3/CCP1
Puerto bidireccional.
I/O de Comparación y Captura de PWM
RB4/PGM
Puerto bidireccional (8 bits) 
Puerto de programación de bajo voltaje.
RB5
Puerto bidireccional (8 bits).
RB6/T1OSO/T1CKI/PGC
Puerto bidireccional (8 bits).
Salida del oscilador Timer1.
Reloj de programación ICSP.
RB7/T1OSI/PGD
Puerto bidireccional (8 bits).
Entrada del oscilador Timer1.
I/O de datos ICSP.
Vss
Referencia de tierra para los puertos de I/O
VDD
Suministro positivo para lógica y puertos de I/O

Con puertos bidireccionales, nos referimos a puertos que podemos usar tanto como entrada como de salida.El reloj o Clk, es usado frecuentemente para darle una temporización al microcontrolador, si es necesario.

Programación del PIC:

Suponiendo que ya sabemos como se conecta el PIC, es decir, saber cuales son las entradas y salidas,que pines del PIC van a tierra, y cuales a corriente, podemos comenzar a programar el PIC. Lo anterior es muy importante saberlo, ya que sino terminaremos quemando el PIC desde antes de probar si nuestra programación funciona.

Para programar el PIC es necesario lo siguiente:
  • Tener un PIC
  • Armar o comprar un programador de PICs
  • Software para programar el PIC
  • Software para compilar código en .hex
Programador PIC-500

Como mencioné, mi PIC es el PIC16F628A. El programador que compré es el PIC-500, que se conecta mediante cable serial, lo cual no lo hace muy portable en estos días ya que la mayoría de las PCs y laptops modernas no cuentan con esta entrada, pero en mi caso tengo una vieja PC que aún cuenta con entrada serial. El beneficio del programador PIC-500 es el precio, ya que es mucho más barato que el PIC-600, pero en fin de cuentas ambos pueden servir.


El programador PIC-500 está basado en el programador JDM, la comunicación con la PC es a través del puerto serial RS232 y se recomienda usar el software IC Prog para cargar la información. Cuenta con una base de 8 y otra de 18 patas para memorias y PICs, respectivamente, cable DB9 de 1,8 m de longitud y software (ICprog). Soporta la siguiente variedad de PICs: 12C5XX, 12C67X, 24CXX, 16C55X, 16C61, 16C62X, 16C71, 16C71X, 16C8X, 16F8X y memorias 24LCxx.

mikroBasic for PIC

El programador venía con un CD que contenía el programa ICprog, usado para cargar los .hex en el PIC, pero no tenía soporte para el PIC16F628A, por lo tanto descargue uno del siguiente link:


Y para programar el PIC use mikroBasic PRO for PIC, donde ya tenía incluido un pequeño ejemplo de un LED parpadeante, que usé para probar si funcionaba el programador. El código es muy sencillo, configura todos los puertos A, y puertos B como salidas(podemos ver aquí cuales son), y se hace un ciclo infinito donde se da una salida de 1 y luego 0, alternándose cada segundo. El código es el siguiente:

Escrito el código, debemos compilarlo dando click en build, en el programa mikroBasic, esto nos generara un archivo .hex en la carpeta donde estemos guardando nuestro código. Con esto ya podemos abrir ICprog y abrir dicho archivo .hex, para poder programarlo en el PIC.


Aquí un video del circuito funcionando:



Como se puede observar en el video, el PIC tiene dos conexiones, hacia el además del LED. En el pin 14, se conecta a corriente positiva, y en el pin 5 se conecta a tierra. Esto se debe hacer correctamente o el PIC puede quemarse o dejar de funcionar. 

Referencias:

4 comentarios:

  1. Bien; van 7 para el lab de integrados.

    ResponderEliminar
  2. :D de bastante ayuda la entrada yo tambien compre el mismo programador, tengo una duda a ver si me puedes ayudar es que estoy teniendo unos problemas a la hora de la programación simplemente cargaste el archivo .hex sin modificar los valor de oscilador y bits de configuración?

    ResponderEliminar
  3. Hola. Me parece que modifiqué el oscilador por IntRC I/0 y desactivé todos los fuses en el icprog. También por si usas el PIC16F628A, yo no usé el icprog del disco porque no venía incluido éste PIC, descargue otra versión de aquí: http://www.talkingelectronics.com/Download/icprog105c-a.zip
    Saludos.

    ResponderEliminar