Como continuación del último capítulo de Electrónica Básica, esta sección se centra en un elemento muy versátil, que es el Micro Controlador Programable o PIC. Tan solo vamos a ver su potencial y algunos ejemplos para poder desarrollar aplicaciones prácticas, dividido en varias publicaciones.
INTRODUCCIÓN.
Esta va a ser una introducción a la programación del PIC16F84. En las
siguientes páginas veremos, desde la estructura básica del dispositivo,
hasta los métodos y técnicas de programación más básicas. También veremos
ejemplos de códigos y sugerencias para modificarlo y poderlo adaptar a otras
aplicaciones o necesidades.
MICROCONTROLADORES
Un microcontrolador, como vimos en anteriores publicaciones, es un circuito
integrado programable que contiene los elementos necesarios para controlar
un sistema.
El acrónimo PIC significa “Peripheral Interface Controler”, es
decir, un controlador de periférico. Un sistema que contiene, entre otros elementos, una unidad
aritmético-lógica, memorias de datos y programas, puertos de entrada y
salida. Podrimos decir, que es un pequeño ordenador, diseñado para realizar
funciones específicas.
Es ese el motivo por el que lo podemos encontrar en lavadoras, teclados,
teléfonos móviles, ratones etc.
Existen diversos modelos de microcontroladores, diferentes características
respecto a más memoria, entradas y salidas, frecuencia de trabajo, coste,
subsistemas integrados, etc.
Como iniciación y aprendizaje, veremos el conocido PIC 16F84, del
fabricante Microchip Technology Inc. por ser un sistema sencillo, barato y
potente para muchas aplicaciones electrónicas.
Las características del controlador las podemos encontrar en la web del fabricante microchip https://www.microchip.com/en-us/product/PIC16F84A y en su hoja de características (o Datasheet) https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/35007C.pdf
Las características del controlador las podemos encontrar en la web del fabricante microchip https://www.microchip.com/en-us/product/PIC16F84A y en su hoja de características (o Datasheet) https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/35007C.pdf
CARACTERÍSTICAS DEL 16F84.
Esta es la estructura interna del microcontrolador:
Y en la siguiente imagen vemos el diagrama de pines o patillas del PIC
16F84.
- VSS y VDD
Estos son los pines de alimentación del PIC. VDD es la alimentación
positiva (+), y VSS es el negativo de la alimentación, o 0 Voltios (-). La
tensión máxima de alimentación que soporta el microcontrolador es 6 Voltios,
y el mínimo son 2 Voltios. El consumo del circuito dependerá de las cargas
en los puertos y de la frecuencia de trabajo.
En el siguiente gráfico se muestra un ejemplo de un regulador de
alimentación para el PIC:
- RA0 a RA4
RA es un puerto bidireccional. Eso significa que se puede configurar
como entrada o como salida. El número que hay después de RA indica el
número de bit (0 a 4). Por tanto, tenemos un puerto bidireccional de 5
bits donde cada bit puede ser configurado como entrada o como
salida.
- RB0 a RB7
RB es un segundo puerto bidireccional. Se comporta exactamente de la
misma manera que RA, excepto que este tiene 8 bits.
- OSC1/CLK IN y OSC2/CLKOUT
En estos pines es donde conectaremos el reloj externo, para que el
microcontrolador disponga de algún tipo de temporización que marca la
frecuencia de trabajo.
Los osciladores pueden ser varios tipos; RC Formado por una resistencia
y un condensador, HS se utiliza un cristal de cuarzo o resonador
cerámico (Hasta 10 Mz), XT Cristal o resonador hasta 4 Mhz y LP Bajo
consumo (hasta 200Khz).
En la imagen, un ejemplo clásico de oscilador de cristal (XT) a 4MHz:
- MCLR
Este pin, es el que se utiliza para borrar las posiciones de memoria
dentro del PIC (p.ej. cuando quiero reprogramarlo). Durante el
funcionamiento normal está conectado a la alimentación positiva.
- INT
Este es un pin de entrada que puede ser monitorizado. Si el pin se pone
a nivel alto, podemos hacer que el programa se reinicie, se pare o
cualquier otra función de deseemos. En nuestro caso, no se utiliza
mucho.
- TOCK1
Esta es otra entrada de reloj, que opera con un temporizador interno.
Opera aisladamente del reloj principal. De nuevo, este tampoco la
utilizaremos mucho.
Con esta información, podemos montarnos un sencillo entrenador para el
16F84, con los puertos RA como entradas y los puertos RB como salidas.
Utilizaremos como entrada unos micro interruptores y como salida unos
leds conectados al puerto. Este podría ser entrenador PIC:
El propio PIC, dispone de una memoria de programa o de instrucciones es
una memoria tipo FLASH de 1K.
En ella almacenaremos el programa que ejecutará el microcontrolador.
Existe un registro especial llamado contador de programa PC cuya
finalidad es avanzar por las instrucciones del programa de forma
secuencial, a excepción de las instrucciones de salto.
La memoria de datos sirve para almacenar variables, leer puertos de
entrada o escribir en los puertos de salida, podemos también acceder al
temporizador o al registro EEPROM
La memoria de datos en el PIC 16F84 está formada por dos zonas; MEMORIA
RAM de 68 registros, y MEMORIA EEPROM de 68 registros cuya
característica principal es que no se perderán los datos cuando se
desconecta la alimentación. Está formada por dos bancos Bank0 y Bank1.
Otras características del microcontrolador, son unos registros
especiales que determinan algunas de las características notables del
microcontrolador:
- Temporizador/Contador TMR0
- watch Dog o “Perro guardian” (WD)
- Interrupciones.
- Reset .(Reinicio del sistema)
COMO PROGRAMAR EL PIC.
Todo esto está muy bien, pero ¿Cómo programamos realmente el código y lo
grabamos en el PIC? Pues hay dos maneras, la sencilla y la DIY (Do It Yourself).
La manera sencilla es comprar al fabricante un programador de PIC, que
se conecte al PC, y que suele llevar incluido un software con el que
puedes programar el PIC. Para este caso, consultar la web del
fabricante.
La DIY se trata, ni más ni menos que construir nuestro propio
programador y utilizar software gratuito descargado de Internet.
En el caso de escoger este último, se puede encontrar documentación en
la entrada de nuestro blog Programador PicKit,
https://blog-xanur.blogspot.com
, o la sección de Enlaces, al final del documento.
ENSAMBLADOR.
Lo siguiente que nos hace falta es un software ensamblador. Este
convertirá el programa que escribimos, a un formato que el PIC
comprende. El mejor es del propio Microchip, llamado MPLAB. Es un
programa que incluye un editor, un simulador y el ensamblador. Este es
un software escrito por los propios fabricantes del PIC, y además es
gratuito. en la web de MPLAB de Microchip®,
https://www.microchip.com/mplabx/.
PRUEBAS CON EL PIC
En este punto ya tenemos un programador, además de uno o dos chips
PIC´s para empezar a "jugar". En los siguientes apartados conoceremos
la teoría para saber programar el PIC, pero el aprendizaje real es
cuando se hacen las pruebas del código generado y comprobar el
resultado en el circuito.
En la siguiente imagen, se puede ver un diagrama de un circuito, que
muestra una placa de entrenamiento muy básica y económica.
Evidentemente, si tenemos conocimientos más amplios, o requerimos
otras funcionalidades, se puede modificar y ampliar el circuito, por
ejemplo, añadiendo LED e interruptores o pulsadores. Básicamente,
podemos iniciarnos con este circuito y posteriormente añadir lo que
creamos necesario:
También tenemos la opción de realizar las pruebas en una placa de
pruebas tipo “Protoboard”, la cual tienen diversos pines
interconectados por la parte inferior, facilitando hacer circuitos no
muy complejos, y probarlos con cierta agilidad.
En lo que a la programación en si se refiere, para elaborar un
código, partimos de un planteamiento, teniendo presente todas las
variables que afectan al sistema, desarrollaremos la idea y la
implementaremos con las herramientas adecuadas. Este podría ser el
diagrama de flujo para desarrollar un programa:
Luego pasamos a redactarlo, que lo podemos hacer mediante un editor de texto simple, como el que viene por defecto en el sistema operativo, o algún otro software, como por ejemplo, el propio MPLAB de Microchip, mencinado nteriormente, que nos da la opción de depurar el código y compilarlo, o bien NotePad++, que nos facilita la compresión de las instrucciones con diferentes modos de edición. En la sección de Enlaces, encontrareis todos ellos.
PROGRAMACIÓN BÁSICA.
Antes de empezar con la programación del PIC, habría que explicar
algunas técnicas para programar bien.
En el compilador, si escribimos “;” (punto y coma) en cualquier
punto de tu programa, el compilador ignorará cualquier cosa que haya
detrás de él, hasta llegar al retorno de carro. Esto significa que
podemos añadir comentarios a nuestro programa que nos recuerden que
estábamos haciendo en ese punto.
Esta es una buena práctica incluso para los programas más sencillos,
porque en el momento de programarlo, puede que entendamos
completamente qué es lo que hace tu programa, pero dentro de un
tiempo, tal vez nos desesperemos sin compréndelo o volver a
descodificar lo que se hizo. Por tanto, utilizar comentarios es muy
recomendable.
Otro punto es asignar nombres a las constantes vía los registros.
Hace lo que estás escribiendo mucho más sencillo de leer, para saber
de qué valor se trata, en vez de intentar entender que significan
todos esos números. Así que es preferible usar nombres reales como
CONTADOR. Y es mejor ponerlo en letras mayúsculas. Esto lo hace
destacar, y también significa por convención, que se trata de
una constante.
Otra buena técnica es, añadir algún tipo de cabecera en los
programas, utilizando los punto y coma para comentarios. Un ejemplo
podría ser algo así:
1
2
3
4
5
6
7
8
9
10
;*************************************************************;
; PROGRAMA PRUEBA03.asm FECHA: 15 Enero 2022 ;
; Programa para generar Luz Emergencia Auxiliar Coche ;
; Usa los puertos RB 0-7 (Pin 6-13) y RA 0 (Pin 17) ;
; Revisión: 2.0 Programa para PIC16F48A ;
; Velocidad de Reloj: RC externo 1Mhz Instrucción 1Mhz=1us ;
; WatchDog = OFF Tipo Reloj: RC Externo ;
; Autor: XMG Por: XANUR2001 / ACME 2022;
; Compilado en : MPLAB X IDE v2.05 (MICROCHIP) ;
;*************************************************************;
También es recomendable documentar el programa sobre papel,
usando diagramas de flujo, algoritmos, etc… Esto ayuda a
escribir el programa paso a paso.
REGISTROS.
Un registro es una posición del PIC que puede ser escrito, leído o
ambas cosas. Podemos comparar un registro a un trozo de papel,
donde podemos ver una información o escribirla.
En la siguiente figura se muestra el mapa de registros internos
del PIC16F84. Si no hemos visto algo parecido anteriormente, no
debemos asustarnos, ya que es solo para mostrar donde están los
diferentes bits y piezas dentro del PIC, y ayudará a explicar unos
cuantos comandos.
Lo primero que observaremos es que está dividido en dos Bancos
(Banco 0 y Banco 1).
El Banco 1 se usa para controlar las propias operaciones del
PIC, por ejemplo para decirle al PIC que bits del Puerto A son
entradas y salidas.
El Banco 0 se utiliza para manipular los datos. Por ejemplo:
Supongamos que queremos poner un bit del puerto A, en nivel
alto. Lo primero que necesitamos hacer es ir al Banco 1 para
poner ese bit o pin en particular en el puerto A como salida.
Después volvemos al Banco 0 y enviamos un 1 lógico a ese
pin.
Los registros que vamos a usar con más asiduidad en el Banco 1,
son STATUS, TRISA y TRISB.
El primero permite volver al Banco 0, TRISA nos permite
establecer los pines que serán entradas y salidas del Puerto A,
y TRISB nos permite establecer los pines que serán entradas y
salidas del puerto B. Vamos a ver con más detalle estos y otros
registros.
- STATUS
Para cambiar del Banco 0 al Banco 1, utilizamos el registro
STATUS. Hacemos esto poniendo el bit 5 (RP0) del registro STATUS
a 1. Para cambiar de nuevo al Banco 0, ponemos el bit 5 del
registro STATUS a 0. El registro STATUS se localiza en la
dirección 03h en hexadecimal (es así definido por la 'h').
- TRISA y TRISB
Están localizados en las direcciones 85h y 86h respectivamente.
Para programar que un pin sea una entrada o una salida, tan solo
hemos de colocar 1 o un 0 al bit en cuestión en el registro.
Tenemos la posibilidad de hacer esto en binario o en
hexadecimal. Si no estamos familiarizados con el paso de binario
a hexadecimal y viceversa, podemos usar una calculadora
científica. Visualmente, es más entendible comenzar a escribir
en binario.
En el puerto A disponemos de 5 pines, por tanto 5 bits. Así que
si queremos poner uno de los pines como entrada, enviamos un 1
al bit en cuestión. Y si queremos poner uno de los pines como
salida, ponemos un 0 en ese bit. Los bits están definidos de
acuerdo con los pines, es decir, el bit 0 es el RA0, el bit 1 es
el RA1, el bit 2 es el RA2, y así sucesivamente.
Supongamos a modo de ejemplo que queremos poner RA0, RA3 y RA4
como salidas, y RA1 y RA2 como entradas. Para ello enviamos
esto: 00110 (en binario) o 06h (en hexadecimal). Es importante
tener en cuenta de que, el bit cero está a la derecha, como se
muestra aquí:
Para TRISB se aplica lo mismo.
- PORTA y PORTB
Para poner uno de nuestros pines de salida a nivel alto,
simplemente ponemos un 1 el bit correspondiente en nuestro
registro PORTA o PORTB. El formato es el mismo que para los
registros TRISA y TRISB. Para leer si un pin está a nivel
alto o nivel bajo en los pines de nuestro puerto, podemos
ejecutar una comprobación para ver si el bit en particular
correspondiente esta puesto a nivel alto (1) o está puesto a
nivel bajo (0).
Pero antes de ver un ejemplo de código, tenemos que
explicar dos registros más; W y F.
- W
El registro W es un registro de propósito general, al cual
se puedes asignar cualquier valor que deseemos. Una vez que
hemos asignado un valor a ese registro, puedes sumarle
cualquier otro valor, o moverlo. Tener en cuenta que si le
asignamos otro valor a W, su contenido se sobrescribe.
JUEGO DE INSTRUCCIONES.
El PIC dispone de un juego de instrucciones para poder
programarlo. Este el set completo de 35 instrucciones, que
iremos viendo poco a poco con ejemplos:
Como en todos los lenguajes de programación, disponemos de
instrucciones aritméticas, instrucciones condicionales e
instrucciones de salto.
En la siguiente publicación, empezaremos a ver el primer ejemplo
de código.
ENLACES.
Y a continuación, una serie de enlaces útiles sobre lo expuesto:
Hoja de características (Datasheet) del PIC 16F84A®:
Web del Fabricante Microchip®:
MPLAB de Microchip®:
Software PICKit2 Programmer (y otros recursos en Microchip):
NotePad++:
WinPic800:
IC-PROG:
Programador JDM, en Blog Xanur:
Programador PicKit, en Blog Xanur:
Electrónica Digital, en Blog Xanur:
Esperamos que os haya gustado esta publicación. Si es así, no
dudes en compartirla.
© Se permite reproducción total o parcial de este contenido, siempre y cuando se reconozca la fuente de información utilizada y se incluya el enlace a este artículo.
Equipo Xanur©2022.
© Se permite reproducción total o parcial de este contenido, siempre y cuando se reconozca la fuente de información utilizada y se incluya el enlace a este artículo.
Equipo Xanur©2022.
No hay comentarios:
Publicar un comentario