Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
De Wikipedia, la enciclopedia libre Saltar a navegacin, bsqueda Los PIC16F87X forman una subfamilia de microcontroladores PIC (Peripheral Interface Controller) de gama media de 8 bits, fabricados por Microchip Technology Inc.. Cuentan con memoria de programa de tipo EEPROM Flash mejorada, lo que permite programarlos fcilmente usando un dispositivo programador de PIC. Esta caracterstica facilita sustancialmente el diseo de proyectos, minimizando el tiempo empleado en programar los microcontroladores (C). Esta subfamilia consta de los siguientes modelos que varan de acuerdo a prestaciones, cantidad de terminales y encapsulados:
y y y y y y y
La "A" final de los modelos PIC16F873A, PIC16F874A, PIC16F876A y PIC16F877A indica que estos modelos cuentan con mdulos de comparacin analgicos.1 El hecho de que se clasifiquen como microcontroladores (MCU) de 8 bits hace referencia a la longitud de los datos que manejan las instrucciones, y que se corresponde con el tamao del bus de datos y el de los registros de la CPU. Se trata de versiones mejoradas del caballo de batalla PIC16F84, muy empleado en proyectos sencillos, de educacin y de entrenamiento.
Contenido
[ocultar]
y y y y
1 Caractersticas principales o 1.1 Detalles segn modelo 2 Tipos de encapsulado y nmero de terminales 3 Estructura interna 4 Circuitera externa auxiliar o 4.1 La alimentacin o 4.2 El reloj
y y y y y y
y y
y y y y
o 4.3 El circuito de reinicio 5 Memoria interna o 5.1 Memoria de datos SRAM 6 Registros de funciones especiales (SFR) o 6.1 El registro STATUS 7 El registro W 8 Set de instrucciones y sintaxis o 8.1 Tabla resumen de instrucciones 9 Registro de configuracin 10 El conversor analgico-digital o 10.1 Controlando el conversor A/D o 10.2 Conversin Terminada o 10.3 Pasos necesarios para la conversin A/D 11 Acerca de la programacin de los dispositivos 12 Ejemplo sencillo: encender y apagar un LED o 12.1 Circuito elctrico o 12.2 Programa 12.2.1 Ensamblador 12.2.2 Lenguaje mquina 13 Referencias 14 Bibliografa 15 Vase tambin 16 Enlaces externos
CPU de arquitectura RISC (Reduced Instruction Set Computer).1 Set de 35 instrucciones.1 Frecuencia de reloj de hasta 20MHz (ciclo de instruccin de 200ns).1 Todas las instrucciones se ejecutan en un nico ciclo de instruccin, excepto las de salto.1 Hasta 8K x 14 palabras de Memoria de Programa FLASH (ver tabla a continuacin).1 Hasta 368 x 8 bytes de Memoria de Datos tipo RAM (ver tabla a continuacin).1 Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM (ver tabla a continuacin).1 Hasta 15 fuentes de Interrupcin posibles.1 8 niveles de profundidad en la Pila hardware.1 Modo de bajo consumo (Sleep).1 Tipo de oscilador seleccionable (RC, HS, XT, LP y externo).2 Rango de voltage de operacin desde 2,0V a 5,5V.3 4 5 Conversor Analgico/Digital de 10 bits multicanal.1 3 Temporizadores.1
y y y y y
Watchdog Timer o Perro Guardin.1 2 mdulos de captura/comparacin/PWM.1 Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter).1 Puerto Paralelo Esclavo de 8 bits (PSP).1 Puerto Serie Sncrono (SSP) con SPI e IC.1
Modelo
IC Maestr No No S S S S S
22 33 22 22 33 22 33
5 8 5 5 8 5 8
1 1 1 2 2 2 2
No No S S S S S
En los encapsulados de 28 patitas no est implementado el Puerto Paralelo Esclavo (PSP). Muchas de las patitas o terminales de estos dispositivos, como suele ocurrir en la mayoria de microcontroladores, tienen ms de una funcin (multiplexacin), dependiendo de cmo se configuren internamente por software. Los terminales VDD (tensin) y VSS (masa) sirven nicamente para alimentar al dispositivo.
El circuito de reinicio.
[editar] La alimentacin
Los dispositivos de la familia PIC16F87X admiten un amplio rango de tensiones de alimentacin, que va de 2,0 V a 5,5 V. La tensin a la cual se alimenten determinar la frecuencia mxima de trabajo. La potencia mxima disipada es de 1 W y se calcula mediante la siguiente formula:
donde:
y y y y y
VDD es la tensin suministrada por la fuente de alimentacin. IOH es la corriente suministrada por las salidas del PIC en estado alto. IOL es la corriente absorbida por las salidas del PIC en estado bajo. VOH es la tensin entregada por los terminales en estado alto. VOL es la tensin presente en los terminales en estado bajo.
[editar] El reloj
El reloj u oscilador se utiliza para generar la base de tiempo del microcontrolador. Para la conexin del oscilador se emplean los terminales OSC1 y OSC2 del dispositivo. Los microcontroladores PIC16F87X emplean por cada ciclo de instruccin cuatro ciclos de reloj. Esto significa que por ejemplo, si el microcontrolador debe ejecutar un programa de 1000 instrucciones con un reloj de 10 MHz (periodo de reloj de 100 ns), el tiempo total que emplear para ejecutar todo el programa (asumiendo que todas las instrucciones fueran de un ciclo de instruccin) ser de:
La serie PIC16F87X puede trabajar a una frecuencia de reloj mxima de 20 MHz. Esto quiere decir que, a esta frecuencia, el tiempo necesario para ejecutar las instrucciones de un ciclo de instruccin es de 200 ns, y de 400 ns para las de dos ciclos de instruccin (instrucciones de salto). La seal de reloj puede generarse mediante una red resistencia-condensador, un cristal de cuarzo piezoelctrico o un resonador cermico, aunque empleando cristales de cuarzo se consiguen frecuencias de oscilacin muy exactas, lo cual es til para calcular tiempos de ejecucin, temporizaciones precisas, etc. Estos microprocesadores permiten escoger entre cinco tipos distintos de osciladores:
y y y y
LP (Low Power): reloj de bajo consumo, estable, con frecuencia de oscilacin de hasta 200 kHz. XT (Xtal, Crystal): estable, frecuencia de oscilacin de hasta 4 MHz. HS (High Speed): estable, frecuencia de oscilacin de hasta 20 MHz. RC (Resistor/Condensador): frecuencia de oscilacin dependiente de resistencia, condensador, voltaje de alimentacin y temperatura de trabajo. Es el tipo ms econmico, pero tambin el ms inestable. Externo: cuando la seal de reloj es externa, generada por otro circuito.
Los modos LP, XT y HS suponen la conexin de un cristal de cuarzo o resonador cermico entre las patitas OSC1/CLKIN y OSC2/CLKOUT del dispositivo, mientras que el modo RC y Externo solo ocupan la patita OSC1/CLKIN.
Lo ms prctico, para facilitar el hecho de poder realizar un reinicio manual, es utilizar un pulsador (pulsador de reinicio), similar al que se puede encontrar en la mayora de ordenadores. El fabricante recomienda que se intercale una resistencia de 50 a 100 ohmios entre el pulsador y la patita MCLR, para evitar posibles corrientes inducidas de ms de 80 mA que podran bloquear el dispositivo cuando este se lleva a masa (reinicio).3 Debido a que el pulsador no produce una respuesta instantnea, producto de los rebotes de ste (transitorio), se generan una serie de pulsos hasta quedar estabilizado en su estado permanente. Para evitar esto se puede usar un condensador instalado en paralelo con la entrada MCLR (filtro pasa bajo). Tambin resulta muy efectivo el uso de un filtro pasa alto para hacer la seal de reinicio independiente del tiempo en que se presiona el pulsador. Inmediatamente despus de pulsar el pulsador el C se reinicia, sin tener en cuenta cunto tiempo se mantiene presionado dicho pulsador. Estas tcnicas de reinicio son muy efectivas, pero no son las nicas. Existe infinidad de circuitos y posibilidades para provocar el reinicio externo en los microcontroladores, adecundose cada solucin a la necesidad o al criterio de diseo del circuito y su funcin especifica.
Memoria de programa EEPROM Flash: es el lugar fsico donde se guarda el programa de usuario. Es de tipo no voltil. Memoria de datos SRAM: es el lugar fsico donde se guardan datos. Es de tipo voltil. Memoria de datos EEPROM: es el lugar fsico donde se guardan datos. Es de tipo no voltil.
Todos los microcontroladores cuentan con registros internos que permiten controlar y supervisar las funciones y recursos disponibles del dispositivo. Los registros de los microcontroladores PIC se encuentran en un espacio especial de la memoria de datos, el SFR (Special Function Registers). En los dispositivos PIC16F87X estos registros son de 8 bits, la mayora de lectura y escritura. Se puede acceder a dichos bits de manera individual, o bien a todo el registro a la vez. Determinados pares de registros tienen funciones especiales para las cuales se pueden considerar unidos en un nico registro de 16 bits, aunque fsicamente siguen estando separados.
[editar] El registro W
El registro de trabajo W (Working Register) es un registro relevante especial de 8 bits que participa en la mayora de instrucciones. A diferencia de los SFR, se encuentra dentro de la misma CPU, y puede ser accedido tanto para lectura como para escritura.
Instrucciones de carga. Instrucciones de bits. Instrucciones aritmticas. Instrucciones lgicas. Instrucciones de salto. Instrucciones de manejo de subrutinas. Instrucciones especiales.
Sintaxis
Descripcin
Instrucciones de carga CLRF f CLRW MOVF f,d MOVWF f MOVLW k Borra el contenido del registro f Borra el contenido del registro W Mueve el contenido del registro f Mueve el contenido del registro W al registro f Guarda en el registro W el valor k
Instrucciones de bit BCF f,b BSF f,b Pone en "0" el bit b del registro f Pone en "1" el bit b del registro f
Instrucciones aritmticas ADDLW k ADDWF f,d DECF f,d INCF f,d SUBLW k SUBWF f,d Suma el valor k al registro W Suma el contenido del registro W con el de f Decrementa en una unidad el contenido del registro f Incrementa en una unidad el contenido del registro f Resta el valor k al registro W Resta el contenido del registro W al registro f
Instrucciones lgicas
ANDLW k ANDWF f,d COMF f,d IORLW k IORWF f,d RLF f,d RRF f,d SWAPF f,d XORLW XORWF f,d
Realiza la operacin lgica AND entre el valor k y el registro W Realiza la operacin lgica AND entre el contenido del registro W y el de f Niega el valor del registro f Realiza la operacin lgica OR entre el valor k y el registro W Realiza la operacin lgica OR entre el contenido del registro W y el de f Rota el contenido del registro f hacia la izquierda a travs del carry bit Rota el contenido del registro f hacia la derecha a travs del carry bit Intercambia los cuatro primeros bits con los cuatro ltimos del registro f Realiza la operacin lgica XOR entre el valor k y el registro W Realiza la operacin lgica XOR entre el contenido del registro W con el de f
Instrucciones de salto BTFSC f,b BTFSS f,b DECFSZ f,d INCFSZ f,d GOTO k Lee el bit b del registro f y salta la instruccin siguiente si est en 0 Lee el bit b del registro f y salta la instruccin siguiente si est en 1 Decrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero Incrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero Salto incondicional a la etiqueta k
Instrucciones de manejo de subrutinas CALL k RETFIE RETLW RETURN Llamada a la subrutina k Retorno de una interrupcin Retorno de una subrutina con el valor k en el registro W Retorno de una subrutina
Instrucciones especiales CLRWDT NOP SLEEP Borra el temporizador del Watchdog No realiza ninguna operacin (pero consume tiempo de ejecucin) Se pone el PIC en estado de reposo (dormido)
Si d = 0, el resultado de la operacin se guarda en W. Si d = 1, el resultado de la operacin se guarda en el registro f. Es el valor por defecto.
Proteccin de memoria de programa. Uso del modo de depuracin en circuito. Permiso de escritura en memoria Flash. Proteccin de memoria EEPROM de datos. Uso de programacin en modo de bajo voltaje. Uso de reinicio por cada de tensin. Uso del temporizador de conexin de alimentacin. Uso del Watchdog. Tipo de oscilador empleado.
Existen dos formas de configurar estos bits: una de ellas es desde MPLAB, mediante la opcin Configuration bits del men configure. La otra es mediante la directiva _ _CONFIG dentro del programa ensamblador.
analgica. Si es menor se incrementa el registro y se vuelve a comparar. As hasta que el valor del registro sea lo ms aproximado posible (pero sin pasarse) a la entrada analgica. El rango de voltaje aceptado para la conversin de la seal analgica es de 0 V a 5 V. Si se tiene que trabajar con una seal de mayor voltaje, basta con poner a la entrada del conversor un divisor de tensin correctamente calculado o bien trabajar con alguna tensin de referencia externa al C. La resolucin de la conversin es funcin de la tensin de referencia externa (en caso de que la hubiere) y viene dada por:
Si no existe referencia externa, el microcontrolador toma como valores de referencia Vref+ = VDD y Vref- = GND (valores de alimentacin del dispositivo). Por ejemplo, si la tensin de referencia positiva (Vref+) es de 5 V y la tensin de referencia negativa (Vref-) es de 0 V, la resolucin es de 4,8 mV por cada bit. Una vez realizada la conversin, se obtienen un valor binario 0000000000 para 0 V y un valor binario 1111111111 para 5 V.
Como la resolucin del convertidor A/D es de 10 bits y los registros del C son de 8 bits, se utilizan dos registros, ADRESL y ADRESH (AD Result Low y AD Result High), de forma concatenada. Es decir, los 8 bits de ADRESL y 2 bits de ADRESH. Los registros ADCON0 y ADCON1 permiten controlar, configurar y poner en marcha al conversor. Los bits 6 y 7 del registro ADCON0 sirven para ajustar la frecuencia del oscilador del conversor, que est ligada directamente con la frecuencia de oscilacin del C. Los bits 3,4 y 5 sirven para elegir el canal de conversin. El bit 2 sirve para iniciar la conversin. Debe ponerse en nivel lgico alto (1) para comenzar el proceso de conversin. Automticamente, este bit pasar a nivel lgico bajo (0) cuando la conversin haya finalizado. El bit 1 no se usa. El bit 0 sirve para activar el mdulo de conversin. Si este bit est a nivel lgico bajo, el mdulo de conversin estar deshabilitado.
El registro ADCON1 es el encargado de definir qu patita del C usaremos como entrada analgica. Esto es muy til cuando, por ejemplo, se usa un mismo terminal del C como salida/entrada digital y en un determinado momento se quiere que ese mismo terminal lea un voltaje analgico externo. Este registro tambin es el responsable de la seleccin de la justificacin del resultado de la conversin (bit 7) y de configurar cual/es sern los terminales donde aplicaremos la tensin de referencia en caso de necesitarla.
Se agrega un pulsador conectado a la patita RA0 (entrada) y un LED con su resistencia limitadora conectado a la patita RB7 (salida).
[editar] Programa
Para crear el programa que se grabar en el PIC se puede usar MPLAB, que es el entorno de desarrollo gratuito ofrecido por el fabribante Microchip Technology Inc. Bsicamente este sencillo ejemplo se puede modelar con el siguiente pseudocdigo:
Inicio programa Repetir: RA0 = 1? Si --> Encender LED No --> Apagar LED Fin Repetir Fin programa
[editar] Ensamblador Empleando MPLAB, se genera el programa en lenguaje ensamblador a partir del pseudocdigo anterior. El archivo generado deber tener la extensin ".asm":
LIST P=PIC16F873 INCLUDE "P16F873.inc" estndar de registros ORG 00h la direccin 00h Inicio bsf STATUS,5 memoria movlw 00h movwf TRISB salida movlw 0ffh movwf TRISA entrada bcf STATUS,5 memoria Comienzo btfsc PORTA,0 RA0 goto Enciende "Enciende" goto Apaga "Apaga" Apaga bcf PORTB,0 goto Comienzo Enciende bsf PORTB,0 goto Comienzo end ;Indica que Pic se usa ;Agrega la definicin ;Comienza el programa en ;Selecciona el banco 1 de ;Guarda en W el n 0 ;Indica que el puerto B es ;Guarda en W el n 255d ;Indica que el puerto A es ;Selecciona el banco 0 de ;Comprueba el estado de ;Si est en 1 salta a ;Si est en 0 salta a ;Pone un ;Salta a ;Pone un ;Salta a ;Fin del 0 en RB7 Comienzo 1 en RB7 Comienzo programa
El smbolo ; permite escribir comentarios en el programa. Inicio, Comienzo, Apaga y Enciende son etiquetas que ayudan a identificar una direccin de memoria del programa. stas se reemplazan por la direccin de memoria correspondiente. En el programa se pueden observar las directivas comentadas, instrucciones, literales, configuracin de registros, etc. [editar] Lenguaje mquina Al compilar el archivo ".asm" creado se obtienen varios archivos. Uno de ellos, con extensin ".hex", es el que se grabar en el PIC, y contiene todas las instrucciones traducidas al lenguaje mquina del microcontrolador. El archivo ".hex" obtenido es el siguiente:
:020000040000FA :10000000831600308600FF308500831205180B2808 :0A0010000928061006280614062829 :00000001FF