Un PIC
es un microcontrolador (Programmable Integrated
Circuits = PIC), también denominado “Circuito
Integrado Programable”.
Es un componente sumamente útil
en la Electrónica de Consumo.
Se trata de “un chip que
permite obtener un circuito integrado a medida”,
es decir puedo hacer que el PIC se comporte como
un procesador de luminancia, un temporizador o cualquier
otro sistema mediante un programa que le grabo en
una memoria ROM interna. Los microcontroladores
PIC son, en el fondo, procesadores similares a otros
tipos, como por ejemplo la familia de los microprocesadores
X86, 80486, Pentium y muchos otros que usan una
arquitectura interna del tipo Von Neumann. En este
tipo de arquitectura los datos y la memoria del
programa se encuentran en el mismo espacio de direcciones.
Un microprocesador y un
microcontrolador no son la misma cosa. Los PICs
son microcontroladores, es decir, una unidad que
posee en su interior al microprocesador y a los
elementos indispensables para que pueda funcionar
como una minicomputadora en un solo chip.
Un microprocesador (µP) es
solamente la unidad central de procesos o CPU, la
memoria, los puertos y todos los demás periféricos
son exteriores.
La programación de un microprocesador
es, por lo tanto, una tarea compleja porque deben
controlarse todos estos dispositivos externos.
Un PIC integra la CPU y todos los
periféricos en un mismo chip. El programador
se desentiende de una gran cantidad de dispositivos
y se concentra en el programa de trabajo.
Esta circunstancia da lugar a una
gran pérdida de tiempo porque los datos tienen
que ser retirados de la memoria y llevados a la
CPU (Central Processor Unit) y viceversa. Esto significa
que la computadora dedica la mayor parte del tiempo
al transporte de datos de ida o de vuelta, en lugar
de usar este tiempo para trabajar sobre los datos.
Estos integrados emplean un conjunto
de instrucciones del tipo RISC (Reduced Instruction
Set Computer).
Con el RISC se suele ejecutar la
mayoría de las instrucciones con un solo
pulso del clock. Con las instrucciones que se usan
en otros equipos del tipo CISC (Complex Instruction
Set Computer), se logran instrucciones más
poderosas, pero a costa de varios ciclos del clock.
En el bien conocido procesador 68HC11 de Motorota
se requieren a veces hasta 5 ciclos del clock para
ejecutar una instrucción.
Nos vamos a referir a los microcontroladores
como bloques que poseen una memoria de programa,
que es el lugar donde deben alojarse los datos que
le indiquen al chip qué es lo que debe hacer;
una memoria de datos donde ingresen las señales
que debe procesar el programa, una unida aritmética
y lógica donde se desarrollen todas las tareas,
una unidad de control que se encargue de supervisar
todos los procesos y puertos de entrada y salida
para que el PIC tenga contacto con el exterior (figura
1).
Un PIC tiene entradas, salidas
y precisa de algunos componentes exteriores para
procesar las señales de entrada y convertirlas
en las señales de salida (figura 2). El 16F84
requiere, en general, un cristal con dos capacitares
y como mínimo un resistor para el reset.
Necesita una tensión de fuente de 5V (VDD)
aplicada con respecto al terminal de masa (VSS).
Posee dos puertos de salida, el
A y el B, cuyos terminales son marcados RA0 al RA4
y RB0 al RB7. Estos puertos pueden ser programados
como de entrada o de salida.
El microprocesador del 16F84 maneja
“palabras” de 8 bits, de ahí
que posee el puerto B completo (todos los bits de
la palabra tienen acceso desde las patas externas)
y el puerto A incompleto (sólo están
disponibles en las patas del chip los 5 bits menos
significativos).
En realidad, y como ocurre en una
computadora, los puertos no son más que posiciones
de memoria de datos a quienes se colocan circuitos
electrónicos que actúan como drivers
con el exterior, pero a los fines prácticos
podemos decir que cuando tocamos una patita del
PIC correspondiente a un puerto, es como si estuviéramos
tocando un bit de una posición de memoria
de datos.
El terminal 4 opera como reset
pero también cumple funciones de carga de
memoria de programa cuando es excitado con pulsos
de 15V. El terminal RA4 (pata 3) también
tiene funciones como entrada de un temporizador
y RBO (pata 6) cumple también funciones como
entrada de interrupción.
Ahora bien, la mayoría de
los microcontroladores (sean de Microchip, National,
Motorola, Philips, etc.) se comportan de forma similar,
por ello nos vamos a referir a los microcontroladores
PIC16F84 cuya arquitectura interna puede observarse
en el diagrama en bloques de la figura 3.
Observe primero los bloques externos.
Existe un cristal que se conecta en OSC1 y OSC2
para generar el CLOCK del sistema. Luego una señal
de entrada llamada MCLR negada, que es un nombre
de fantasía para nuestro conocido RESET (debido
a que esa pata tiene un doble uso) y, por último,
dos puertos paralelos de I/O (entrada o salida)
llamados puerto A y puerto B. Una de las patas del
puerto A puede ser utilizada como entrada de interrupciones
(esta pata especial hace que el microprocesador
deje de realizar la tarea que estaba ejecutando
y pase a realizar otra tarea alternativa; cuando
la termina vuelve a su programa original).
En el bloque de temporizadores
observamos un grupo de bloques dedicados a mejorar
el funcionamiento pero sin influir directamente
en el flujo de señales. Hay un temporizador
de encendido, un temporizador de arranque del oscilador
de CLOCK, un circuito de reset y un circuito llamado
de vigilancia o WATCHDOG. Los dos primeros bloques
procuran un arranque ordenado para no producir una
carga al mismo tiempo sobre la fuente.
También encontramos un circuito
con un nombre curioso: “perro guardián”.
Su función es estar vigilante el máximo
de tiempo que tarda el microprocesador en completar
su programa (o mejor sería decir, la derivación
más larga de su programa) y en caso de superarse
ese tiempo, provocar un reset automático
porque el microprocesador se quedó trabado
en alguna parte de su programa.
Los temporizadores no trabajan
en forma independientemente sino que requieren conexiones
al exterior y al interior del dispositivo. No siempre
son utilizados todos los bloques y es el programa
quien determina su utilización y además
ajusta sus parámetros.
Esto se realiza a través
del bloque de control o decodificador de instrucciones.
En la parte superior del diagrama
observamos la memoria de programa, el contador de
programa, el registro de instrucciones y la pila
o STACK de 8 niveles. Cuando hablamos de registros
nos referimos a pequeñas unidades de memoria
transitoria, construida por lo general con un registro
de desplazamiento. Son memorias volátiles
que se utilizan para guardar información
por un tiempo mínimo, con el fin de realizar
una operación compleja de varios pasos.
El contador de programa es el responsable
de que el microprocesador vaya analizando las instrucciones
en orden ascendente. Este guarda el número
de instrucción en el STACK y la instrucción
misma la pasa al registro de instrucciones desde
donde se envía al resto del microprocesador.
El STACK es, en realidad, una pila
de registros (en nuestro ejemplo hay 8), debido
a que el programa puede tener derivaciones (en la
jerga LOOPS, rulos o subprogramas). Cuando se termina
de ejecutar un loop se debe volver al mismo punto
del programa en donde se había producido
la bifurcación y eso es posible porque ese
número de instrucción quedó
guardado en uno de los registros de la pila.
Es común que un loop tenga,
a su vez, un loop secundario y cuando se ejecuta
ese loop secundario se debe volver al mismo punto
del loop primario, eso se consigue con guardar ese
número de instrucción del loop secundario
en otro registro de la pila.
En la parte inferior se ubican
los bloques responsables de efectuar operaciones
matemáticas y lógicas binarias (a
la izquierda); el nombre ALU proviene de Aritmetic
Logic Unite (unidad arimética y lógica).
En este sector es imprescindible utilizar un registro,
ya que una operación aritmética o
lógica siempre se efectúa entre dos
números. Los números binarios que
deben procesarse se toman de la memoria de datos,
el primero se acumula en el registro de trabajo
o registro W (de Work = trabajo) el segundo es el
presente en el instante en que se invoca la memoria
de datos.
Como las operaciones pueden ser
encadenadas (cuando el resultado sirve como operando
de la siguiente operación, tal como el caso
de un producto) el registro W tiene un retorno a
la ALU. Vemos además que la ALU está
comandada por el bloque MUX (MUltipleXador). En
efecto, la ALU requiere que se le envíen
números para procesar que le lleguen desde
la memoria de datos, pero antes se la debe predisponer
para que efectúe la operación requerida
(comparación, rotación de dígitos,
etc.).
El registro de estado o estatus
colabora durante las operaciones matemáticas.
Piense cómo opera Ud. Para
realizar una resta: primero ubica el primer número,
luego el segundo y después comienza a analizar
los bits menos significativos (las unidades), pero
si el número de arriba es menor que el número
de abajo, entonces toma prestado de la columna de
las decenas, luego debe recordar esto porque el
número de arriba en la columna de las decenas
se redujo en una unidad. En realidad, aunque se
trate de una operación entre dos números,
su ejecución requiere guardar lo que se llama
acarreo en otro registro y éste no es otra
cosa más que el registro STATUS.
El PIC16F84 contiene además
de todo lo visto, una memoria RAM de registros (memoria
libre) que puede ser llamada desde el registro de
instrucción a través de un multiplexador
de direcciones. Esta sección sólo
se utiliza en desarrollos avanzados y en el sistema
PICAXE no está disponible, tal como veremos
más adelante.
Ahora bien, un microcontrolador
sin programa no sabe hacer nada, es como un niño
recién nacido; tiene algunos reflejos condicionados
como el de succión que le permite alimentarse
pero no sabe hacer más que eso.
Para que un PIC “sirva para
algo” hay que programarlo y eso se realiza
con una plaqueta de programación y de un
software que permite la comunicación entre
la computadora y dicha plaqueta.
Antiguamente, los microprocesadores
tenían una ventanita transparente y era necesario
exponerlos a la luz ultravioleta para borrar su
memoria e introducir un programa nuevo.
Actualmente cuentan con memorias
que no tienen este requisito. Basta con cargarlos
con un programa para que se borre el anterior. Esto
significa que, con el mismo integrado, podremos
construir diferentes dispositivos que realicen funciones
totalmente distintas unas de otras.
Los PICS que poseen la letra “F”
(16F84, por ejemplo) pueden ser programados hasta
1 millón de veces porque poseen memoria flash,
mientras que los que poseen la letra C (16C92, por
ejemplo) sólo pueden ser programados una
vez ya que poseen memoria ROM y son más económicos.
La Memoria de Programa del PIC16F84 es una EEPROM,
es decir, de lectura solamente (ROM = Read Only
Memory) que se programa por tensión (no necesita
luz ultravioleta); es decir que basta con introducir
los datos con cierto nivel de tensión para
que éstos borren el programa anterior y graben
uno nuevo.
Se llama ROM porque para grabarla
se debe conectar el PIC al programador; luego de
que el PIC coloca estos datos en la plaqueta del
dispositivo, sólo pueden ser leídos,
ya que entonces forman el programa del PIC.
Esta memoria (figura 4) tiene una
longitud de 1 Kbyte con palabras de 14 bits. Digamos
que tiene un ancho de 14 bits y una altura de 1.000
Bytes o que es una memoria de 1.000 x 14. Observe
que los números de instrucción en
hexadecimal van desde el 000 al 3FF, lo cual implica
que existen 1.040 posiciones de memoria, valor obtenido
empleando la fórmula:
|