Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Microcontroladores PICs
Los PIC16F87X son una familia de microcontroladores PIC es la versin mejorada del caballo de batalla PIC16F84.
Consta de los siguientes modelos que varan de acuerdo a prestaciones, cantidad de terminales y encapsulados:
PIC16F873
PIC16F874
PIC16F876
PIC16F877
Esta familia es de las que tienen memoria tipo Flash, lo que nos permite reprogramarlos las veces que sea necesario
sin necesidad de usar ningn otro dispositivo ms que el propio programador. Este aspecto es muy importante a la
hora del diseo de un dispositivo para evitar prdida de tiempo en borrar los C y volver a programarlos.
Caractersticas Principales
Las caracterisiticas principales que hacen de esta familia un poco ms potente que otras son:
Conversor Analgico/Digital de 10 bits
Set de 35 instrucciones
3 Temporizadores + Watchdog Timer o Perro Guardin
2 mdulos PWM
Protocolos de Comunicaciones USART, PSP e IC
Modelo Memoria de Programa Datos EEPROM Entradas / Canales PWM MSSP USART Comparadores
SRAM (bytes) Salidas A/D
Bytes Cant. de Palabras de SPI IC
(bytes)
instrucciones Maestro
Distribucin de Terminales
En las Figuras a continuacin se ven los distintos encapsulados en que vienen los diferentes modelos pertenecientes a
esta familia. Cada uno de esos pines o terminales tienen ms de un uso dependiendo de como se los configure
excepto los terminales VDD y VSS que son los encargados de alimentar a estos C.
Se describir como configurar cada uno de esos bloques y para qu podemos usar a cada uno. Lo interesante de estos
PIC es que si algn bloque no se utiliza este no consume potencia por lo que podemos ir prendiendo al bloque slo
en el momento de usarlo para evitar desaprovechar energa del sistema de alimentacin.
Consideraciones generales
Como fue nombrado en la introduccin, el set de instrucciones de estos C es reducido, con lo que facilita la
programacin de los mismos. Para la familia de los 16F87X existen 35 instrucciones, con las que se puede hacer lo
mismo o ms que con esos antiguos P de 105 instrucciones. Para la programacin de estos dispositivos se pueden
elegir varios lenguajes, por ejemplo ensamblador, C, etc.
Los C tienen un espacio de memoria que vara segn las familias y segn el modelo dentro de cada familia. Es all
donde se guarda el programa que creamos. Dado que el C solo interpreta lenguaje de mquina, es decir, estados
lgicos de 1 0, sera por dems de complicado programar con este lenguaje; es por eso que existe un compilador,
que transforma el ensamblador que escribimos en lenguaje entendible por el C.
Una vez compilado el programa escrito, tenemos el archivo hexadecimal con el cual se programa al C, para esto es
necesario una interfaz programadora capaz de entender los datos hexadecimales que la computadora (PC) entrega y
pasarlos al C. Para crear el ensamblador es necesario ya tener pensado y diagramado lo que necesitemos que haga el
C; para esto usaremos bosquejos de circuitos, diagramas de flujo, pseudo-cdigo, modelos matemticos, y toda
clase de observaciones relevantes para el correcto funcionamiento y desempeo del C. Una vez diagramada la
funcin del C, solo nos resta disear el circuito externo con todos los detalles y escribir el programa.
El Reloj
Los PIC 16F87X disponen de un ciclo de instruccin igual a cuatro ciclos del reloj principal, es decir que si tenemos
un programa de 1000 instrucciones y un cristal de 10 MHz. El tiempo que le demandar al C leer y ejecutar todo el
programa (asumiendo que todas las instrucciones tardan un ciclo de instruccin) es de 400 S pues:
.
Dependiendo del modelo especfico del C se tiene una frecuencia mxima de trabajo. En la familia 16F87X la
mxima frecuencia del reloj externo es de 20 MHz. es decir que el tiempo mnimo necesario para leer y ejecutar cada
instruccin es de 400 ns.
Un ciclo de instruccin equivale a 4 ciclos de reloj. Esto es porque con el primer ciclo de reloj el C busca en su
memoria a la instruccin a leer, en el segundo ciclo se carga en la memoria principal, el tercer ciclo es el encargado
de ejecutarla propiamente dicho y el ltimo y cuarto ciclo limpia la memoria para volver a buscar la siguiente
instruccin y as sucesivamente.
La alimentacin
Los C de la familia 16F87X se alimentan con 5 VCC pero con 3,5 V tambin funcionan consumiendo un poco ms
de corriente. La corriente mxima que puede circular por el terminal VDD (donde se conecta el positivo de la fuente
de 5 V) es de 250 mA y por cada salida no se debe hacer circular ms de 25 mA. Estos datos son los de la hoja de
datos de Microchip.
Dado que la capacidad de entregar corriente del C es bastante reducida, se suelen usar transistores o rels para
comandar circuitos o artefactos de potencia. La potencia que puede disipar como mximo el C es de 1 W y se
calcula mediante la siguiente formula:
donde:
es la tensin suministrada por la fuente de alimentacin.
es la corriente suministrada por las salidas del PIC en estado alto.
es la corriente absorbida por las salidas del PIC en estado bajo.
es la tensin entregada por los terminales en estado alto.
es la tensin presente en los terminales en estado bajo.
El registro W
El registro auxiliar de trabajo W (working register) es un registro de 8 bits con un espacio fsico en la memoria
principal del C. Este registro es totalmente escribible desde el exterior y se puede leer en cualquier momento ya
que se puede acceder a l desde cualquier banco de memoria. Por medio de este registro cargamos valores a los
distintos registros del C, es decir, primero se pone un valor en el registro W y luego se copia el valor del registro W
al registro que queramos. No se puede cargar un valor directamente a otro registro que no sea W.
Microcontroladores PICs 5
El registro STATUS
Como existen registros de control en los 4 bancos disponibles para los 16F87X y 2 bancos para los 16F8X, hay que
tener bien en claro que para modificarlos o asignarles algn valor hay que seleccionar el banco correspondiente.
Generalmente se trabaja en el banco 0, pero no por eso podemos decir que los otros no se utilizan. Adems el banco
0 es el predeterminado cuando se enciende el C. Cuando el C se enciende, cada registro tiene asignado un valor,
en general es el valor 0, pero no todos. Para profundizar en esto se puede consultar la tabla de valores iniciales de
registros publicada por Microchip en la hoja de datos de cada C. La descripcin especfica de cada registro se
har cuando sea necesario utilizarlo.
El registro de estado (STATUS) nos proporciona continuamente informacin mediante los bits del 0 al 2 de los
resultados de operaciones matemticas, desbordes de contadores, etc. El bit 3 est asociado con el WDT que se
comentar ms adelante. Seteando los bits 5 y 6 podemos seleccionar el banco de memoria correspondiente para
trabajar con los registros necesarios y el bit 7 se usa para establecer que parte de cada banco est seleccionado. A
Continuacin se muestra el registro STATUS de la familia 16F87X:
BTFSS f,b Lee el bit b del registro f y salta la instruccin siguiente si est en 1 1 (2 si salta)
BTFSC f,b Lee el bit b del registro f y salta la instruccin siguiente si est en 0 1 (2 si salta)
ANDWF f,d Realiza la operacin lgica AND entre el contenido del registro W con el de f 1
DECFSZ f,d Decrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero. 1 (2 si salta)
INCFSZ f,d Incrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero. 1 (2 si salta)
Microcontroladores PICs 6
IORWF f,d Realiza la operacin lgica OR entre el contenido del registro W con el de f 1
RLF f,d Rota el contenido del registro f hacia la izquierda a travs del carry bit 1
RRF f,d Rota el contenido del registro f hacia la derecha a travs del carry bit 1
SWAPF f,d Intercambia los cuatro primeros bits con los cuatro ltimos del registro f 1
XORWF f,d Realiza la operacin lgica XOR entre el contenido del registro W con el de f 1
Circuito Propuesto
Abajo se muestra el circuito completo para este ejemplo: alimentacin de 5 V entre VDD y masa, el cristal con sus
condensadores completando el circuito de reloj y el circuito de reset mejorado discutido anteriormente. A esto se le
agrega un pulsador que ser el encargado de dar la orden para encender y apagar el LED y, claro, el LED de salida
con sus resistencia limitadora.
Programa
Para crear el programa que se grabar en el PIC usaremos el MPLAB que es el entorno de desarrollo que nos ofrece
Microchip. Es recomendable leer el artculo MPLAB para aquellos que no estn familiarizados con l.
Bsicamente este sencillo ejemplo se puede modelar con el siguiente pseudo-cdigo:
repetir:
RA0 en 1?
si --> Encender LED
No --> Apagar LED
Fin Repetir
Ensamblador
Pasado el pseudo-cdigo a lenguaje ensamblador y usando las directivas del MPLAB se hace necesario crear el
siguiente archivo .asm:
LIST P=PIC16F873 ;Indica que Pic se usa
INCLUDE "P16F873.inc" ;Agrega la definicin estndar de registros
ORG 00h ;Comienza el programa en la direccin 0
Inicio bsf STATUS,5 ;Selecciona el banco 1 de memoria
movlw 00h ;Guarda en W el n 0
movwf TRISB ;Indica que el puerto B es salida
movlw 0ffh ;Guarda en W el n 255d
movwf TRISA ;Indica que el puerto A es entrada
bcf STATUS,5 ;Selecciona el banco 0 de memoria
Comienzo btfsc PORTA,0 ;Testeo RA0
goto enciende ;Si est en 1 salta a enciende
goto apaga ;Si est en 0 salta a apaga
apaga bcf PORTB,7 ;Pone un 0 en RB7
goto Comienzo ;Salta a Comienzo
enciende bsf PORTB,7 ;Pone un 1 en RB7
goto Comienzo ;Salta a Comienzo
end ;Fin del programa
Microcontroladores PICs 8
Comentarios al Programa
Es fcil deducir que el smbolo ; nos deja escribir comentarios, es decir el compilador no lee los caracteres
ingresados despus de este. Inicio, Comienzo, apaga y prende son etiquetas que nos ayudan a identificar una
direccin de memoria de programa. Estas tampoco son tenidas en cuenta por el compilador y se reemplazan por la
direccin de memoria correspondiente.
Adems se pueden observar las directivas comentadas, instrucciones, literales, configuracin de registros, etc. Por
ejemplo, la directiva INCLUDE tal como est usada pega en nuestro programa la definicin estndar de las
direcciones de cada registro del PIC.
Lenguaje de Mquina
Al compilar el .asm obtenemos varios archivos, uno de ellos y el ms importante es el que se grabgar en el PIC que
contiene todas las instrucciones y directivas traducidas al lenguaje de mquina. Para este ejemplo el archivo .hex que
grabaremos en el pic es:
:020000040000FA
:10000000831600308600FF308500831205180B2808
:0A0010000928061006280614062829
:00000001FF
Palabra de Configuracin
Todos los modelos de C de Microchip tienen un registro especial llamado CONFIGURATION WORD (palabra
de configuracin). Es un registro donde se eligen algunas condiciones de funcionamiento iniciales, para que el
propio PIC sepa como ser usado. Es un registro cuya cantidad de bits es fija, 14 bits, pero solamente tenemos
acceso a algunos de ellos y depende del modelo de PIC que estemos usando. Para los 16F87X existen 11 bits
configurables en este registro.
Existen dos formas de configurar estos bits. Una de ellas es desde el MPLAB mediante la opcin
CONFIGURATION BITS del men CONFIGURE. La otra forma es mediante la directiva _ _CONFIG donde se
especifica, a modo de argumentos, como queremos setear los bits correspondientes.
Conversores Analgicos-Digital
Con lo cual, por ejemplo, si la tensin de referencia positiva (Vref+) es de 5 V y la tensin de referencia negativa
(Vref -) es tierra, la resolucin por cada bit es de 4,8 mV por cada bit. Este caso es cuando no se aplica una
referencia externa, ya que el C pone automticamente la referencia en la tensin de alimentacin. Una vez realizada
la conversin, obtendremos un valor binario 0000000000 para 0 V y un valor binario 1111111111 para 5 V.
Conversin Terminada
El tiempo que le toma al C realizar la conversin se denomina y nunca debe ser menor que 1,6 s para la
familia 16F87X. el tiempo es configurado por software segn la relacin donde K es el
divisor de la frecuencia del conversor. Por ejemplo, si trabajamos con = 1s y en los bits 7 y 6 del registro
ADCON0 ponemos 00,quedar: lo cual est dentro del rango permitido.
Una vez terminada la conversin, el resultado se almacena en los registros ADRESH y ADRESL segn estn
configurados en el bit 7 del registro ADCON1. La "justificacin" a la derecha o izquierda es sencilla de comprender;
se trata de guardar el resultado de 10 bits en dos registros de 8 bits c/u, sea que se elegir si se quieren los 8
primeros bits en el ADRESL y los dos restantes en el ADRESH o viceversa.
Generalmente la eleccin de la justificacin est directamente emparentada con la resolucin que queremos leer, es
decir, si se quiere conectar un potencimetro y segn la tensin aumentar o disminuir el tiempo de parpadeo de un
led, se puede justificar a la izquierda y leer como resultado de la conversin solo los 8 bits del ADRESH y descartar
o despreciar los dos bits de menor peso significativo que se guardarn en el ADRESL, la figura de la derecha facilita
el entendimiento de la justificacin derecha o izquierda.
Microcontroladores PICs 10
Referencias
ANGULO USATEGUI, JOS MARA (2006), MICROCONTROLADORES PIC. DISEO PRACTICO DE
APLICACIONES, EDITORIAL MCGRAW-HILL. ISBN 978-84-481-4627-6.
Enlaces externos
Pgina Oficial de Microchip [1]
Hoja de Datos de la familia 16F87X (Datasheet) [2]
Grupo de discusin de habla-hispana de Microcontroladores PICs [3]
Placa entrenadora Open Source para PIC16F87X de 40 pines [4]
Referencias
[1] http:/ / www. microchip. com
[2] http:/ / ww1. microchip. com/ downloads/ en/ DeviceDoc/ 39582b. pdf
[3] http:/ / ar. groups. yahoo. com/ group/ PicListLatina/
[4] http:/ / www. ucontrol. com. ar/ wiki/ index. php/ PIC_TRAINER_40
Fuentes y contribuyentes del artculo 11
Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
//creativecommons.org/licenses/by-sa/3.0/