ERM06

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 10

EDUCANDO AL REY MICRO Nº6.

NUESTRO CONOCIMIENTO SOBRE PROGRAMACION DE PIC YA LLEGA A LA


UTILIZACION DEL MISMO PARA GENERAR UNA SECUENCIA DE ESTADOS EN
SU PUERTO DE SALIDA. EN ESTE ARTICULO VAMOS A PONER EN ORDEN
TODO LO APRENDIDO CON RESPECTO A LA GRABACION DE PICs.

ING. ALBERTO H. PICERNO


Ing. en Electrónica UTN - Miembro del cuerpo docente de APAE
E-mail [email protected]

6.1 PONIENDO LA CASA EN ORDEN

Cuando comenzamos esta serie de artículos dijimos que trataríamos de resolver el


problema de la programación de los microprocesadores gastando la menor cantidad posible
de dinero, para que todos tuvieran acceso a esta nueva tecnología. En el 2º artículo de la
serie cometí un grave error que debo reparar cuanto antes:
En este articulo mencionamos el programa MPASM; que es un ensamblador que
transforma el programa diseñado por nosotros en un idioma hexadecimal correspondiente
al PIC. Recuerde que el programa generado a mano tenia una extensión ASM (de
ASEMBLER" o ensamblador) y cuando lo aplicábamos al MPASM se generaban tres
archivos con terminaciones diferentes .err donde se encuentran los mensajes de error si se
cometió un error de sintaxis al escribir el archivo .asm; un archivo .lst con los renglones
numerados para ubicar en cual se produce el error y el mas importante, el archivo .hex que
contiene los datos que supuestamente entiende el microprocesador.
En realidad del microprocesador no entiende el archivo con terminación .hex. El
necesita otro programa que transforma el .hex en un lenguaje binario de datos en serie que
es lo único que entiende el microprocesador PIC.
El autor trabajó con un diskette que acompañaba a un curso de pics, en donde solo
se mencionaba al MPASM y aclaraba su carácter de gratuito. En ese diskette existía un
archivo llamado prog.exe al que se debía invocar para cargar el archivo .hex en el
microprocesador. Pero ocurre que este archivo forma parte de otro programa llamado EPIC
PROGRAMER. Este programa no es de uso libre y forma parte de un programador que se
vende en nuestro país. La editorial, no llego a entregar un solo diskette conteniendo el
archivo prog.exe ya que los diskettes de MPASM que entregara fueron obtenidos por
copiado de otro, obtenido a su ves en la pagina de "microchip" y que no contiene el archivo
prog.exe.
Por otro lado, el circuito del programador tiene un error y preferimos volver a
publicarlo agregando también algunas alternativas para los transistores. Ver figura 6.1.1.

figura 6.1.1. (ERM611-477P)

También cometimos errores en el programa del secuenciador de leds. Esto ya


ocurrió en otra oportunidad con otro programa y por lo tanto decidimos tomar el toro por
las astas. Para evitar futuros errores, vamos a programar el PIC, lo vamos a probar y luego
captaremos la pantalla del MPASM como si fuera una fotografía electrónica. De este modo
es imposible que se cometan errores de tipeo o de edición. En la figura 6.1.2 se muestra el
programa corregido con este nuevo método y les aseguro que el PIC lo interpretó
correctamente por lo que no puede tener errores.

Figura 6.1.2. (ERM612-820P)

También en el articulo anterior habíamos propuesto un ejercicio para los lectores


convirtiendo el secuenciador de 4 leds en otro de 8 leds, que posteriormente se transforma
en el controlador de llaves analógicas. Como algunos lectores nos hicieron llegar su pedido
de ayuda nos proponemos volver sobre el tema, sobre todo para aclarar como se utilizan los
archivos .err y .lst. También vamos a modificar el programa para que el lector vea que la
solución puede tener alternativas.

6.2 SECUENCIADOR DE 8 LEDS.

En la figura 6.2.1 puede observar un programa diferente al propuesto para rotar el


encendido de 4 leds. Este programa sirve para encender 8 leds en sucesión y con algunos
cambios para excitar las llaves analógicas del generador de escalera del artículo anterior.

Figura 6.2.1. (ERM621-790P)

En la primer sentencia se observa la declaración del microprocesador utilizado.


Como puede observar en lugar de utilizar el 16C84, como lo hicimos hasta ahora,
utilizamos el 16F84. La diferencia entre ambos radica en el tipo de memoria utilizada. El
16F84 contiene una memoria mas rápida del tipo EEPROM FLASH que se puede
reescribir un millón de veces. El almacenamiento de esta información esta garantizado por
el fabricante por un lapso mayor a 40 años con el dispositivo sin alimentación. El 16C84 es
totalmente similar, pero contiene una memoria EEPROM común, de acceso mas lento y
con menores garantías de mantenimiento de la información grabada. También se puede
utilizar el 16F83 similar al 16F84 pero con la mitad de capacidad de memoria y por lo
tanto mas barato. Cualquiera de los tres integrados puede alimentarse con tensiones de 4 a
6 V.
En el sector entre líneas punteadas, se declara donde se van a ubicar 3 variables que
utiliza el programa, llamadas ptob, j y k. Aquí se puede observar que la posición de
memoria puede declararse de diferentes modos. En el primer renglón solo escribimos 06.
Cuando no se coloca el numero entre acentos, ni se coloca una letra delante, se interpreta
que se trata de un número hexadecimal. Es decir que el programa ensamblador (el
MPASM) interpreta un número "por defecto" como si fuera hexadecimal.
En el segundo y tercer renglón se utiliza un criterio diferente. La letra H significa
que el número entre acentos será hexadecimal en este caso particular se utilizaran las
posiciones de memoria 1F y 1E para guardar a las variables j y k.
En la carpeta reset se ubica la parte del programa que se ejecuta solo cuando se
presiona el pulsador de reset. Se trata de 5 renglones o sentencias de las cuales la primera
ubica el control en la posición de memoria de programa cero. En la segunda se carga el
registro de trabajo w con el número cero. Observe que en este caso utilizamos otra notación
diferente; la letra B indica que a continuación se colocara un numero binario de 8 dígitos
(el PIC empleado solo puede manejar hasta 8 bits). En la siguiente sentencia se vuelca el
contenido del registro de trabajo en ptob, que en el copete se declaró ubicado en la posición
de memoria 06. Esta posición de memoria controla la disposición del puerto "B" como de
salida (mas adelante aclararemos que el uso del comando TRIS generará un mensaje de
precaución pero que por ahora no debemos tener en cuenta).
En la sentencia 4 de la carpeta "reset", se vuelve a cargar el registro de trabajo con
el binario "00000001"; esto no implica que se realice ninguna modificación en la
disposición de puertos ya que una ves cargada la posición de memoria, esta no se
modificará hasta que se produzca un reset. El registro w se utiliza para cargar información
nueva y ubicarla luego donde se desea. Por ejemplo en la sentencia 5 se descarga w en el
puerto de salida B, que con TRIS se declaro como de salida. Esto significa que se va a
encender el led ubicado en la pata 6 del mismo (B0). Aquí termina la carpeta reset y no se
volverá a ella hasta que se oprima reset o se desconecte y reconecte al microprocesador.
La siguiente carpeta se llama "mciclo" y comienza con el comando "rlf" utilizado
para mover posteriormente el bit puesto en uno del puerto B, una posición hacia la
izquierda. De cualquier modo al ejecutar rlf no se producirá todavía el cambio de estado en
las salidas. En la segunda sentencia de la carpeta "mciclo" se carga el registro de trabajo
pero ahora utilizamos otra notación diferente. La letra D indica que vamos a cargar un
número decimal y luego entre acentos decimos que ese numero será el 50 (esto es adecuado
para usar el microprocesador como generador de onda en escalera, pero debe cambiarse por
500 si se va a utilizar como secuenciador; como vemos este número determina la duración
de los escalones o el tiempo de encendido de cada led). En la tercer sentencia se descarga
el número 50 en la variable "j" que antes se declaró ubicada en la posición de memoria 1F.
Aquí empieza la carpeta "jciclo" de una sola sentencia, en donde el mismo número
50 se vuelca en la variable "k" que antes se declaró ubicada en la posición de memoria 1E.
La siguiente carpeta llamada "kciclo" se utilizará para decrementar estos números
50 ubicados en 1F y en 1E de modo de establecer una demora necesaria para que los
escalones o el encendido de los leds dure el valor que nosotros impongamos.
La primer sentencia de la carpeta "kciclo", decrementa k en una unidad. El
comando "decfsz" es del tipo condicional; si el valor de k es superior a cero (1 a 50 en
nuestro caso) el control del programa va a la sentencia siguiente que es incondicional y
reenvía el control de programa a la carpeta "kciclo". Cuando k llega al valor cero, envía el
control a la sentencia posterior a "goto", obviando el bucle "kciclo". En una palabra que los
dos primeros renglones de la carpeta "kciclo" decrementan el número 50 hasta cero y como
cada sentencia dura 1 µseg, ya que estamos usando un cristal de 4 MHz, podemos calcular
que este bucle del programa dura 100 µseg.
En la tercer sentencia se decrementa la variable "j", del mismo modo que se hiciera
con "k" pero se retorna a la carpeta "jciclo" para generar un nuevo bucle de 100 µseg. Esto
implica que los dos bucles tienen una duración de 100 x 100 µseg. es decir 10.000 µseg. o
10 mseg (con 500, cada bucle dura 1000 µseg y el producto es 1.000.000 de µseg o 1
seg.).
Transcurrido este tiempo el control pasa a la quinta sentencia de la carpeta "kciclo"
que es una sentencia incondicional goto que envía el control a la carpeta "mciclo". Recién
en este momento se produce la rotación de ptob apagándose el primer led y encendiéndose
el siguiente por otro lapso de tiempo de 1 Seg.
El programa ira cambiando el binario acumulado en el puerto B corriendo el 1 a la
izquierda hasta que salga del registro y vuelva a ingresar por la derecha. Ver figura 6.2.2.

figura 6.2.2. (ERM622-97P)

6.3 MENSAJES DE ERROR Y DE PRECAUCION.


Cuando uno tiene escrito el programa con el edit del DOS, debe verificarlo
exhaustivamente, controlando el encolumnado y los errores de sintaxis antes del punto y
coma separador. De cualquier modo siempre se puede deslizar un error que provocará una
falla en el programa. Si usted trabaja correctamente, el programa ensamblador MPASM le
avisará de los errores y le dará algunas advertencias útiles sobre el uso de algunas
sentencias.
En la figura 6.3.1 se observa como se modificó nuestro programa de modo que
presentara algunos errores. A continuación se abrió el MPASM y se ejecutó el archivo
modificado con intención de obtener el archivo HEX que requiere el programador de pics.
Pero si lo solicitamos se pueden generar los archivos .err y .lst que serán de gran utilidad
para encontrar errores de tipeo.

Figura 6.3.1. (ERM631-759P)

Veamos como se produce la limpieza de un programa con errores. Al ejecutar el


archivo con F10 del MPASM, el ensamblador ofrece un resultado como el indicado en la
figura 6.3.2.

figura 6.3.2. (ERM632-605P)

Observe que se indican 5 errores y 6 precauciones además de la indicación de la


cantidad de líneas totales ensambladas (30 en este caso). Ahora se deben encontrar las
líneas con errores y para eso se debe editar el archivo .ERR con el mismo editor de DOS
que estamos utilizando. El resultado se observa en la figura 6.3.3.

figura 6.3.3. (ERM633-610P)

Observe que por cada error o advertencia hay una línea de respuesta que comienza
con "WARNING" (advertencia) o ERROR (error) y un numero de código por el que se
pueden obtener mas detalles sobre el error o la advertencia, luego el nombre de archivo
analizado con el árbol de directorios correspondiente y el numero de línea que contiene el
error o advertencia. Luego un separador dos puntos y el tipo de error o advertencia.
Los mensajes de advertencia no impiden el desarrollo de la posterior programación,
pero los mensajes de error si. Vamos a atender primero los mensajes de error y luego los de
advertencia.
No es necesario numerar las líneas de programa a mano, y a veces no es
conveniente, porque la falta de un separador (punto y coma) puede generar líneas
fantasmas y confundirnos. Es preferible editar el archivo .lst (en nuestro caso
SECU8NO.LST) que tiene al mismo tiempo los mensajes de error y el numero de línea.
Ver figura 6.3.4.

figura 6.3.4. (ERM634-759P)

En la primer columna se marcan los errores o precauciones y la localización y valor


de las variables. En la segunda, el numero de línea y a continuación la línea de programa.
El primer error lo tenemos indicado antes de la línea 00005: y nos indica que las variables
o símbolos LA y VARIABLE no están definidos previamente y que se produzco un cambio
de operador. Mirando la línea se observa que el único problema es que falta el separador de
comentarios y el ensamblador confundió el comentario con una sentencia.
El siguiente error esta en la línea 12 y nos indica que el error se produce después de
la primer columna, entre paréntesis se encuentra el argumento u orden equivalente (molw
por movlw). En la línea 22 está el siguiente error y consiste en la orden GOTO escrita
como GORO.
Veamos ahora los mensajes de advertencia. El primero está en la primer línea y se
produce porque esta línea está dirigida al programador y no puede ser entendida por el
ensamblador. Se puede dejar sin inconvenientes. La siguiente está en la línea 12 y
seguramente va a desaparecer cuando se corrija la orden movlw. Luego pasamos a la línea
13 en donde esta la orden TRIS; ocurre que en los microprocesadores mas modernos esta
orden se modifica por otra mas compleja; por ahora se puede seguir usando TRIS para
programar los puertos si se usa el 16C84 o el 16F84. La siguiente precaución esta en la
línea 18 y se debe a que el decimal 50000 está fuera del rango admitido por el
microprocesador. Esta precaución debe ser considerada modificando el valor por uno
menor. La siguiente precaución esta en la línea 22 y se corregirá al reemplazar GORO por
GOTO.
Al corregir los errores y agregar el separador, el MPASM va a reportar solo dos
advertencias. Una en la línea 1 por la declaración del microprocesador dirigida al
programador de PICs y la otra es la referida a la orden TRIS que puede ser ignorado por el
momento. Ver figura 6.3.5.

figura 6.3.5. (ERM635-755P)


6.4 EL PROGRAMADOR NOPPP

El director de la revista, me pidió que les recordará a todos nuestro lectores que en
nuestra editorial entregamos gratuitamente el software NOPPP destinado también a
programar los PICC84, F83/F84 y muchos otros. En el número 138 de la edición argentina
se entregaron los circuitos y circuitos impresos de este extraordinario programador. Su
circuito es mas simple que el propuesto por el autor algunos números atrás. La única
diferencia entre los dos programadores, esta a nivel de encendido automático de las fuentes
a través del programa. El programador NOPPP requiere apagar las fuentes manualmente
previamente al retirado del PIC.
Lo mas importante es un pequeño cambio en el encabezado del programa. Todos los
programas que le entregamos en estos artículos estaban encabezados con :

list p=16C84 ;declaración del PIC a utilizar


;----------------------------------------------------------------

Si usted va a usar el NOPPP para programar sus PICs debe cambiar el encabezado
por las siguientes tres líneas:

PROCESOR 16F84
INCLUDE <p16f84.inc>
_config_XT_osc&_WDT_OFF&_PWRTE_on

Las letras XT indican que se esta usando un cristal común. Estas iniciales deben ser
cambiadas a RC cuando se usa un clock a resistor y capacitor, o a HS para cristales de alta
velocidad, o a LP para cristales o filtros cerámicos de baja frecuencia (menos de 100KHz).

6.5 CONCLUSIONES.

Este articulo fue para poner la casa en orden. En realidad nos falta algo aún para
que todo este ordenado: el autor esta analizando como modificar el programador para que
funcione con el programa NOPPP y probablemente el resultado se podrá ver en el próximo
artículo.
OK PICERNO
PALABRAS EQUIVALENTES A DIBUJOS 5672
PALABRAS REALES 2710
TOTAL 8332
NOTA DEL AUTOR: como hay dibujos y programas anteriores corregidos se factura como
un articulo de 1,5x
* VISTA INFERIOR
DB9 6 GND
J2 D0 D1 D2 D3

5 4 3 2 1

ACK

CI 1

10K
R12
14 1
+5 V
13 2
R9 12 3
10K 11 4
R6 10 5
R7 15 V
10K 9 6 1K
R8
+15 V
- + 8 7
78L12 10K
+ 7407
1N4001 +15 V R6
R3 5V 10uF 1K
C1 D1

+
RB7
1000uF 10K

RB6
D2
1N4001 VDD VPP C1
J3 GND

Q2
BC558B
78L05
C3
.01

9 10

8 11
R5
7 12
10K
6 13 +5 V
Q1
5 14

4 15
BC558B
R10
R11 3 16 470
1K 2 17

1 18 VERDE
VDD
VPP CI 2
ROJO MICRO
A PROGRAMAR

FIG.6.1.1 PROGRAMADOR DE PICS


ERM611-477P
PASO

0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 1 0 2
0 0 0 0 0 1 0 0 3
0 0 0 0 1 0 0 0 4
0 0 0 1 0 0 0 0 5
0 0 1 0 0 0 0 0 6
0 1 0 0 0 0 0 0 7
1 0 0 0 0 0 0 0 8

FIG.6.2.2 ROTACION DEL PUERTO B


ERM622-97P

También podría gustarte