Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Proteus C09
Proteus C09
2007
Memorias EVPROM
Montad el circuito de la figura.
Automatismo
Se trata de realizar un convertidor de binario
a BCD. Con las sondas inyectoras de
entrada conectaremos cdigo binario y en los
visualizadores aparecer cdigo BCD.
Esto quiere decir que una entrada igual a
1100 debe dar una salida igual 0001 0010.
Lo primero que realizaremos ser la tabla de
conversin, que aparece en la siguiente
diapositiva.
Tabla de la verdad
Decimal
A3 A2 A1 A0
0 0 0
1
2 0 0
3 0 0
4 0 1
5 0 1
6 0 1
7 0 1
8 1 0
9 1 0
10 1 0
11 1 0
12 1 1
13 1 1
14 1 1
15 1 1
Entradas
D7 D6 D5 D4
0 0
0
0 0 0 1
1 0
0
1 1
0
0 0
0
0 1
0
1 0
0
1 1
0
0 0
0
0 1
0
1 0
0
1 1
0
0 0
0
0 1
0
1 0
0
1 1
0
Salidas
D3 D2 D1 D0
0 0 0
0
0 0 0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
1
0 0 0
1
0 0 1
0
0 0 1
0
0 0 1
0
0 0 1
0
0 0 1
0
0 0 1
0
0 0 0
0
0 0 0
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
0 0 0
0 0 1
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
Tabla de la verdad
Para grabar la EVPROM necesitaremos
crear un fichero binario con la tabla anterior.
Para ello podemos emplear, a falta de otra
herramienta ms cmoda, el bloc de notas.
Y para ello debemos saber cmo se
interpreta un fichero binario estndar tipo
INTEL 8 bits.
N de bytes
del paquete,
en
hexadecimal
N de orden del
1er. Byte, dentro
del paquete
:100000000001020304050607080910111213141554
Separacin de
comienzo del paquete
:00000001FF
La ltima lnea
es fija
Primer byte
a grabar
Siguientes bytes
Cdigo de
control
Fichero binario
Una vez escritas estas dos filas de datos en
el bloc de notas, salvaremos el fichero con
extensin .hex. En nuestro ejemplo le
hemos dado el nombre de
EVPROM01.hex
Grabacin de la EVPROM
Para grabar la EVPROM la seleccionamos
y la editamos. Se abrir la ventana de la
figura.
Funcionamiento
Arrancad la simulacin y veris cmo se
produce la conversin de binario a BCD.
Dispositivos PLDs
Montad al circuito de la figura.
Dispositivos PLDs
La sonda del reloj est en:
Y as la programamos
Dispositivos PLDs
Vamos a tomar como ejemplo una GAL22V10.
En estos dispositivos podemos crear el fichero
de grabacin en formato de fusin de fusibles
estndar (JEDEC), o en nuestro socorrido
bloc de notas, de acuerdo al formato que se
da en el fichero GAL22V10VIRGEN.TXT.
El fichero del ejercicio se llama
GAL22V10CONTAPAR_IMPAR
Grabacin de la GAL
Al igual que hicimos con la EVPROM,
seleccionamos la GAL y la editamos.
Pinchamos ah para
buscar el fichero de
grabacin
Seleccionar fichero
Es posible que haya que desplegar la ventana
Tipo de ficheros para que aparezcan los
.txt
1
Pinchad aqu para
elegir Todos los tipos
de ficheros
2 Elegid el fichero
.txt a grabar
Grabacin de la GAL
Una vez elegido el fichero, aceptamos... y
grabada la GAL.
Aceptamos
Fichero elegido
Prueba de funcionamiento
El diseo corresponde a un contador que sigue
la secuencia pares o impares, en contaje BCD.
Con la entrada M cambiamos de secuencia,
si la ponemos a 0. Para que siga la secuencia
deseada debe estar a 1. Esto quiere decir
que si ponemos M siempre a 0, como estar
cambiando de secuencia continuamente,
tendremos un contador BCD.
Las entradas de Preset y Reset son sncronas
en la GAL22V10.
Prueba de funcionamiento
Cuando deseemos cambiar la secuencia
llevaremos M a 0. Cuando el contador
haya pasado a la secuencia contraria
volveremos a poner M a 1 para que siga
en la nueva secuencia.
Microcontroladores
Circuito base
Diseemos el circuito de la figura.
Men Source
Disponiendo del fichero fuente ya podemos
configurar todo el entorno PROTEUS para
que puedan generarse el resto de ficheros
necesarios.
Seleccionemos el men Source.
Eleccin de herramienta
La operacin siguiente es decirle a
PROTEUS qu herramienta, de las varias
que lleva, debe utilizar para generar el resto
de ficheros necesarios para simulacin.
Elegiremos MPASM, y aceptaremos.
Pinchamos aqu
para desplegar lista
de herramientas
Se elige sta
Abrir el editor
Y si pinchamos sobre l se abre una ventana de edicin
donde podemos retocar o modificar el cdigo ensamblador.
Ruta de Herramientas
Y, aunque PROTEUS ya da la ruta completa
donde se encuentra esa herramienta,
deberemos asegurarnos que el camino es el
que muestra la figura. Si no fuese as,
mediante el botn Browse deberemos
buscar el fichero MPASM.EXE, dentro de la
carpeta Tools, de PROTEUS.
Fichero HEX
En la misma ventana anterior deberemos
asegurarnos que las opciones del apartado
Make Rules estn como en la figura. Aqu
observamos que se obtendr un fichero tipo
HEX a partir de un ASM. Aqul ser el que
grabaremos en el micro.
Cdigo LST
El ltimo apartado de la ventana de
Definicin de Herramientas para Generacin
de Cdigos nos encontramos con la
Extraccin de Datos para Depuracin del
programa. Debe de estar como en la figura.
Buscar editor
El paso siguiente es asegurarnos de que el
programa de edicin que empleara
PROTEUS, en caso de retoques o
modificaciones, es el apropiado. Para ello
pinchad como en la figura.
Eleccin de editor
Se abre la ventana de seleccin de editores.
Elegid como en la figura; es lo que sale por
defecto.
Construccin de ficheros
Establecidas las herramientas, slo falta
decirle que nos construya todo. Eso lo
conseguimos con la opcin de la figura.
Hay que asegurarse que estn, en la misma
carpeta que el fichero fuente, todas las
subrutinas que emplee el programa.
Preparando la simulacin
Con los cdigos generados ya podemos
arrancar la simulacin.
Y para ello lo primero que tenemos que
hacer es grabar el micro con el fichero
hexadecimal saludo.HEX.
Simulacin VSM
Arrancad la simulacin VSM y veris el
circuito as:
Programa a realizar
Vamos a estudiar las herramientas de
depuracin paso a paso analizando un
programa sencillo.
Diseemos el circuito que se muestra en la
figura de la siguiente diapositiva y
realizemos el programa ensamblador para
conseguir una intermitencia de los
visualizadores con cadencia de un segundo.
Este programa se llamar contador.asm.
Circuito a montar
Circuito a montar.
Programa de contador
El programa realiza un contador BCD, que
visualiza el micro en un display de 7
segmentos de ctodo comn.
El fichero del programa se denomina
contador.asm, y puede abrirse con el bloc de
notas.
Con el bloc de notas podemos escribir
cualquier programa para simulacin, con la
nica precaucin de guardarlo con la
extensin .asm.
Generacin de ficheros
Seguid paso a paso la explicacin de las
diapositivas 24 a 46 .
Si todo ha ido perfectamente la simulacin
VSM se realizar correctamente y se
visualizar un contador BCD con una
cadencia de 1 seg.
Pero vamos a realizar el seguimiento del
programa paso a paso, para analizar el
cambio de los diversos bloques internos del
microcontrolador.
En este men
Edicin de la ventana
Si pinchamos con
secundario sobre
cualquier zona de la
ventana del Cdigo
Fuente se edita y
aparece la ventana
emergente de la figura.
Edicin de la ventana
Al editar la ventana de Cdigo Fuente nos aparecen
tres opciones para ajustar el aspecto de la ventana
a nuestro gusto.
La primera de las tres opciones nos permite mostrar
u ocultar la numeracin de lneas de programa; la
segunda opcin hace lo mismo con las direcciones
de memoria, y la tercera, con los cdigos de
operacin de las instrucciones.
La figura est programada para que se muestre, en
la ventana de Cdigo Fuente, solamente las
direcciones de memoria.
Edicin de la ventana
Si visualizamos las lneas del programa y el
cdigo hexadecimal de las instrucciones, la
programacin de las opciones quedar as:
Edicin de la ventana
Y el aspecto de la ventana de programa ser
ste:
Lneas del
programa
Direcciones
del programa
Cdigo hexadecimal
de las instrucciones
Edicin de la ventana
Dejad visibles las lneas y la direccin.
Edicin de la ventana
En la parte inferior de la ventana de edicin
disponemos de dos opciones que nos
permitirn personalizar las letras y los
colores de la ventana de Cdigo Fuente.
Probad estas opciones.
Ventana de Registros
Para ver la ventana que nos muestra todos
los registros internos del micro, pinchad
sobre la opcin
Ventana de Registros
Y obtenemos la ventana
Zona de cdigos
ASCII
Ir a direccin concreta de la
Memoria de Datos
El resultado es que nos lleva a la direccin
48 decimal, que en hexadecimal es la 30.
Visualizacin-ocultacin de datos
La opcin mostrada permite mostrar u ocultar
los datos ASCII de la ventana.
Con la opcin validada
observaremos los datos
del banco en sus cdigos
ASCII
Desactivando la opcin
vemos que en el banco
han desaparecido los
cdigos ASCII del
contenido de la memoria
Resaltar cambios
aviso anterior
hubisemos aceptado,
ahora veramos los
valores iniciales
Si volvemos a pinchar
sobre la opcin
Seleccin de visualizacin de
datos en agrupados en doble
palabra de dos bytes cada una,
empezando por el LSB
Seleccin de visualizacin de
datos en agrupados en doble
palabra de dos bytes cada una,
empezando por el MSB
Y as se vern los datos
segn esta forma. Dejad el
modo Byte para seguir
Ventana de Pila
Seleccionando la opcin 8 se obtiene la
ventana de pila.
Ventana de Pila
Aspecto de la ventana de la Pila interna del
micro. La entrada ltima es la que est
marcada con la flecha. Es a la direccin que
saltar la CPU cuando encuentre una
instruccin de retorno, o donde se grabar la
direccin con un nuevo salto a subrutina.
ltima entrada en
pila
Ventana de observacin
Esta ventana se obtiene al seleccionar la
opcin 2.
Ventana de observacin
Tiene el aspecto de la figura, con un mnimo
de dos columnas de observacin.
Separacin de columnas
Si llevamos el cursor a la lnea de separacin
entre columnas, cambiar de aspecto y
podemos arrastrar para variar la separacin
entre aqullas.
Pinchad para
validar
Columna para
ver el valor de
la variable
antes del
cambio
Columna para
comentarios sobre
las variables
Valor actual
de la variable
Pinchamos aqu, o
pulsamos espacio, para
minimizar la ventana
As queda minimizada
Utilidad de la ventana de
observacin
Esta ventana es muy til para extraer aparte
ciertos registros, que son de especial inters
en su observacin.
Vamos a sacar a la ventana tres registros de
todos los posibles observables.
Utilidad de la ventana de
observacin
Esta ventana es muy til para extraer aparte
ciertos registros, que son de especial inters
en su observacin.
Vamos a sacar a la ventana dos registros de
todos los posibles observables.
En primer lugar vamos a dejar la ventana con
tres columnas de observacin, tal y como se
ve en la siguiente diapositiva.
Utilidad de la ventana de
observacin
Recordad que las columnas Name y Value
siempre aparecen por defecto. Es la
visualizacin mnima que se puede desear.
Pincharemos aqu
para aadir esta
columna
Pincharemos
aqu para aadir
la rejilla
As queda
la ventana
Conjunto de registros
observables en la
ventana
Como el programa se
encuentra en el inicio, el PCL
tendr el valor 0. Tenemos el
valor en binario pero podemos
cambiarlo a hexadecimal, si es
ms cmodo
Opciones de
visualizacin
Opciones de
visualizacin
Aadimos y
aceptamos
Bsqueda de direccin
Si deseamos ir a una determinada
instruccin, tendremos que editar la ventana
del programa y seleccionar la opcin de la
figura.
Bsqueda de direccin
Este es el resultado:
sta s es la
instruccin 5 del
programa, que est
en la direccin 5
Bsqueda de palabra
La siguiente opcin se emplea para localizar una
determinada palabra del texto. Para empezar a
buscar la palabra desde el principio ser necesario
llevar el cursor de la pantalla del programa al inicio.
Bsqueda de palabra
Ahora editamos y elegimos la opcin de
bsqueda
Bsqueda de palabra
Con la accin anterior se abrir una ventana
que nos pedir la palabra a buscar, con
algunas condiciones de bsqueda.
1 Escribimos aqu el
texto que se ve.
Esta opcin dice que va a
buscar cualquier palabra
que contenga exactamente
lo que hemos escrito. Y al
decir exactamente se
tendr en cuenta las
maysculas o minsculas
2 Activamos esta
opcin
Pinchamos
Bsqueda de palabra
El resultado es:
Pinchando aqu
contina la bsqueda
hacia adelante
En la lnea 4 ha
encontrado el
trmino contador,
que tiene los
caracteres
exactamente que le
hemos puesto en el
texto de bsqueda.
Observad cmo no
se ha detenido en la
lnea 2, porque la
palabra es la misma
pero la C es
mayscula.
Pinchando aqu
continuar la bsqueda
hacia atrs
Bsqueda de palabra
Si optamos por encontrar una palabra completa deberemos
escribir la palabra deseada y activar la casilla Only Whole
Words? En el ejemplo se ha buscado la palabra contador.
Palabra a buscar.
Ahora slo importa
la palabra, no las
maysculas
2 da como
1 Al pinchar aqu
resultado la
detencin en esta
lnea
Bsqueda de palabra
Pinchando repetidamente sobre Next iremos
viendo las siguientes lneas que cumplen la
condicin de bsqueda; si pinchamos sobre
Previous iremos viendo las lneas anteriores.
Bsqueda de palabra
La ventana de bsqueda memoriza los
trminos introducidos.
En la figura se aprecian varias entradas
empleadas como prueba.
Pinchando aqu se
despliega el listado
de bsquedas
realizadas
Bsqueda de palabra
Si deseamos hacer bsquedas sucesivas
podemos optar por la solucin rpida del
teclado, pulsando Ctrl + G, o mediante la
opcin desplegada
Anlisis de la ejecucin
Vistas las opciones de edicin, vamos a
entrar en el anlisis de la ejecucin del
programa.
Vamos a visualizar en pantalla los siguientes
elementos: el esquema, el cdigo fuente, los
registros internos del micro, la RAM de
registros y la pila.
Anlisis de la ejecucin
Parad la simulacin paso a paso y volvedla a
arrancar.
Pinchamos para
detener
Se activan
Pinchamos en la
instruccin de la
direccin 0h
Puntos de detencin
Con el icono de la figura podemos colocar
puntos de detencin en las instrucciones que
deseemos.
Puntos de detencin
Con esta utilidad podremos hacer que el
programa funcione de forma continua hasta
encontrar el punto de detencin.
Es una forma muy til de depuracin el
ejecutar rpidamente todo lo que est
probado y, nicamente detener el programa
en las zonas de dudas.
Puntos de detencin
Colocaremos un punto de detencin en la
instruccin de la direccin 0006h.
La forma ms rpida es pinchar dos veces
sobre la instruccin de la direccin deseada.
Doble clic sobre la direccin 0006h.
Aparece un punto rojo
sobre esa lnea que
indica punto de
detencin.
Puntos de detencin
Otra forma de colocar el punto es situar el
cursor en la instruccin deseada y pinchar
sobre el icono del punto de detencin
Y pinchamos aqu
Colocamos el
cursor
Arrancando el anlisis
Con la pantalla del circuito en paso a paso
visible pulsemos F12 para iniciar la
simulacin desde la primera instruccin.
El simulador se detiene en el punto de
detencin que hemos fijado y nos muestra
una cantidad en el display.
Analicemos el programa y lo mostrado por la
simulacin.
Programacin de TRISB
En las dos primeras instrucciones
seleccionamos el banco 1 de registros RAM
de la CPU para, con ello, poder borrar el
registro TRISB que nos programa el puerto B
como ocho lneas de salida. Esto ltimo se
programa en la tercera instruccin.
Si observamos TRISB, en la ventana de
registros internos de la CPU, veremos que
tiene sus ocho lneas a 0. O sea, sea ha
programado correctamente el registro de
direccin del puerto B
Explicacin a la visualizacin
Por qu se ve ese nmero en el display al inicio?
Porque al programar el puerto B como salida, en sus
lneas saldr el contenido del registro PORTB, que
tiene ese valor tras el reset inicial puesto que an no
lo hemos tocado.
Aunque este valor dure muy poco (porque tras unas
pocas instrucciones ya saldr el cero), puede ser
una buena costumbre cargar PORTB con el valor
deseado antes de programar la direccin. Pero todo
esto es meterse en el micro, que no es el objetivo de
este curso.
Programacin de TRISB
En la figura se observan todos los registros
internos de la CPU.
Puerto B
como salida
Variable Conta
En la cuarta y quinta instruccin (direcciones 3 y 4)
se vuelve al banco 0 de registros RAM.
En la instruccin sexta se borra el registro Conta ,
que en la lnea 36 del programa se defini como
registro con direccin 20h.
Observad cmo el registro 20h est a 0. Y no est
resaltado porque tena ese valor por defecto en la
conexin y no ha cambiado.
Variable Conta a cero
Aadimos punto de
detencin
Continuacin de simulacin
Y as podramos seguir hasta detectar el
problema en nuestro programa.
Pero modifiquemos el programa para aadir
un error y poder detectarlo.
El error introducido va a provocar que el
nmero siguiente al 3 no sea el 4 no sea el
cero.
A este programa defectuoso le llamaremos
contadorf.asm.
Deteccin de fallo 1
Paremos la simulacin que tenamos en
marcha.
Preparemos el nuevo programa para ser
ensamblado.
De nuevo vamos al men
apropiado para cargar el
programa objeto de anlisis.
Deteccin de fallo 2
En la ventana de la figura podemos ver el
programa que tenamos ensamblado.
Deteccin de fallo 3
Buscamos el programa y lo abrimos.
Deteccin de fallo 4
En la ventana siguiente aceptamos.
Ya se ve el nuevo programa
Aceptamos
Deteccin de fallo 5
En el men Source ya puede verse el nuevo
programa a ensamblar.
Deteccin de fallo 6
Ahora ensamblamos el nuevo programa y, si
todo va bien, ya tenemos todos los ficheros
que necesita Proteus para la simulacin.
Ahora grabaremos el fichero contadorf.HEX
en el micro y arrancamos la simulacin para
poder quitar los puntos de detencin. Borrad,
tambin, las huellas de los puntos anteriores.
Detened la simulacin y volved a iniciarla.
Observad el comportamiento.
El error es que viene el 9 en lugar del 4.
Deteccin de fallo 7
Analizando detenidamente el
comportamiento, podemos deducir que hay
partes que no fallan.
Entonces nos centraremos en detener el
programa en la parte de la decodificacin en
siete segmentos de la cantidad de la variable
Conta. Pondremos un punto de detencin
antes de entrar en la decodificacin y otro
cuando ya ha decodificado y enviado al
puerto B.
Deteccin de fallo 8
Dejaremos los puntos tal y como aparecen en
la figura.
En esta lnea ya tenemos el
valor del contador en BCD y
est a punto de convertirlo en
7 segmentos
Deteccin de fallo 9
Comparando los resultados de los dos pasos
en las dos detenciones podremos cercar ms
el problema.
Arranquemos la simulacin e id pulsando F12
hasta que aparezca el 3 en el display.
En este momento deberemos tener la pantalla
de la figura siguiente.
Deteccin de fallo 10
Deteccin de fallo 11
Hasta aqu todo correcto, y estamos a punto
de temporizar el segundo, incrementar
Conta, comprobar si es mayor que nueve
para poner a cero y detenerse antes de
decodificar a 7 segmentos y enviar al display.
Veamos si Conta tiene su valor correcto.
Valor correcto
Deteccin de fallo 12
Pulsemos F12 para que temporice 1 segundo
y realice el resto de instrucciones hasta
detenerse de nuevo.
Todo correcto.
Veamos si la variable Conta se ha
incrementado correctamente para mostrar el
cuatro.
Correcto
Deteccin de fallo 13
Segn el programa que hemos realizado,
antes de entrar en la subrutina COD, el
registro W debe tener el valor BCD para ser
transformado en cdigo de siete segmentos.
Observemos qu valor tiene W.
Correcto: el 4.
Deteccin de fallo 14
Pues volvamos a pulsar F12 para que se
realice la decodificacin y el envo del dato
siete segmentos al puerto B.
Ah tenemos el error. Eso quiere decir que de
la subrutina COD ha salido el dato errneo.
Pues vayamos a analizar los pasos que se
realizan en la subrutina, colocando en ella un
punto de detencin en las instrucciones que
intervienen hasta llegar a la salida con el valor
4.
Deteccin de fallo 15
Puntos aadidos en la subrutina.
Deteccin de fallo 16
Dejemos el programa cuando el display
muestra el 3 y se est a punto de entrar en la
subrutina de decodificacin 7 segmentos.
Pulsemos nuevamente F12. Ahora se ha
detenido el simulador en la primera
instruccin de la subrutina. Observa que la
prxima instruccin es sumarle W al
contenido del PCL, que en este momento
tiene la direccin 0011h. Y aqu hay que
explicar cmo trabaja el PCL para entenderlo.
Deteccin de fallo 17
El PCL se incrementa nada ms decodificar la
instruccin, antes de ejecutarla. Eso quiere
decir que cuando vaya a sumar W, el PCL
tendr la direccin 0012h, lo que quiere decir
que el programa continuar en la direccin
0012h + W = 0012h + 4h = 0016h.
Pero asegurmonos que W tiene el valor
correcto y que el programa contina en la
direccin prevista. Pulsad F12 y observad.
Deteccin de fallo 18
Todo correcto: el programa ha saltado a la
direccin 0016h.
Lo que hace la prxima instruccin es
retornar de subrutina pero cargando W con el
valor literal que lleva la instruccin en su
cdigo. Esto significa que al retornar, W
debera salir con el cdigo 7 segmentos del 4.
Ejecutemos la instruccin y observemos.
Ah tenemos el fallo.
Deteccin de fallo 19
Tal y como hemos conectado el display al
puerto B, para que se vea el 4 las lneas del
puerto deberan estar as:
x1100110
Sin embargo el puerto B, y por lo tanto W, no
tienen ese valor; falla el bit de menos peso,
como puede apreciarse en las dos figuras de
la diapositiva siguiente.
Deteccin de fallo 20
El bit de menor peso
debera ser un 0
Deteccin de fallo 21
Repasamos la subrutina y vemos que el valor
con que se carga W para la salida debera ser
01100110
Sin embargo es 0 1 1 0 0 1 1 1
Ah est el error
FINAL
En el prximo captulo se estudian los
dispositivos que provocan detencin en la
simulacin
2007