viernes, 15 de febrero de 2013

PIC 16F877


Principales características del Pic 16F877
  • Procesador de arquitectura RISC (Reduced Instruction Set Computer) avanzada.
  • Juego de 35 palabras de instrucción a aprender.
  • Velocidad de operación: Frecuencia de entrada 20 Mhz, ciclos de instrucción de 200ns.
  • Hasta 8K en palabras de 14 bits para la memoria tipo flash.
  • Hasta 368 Bytes de memoria de datos RAM.
  • Hasta 256 Bytes de memoria datos EEPROM
  • Capacidad de interrupción de hasta 14 fuentes internas y externas
  • Power on reset
  • Power-up Timer (PWRT) y Oscillator Start-up Timer (OST)
  • Compatible modo SLeep
  • Protección de código Programable
  • Voltaje de operación entre 2.0 y 5.5 voltios
  • Corriente máxima 25 mA.
  • Bajo consumo 
Características periféricas
  • Timer0: temporizador / contador 8-bit  con prescaler de 8-bits
  • Timer1:  temporizador / contador 16-bit con prescaler
  • Timer2: temporizador / contador con periodos de registro de 8-bits, preescaler y postscaler.
  • Dos módulos de captura PWM 
  • Conversor analógico digital multicanal de 10 bits
  • Universal síncrono y asíncrono Transmisor Receptor(USART/SCI) con 9 bits de dirección detección.
  • Puerto paralelo esclavo(PSP) con ancho de 8 bits, con controles externos RD,WR y CS.
  • Brown-out

Detallado de Pines

OSC1/CLKIN(9): corresponde a la entrada para el oscilador externo.
OSC2/CLKOUT(10): es la salida del oscilador.

MCLR/VPP/THV(1): MCLR, corresponde al reset del microcontrolador por hardware, tambien se utiliza como pulso para comenzar a grabar en el dispositivo.
RA0/AN0(2): Actúa como Pin digital I/O o como entrada analógica del conversor AD (canal 0)
RA1/AN1(3): Actúa como Pin digital  I/O o como entrada analógica del conversor AD (canal 1)
RA2/AN2/VREF-(4): Actúa como Pin digital I/O,  como entrada analógica del conversor AD (canal 2) o como entrada negativa de voltaje de referencia.
RA3/AN3/VREF+(5): Actúa como Pin digital I/O,  como entrada analógica del conversor AD (canal 3) o como entrada positiva de voltaje de referencia.
RA4/T0CKI (6): Actúa como Pin digital I/O,  o entrada de reloj del timer0
RA5/SS/AN4(7): Actúa como Pin digital I/O, o selección como esclavo SS.

RB0/INT(21):Corresponde al pin 0 del puerto B, es bidireccional y también se puede utilizar como interrupción externa.
RB1(22): pin 1 del puerto B, es bidireccional.
RB2(23): pin 2 del puerto B, es bidireccional.
RB3/PGM(24): pin 3 del puerto B, es bidireccional o entrada de bajo voltaje.
RB4(25): pin 4 del puerto B, es bidireccional.
RB5(26): pin 5 del puerto B, es bidireccional.
RB6/PGC(27): pin 6 del puerto B, es bidireccional, también puede programarse como petición de interrupción cuando el pin cambia de estado.
RB7/PGD(28): pin 7 del puerto B, es bidireccional, también puede programarse como petición de interrupción cuando el pin cambia de estado.


RC0/T1OSO/T1CKI(11): Actúa como Pin digital I/O del puerto C, salida del oscilador del timer1 o como clock de entrada del timer1. 
RC1/T1OSI/CCP2(12): Actúa como Pin digital I/O del puerto C, entrada del oscilador del timer1 o entrada al modo captura CCP2, tambien proporciona salida PWM 2. 
RC2/CCP1(13): Actúa como Pin digital I/O del puerto C o entrada al modo captura CCP1, tambien proporciona salida PWM 1. 
RC3/SCK/SCL(14): Actúa como Pin digital I/O del puerto C, entrada de reloj SCL/SCK o salida de los módulos SPI e I2c.
RC4/SDI/SDA(15): Actúa como Pin digital I/O del puerto C, entrada de reloj SCL/SCK o salida de los módulos SPI e I2c.
RC5/SDO(16): Pin digital I/O del puerto C o salida digital en modo SPI.
RC6/TX/CK(17): Pin digital I/O del puerto C , pin de transmisión Tx USART o reloj síncrono.   
RC7/RX/DT(18): Pin digital I/O del puerto C , pin de recepción Rx USART o datos síncronos. 

RD0/PSP0-RD7/PSP7(19-22, 27-30): Puede actuar como I/O o como líneas para la transferencia de datos en la comunicación por puerta paralela esclava. 
RE0/!RD/AN5(8): Pin digital I/O del puerto E, señal de lectura para la puerta paralela esclava o entrada analógica canal 5.
RE1/!WR/AN6(9): Pin digital I/O del puerto E, señal de escritura para la puerta paralela esclava o entrada analógica canal 6.
RE2/CS#/AN7: Pin digital I/O del puerto E, activación/desactivación puerta paralela esclava o entrada analógica canal 7.

VSS(8,19): Gnd
VDD(20,32): +5vdc


Arquitectura interna del Pic

Se distinguen dos tipos de arquitecturas para los dispositivos RISC, las cuales se diferencian en la forma de conexión de la memoria al procesador y en los buses que necesitan.

La arquitectura  de Von Newman, que es la utilizada para los Microprocesadores, por lo general que disponemos en nuestros Pc's. Como se puede apreciar solo hay un Bus de datos, de direcciones y control.



La arquitectura de Harvard, es la  mas empleada en los ordenadores mas potentes y en los microcontroladores. En este caso ademas del procesador, cada tipo de memoria tiene un bus de datos, uno de direcciones y uno de control.
La ventaja principal que tiene esta arquitectura frente a la de Von Newman es que se permite adecuar el tamaño de los Buses a las carácteristicas de cada tipo de memoria, y ademas el procesador puede acceder a cada una de ellas de forma simultánea, aumentando la velocidad de procesado de datos.
La desventaja como se puede apreciar en la imagen, es que consume muchas mas líneas. Pero en el caso de los microcontroladores como se encuentra en el mismo encapsulado que el procesador, esto no supone un problema, por lo que es la arquitectura mas utilizada en estos.


Estructura Interna del Pic 16F877

En el Datasheet del dispositivo podemos encontrar un diagrama de bloques que nos explica la estructura interna del Pic.
Como se puede apreciar en la imagen, el Pic esta compuesto por una cantidad de elementos como la memoria de programa, memoria de datos, procesador, contadores(Timers), periféricos(puertos)...


Analizándola de un punto de vista mas detallado podemos observar las siguientes características:

Si comenzamos observando la parte superior del diagrama de bloques nos encontramos con:
La memoria de programa(Flash): con una capacidad de 8K en posiciones de 14 bits.
La Ram: con una capacidad de 368 bytes en posiciones por 8 bits.
La memoria EEPROM: cuenta con 256 bytes en posiciones por 8 bits también.
Program Counter: es el contador de programa o registro que nos indica la dirección de la instrucción a ejecutar.
Se puede apreciar también 8 niveles de Stack anidados en 13 bits.
ALU: El procesador está formado por la Unidad de Aritmética Lógica(ALU) que multiplexa los datos en el regsitro W. 
Justo a su lado contamos un registro de instrucción, que se carga cada vez que la ALU solicita una nueva instrucción a procesar. 
Los "Status Reg": son los registros encargados de anotar el estado actual del sistema cada vez que se producen cambios.
El FSR: controla el direccionamiento de la RAM.
Periféricos: Dentro de los periféricos nos encontramos.
A la derecha los puertos I/O(PORTA, PORTB, PORTC)
Abajo del diagrama de bloques el resto de periféricos: Timer0, Timer1, Timer2, Conversor analógico-digital 10 bits, EEPROM, CCP1/2, Puerto serie síncrono, USART.

Organización de la memoria

La memoria se divide en memoria de datos y memoria de programa.

Memoria de datos

A su vez podemos decir que la memoria de datos se divide en:

SFR: También llamada Special Function Register o registros de propósito especial, los cuales ayudan a configurar el hardware interno y ademas sirven para escribir o leer valores en los diferentes componentes que constituyen nuestro Pic. Por ejemplo la función TRIS nos permite configurar el modo de trabajo de las lineas del puerto a que nos refiramos(TRISA,TRISB,..)

GFR: En ingles General Function Register o registros de propósito general, son posiciones de memoria que podemos usar para almacenar valores que almacenan nuestros programas. 

La memoria de datos se divide en cuatro bancos, de las cuales las posiciones altas se reservan para los GFR y las bajas para los SFR. Cada banco comprende hasta 7Fh(128 bytes)

En la siguiente imagen podemos observar el mapa de registros.


Memoria de Programa
La memoria de programa se almacena en la memoria Flash.
El Pic 16F877 tiene un contador de programa capaz de direccionarse en 8K, por 14 espacios de memoria de programa. Es decir estos dispositivos tienen 8K por 14 palabras de memoria de programa Flash.
En la siguiente imagen se puede apreciar el mapa de la memoria de programa.


Ciclo máquina

En lla mayoría de los Pic un ciclo máquina está constituido por 4 ciclos de reloj, y la mayoría de instrucciones se ejecutan en un solo ciclo máquina(4 ciclos de reloj).

¿Pero que es un ciclo máquina?
Podemos decir que el ciclo máquina es el tiempo mínimo necesario para ejecutar una instrucción y esta formado por un número determinado de ciclos o periodos de reloj.

En el caso del Pic 16F877 si observamos su datasheet podemos apreciar que la ejecución de la mayoría de los registros o instrucciones se realiza en 1 solo ciclo máquina.





No hay comentarios:

Publicar un comentario