Tema 2




Introducción al PIC16F87x

En este tema tratamos los elementos fundamentales de los microcontroladores 16f87x.

Los microcontrolador PIC16F87x de Microchip, pertenece a una gran familia de microcontroladores de 8 bits (bus de datos) que tienen las siguientes características generales que los distinguen de otras familias:- Arquitectura Harvard- Tecnología RISC- Tecnología CMOS. Estas características se conjugan para lograr un dispositivo altamente eficiente en el uso de la memoria de datos y programa y por lo tanto en la velocidad de ejecución.Microchip ha dividido sus microcontroladores en tres grandes subfamilias de acuerdo al número de bits de su bus de instrucciones:

Subfamilia                          instrucciones                                nomenclatura
 
Base - Line   33                 instrucciones de12 bits                 PIC12XXX y PIC14XXX
Mid – Range 35                 instrucciones de 14 bits                PIC16XXX
High - End    58                 instrucciones de 16 bits                PIC17XXX y PIC18XXX


Nomenclatura

Además de lo mostrado en la tabla anterior, en el nombre específico del microcontrolador pueden aparecer algunas siglas que dependen del rango de voltaje manejado y del tipo de memoria ROM incluida, como se muestra a continuación:
  
Tipo de memoria        Rango de voltaje Estándar (4.5 a 6 volts)      Extendido (2.5 a 6 volts)

EPROM, OTP                               PIC16CXXX                                    PIC16LCXXX

ROM                                              PIC16CRXXX                                PIC16LCRXXX

Flash                                              PIC16FXXX                                   PIC16LFXXX

 Sub familia 16f87x
· Procesador de arquitectura RISC avanzada

· Juego de solo 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en un     ciclo de instrucción, menos las de salto que tardan dos.

· Hasta 8K palabras de 14 bits para la Memoria de Programa, tipo FLASH  en los modelos 16F876 y 16F877 y 4KB de memoria para los PIC 16F873 y 16F874.

· Hasta 368 Bytes de memoria de Datos RAM.

· Hasta 256 Bytes de memoria de Datos EEPROM.

· Pines de salida compatibles para el PIC 16C73/74/76/77.

· Hasta 14 fuentes de interrupción internas y externas.

· Pila de 8 niveles.

· Modos de direccionamiento directo e indirecto.

· Power-on Reset (POP).

· Temporizador Power-on (POP) y Oscilador Temporizador Start-Up.

· Perro Guardián (WDT).

· Código de protección programable.

· Modo SLEEP de bajo consumo.

· Programación serie en circuito con dos pines, solo necesita 5V para programarlo en este modo.

· Voltaje de alimentación comprendido entre 2 y 5,5 V.

· Bajo consumo: < 2 mA  para 5 V, 4 Mhz,  20 µA para 3V y <1 µA en standby.


Encapsulado PDIP de 40 pines.

Encapsulado PDIP de 28 pines. 

                                                    DISPOSITIVOS PERIFÉRICOS

· Timer0: Temporizador-contador de 8 bits con preescaler de 8 bits

· Timer1: Temporizador-contador de 16 bits con preescaler que puede incrementarse en     modo sleep de forma externa por un cristal/clock.

· Timer2: Temporizador-contador de 8 bits con preescaler y postscaler.

· Dos módulos de Captura, Comparación, PWM (Modulación de Ancho de Pulsos).

· Conversor A/D de 10 bits.

· Puerto Serie Síncrono Master (MSSP) con SPI e I2C (Master/Slave).

· USART/SCI (Universal Syncheronus Asynchronous Receiver Transmitter) con 9 bit.

· Puerto Paralelo Esclavo (PSP) solo en encapsulados con 40 pines.

Bajo el nombre de EL PIC 16F87X esta subfamilia de microcontroladores, encontramos cuatro modelos: EL PIC 16F873/4/6 y 7. Estos microcontroladores disponen de una memoria de programa FLASH de 4 a 8 KBytes de 14 bits. De los microcontroladores indicados, el 16F873 y el 16F876 son de 28 pines, mientras que 16F874 y el 16F877 tienen 40 pines, lo que les permite disponer de hasta 33 líneas de E/S. En su arquitectura además incorporan: Varios Timer, USART, Bus I2C.

Tabla comparativa de los diversos Microcontroladores de esta familia.



Diagrama de bloques.

Descripción de la CPU

La CPU es la responsable de la interpretación y ejecución de la información (instrucciones) guardada en la memoria de programa. Muchas de estas instrucciones operan sobre la memoria de datos. Para operar sobre la memoria de datos además, si se van a realizar operaciones lógicas o aritméticas, requieren usar la Unidad de Lógica y Aritmética (ALU). La ALU controla los bits de estado (Registro STATUS), los bits de este registro se alteran dependiendo del resultado de algunas instrucciones.

Ciclo de instrucción, el registro Program Counter (PC) es gobernado por el ciclo de instrucción como se muestra en la siguiente figura. Cada ciclo de instrucción la CPU lee (ciclo Fetch) la instrucción guardada en la memoria de programa apuntada por PC y al mismo tiempo ejecuta la instrucción anterior, esto debido a una cola de instrucciones que le permite ejecutar una instrucción mientras lee la próxima.



Como puede verse, cada ciclo de instrucción (Tcy = 4Tosc) se compone a su vez de cuatro ciclos del oscilador (Tosc= 1/Fosc)). Cada ciclo Q provee la sincronización para los siguientes eventos:

Q1: Decodificación de la instrucción

Q2: Lectura del dato (si lo hay)

Q3: Procesa el dato

Q4: Escribe el dato

Debido a esto cada ciclo de instrucción consume 4 ciclos de reloj, de manera que si la frecuencia de oscilación es Fosc, Tcy será 4/Fosc.

EJEMPLO

Si la frecuencia del reloj principal es de 4 MHz, un ciclo de instrucción tardará en realizarse:

T oscilación del reloj principal = 1 / F del reloj principal 1 / 4 MHz = 250 ns.

Ciclos de instrucción = T oscilación del reloj principal • 4        250 ns • 4 = 1 μs.

Si en nuestro programa tenemos unas 100 instrucciones, la ejecución completa

tardará:100 • 1μs = 100 μs 



Registros de la CPU.

Registro PC.- Registro de 13 bits que siempre apunta a la siguiente instrucción a ejecutarse.

Registro de Instrucción.- Registro de 14 bits. Todas las instrucciones se colocan en él para ser decodificadas por la CPU antes de ejecutarlas.

Registro W.- Registro de 8 bits que guarda resultados temporales de las operaciones realizadas por la ALU

Registro STATUS.- Registro de 8 bits, cada uno de sus bits (denominados Banderas) es un indicador de estado de la CPU o del resultado de la última operación como se indica a continuación:



C.- Bit de acarreo/préstamo’ de la última operación aritmética (en el caso de préstamo (resta), el bit se invierte antes de guardarse)

DC.- Acarreo/prestamo proveniente del cuarto bit menos significativo. Funciona igual que el bit C, pero para operaciones de 4 bits.

Z.- Este bit se pone (=1) para indicar que el resultado de la última operación fue cero, de lo contrario se limpia (=0)

Los señalizadores PD# y TO#, son activos por nivel bajo (#) y sirven para indicar la causa que ha provocado la reinicialización del procesador.

PD#: Se activa a 0 al ejecutarse la instrucción SLEEP. Se pone a uno automáticamente tras la conexión de alimentación o bien al ejecutarse la instrucción CLRWDT

TO#: Se activa a nivel bajo al desbordarse el perro guardián. Toma el valor 1 tras la conexión de alimentación o al ejecutarse las instrucciones CLRWDT o SLEEP.

Los PIC se resetean al conectar la alimentación (POR – Power on Reset). También se resetean cuando la tensión de alimentación baja de 4V (BOR – Brown on Reset), aunque esta función es factible desactivarla poniendo a 0 el bit BODEM, presente en la palabra de configuración, tanto en el Reset POR como en el BOR los bits PD# y TO# toman el valor 1, mientras que en los demás casos dependen de la causa que ha provocado el Reset.


Los bit RP1 (STATUS <6> y RP0 (el ESTADO <5> seleccionan cada uno de estos bancos de memoria, de acuerdo a la siguiente tabla:

RP1   RP0   Banco

0        0        Banco 0

0        1        Banco 1

1        0        Banco 2

1        1        Banco 3


IRP se usa conectado con el bit de más peso del registro FSR para elegir el banco de RAM en el direccionamiento indirecto.

Bancos de la memoria RAM


Otras características importantes de los microcontroladores Pic: 

Carácter Ortogonal, lo cual quiere decir, que cualquier  instrucción  puede  utilizar a cualquier  elemento  de  la  arquitectura  como fuente o destino.

Procesador segmentado o pipeline, oermite realizar simultáneamente la ejecución de una instrucción y la búsqueda del código de la siguiente instrucción. De esta manera se puede ejecutar una instrucción en un ciclo máquina. Cada ciclo máquina equivale a cuatro ciclos de reloj.

El circuito de reinicio, el terminal MCLR (Master Clear) debe estar a valor lógico alto para que el dispositivo funcione normalmente, esto es, sin irse a reinicio. Con un valor lógico bajo el dispositivo se reinicia, comenzando la ejecución desde el principio del programa que tenga cargado en memoria.


Lo más práctico, 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 mayoría 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 más de 80 mA que podrían bloquear el dispositivo cuando este se lleva a masa (reinicio).

Debido a que el pulsador no produce una respuesta instantánea, 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).


Estos microcontroladores permiten escoger entre cinco tipos distintos de osciladores:

    LP (Low Power): reloj de bajo consumo, estable,  hasta  200 kHz.
    XT (Xtal, Crystal): estable, frecuencia de oscilación de hasta 4 MHz.
    HS (High Speed): estable, frecuencia de oscilación de hasta 20 MHz.
  RC (Resistor/Condensador): frecuencia de oscilación dependiente de resistencia, condensador, voltaje de alimentación y temperatura de trabajo. Es el tipo más económico, pero también el más inestable.
   Externo: cuando la señal de reloj es externa, generada por otro circuito. Los modos LP, XT y HS suponen la conexión de un cristal de cuarzo o resonador cerámico entre las patitas OSC1/CLKIN y OSC2/CLKOUT del dispositivo, mientras que el modo RC y Externo solo ocupan la patita OSC1/CLKIN.



La alimentación

Los dispositivos de la familia PIC16F87X admiten un amplio rango de tensiones de alimentación, que va de 2,0 V a 5,5 V. La tensión a la cual se alimenten determinará la frecuencia máxima de trabajo.

La potencia máxima disipada es de 1 W y se calcula mediante la siguiente fórmula:

\,\!P_{disipada}=V_{DD}(I_{DD} - \Sigma I_{OH}) + \Sigma [(V_{DD} - V_{OH})I_{OH}]+ \Sigma (V_{OL} I_{OL})

donde:
  • V_{DD} es la tensión suministrada por la fuente de alimentación.
  • I_{OH} es la corriente suministrada por las salidas del PIC en estado alto.
  • I_{OL} es la corriente absorbida por las salidas del PIC en estado bajo.
  • V_{OH} es la tensión entregada por los terminales en estado alto.
  • V_{OL} es la tensión presente en los terminales en estado bajo. 
Corriente máxima absorbida y suministrada por puertas:

Corriente máxima absorbida: 80mA Puerta A y 150mA Puerta B,C,D
Corriente máxima suministrada: 50mA Puerta A y 100mA Puerta B
Corriente máxima absorbida por línea: 25mA
Corriente máxima suministrada por línea: 20mA
Voltaje de alimentación (VDD): De 2 a 6 V DC
Voltaje de grabación (VPP): De 12 a 14 VDC.

VÍDEOS:
Proyectos en MPLAB X Vídeo 1
Proyectos en MPLAB X Vídeo 2
Proyectos en MPLAB X Vídeo 3
Proyectos en MPLAB X Vídeo 4



No hay comentarios:

Publicar un comentario