PRACTICA DEL PIC16F84A EN UN PROTOBOARD
(CONTADOR)
INTRODUCCION:
Esta práctica consiste de un contador de números: Hexadecimal, Decimal (255) y Binario programado en un PIC 16F84A el cual se observara en una pantalla LCD en un Protoboard, el cual a través de un botón al darle click se reiniciará el conteo y si se mantiene presionado se pausa, el Protoboard lo alimentamos de la corriente eléctrica a través de un cargador de 4.5 Volteos. Todo esto se explicara más detallado a continuación.
MATERIALES:
1) 1 Protoboard
2) 1 PIC 16F84A
3) 1 Display de Cristal Líquido
4) 2 Ides (16 patitas)
5) Oscilador de Cristal de 4Mhz (megahertz)
6) 2 Capacitadores Cerámicos de 22pf (picofaralios)
7) 1 Led de cualquier color
8) Alambre estañado (1 metro)
9) 3 Resistencias de 1on
10) Tubo de Estaño para soldar
11) Cautin
12) Grasa Residual para quitar los Residuos de Estaño en el Cautin
13) Fuente de Alimentación de 4.5V (volteos)
SOFTWARE:
v Proteus
v MPLAB
INFORMACION NECESARIA:
Características del PIC16F84:
Se trata de uno de los micro controladores más populares del mercado actual, ideal para principiantes, debido a su arquitectura de 8 bits, 18 pines, y un set de instrucciones RISC muy amigable para memorizar y fácil de entender, internamente consta de: - Memoria Flash de programa (1K x 14).
- Memoria EEPROM de datos (64 x 8).
- Memoria RAM (68 registros x 8).
- Un temporizador/contador (timer de 8 bits).
- Un divisor de frecuencia.
- Varios puertos de entrada-salida (13 pines en dos puertos, 5 pines el puerto A y 8 pines el puerto B).
Otras características son:
- Manejo de interrupciones (de 4 fuentes).
- Perro guardián (watchdog).
- Bajo consumo.
- Frecuencia de reloj externa máxima 10MHz. (Hasta 20MHz en nuevas versiones). La frecuencia de reloj interna es un cuarto de la externa, lo que significa que con un reloj de 20Mhz, el reloj interno sería de 5Mhz y así pues se ejecutan 5 Millones de Instrucciones por Segundo (5 MIPS)
- No posee conversores analógicos-digital ni digital-analógicos.
- Pipe-line de 2 etapas, 1 para búsqueda de instrucción y otra para la ejecución de la instrucción (los saltos ocupan un ciclo más).
- Repertorio de instrucciones reducido (RISC), con tan solo 30 instrucciones distintas.
- 4 tipos distintos de instrucciones, orientadas a byte, orientadas a bit, operación entre registros, de salto.
PIC 16F84A
Para la visualización del conteo se empleará un display de cristal líquido (LCD) de 2 líneas por 16 caracteres (ks0066u), el cual será conectado a la salida del puerto B del PIC16F84A para enviarle a éste los datos a visualizar, siendo éstos los equivalentes a números decimales de la palabra digital obtenida del ADC y por el puerto A se enviarán las señales para controlar el dispositivo.
Disposición y descripción de patillas:
Disposición de patillas para encapsulado DIL 18:
Descripción de patillas:
Nombre | Nº | Tipo | Descripción |
OSC1/CLKIN | 16 | I | Entrada del oscilador a cristal/Entrada de la fuente de reloj externa |
OSC2/CLKOUT | 15 | O | Salida del oscilador a cristal. En el modo RC, es una salida con una frecuencia de ¼ OSC1 |
MCLR | 4 | I/P | Reset/Entrada del voltaje de programación. |
RA0 | 17 | I/O | Puerto A bidireccional, bit 0 |
RA1 | 18 | I/O | Puerto A bidireccional, bit 1 |
RA2 | 1 | I/O | Puerto A bidireccional, bit 2 |
RA3 | 2 | I/O | Puerto A bidireccional, bit 3 |
RA4/T0CKI | 3 | I/O | También se utiliza para la entra de reloj para el TMR0 |
RB0/INT | 6 | I/O | Puerto B bidireccional, bit 0
Puede seleccionarse para entrada de interrupción externa |
RB1 | 7 | I/O | Puerto B bidireccional, bit 1 |
RB2 | 8 | I/O | Puerto B bidireccional, bit 2 |
RB3 | 9 | I/O | Puerto B bidireccional, bit 3 |
RB4 | 10 | I/O | Puerto B bidireccional, bit 4
Interrupción por cambio de estado |
RB5 | 11 | I/O | Puerto B bidireccional, bit 5
Interrupción por cambio de estado |
RB6 | 12 | I/O | Puerto B bidireccional, bit 6
Interrupción por cambio de estado |
RB7 | 13 | I/O | Puerto B bidireccional, bit 7
Interrupción por cambio de estado |
Vss | 5 | P | Tierra de referencia |
Vdd | 14 | P | Alimentación |
Arquitectura interna
Las altas prestaciones de los micro controladores PIC derivan de las características de su arquitectura. Están basados en una arquitectura tipo Harvard que posee buses y espacios de memoria por separado para el programa y los datos, lo que hace que sean más rápidos que los micro controladores basados en la arquitectura tradicional de Von Neuman.
Otra característica es su juego de instrucciones reducido (35 instrucciones) RISC, donde la mayoría se ejecutan en un solo ciclo de reloj excepto las instrucciones de salto que necesitan dos.
Posee una ALU (Unidad Aritmético Lógica) de 8 bits capaz de realizar operaciones de desplazamientos, lógicas, sumas y restas. Posee un Registro de Trabajo (W) no direccionable que usa en operaciones con la ALU.
Dependiendo de la instrucción ejecutada, la ALU puede afectar a los bits de Acarreo, Acarreo Digital (DC) y Cero (Z) del Registro de Estado (STATUS).
La pila es de 8 niveles. No existe ninguna bandera que indique que esté llena, por lo que será el programador el que deberá controlar que no se produzca su desbordamiento.
Este micro controlador posee características especiales para reducir componentes externos con lo que se reducen los costos y se disminuyen los consumos. Posee 4 diferentes modos de oscilador, desde el simple circuito oscilador RC con lo que se disminuyen los costos hasta la utilización de un oscilador a cristal.
En el modo SLEEP el consumo se reduce significativamente y puede ‘despertarse’ al micro controlador utilizando tanto interrupciones internas como externas y señal de reset. Además posee la función Watchdog Timer (Perro Guardián) que protege al micro de ‘cuelgues’ debido a fallos software que produzcan bucles infinitos.
Memoria de programa
La memoria de programa está organizada con palabras de 14 bits con un total de 1 K, del tipo Flash, que durante el funcionamiento es de solo lectura. Sólo se ejecutará el código contenido en esta memoria, pudiendo almacenar en ella una cantidad limitada de datos como parte de la instrucción RETLW. En una sola palabra se agrupa el código de la instrucción y el operando o su dirección.
El tipo de memoria utilizada en este micro controlador, podrá ser grabada o borrada eléctricamente a nuestro antojo desde el programador. La memoria tipo Flash tiene la característica de poderse borrar en bloques completos y no podrán borrarse posiciones concretas o específicas. Este tipo de memoria no es volátil, es decir, no pierde los datos si se interrumpe la energía.
La memoria para almacenar el programa nos resultará perfecta para realizar pruebas y experimentos, además de para la programación "on-board" o "in-circuit", esto es, nos permite la programación del dispositivo o actualización del programa sin necesidad de retirarlo del circuito donde va montado.
La memoria del programa comienza en la posición 0000h y termina en la posición 03FFh. Esto es 1Kbyte, es decir, 1024 bytes (210).
En la figura también se muestra el PC (Contador de Programa o Program Counter). Que apunta a la dirección de memoria de la instrucción en curso y permite que el programa avance cuando se incrementa.
También se muestra la pila o stack, de 8 niveles (Nivel Pila 1 a Nivel Pila 8). Se utiliza cuando ejecutamos un subproceso o subrutina, es decir, un conjunto de instrucciones que hemos aislado de las demás para simplificar. En este caso el contador de programa (PC) dejará de incrementarse y apuntará a la posición de memoria de programa donde empieza la subrutina; en el primer nivel de la pila se almacenará esta llamada, hasta que se acaben de ejecutar las instrucciones que contiene, momento en el cual se seguirá con las instrucciones desde donde había sido llamada. Por eso es necesario saber donde se quedó el programa almacenándose la dirección en la pila. Podemos hacer hasta 8 llamadas a subrutinas una dentro de otra, como si de muñecas rusas se tratase. A esto se le llaman subrutinas anidadas.
El vector de reset se encuentra en la posición 0000h y el de interrupción en la 0004h.
Debido a que el PIC16F84A tiene un contador de programa de 13 bit puede direccionar un espacio de memoria de 8K x 14, sin embargo sólo el primer 1K x 14 (0000h-03FFh) está implementado físicamente.
Tener acceso a una localización por encima de la dirección físicamente implementada producirá un solapamiento. Por ejemplo, para las localizaciones 20h, 420h , 820h, C20h, 1020h, 1420h, 1820h, y 1C20h, la dirección real será la misma, así 20h es 32d y 420h es 1056d, 1056d menos 1024d es igual a 32d, es decir, se direcciona realmente la localización 20h, en binario 20h es 100000b y 420h es 10000100000b, 1K se direcciona con 10 bits (210 = 1024) de manera que de 10000100000b si sólo se tienen en cuenta 10 bits queda 0000100000b que es 20h. Con esto debe quedar claro que después de 3FF, al incrementarse el PC y pasar a 400, se direccionará de nuevo la posición 0h
Existen varias versiones de memoria de programa para los PIC16f84A:
- Versión Flash. Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar. A diferencia de las memoria de tipo ROM, la memoria FLASH es programable en el circuito. Es más rápida y de mayor densidad que la EEPROM. Esta versión es idónea para la enseñanza y la Ingeniería de diseño.
- Versión OTP . ("One Time Programmable") "Programable una sola vez". Sólo se puede grabar una vez por el usuario sin la posibilidad de borrar lo que se graba. Resulta mucho más económica en la implementación de prototipos y pequeñas series.
- Versión QTP. Es el propio fabricante el que se encarga de grabar el código en todos los chips que configuran pedidos medianos y grandes.
- Versión SQTP. El fabricante solo graba unas pocas posiciones de código para labores de identificación, numero de serie, palabra clave, checksum, etc.
Las memorias FLASH han sustituido a las EEPROM y son muy útiles al permitir que los micro controladores que las incorporan puedan ser reprogramados "en circuito", es decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de memoria incorporado al control del motor de un automóvil permite que pueda modificarse el programa durante la rutina de mantenimiento periódico, compensando los desgastes y otros factores tales como la compresión, la instalación de nuevas piezas, etc. La reprogramación del micro controlador puede convertirse en una labor rutinaria dentro de la puesta a punto.
Memoria de datos
Está organizada en dos páginas o bancos de registro, banco 0 y banco 1. Para cambiar de página se utiliza un bit del registro STATUS (RP0).
Cada banco se divide a su vez en dos áreas:
- RFS (Registros de Funciones Especiales)
- RGP (Registros de Propósito General)
En la figura siguiente nos podemos hacer una idea de cómo están distribuidos:
La primera es la de RFS (Registros de Funciones Especiales) que controlan el funcionamiento del dispositivo. Estos se emplean para el control del funcionamiento de la CPU y de los periféricos.
El segundo área (68 bytes SRAM) es la de RGP (Registros de Propósito General), y puede accederse a ellos tanto directa como indirectamente haciendo uso del registro FSR.
Banco 0:
- Este banco está formado por 80 bytes, desde la posición 00 hasta la 4Fh (de la 0 a la 79).
- El área RFS consta de 12 registros que serán utilizados por funciones especiales del micro controlador. Comienza en la dirección 00h y termina en la 0Bh, es decir, de la 0 a la 11.
- El Área RGP consta de 68 registros de memoria RAM que serán utilizados para almacenar datos temporales requeridos por los programas. Comienza en la dirección 0Ch y termina en la posición 4Fh (de la 12 a la 79). Esta parte es la memoria de registros de propósito general.
Banco 1:
- Este banco tiene las mismas dimensiones que el anterior, pero su uso es menor, ya que no tiene banco para registros de propósito general. Solamente tiene una sección de registros especiales que van de la posición 80h a la 8Bh ( de la 128 a la 139)
La memoria RAM así como algunos registros especiales son los mismos en los dos bancos del mapa de memoria del PIC. La anchura de los bytes en la memoria es de 8 bis.
Para direccionar la memoria de datos se emplean dos modos de direccionamiento, el directo y el indirecto. En el direccionamiento directo, los 7 bits de menos peso del código OP de la instrucción proporcionan la dirección en la posición de la página, mientras que los bits RP1 y RP0 de STATUS seleccionan la página o banco.
En el direccionamiento indirecto el operando de la instrucción hace referencia al registro IDNF, que ocupa la posición 00h del área de datos. Se accede a la posición que apunta el registro FSR 04h del banco 0. Los 7 bits de menos peso de FSR seleccionan la posición y su bit de más peso, junto con el bit IRP del registro de estado, seleccionan la página.