You are on page 1of 20

Proyectos con microcontroladores PIC.

Estos microcontroladores de la empresa Microchip, son los ms populares actualmente,


puede ser por tener versiones econmicas de pequeo tamao, porque tiene set de
instrucciones reducidas, por la disponibilidad de herramientas de programacin y por la
facilidad para grabarlo.

Si estamos diseando un circuito compuesto por varios circuitos integrados de
compuertas lgicas, temporizadores, etc, debemos considerar que es ms conveniente
utilizar un microcontrolador. La cantidad de componentes externos ser menor, el
circuito impreso ms sencillo, y el circuito ms fcil de actualizar o modificar, as que
vale la pena aprender a usarlos.

Dentro de las cosas que debemos hacer para aprender sobre estos microcontroladores:

1. Leer las hojas tcnicas de un microcontrolador pequeo y econmico, para
empezar. Puede ser el PIC16F84A o el ms reciente PIC16F716.
2. Conseguir las herramientas de compilacin y simulacin. MPLAB funciona bien y
est disponible gratis en la pgina de Microchip.
3. Crear programas para ejercicios sencillos y comprobarlos con el simulador.
4. Comprar o construir un grabador. Los grabadores Pickit2 y Pickit 3 son
oficiales de Microchip y son econmicos. Se conectan al PC a travs de puerto
USB, a travs del cual tambin se alimentan.

Si pretendemos construirnos nuestro grabador conviene elegir alguno del listado que
funciona con icprog, este programa funciona bien y tambin es gratis. Adems
debemos asegurarnos de contar con algn equipo antiguo con puerto paralelo o serial
segn requiera el grabador.


Timer 0 del 16F84.



Una forma para guiarse en la configuracin del Timer 0 y otras funciones de los microcontroladores es
utilizar los diagramas de bloques equivalentes de las hojas tcnicas.
As en la figura, de izquierda a derecha, se puede ver un cuadro que corresponde al pin RA4/TOCKI que es al
que se le aplican los pulsos en el caso que se quiera un clock externo, luego vemos una compuerta ORex en la
que una de las entradas es TOSE(Timer 0 Source edge), que permite elegir el canto del pulso con el que se
incrementar el registro del timer, luego vemos un mutiplexor de 2 entradas, si T0CS (Timer 0 clock source)
est en 1 la rama que viene del pin RA4 alcanza la salida, y si T0CS est en 0 el clock del uC/4 alcanza la
salida.
El prximo multiplexor depende del estado del bit PSA(Pre escalar assignment) y si est en 0 recibe los
pulsos del clock que elegimos con TOCS y lo divide segn el pre escalar que elijamos con PS2, PS1 y PS0. Y
si PSA lo configuramos con 1 recibimos los pulsos desde TOCS directamente. Luego de pasar por un bloque
de sincronizacin los pulsos alcanzan el registro TMR0 incrementndolo.
Cuando el registro TMR0 rebose (llegue al valor mximo y vuelva a cero) se activar el flag de
interrupcin del Timer 0 T0IF, el cual producir una interrupcin si es que la interrupcin del Timer 0 est
habilitada en el registro INTCON.
Para producir un tiempo determinado debemos primero considerar que el uC incrementa el registro del Timer
con una frecuencia igual a la de su oscilador dividida por 4, o lo que es lo mismo con un periodo de 4 veces el
de su clock, sin considerar el pre escalar. (En el caso de elegir usar el clock del uC con T0CS). Por ejemplo si
el oscilador del uC es de 4MHz, entonces incrementar el registro del timer TMR0 con una frecuencia de
1MHz o cada 1uS. Por lo tanto el tiempo mximo que se puede obtener sin pre escalar es de 255uS. Porque
255 es el numero mximo de TMR0.
Si queremos un tiempo, por ejemplo de 20uS entonces debemos restar 20 al valor mximo de TMR0, es decir
debemos inicializar TMR0 en 235.
El clock externo es til en el caso de que necesitemos usar como contador de eventos
externos el TMR0, por ejemplo cuando se reciban 10 pulsos de un sensor, o tambin si
queremos usar un clock ms lento que el del uC para obtener retardos ms largos.


Implementar ICSP de Microchip en nuestros proyectos.
Los protocolos de grabacin serial de los microcontroladores actuales, como el ICSP (In
Circuit Serial Programming) de Microchip fueron concebidos para programar los
microcontroladores en la aplicacin, es decir, sin retirar el microcontrolador de la
tarjeta, con ventajas evidentes sobre todo para produccin masiva.
Es por esto que los grabadores como Pickit2 de Microchip no traen un zcalo ZIF (Zero
Insertion Force).
Cuando desarrollamos prototipos necesitaremos probar el programa del
microcontrolador en protoboard. En este caso nos conviene construir un cable con un
conector Slim hembra de 6 pines en un extremo y en el otro puntas para el
protoboard.
Podemos mantener el cable conectado al protoboard mientras no lo necesitemos para
otro proyecto.



Cable conexin ICSP para conectar grabador con protoboard.


Conexin grabador a protoboard.

De todas maneras nos va a resultar ms cmodo construir este cable una sla vez, que
retirar muchas veces el microcontrolador del protoboard para grabarlo cada vez que se
necesite corregir el programa.
Adems:
es usual que queden puentes o componentes atravesados por encima del
microcontrolador. Por ejemplo el tpico condensador de 0,1uF en los pines de
alimentacin.
el cable nos permite en el futuro aprovechar la funcin de depuracin en
circuito (In Circuit Debugger) que est disponible en los microcontroladores de
rango alto y en los ms recientes de rango medio.
con el cable podemos prescindir de una fuente de alimentacin externa y usar
los 5V del USB del computador a travs del grabador para alimentar el circuito.
La aplicacin de Pickit2 tiene una casilla de verificacin para activar o desactivar
la alimentacin.
El conector del grabador tiene 6 pines. Se utilizan 5 para grabar microcontroladores y
se dej un sexto para posibles funciones auxiliares:
1. VPP Voltaje de programacin.
2. VDD Positivo de fuente de alimentacin
3. VSS Negativo de fuente de alimentacin
4. PGD Dato de programacin.
5. PGC Clock de programacin.
6. AUX Auxiliar.
Nota.
Pin 1 marcado con flecha blanca en Pickit2
Para grabar con xito nuestro microcontrolador en circuito debemos evitar que los
componentes de nuestra aplicacin, conectados a los pines que intervienen en la
grabacin interfieran con las seales de grabacin.
Para el pin VPP que se conecta al MCLR del microcontrolador basta con un circuito
Power on reset y una resistencia de 470 para aislarse de ste.
NO SE PUEDE USAR MCLR DIRECTAMENTE A +V
Las seales PGD y PGC se conectan a RB7 y RB6 respectivamente y para aislarse de la
aplicacin se puede poner resistencias en serie si la aplicacin lo permite.
En ltimo caso si no queremos complicarnos y nos sobran pines de IO dejamos RB6 y
RB7 exclusivos para ICSP.

Implementar ICSP en protoboard.



Uso de interrupciones externas de microcontroladores.

Muchos de los pulsos que deseamos leer con el microcontrolador aparecen de forma breve e inesperada. Si
bien los microcontroladores actuales pueden ejecutar instrucciones en fracciones de microsegundo, evaluar el
estado de una entrada permanentemente a travs de un loop no garantiza la lectura del evento. (ej teclados,
seales Ready de un ADC, etc.)
Para resolver este problema, los microcontroladores disponen de un mecanismo llamado interrupcin, que en
este caso seran externas, pues las hay tambin internas (timers, mdulos de comunicacin, etc.).
Los microcontroladores PIC de Microchip constan con una interrupcin externa asociada al pin RB0 y una
interrupcin on change (al cambio) que se activa al cambiar el estado de los pines RB7, RB6, RB5 y RB4.
Al producirse un cambio en un pin de entrada asociado a una interrupcin, hardware interno del
microcontrolador activa un flag. Si la interrupcin est habilitada el programa altera su flujo normal y salta
a una direccin asignada, llamada Vector de interrupcin y a partir de esa direccin est escrito el cdigo a
ejecutar al producirse la interrupcin: Rutina de servicio de interrupcin o RSI o ISR. Logrando de esta
manera atender inmediatamente un evento.
Para producir una interrupcin, el pin debe estar configurado como entrada y la interrupcin debe estar
habilitada en los registros correspondientes.
Para probar el funcionamiento de la interrupcin en el simulador de MPLAB de Microchip podemos crear un
Workbook en Debugger/ Stimulus/ New Workbook. Se abre una ventana que nos permite aplicar
distintos niveles a los pines de entrada.
Hacer click en un campo en blanco de la columna Pin/Sfr y aparece una flecha para desplegar un men,
aqu elegimos el pin que nos interesa cambiar y en la columna Action elegimos la accin que se le aplicara
al pin. Puede ser Toggle que conmuta el estado del pin.
Para activar el estmulo elegido debemos hacer click en la casilla Fire de la fila correspondiente.
Si la interrupcin esta bien configurada, el flujo del programa debe saltar al vector de interrupcin al
producirse un canto de subida o de bajada, segn cmo se configur la interrupcin.
Segn lo que se necesite hacer con el programa, a veces resulta ms conveniente no habilitar la interrupcin y
evaluar con un loop el estado del flag correspondiente a la interrupcin. A diferencia del mtodo que
explicaba al principio, de esta forma s se asegura recibir el evento, pues aunque no sea inmediatamente,
aunque el evento desaparezca, el flag de interrupcin queda activado.


Empezando con lenguaje C para microcontrolador PIC.
Primero aclaremos que a diferencia de terceras empresas, Microchip no tiene
compilador C para los microcontroladores pequeos, slo para los de gama alta como
la familia PIC18 y superiores, los cuales han sido diseados para trabajar con lenguaje
C. El compilador C18 se baja de forma gratuita de la pgina de Microchip.
Aunque el lenguaje Assembler nos permite resolver cualquier problema y debemos
primero pensar en resolverlo con Assembler, pues el microcontrolador puede ser ms
econmico, hay requerimientos que nos obligan a programar en un lenguaje de nivel
ms alto, como lenguaje C:
Evitar complejos algoritmos de aritmtica de Assembler.
Simplificacin del cdigo y disminucin del tiempo de desarrollo.
El costo de un uC PIC18F4550 de 40 pines est alrededor de $6.000(Chile).
Herramientas:
Debemos tener instalado en el computador MPLAB y el compilador C18. Ambos se
descargan de forma gratuita de la pgina de Microchip.
Primero debemos instalar MPLAB y despus C18, el cual se instala en el raz y
configurar a MPLAB para integrar C18 en MPLAB.
Haremos un ejemplo muy simple con las siguientes herramientas de desarrollo:
MPLAB versin 8.56
C18 versin 3.36
Aplicacin Microchip HID bootloader v2.6a
Tarjeta de evaluacin PICDEM FS USB con uC 18F4550.
Cable USB A a B. El de impresoras sirve.

Para quienes deseen conseguir una de mis tarjetas compatibles PICDEM FS USB:

Ver seccin "Ventas y servicios"

CARACTERSTICAS DEL MICROCONTROLADOR PIC18F4550:
40 pines
35 pines I/O.
puerto USB 2.0
4 timers
Salida PWM
ADC 10 bit y 13 canales
Arquitectura optimizada para compilador C.
32K memoria flash, 2048 SRAM, 256 EEPROM

CARACTERSTICAS TARJETA PICDEM FS USB:
Conector USB tipo B
Pulsador y LEDs incorporados en pines I/O.
Microcontrolador PIC18F4550.
Conector e interface serial RS232.
Incluye bootloader HID. (Es reconocido por PC sin necesidad de driver).
Conector ICSP
Incluye potencimetro en entrada ADC.

Debemos revisar y tener una copia de estos archivos a mano:
39632e.pdf datasheets de PIC18F4550
c18_user_guide_51288j.pdf gua de usuario de C18
p18f4550.inc definiciones de registros
Ubicados en: C:Archivos de programaMicrochipMPASM Suite
mplab_c18_getting_started_51295f.pdf
mplab-c18-libraries_51297f.pdf
hlppic18configset.chm
Ubicados en C:MCC18doc
Tambin es recomendable tener algn libro de lenguaje C ANSI aunque sea para PC,
para consultar la sintaxis, estructuras de bucles, etc.

Descargar archivos (31KB)



CREAR PROYECTO EN MPLAB:

1. Crear una carpeta con el nombre que le queramos dar a nuestro proyecto.
2. Copiar en la carpeta archivo fuente main.c disponible en link abajo.
3. Copiar en la carpeta archivo linker. Usar: rm18f4550 - hid bootload.lkr para usar
con Bootloader HID.
4. En men Project click en Project Wizard y en la siguiente ventana click en botn
Siguiente.
5. En esta ventana elegir PIC18F4550 y hacer click en siguiente.





6. En campo Active Toolsuite elegir Microchip C18 Toolsuite y hacer click en
siguiente.




7. Ahora click en Browse y abrir la carpeta que creamos anteriormente.




8. Elegir nombre de proyecto y click en Guardar.



9. En esta ventana, Step Three click en Siguiente.
10. Ahora en la ventana Step Four localizar la carpeta de nuestro proyecto y
seleccionar cada uno de los 2 archivos y agregarlos al proyecto haciendo click en
Add. Luego click en Siguiente.



11. En la ventana Sumary click en Finalizar para crear el proyecto.



12. Nos aparece un esquema de nuestro proyecto en estructura de rbol. Confirmar
que aparezcan
nuestros 2 archivos: main.c en Source files y rm18f4550 - hid bootload.lkr en
Linker script.


Si revisamos con el explorador de archivos la carpeta de nuestro proyecto, veremos
que ahora se agregaron 3 archivos ms. Estos archivos mantienen la informacin
sobre el proyecto. El que tiene extensin mcw guarda la informacin de las ventanas
abiertas y su distribucin sobre el espacio de trabajo. Posteriormente podemos abrir
nuestro proyecto con este archivo o con el de extensin mcp.
13. Ahora ya estamos en condiciones de compilar y ejecutar nuestro proyecto con
Project Build All.
Si todo est bin deberamos obtener Build Succeeded en la ventana Ouput.
Y si revisamos en este momento, con el explorador de archivos, la carpeta de nuestro
proyecto veremos que se agregaron 3 archivos ms. El que nos interesa por ahora es
el que tiene extensin hex pues es el que se cargar en el microcontrolador.
Para ver en detalle la ejecucin del programa debemos aprender a usar el simulador
de MPLAB. Ver seccin:
Uso de Simulador de MPLAB.
Es un ejemplo muy sencillo de la gua Getting started al cual se le cambi el puerto
de salida al puerto D, pues ste incorpora 4 LEDs en la tarjeta PICDEM FS USB.
El programa configura el puerto D como salida, lo resetea, y luego lo deja
permanentemente en estado alto. Pueden modificarlo ustedes posteriormente para
dejar los LEDs permanentemente apagados.


Cargar programa al microcontrolador.
Una de las caractersticas de la tarjeta de evaluacin es que ya viene con un
bootloader grabado, esto nos permite cargar el programa al microcontrolador sin
necesidad de un grabador, pues el bootloader se encarga de recibir el archivo hex a
travs del puerto USB y hacer que el microcontrolador se grabe a si mismo con el
programa de nuestra aplicacin a continuacin del espacio que ocupa el programa del
Bootloader.
E bootloader usado es el denominado HID, que es el que usa Microchip en sus ltimas
bibliotecas de aplicacin MAL (Microchip Aplication Library).
Este bootloader es declarado al sistema como un dispositivo de interfaz humana
(HID), los cuales Windows reconoce directamente sin necesidad de driver.
1. Ejecutar aplicacin HID bootloader y nos aparecer esta ventana:


La tarjeta de evaluacin PICDEM FS USB normalmente ejecuta el programa que se le
ha cargado y si mantenemos presionado uno de sus pulsadores (S2) y reseteamos
entra al modo bootloader. Al entrar a este modo ser reconocida por el sistema y por
la aplicacin Bootloader, recuerden que no necesita driver, y se habilitar el botn
Open Hex File de la aplicacin en el PC.
2. Haciendo click en botn Open Hex File podemos cargar el archivo con extensin
hex que generamos anteriormente.
3. Click en Program/Verify para cargar el microcontrolador con nuestro programa.
Confirmar que la operacin se realiz con xito en la parte informativa de la ventana
principal.
4. Presionar pulsador Reset de la tarjeta lo que hace que salga del modo bootloader
y ejecute nuestro programa. Deben encenderse los 4 LEDs que la tarjeta tiene
conectados en el Puerto D.
A continuacin analizamos el programa para que lo entienda y puedan usarlo como
plantilla y modificarlo de acuerdo a sus necesidades.

Anlisis del programa.
1. Lo que est encerrado entre /* y */ son comentarios y aparecen en MPLAB de
color gris claro:
/*Ejemplo 2 captulo "Getting started" "Light LED"
modificado para puerto D que tiene LEDs en tarjeta USB_BOARD_4550
XTAL = 20MHz
versin: 10 para bootloader HID
Modificado: 13 Agosto 2012
*/

2. // se usa para agregar comentarios desde que aparece hasta el final de la lnea:
#pragma config PLLDIV = 5 // 20 MHz crystal/5 = 4MHZ para PLL 96MHz
A veces se usan tambin para deshabilitar una lnea del programa sin borrarla:
//#pragma config CP2 = OFF

3. Los comandos #pragma config le indican al programa grabador el valor de los
distintos bytes de fusibles de configuracin que tiene el microcontrolador:
#pragma config PLLDIV = 5 // 20 MHz crystal/5 = 4MHZ para PLL 96MHz

4. Ya que el programa bootloader ocupa permanentemente un espacio al inicio de la
memoria de programa donde se encuentran los vectores de reset e interrupcin,
debemos re-direccionar estos vectores:
// (PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)
#define REMAPPED_RESET_VECTOR_ADDRESS 0x1000
extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
void _reset (void)
{
_asm goto _startup _endasm
}

5. Con void main(void) comienza nuestro programa principal. Est encerrado entre
parntesis de llaves {}


6. TRISD = 0; configura el puerto D como salida.

7. El valor que asignemos a PORTD se ver reflejado en la salida:
PORTD = 0x0f;
Con esto los 4 bits menos significativos se activan, por lo tanto los LEDs se encienden.


Uso de Simulador de MPLAB.
1. Si no vemos el cdigo fuente de nuestro programa en este momento y slo vemos
el esquema de rbol. Hacer click en el archivo con extensin .c para abrirlo.
2. Si seleccionamos Debugger/Select tool podemos ver varias herramientas de
depuracin. MPLAB SIM no requiere hardware adicional y nos permite simular en
pantalla. Elegir esta opcin.
3. Se agregar una barra con iconos que nos permiten ejecutar el programa paso a
paso, de una sla vez, saltarse funciones, salir de stas, etc.

Nota:
F5, F6, F7, F8, F9 corresponden a los conos de la barra de depuracin.

4. Teniendo abierto nuestro proyecto presionar F5 (Halt) y luego F6 (Reset) para
asegurarnos que no haya una ejecucin en progreso.
Nota:
Es necesario hacer click en la parte blanca de la ventana que contiene el cdigo para
enfocarla y luego ejecutar los comandos de depuracin.
5. Presionar F7 para ejecutar paso a paso.
Pasaremos por varias sentencias de funciones que implementan C18 y que aparecen
en una ventana separada. Nos concentraremos en llegar a la funcin main de nuestro
programa.
6. En la primera lnea despus de la llave de apertura de main podemos hacer doble
click para poner un Breakpoint, lo que nos permitir ejecutar hasta este punto de
una sla vez la prxima vez que corramos el programa desde el principio con F9.
7. Presionar F5 y F6 para resetear, luego F9 y llegaremos al Breakpoint. Luego
podemos seguir paso a paso.
8. Para ver cmo cambian los registros del microcontrolador ejecutar View/Watch:



Elegir el registro que queremos observar en la caja combo izquierda, por ejemplo para
nuestro programa Prog2, elegir PORTD y luego click en el botn Add SFR.
Ejecutemos nuevamente paso a paso observando cmo cambia el estado de PORTD.
9. Cuando cerremos el proyecto debemos guardar tambin el Work space.



Grabacin de E2PROM 93LC46 con Pickit2.

Aunque las memorias E2PROM seriales no se comunican a travs de ICSP como los
microcontroladores, de todas maneras la aplicacin de Pickit2 permite grabarlas. En el
archivo pickit 2 readme.txt (ubicado en C: ARCHIVOS DE
PROGRAMAMICROCHIPPICKIT 2 V2) se puede ver la conexin entre los pines del
grabador y los de la memoria:
PICkit 2 Pin 93LC Device Pin (DIP)
(1) VPP 1 CS
(2) Vdd 8 Vcc
(3) GND 5 Vss
(4) PGD 4 DO
(5) PGC 2 CLK
(6) AUX 3 DI
7 PE - enabled (Vdd)
6 'C' Device ORG
Set to select word size
Nota.
No se conectaron pines 6 y 7 de E2PROM pues en Datasheet se ve que son "NC".


Conexin entre Pickit2 y E2PROM 93LC46.

Tambin aparecen las conexiones para grabar memorias E2PROM de otras familias
como las:
11LC
24LC
25LC

You might also like