16F84
 

El PIC16C84 (o 16F84):  

El PIC 16C84 es un microcontrolador con memoria de programa EEPROM, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje, ya que no se requiere borrarlo con luz ultravioleta como las versiones EPROM, sino, que se puede programar nuevamente el microcontrolador sin borrarlo previamente por medios diferentes al eléctrico. El PIC16C84 es un microcontrolador de Microchip, fabricado en tecnología CMOS, su consumo de potencia es muy bajo y es completamente estático, el reloj puede detenerse, y los datos de la memoria no se pierden. 
El encapsulado más común para el microcontrolador es el DIP (dual inline pin) de 18 pines, propio para usarlo en experimentación. La referencia completa e 16C84 – 04/P, para el dispositivo que utiliza el reloj de 4 MHz. Sin embargo, hay otros tipos de encapsulado que se pueden utilizar según el diseño y la aplicación que s quiera realizar. Por ejemplo, el encapsulado tipo surface mount (montaje superficial) tiene un reducido tamaño y bajo costo, que lo hace propio para producciones en serie o en lugares de espacio muy reducidos.  

Puertos del microcontrolador:

Los puertos son el puente entre el PIC y el mundo exterior. Son líneas digitales que trabajan entre 0 y 5 V y se puede configurar como entradas o como salidas.

El PIC16C84 tiene dos puertos. El puerto A con 5 líneas y el puerto B con 8 líneas. Cada pin se puede configurar como entrada o como salida independiente.

El puerto B tiene internamente una resistencias de pull-up conectadas a sus pines (sirven para fijar el pin a un nivel de 5V),  su uso puede ser habilitado o deshabilitado bajo control del programa. Todas las resistencias de pull-up se conectan o se desconectan a la vez, usando el  bit llamado RBPU que se encuentra en el registro (posición de memoria RAM) llamado OPTION. La resistencia de pull-up es desconectada automáticamente en un pin si este se programa como salida. Cuando ocurre un reset se deshabilitan todas las resistencias del pull-up. 


Por lo tanto, si se están usando, deben ser habilitadas nuevamente por control del programa. El pin RA4/TOCKI del puerto A puede ser configurado como un pin de entrada/salida o como temporizador/contador. Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (schmitt trigger), se puede reconocer señales un poco distorsionadas y llevarlas a niveles lógicos (0 y 5V).

Cuando se usa como salida digital se comporta como colector abierto; por lo tanto se debe poner una resistencia de pull-up (resistencia externa conectada a un nivel de 5v). Como salida, la lógica es inversa: un “0” escrito al pin del puerto entrega a la salida un “1” lógico. Este pin como salida no puede manejar  cargas como fuente, sólo en el modo sumidero.

Como este dispositivo es de tecnología CMOS, todos los pines deben estar conectados a alguna  parte, nunca dejarlos al aire porque se puede dañar el integrado. Los pines que no estén usando se deben conectar a la fuente de alimentación de +5V.  

La máxima capacidad corriente del microcontrolador de cada uno de los pines en modo sumidero (sink) es de 25 mA y en modo fuente (source) es de 20 mA.  

  PUERTO A PUERTO B
Modo Sumidero 80 mA 150 mA

Modo fuente

50 mA 100 mA

El consumo de corriente del microcontrolador  para su funcionamiento depende del voltaje de operación, la frecuencia y de las cargas que tengan sus pines. Para un reloj de 4 MHz  el consumo es de aproximadamente 2 mA; aunque este se puede reducir a 40 uA cuando se esta en modo sleep.  

El oscilador externo:

Todo microcontrolador requiere un circuito externo que le indique la velocidad que debe trabajar. Este circuito, que se conoce como oscilador o reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. El PIC16C84 puede utilizar 4 tipos de reloj diferentes: 

RC: oscilador con resistencia y condensador
XT: cristal
HS: cristal de alta velocidad
LP: cristal para baja frecuencia y bajo consumo de potencia

 

En el momento de programar o “quemar” el PIC se debe especificar que tipo de oscilador se usa. Esto se hace a través de unos fusibles llamados “fusibles de configuración”

El tipo de oscilador que se sugiere para las prácticas es el cristal de 4 MHz, porque garantiza mayor precisión y buen arranque del microcontrolador. Internamente esta frecuencia es dividida por 4, lo que hace que la frecuencia efectiva de trabajo sea de 1MHz, por lo que cada instrucción se ejecuta en un microsegundo. El cristal debe ir acompañado de dos condensadores y se conecta como se muestra en la imagen.

 

Dependiendo de la aplicación, se puede utilizar cristales de otras frecuencias; por ejemplo se usa el cristal de 3,579545 MHz porque es muy económico, el de 32,768 KHz cuando se necesita crear bases de tiempo de un segundo muy precisas. El límite e la velocidad en estos microcontroladores es de 10 MHz.

Si no se requiere mucha precisión en el oscilador, y se quiere economizar dinero, se puede utilizar una resistencia y un condensador. 

 

Reset:

En los microcontroladores se requiere un pin de reset para reiniciar el funcionamiento del sistema cuando sea  necesario, ya sea por una falla que se presente o porque así se halla diseñado el sistema. El pin de reset en los PIC es llamado MCLR (master clear).

El PIC 16C84 posee internamente un circuito temporizador conectado al pin de reset que funciona cuando se da alimentación al micro, se puede entonces conectar el pin de MCLR a la fuente de alimentación. Esto hace que al encender el sistema el microcontrolador quede en estado de reset por un tiempo mientras se estabilizan todas las señales del circuito y así garantizar un buen arranque. Cuando se quiere tener control sobre el reset del sistema se puede conectar un pulsador.

 

Características especiales:       

Algunos elementos que forman parte de los PIC no se encuentran en nicrocontroladores de otros fabricantes, o simplemente representan alguna ventaja o facilidad a la hora de hacer un diseño. 

Circuito de vigilancia (Watchdog Timer): Su función es restablecer el programa cuando éste se ha perdido por fallas en la programación o por alguna razón externa. Es muy útil cuando se trabaja en ambientes con mucha interferencia o ruido eléctrico. 

Temporizador de encendido (Power-up Timer): Este proporciona un reset al microcontrolador en el momento de conectar la fuente de alimentación, lo que garantiza un arranque correcto. En el momento de grabar el micro se debe seleccionar el fusible de configuración "Power-up Timer ON"; su tiempo de retardo es de 72 milisegundos. 

Modo sleep: Esta característica permite que el microcontrolador entre en un estado pasivo donde consume muy poca potencia. En este modo el oscilador se detiene. Se entra en ese estado por la ejecución de una instrucción especial (llamada sleep) y se sale de él cuando se cumple alguna de varias condiciones predeterminadas por el usuario.

Arquitectura interna del PIC16C84

Este término se refiere a los bloques funcionales internos que conforman el microcontrolador y la forma en que están conectados, por ejemplo la memoria EEPROM (de programa), la memoria RAM (de datos), los puertos, la lógica de control que permite que todo el conjunto funcione, etc.

 

 

 

 

 

 

 

 

 

 

 

Esta es una memoria de 1 Kbyte de longitud y con palabras de 14 bits. Esta es del tipo EEPROM y por ese se puede programar y borrar eléctricamente, lo que facilita el desarrollo de los programas y la experimentación. En ella se graba, o almacena, el programa p códigos que el microcontrolador debe ejecutar.

 

 

 

 



En la figura se pueden ver los diferentes bloques que lo componen y la forma en que se conectan. Se muestra la conección de los puertos, las memorias de datos y de programa, los bloques especiales como el watchdog, los temporizadores de arranque, el oscilador, etc.

Todos los elementos se conectan entre sí por medio de buses. Un bus es un conjunto de líneas que transportan información entre dos o más módulos. El PIC16C84 tiene un bloque especial de memoria de datos de 64 bytes del tipo EEPROM, pero su uso y manejo es bastante complejo, y debe ser manejado con un elevado nivel de conocimiento.

Básicamente el PIC16C84 esta constituido como se muestra en la figura. Tiene dos bloques de memoria, el de programa y el de datos o registros.

 

Memoria de programa:

 

Vector de reset:

Cuando ocurre un reset en el microcontrolador, el contador de programa se pone en ceros (000H). Por esta razón, en la primera dirección del porgrama se debe escribir todo lo relacionado con la iniciación del mismo.

Vector de interrupción:

Cuando el microcontrolador recibe una señal de interrupción, el contador de programa apunta a la dirección 04H de la memoria de programa, por eso, allí se debe escribir toda la información necesaria para atender dicha interrupción.

Registros (memoria RAM):

El PIC16C84 puede direccionar 128 pocisiones de memoria RAM, pero solo tiene implementados físicamente los primeros 48 (0 - 2F en hexadecimal). De estos los primeros 12 son registros que cumplen un propósito especial en el control del microcontrolador y los 36 siguientes son registros de uso general que se pueden usar para guardar los datos temporales de la tarea que se está ejecutando.

NOTA: Los registros 81H, 85H, y 86H no se muestran ya que so utilizados en procesos más complejos y se pueden reemplazar por otros más sencillos.

Registro de Trabajo W:

Este es el registro de trabajo principal, se comporta de manera similar al acumulador en los microprocesadores.

Registro option:

Los bits de este registro se utilizan para controlar las resistencias de pull-up del puerto B, el flanco de la señal de interrupción, el valor de la preescala para el temporizador/contador o para el watchdog timer y el origen de la señal que entra al temporizador/contador. Por unacuestion de facilidad a la hora de aprender se escribe en el registro Option con una instrucción del mismo nombre (Option).

Contador de programa (PC):

El PIC16F84 tiene un contador de programa de 13 bits de ancho, suficiente para direccionar una memoria de 8K, pero solo se tiene implementado el primer 1K. Cuando se ejecuta una instrucción GOTO o CALL se usan los 11 bits más bajos, de manera que se pueden hacer saltos en el programa y direccionar toda la memoria (1K) completamente.

La parte alta del contador de programa (PCH) no se puede acceder directamente, ella debe cargarse desde los 5 bits más bajos del registro llamado PCLATCH. El PIC16C84 no usa el esquema de paginación de memoria que se tiene en otros PICs: solamente cuando se tiene una tabla que usa el PC se debe tener cuidado de no pasar las páginas de 256 bytes, porque estas instrucciones sólo afectan el contenido de la parte baja del PC, para hacer tablas sin  preocuparse. Se debe tener un conocimiento de paginación usando el PCLATCH 

Registro de estados:

Es un registro donde se tiene la información del resultado que dejó la última operación efectuada; si el resultado de una operación fué positivo o negativo, si fue cero o diferente de cero, etc. El estado de sus bits se puede consultar usando las intrucciones BTFSS (prueba el bit y salta si es uno) y BTFSC (prueba el bit y salta si es cero), todo lo anterior en Assembler.

Pila (Stack):

Estos registros no forman parte de ningún banco de memoria y no son accesables por parte de lusuario. Se usan para guardar el valor del contador de programa cuando se hace un llamado a un subrutina o cuando se atiende una interrupción; luego, cuando el micro regresa a seguir ejecutando su taréa noemal, el contador de programa recupera su valor leyéndolo nuevamente desde la pila. El PIC16C84 tiene una pila de 8 niveles.

El PIC16F84:

El PIC 16F84 es un microcontrolador de la familia Microchip, totalmente compatible con el PIC16C84. Su principal característica es que posee memoria "flash" en lugar de memoria EEPROM, pero su manejo es igual. Con respecto al PIC16C84, este microcontrolador presenta dos novedades:

  • La memoria de datos aumenta de tamaño, ahora se tienen 68 registros de propósito general (el mapa de memoria de datos llega hasta 4FH). 
  • En el momento de programar el microcontrolador, el fusible de selección del temporizador de arranque (Power Up Timer) trabaja de forma inversa, es decir, si en el PIC16C84 se selecciona la opción "High" para activarlo, en el PIC16F84 se debe seleccionar "Low".