Professional Documents
Culture Documents
Memorias EVPROM
Montemos el siguiente circuito.
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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Entradas A3 A2 A1 A0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Salidas D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 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.
:100000000001020304050607080910111213141554
Separacin de comienzo del paquete
:00000001FF
Siguientes bytes
Cdigo de control
Archivo binario
Una vez escritas estas dos filas de datos en el bloc de notas, salvaremos el archivo con extensin .hex. En este 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.
Pulsamos esta carpeta y buscamos el fichero .hex a grabar. Despus aceptamos y ya est grabada la memoria
Funcionamiento
Iniciar la simulacin y se produce la conversin de binario a BCD.
Dispositivos PLDs
Montar 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 el bloc de notas, de acuerdo al formato que se da en el fichero GAL22V10VIRGEN.TXT. El archivo del ejercicio se llama GAL22V10CONTAPAR_IMPAR
Grabacin de la GAL
Al igual que hicimos con la EVPROM, seleccionamos la GAL y la editamos.
Seleccionar fichero
Es posible que haya que desplegar la ventana Tipo de ficheros para que aparezcan los .txt
1 Pulsar aqu para
elegir Todos los tipos de ficheros
2 Elegir el fichero
.txt a grabar
Grabacin de la GAL
Una vez escogido el fichero, aceptamos, y se grabada la GAL.
Aceptamos
Fichero elegido
Prueba de funcionamiento
El diseo corresponde a un contador que sigue la secuencia pares o impares, en sistema BCD. (Binario Codificado a Decimal). 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.
Abrir el editor
Y si pulsamos 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 es 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 genera un fichero tipo HEX a partir de un ASM. Este archivo hex 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 pulsar como en la figura.
Eleccin de editor
Se abre la ventana de seleccin de editores. Elegir 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 iniciar la simulacin. Y para ello lo primero que tenemos que hacer es grabar el micro con el fichero hexadecimal saludo.HEX.
Simulacin VSM
Iniciar la simulacin VSM y veremos 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 frecuencia 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
Repetir paso a paso la explicacin de las diapositivas 24 a 46 . Si todo esta correcto la simulacin VSM se realizar correctamente y se visualizar un contador BCD con una frecuencia 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 pulsamos 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:
Edicin de la ventana
Mantener 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. Prueben estas opciones.
Ventana de Registros
Para ver la ventana que nos muestra todos los registros internos del micro, pulsar sobre la opcin
Ventana de Registros
Y obtenemos la ventana
donde se aprecian los registros ms utilizados del micro. Piulsando con secundario dentro de la ventana se pueden cambiar colores y letras.
Se abre una ventana para escribir la direccin a l que deseamos ir. Escribir 48 y aceptar
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
Esta opcin permite que se resalten los valores que han cambiado al arrancar el programa
1 Pulsando sobre
esta opcin nos mostrar los valores iniciales del banco
Aqu se ven los datos agrupados en palabras de dos bytes, empezando por el LSB
Aqu se ven los datos agrupados en palabras de dos bytes, empezando por el MSB
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. Dejar el modo Byte para seguir
Observemos que las posiciones no grabadas estn a 1. Por eso, con los 14 bits de la instruccin la cantidad visualizada sera el 3FFFh, pero empezando por el LSB, FF3Fh
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.
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.
Nos servir para seleccionar los registros y variables que deseamos observar durante la depuracin.
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.
As queda minimizada
As queda 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
Aadimos y aceptamos
El resultado es que se resaltar la lnea 5 del programa. Atencin, que es lnea 5, no direccin 5
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:
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
seleccionamos
Bsqueda de palabra
El resultado es:
En la lnea 4 ha encontrado el trmino contador, que tiene los caracteres exactamente que le hemos puesto en el texto de bsqueda. observemos cmo no se ha detenido en la lnea 2, porque la palabra es la misma pero la C es mayscula.
Pulsando aqu continuar la bsqueda hacia atrs Pulsando aqu contina la bsqueda hacia adelante
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.
Bsqueda de palabra
Pulsando repetidamente sobre Next iremos viendo las siguientes lneas que cumplen la condicin de bsqueda; si pulsamos 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.
Piulsando 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
detener la simulacin paso a paso y volver a arrancar.
Pulsamos para detener
Se activan
Si pulsamos este icono se iniciar la simulacin continua. Aunque nuestro objetivo es simular paso a paso, vamos a pulsar aqu para ver la respuesta a la simulacin continua.
Pulsando sobre este botn se ejecutan todas las instrucciones paso a paso, incluidas las contenidas en subrutinas
Pulsando sobre este botn se ejecuta rpidamente lo que quede de subrutina. Es til para probar subrutinas que provocan que el programa d muchas vueltas sobre un mismo bucle
Puntos de detencin
Con el icono de la figura podemos colocar puntos de detencin en las instrucciones que deseemos.
Cuando el simulador encuentra un punto de detencin sobre una instruccin, provoca la detencin del Contador de Programa en esa instruccin (antes de que se ejecute).
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 pulsar 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 pulsar sobre el icono del punto de detencin
Y pulsamos 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.
Programacin de TRISB
En la figura se observan todos los registros internos de la CPU.
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. Observemos 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
El valor siete segmentos del cero, que presentaba W en la diapositiva 156, ahora lo tiene PORTB
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 y sea el nueve. 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 iniciamos la simulacin para poder quitar los puntos de detencin. Borramos, tambin, las huellas de los puntos anteriores. Detener la simulacin y volver a iniciarla. Observemos el comportamiento.
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. Observar 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. Pulsar F12 y observar.
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
Falla el LSB, que es el que provoca el encendido del segmento superior del display
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