Читать книгу Compilador C CCS y Simulador Proteus para Microcontroladores PIC - Eduardo García Breijo - Страница 9
1.2 Captura electrónica: entorno gráfico ISIS
ОглавлениеISIS es un potente programa de diseño electrónico que permite realizar esquemas que pueden ser simulados en el entorno VSM o pasados a un circuito impreso ya en el entorno ARES.
Posee una muy buena colección de librerías de modelos tanto para dibujar, simular o para las placas. Además, permite la creación de nuevos componentes, su modelización para su simulación e, incluso, la posibilidad de solicitar al fabricante (Labcenter Electronics) que cree un nuevo modelo.
Sin entrar profundamente en como utilizar dicho programa (requeriría un libro sólo para ello), a continuación se explican las bases para dibujar cualquier circuito electrónico. El programa ISIS posee un entorno de trabajo (figura 2) formado por distintas barras de herramientas y la ventana de trabajo.
Figura 2. El entorno de trabajo del programa ISIS
Varios de estos menús también se pueden utilizar con la ayuda del botón derecho del ratón. Al pulsarlo en cualquier parte del entorno de trabajo aparece un menú contextual donde se pueden ir obteniendo los distintos submenús de trabajo (figura3).
Figura 3. Submenús de trabajo del botón derecho del ratón
Para dibujar, lo primero es colocar los distintos componentes en la hoja de trabajo. Para ello, se selecciona el modo componentes (figura 4) y, acto seguido, realizar una pulsación sobre el botón P de la ventana de componentes y librerías (figura 5).
Figura 4. Modo componentes
Figura 5. Boton “pick”
Tras activar el botón P se abre la ventana para la edición de componentes (figura 6) donde se puede buscar el componente adecuado y comprobar sus características.
Al localizar el componente adecuado se realiza una doble pulsación en él, de tal forma que aparezca en la ventana de componentes y librerías (figura 7). Se puede realizar esta acción tantas veces como componentes se quieran incorporar al esquema. Una vez finalizado el proceso se puede cerrar la ventana de edición de componentes.
Figura 6. Ventana para la edición de componentes
Figura 7. Los componentes añadidos
Para situar un componente en el esquema tan sólo debemos seleccionarlo de la lista. Al hacerlo se puede comprobar su orientación (tal como se representará en el esquema) en la ventana de edición (figura 8). Si deseamos modificar la rotación o la reflexión del componente podemos acceder a ello a través de la barra de herramientas correspondiente (figura 9).
Haciéndolo de esta forma, “todos” los componentes de la lista tendrán la misma orientación (si se desea orientar un único componente deberemos hacerlo una vez ya situado en el esquema).
Figura 8. Selección y orientación del componente
Figura 9. Barra de rotación y reflexión
Ahora sólo falta realizar una pulsación sobre la ventana de trabajo y se colocará el componente. El cursor del ratón se convierte en un lápiz blanco (figura 10). Se pueden colocar varios componentes del mismo tipo simplemente realizando varias pulsaciones. Para terminar de colocar un componente se debe seleccionar otro componente de la lista o pasar a otro modo de trabajo.
Figura 10. Cursor en el modo de colocación
Es importante activar la herramienta de referencia automática (Real Time Annotation). De esta forma, los componentes tendrán una referencia distinta y de forma consecutiva; en los circuitos integrados con varios componentes encapsulados también se referenciarán según dicho encapsulado (U1A, U1B, etc.). Esta herramienta se activa o desactiva desde la opción de menú TOOLS → Real Time Annotation.
Una vez situados los componentes en el área de trabajo se pueden mover, al pasar por encima del componente el cursor se convierte en una mano (figura 11) y al realizar una pulsación, el cursor se transforma en una mano con una cruz, indicando que se puede mover el componente (quedan seleccionados al ponerse en rojo) y se puede arrastrar (atención: si se vuelve a realizar otra pulsación del botón izquierdo se editan las características del componente). También se puede cambiar su orientación utilizando los comandos de rotación y reflexión a través de una pulsación del botón derecho del ratón (figura 12) y se pueden eliminar con dos pulsaciones con el botón derecho sobre ellos (o con el botón derecho y el comando Delete Objet).
Figura 11. El cursor en modo de selección y mover
Figura 12. Menú contextual de un componente activado por el botón derecho del ratón
Todas estás acciones se pueden realizar individualmente o de forma colectiva, es decir, se pueden agrupar varios componentes a través de pulsaciones consecutivas sobre ellos (manteniendo la tecla <Control> pulsada) o dibujando una ventana con el botón izquierdo y arrastrándola sobre los mismos (figura 14).
Figura 13. Los componentes en el área de trabajo
Una vez seleccionado el conjunto de componentes (se marcan todos en rojo) debe mos utilizar la herramienta de grupo (figura 15), que también aparece tras pulsar el botón derecho. Con esta herramienta se pueden copiar, mover, rotar o eliminar los componentes seleccionados.
Figura 14. Selección de varios componentes
Figura 15. La herramienta de grupo
Para unir los componentes con cables hay que situarse en los extremos de los terminales, el cursor se convierte en un lápiz verde (figura 16). Ahora se pueden ejecutar dos acciones o ir marcando el camino hasta el destino con distintas pulsaciones (figura 17) o realizar, directamente, una pulsación en el destino y dejar que ISIS realice el camino. Para ello, debe estar activada la herramienta TOOLS → Wire Autorouter.
Figura 16. Inicio de cable
Figura 17. Circuito “a mano”
Las uniones entre cables se pueden realizar de forma automática. Para ello, mientras se traza un camino debemos realizar una pulsación sobre el cable objeto de la unión eléctrica (figura 18). También se pueden realizar de forma manual mediante el modo de unión (figura 19); en este modo tan sólo hay que ir haciendo pulsaciones sobre los puntos donde deseamos realizar la unión.
Figura 18. Unión eléctrica entre cables
Figura 19. Modo de unión
Se puede modificar el trazado de los cables. Para ello, se realiza una pulsación sobre el cable, en ese instante el cursor se convierte en una doble flecha (figura 20) y se puede arrastrar el ratón para modificar el cable.
Figura 20. Mover los cables
También se pueden utilizar buses para las uniones multicable. Los buses permiten conectar varios terminales entre sí utilizando un único elemento (figura 21); en este caso, el cursor se convierte en un lápiz azul (figura 22). Pero para distinguir los distintos cables que forman parte del bus y distribuirlos en la entrada y en la salida se deben etiquetar mediante labels. En el caso de los cables se indicará una etiqueta única LCD0, LCD1, etc., y al bus una etiqueta conjunta según el formato LCD[0..3] que indique el nombre y la cantidad de cables que lo forman.
Figura 21. Cableado por bus
Figura 22. Cursor en modo de trazado de bus
El etiquetado también permite unir cables virtualmente. Para ello, tan sólo es necesario que los dos cables se llamen igual aunque no estén conectados entre sí. Para etiquetar cables o buses se utiliza el modo label (figura 23). Al activar este modo y realizar una pulsación sobre un cable o bus se abre una ventana donde podemos introducir la etiqueta, además de seleccionar posición, orientación y estilo (figura 24).
Figura 23. Modo label
Figura 24. Ventana de edición de etiquetas
Otro modo de unión virtual es a través de terminales. Al activar el modo terminal (figura 25) se pueden seleccionar distintos tipos de terminales, entre ellos el utilizado por defecto (default). Al utilizar este terminal en varios componentes y darle el mismo nombre en todos ellos se consigue una unión eléctrica.
Figura 25. Modo terminal
Figura 26. Unión eléctrica a través de terminales
Mediante este modo también se pueden colocar las masas y alimentaciones del circuito utilizando las opciones Ground y Power (figura 26). De esta forma se puede finalizar el circuito (figura 27).
Figura 27. Circuito cableado
Tan sólo queda modificar las características de los componentes que lo requieran, por ejemplo modificando el valor de los componentes pasivos. Para ello, se selecciona un componente realizando una pulsación con el botón derecho, aparece el menú contextual y se selecciona la opción EDIT PROPERTIES; también se puede utilizar el modo edición (figura 28) en el cual tan sólo es necesario hacer una pulsación con el botón izquierdo sobre el componente; en este modo el cursor se convierte en una flecha (figura 29). Al ejecutar esta acción se abre la ventana de edición donde se pueden cambiar las características de los componentes (figura 30), por ejemplo la resistencia de 10K a 180 ohm. También se puede editar directamente la referencia o el valor de un componente si la pulsación se realiza encima de estos elementos.
Figura 28. Modo edición
Figura 29. Cursor en modo edición
Figura 30. Ventana de edición de un componente
Con esto quedaría finalizado el circuito electrónico (figura 31). Pero en el caso de los sistemas basados en un microcontrolador aún quedan por modificar las características del mismo microcontrolador.
Figura 31. El esquema completo
En el caso de los microcontroladores, la ventana de edición aporta mucha información (figura 32). Tal vez lo más importante es que permite cargar en el micro controlador el archivo de programa (*.HEX) generado en la compilación; también se puede modificar la frecuencia de reloj (por lo tanto no es necesario el uso de cristales externos en la simulación), cambiar la palabra de configuración y otras propiedades avanzadas.
Figura 32. Ventana de edición de un micro
1.3 Depuración de los sistemas basados en PICmicro
La característica más importante del PROTEUS VSM es la capacidad de depurar programas fuente de distintos lenguajes de programación. Además de aceptar el archivo de programación Intel Hex (HEX), también admite ficheros IAR UBROF (D39), Byte-Craft COD (COD), Microchip Compatible COF (COF) y Crownhill Proton Plus (BAS). Al utilizar estos archivos se puede abrir una ventana de código fuente llamada SOURCE CODE mediante la cual se puede seguir el programa fuente línea a línea de código.
Además permite visualizar elementos internos del PIC como son la memoria de programa, la memoria de datos RAM o la EEPROM, los registros especiales (FSR) y la pila (Stack).
Además, el entorno PROTEUS VSM permite compilar programas fuente en código ensamblador directamente. Para ello, se utiliza el comando SOURCE (figura 33).
Figura 33. Generador de código de ficheros fuente
En el caso del compilador CCS C, después de compilar se generan, entre otros, los archivos *.HEX y *.COF, los cuales se pueden utilizar para trabajar con el entorno PROTEUS VSM. Para ejecutar el programa desde ISIS se debe abrir la ventana de edición del microcontrolador (figura 32) y en el ítem PROGRAM FILE se puede indicar el fichero de código fuente utilizado.
Además, en esta ventana se puede indicar la frecuencia de trabajo con la opción PROCESSOR CLOCK FREQUENCY (debemos observar que para la simulación no es necesario colocar elementos externos de oscilación en el PIC, tan sólo hacen falta en caso de realizar la placa). En la opción ADVANCED PROPERTIES podemos habilitar o configurar muchos más elementos: configurar el wacthdog, habilitar avisos de desbordamiento de pila, accesos no correctos a memoria, etc.
Una vez cargado el microcontrolador con el programa fuente, se puede proceder a la simulación del circuito empleando la barra de simulación (figura 34). Esta barra se compone de la opción MARCHA, PASO A PASO, PAUSA y PARADA.
Figura 34. Barra de simulación
Con la opción MARCHA la simulación se inicia (el botón se vuelve verde) y funciona en modo continuo. La simulación NO es en tiempo real y dependerá de la carga de trabajo del PC. En la barra de estado se indica la carga de la CPU del PC (a mayor carga menos real será la simulación) y el tiempo de ejecución; este tiempo indica el tiempo que tardaría, en la realidad, el circuito en realizar un proceso (por ejemplo esto implica que, dependiendo de la carga de trabajo de la CPU, un tiempo de 1 s en el circuito puede significar varios minutos de simulación).
Figura 35. Barra de estado en la simulación
La opción STOP para totalmente la simulación mientras que PAUSE la para de forma momentánea permitiendo hacer uso de las herramientas de depuración.
La opción PASO a PASO permite trabajar en tramos de tiempo predefinidos y, además, permite utilizar las herramientas de depuración. Esta opción está ligada a la configuración de la animación (figura 36): SYSTEM → SET ANIMATION OPTIONS → SINGLE STEP TIME donde se puede definir el incremento de tiempo que se desea que pase cada vez que se pulsa esta tecla.
Figura 36. Set animation options
En este cuadro de diálogo también se pueden cambiar los siguientes parámetros:
•FRAMES PER SECOND: numero de veces que la pantalla de ISIS se refresca en un segundo (por defecto 20).
•TIMESTEP PER FRAME: indica el tiempo de simulación por cada uno de los frames; lo ideal es que sea el valor inverso del escogido en la opción FRAMES PER SECOND.
•ANIMATIONS OPTIONS: permite habilitar la visualización de las sondas de tensión y corriente, mostrar los niveles lógicos en los pines, mostrar el nivel de tensión en los cables mediante colores o mostrar la dirección de la corriente en los cables mediante flechas.
•VOLTAGE/CURRENT RANGES: permite determinar el umbral de tensión (±V) y corriente para utilizar en la visualización de las correspondientes ANIMATIONS OPTIONS.
En este punto se puede simular (y animar) un sistema con el PICmicro (figura 37). Lo más interesante de la simulación con microcontroladores es la utilización de las herramientas de depuración. Es decir, visualizar mediante ventanas las distintas partes internas del microcontrolador: memoria de programa, memoria de datos, pila, etc. La mayor parte de estas ventanas sólo se pueden visualizar durante una PAUSA.
Figura 37. Una simulación en marcha
Desde el menú DEBUG (figura 38) también se puede iniciar la simulación pero pensando en la depuración. Con la opción START/RESTAR DEBUGGING se puede iniciar la simulación pero haciendo una pausa para ver las distintas ventanas de depuración. También se puede ejecutar el programa directamente con la opción EXECUTE, EXECUTE WITHOUT BREAKPOINT o EXECUTE FOR SPECIFIED TIME que permite ejecutar directamente un programa, ejecutarlo sin puntos de ruptura (en el caso de tenerlos) y ejecutarlo en un tiempo concreto.
Figura 38. El menú DEBUG antes de la simulación
Desde esta ventana también se puede reinicializar la memoria EEPROM del microcontrolador mediante RESET PERSISTENT MODEL DATA. Al producirse una pausa, el menú DEBUG se modifica (figura 39) mostrando las correspondientes herramientas de depuración.
Figura 39. El menú DEBUG en una pausa
Estas herramientas son (figura 40):
•SIMULATION LOG: Mensajes resultantes de la simulación.
•WATCH WINDOWS: Ventana de visualización de posiciones de memoria. Permite añadir la que el usuario desea ver.
•PIC CPU REGISTERS: Muestra los registros FSR del PIC.
•PIC CPU DATA MEMORY: Muestra la memoria de datos (RAM).
•PIC CPU EPROM MEMORY: Muestra la memoria de datos (EPROM).
•PIC CPU PROGRAM MEMORY: Muestra la memoria de programa.
•PIC CPU STACK: Muestra la pila.
Figura 40. Ventanas de depuración
La ventana WATCH WINDOW es la más versátil puesto que se pueden añadir variables y modificar su visualización. Al pulsar el botón derecho sobre la ventana se abre un menú contextual (figura 41). Con ADD ITEMS (name/address) se añade la variable a visualizar directamente con el nombre predefinido (figura 42) en el PIC o, en el caso de variables propias del programador, se pueden visualizar por dirección (figura 43), donde se le indica el nombre, la dirección en hexadecimal, el tipo de dato (byte, word, etc.) y el formato de visualización (binario, decimal, etc.). El tipo de dato y el formato también se puede cambiar desde DATA TYPE y DISPLAY FORMAT.
Figura 41. Menú contextual de WATCH WINDOWS
Con WATCHPOINT CONDITION se pueden habilitar puntos de ruptura mediante condiciones sobre las distintas variables (figura 44); se indica la variable, la máscara de la condición (NONE, AND, OR, XOR) y el tipo de condición (NONE, ON CHANGE, EQUALS, etc.).
Figura 42. Add by Name
Figura 43. Add by Address
Figura 44. Puntos de ruptura
Hay una ventana de depuración que sólo se visualiza si se ha incorporado un fichero COD o COF al microcontrolador, se trata de la ventana CPU SOURCE CODE (figura 45). Con esta ventana se puede seguir la simulación línea a línea del archivo de código fuente.
En esta ventana (también en el menú DEBUG) están disponibles unos botones de control (figura 46).
Figura 45. La ventana CPU Source code
Figura 46. Los controles para la simulación
•Simulación en modo continuo, no permite ver las ventanas de depuración.
•Permite ejecutar una instrucción; si es una subrutina o una función la ejecuta directamente.
•Permite ejecutar una instrucción; si es una subrutina o una función entra en ella.
•Trabaja en modo continuo hasta que encuentra un retorno de cualquier subrutina.
•Trabaja en modo continuo hasta que se encuentra con un punto de ruptura.
•Habilita o deshabilita los puntos de ruptura.
Hay una ventana de diagnóstico que facilita la depuración, almacenando los errores, mensajes de diagnóstico y avisos producidos durante el proceso de simulación (figura 47). En la barra de estado (zona inferior del área de trabajo) se muestra un aviso (figura 48); con una pulsación en el aviso aparece la ventana de diagnosis.
Figura 47. Mensajes de diagnóstico de la simulación
Se pueden configurar las opciones de esta herramienta desde la opción DEBUG→CONFIGURE DISGNOSTIC (figura 49). En la ventana se muestran los componentes del esquema susceptibles de un diagnóstico en la simulación y las diferentes posibilidades de diagnóstico y el tiempo de diagnóstico (figura 50).
Figura 48. Mensajes de la herramienta de diagnóstico
Figura 49. La configuración de diagnósticos
Figura 50. Opciones de configuración
Tras la simulación aparecen los diferentes resultados del análisis; en el ítem SOURCE aparece indicado el dispositivo fuente del análisis y tras una pulsación se puede acceder a él (figura 51).
Figura 51. Resultado del diagnóstico
El listado de nodos y patillas se pueden encontrar con la ayuda del DESIGN EXPLORER (a ésta opción podemos acceder a través de distintas opciones: comando DESIGN, botón derecho, etc.). En su ventana de trabajo se muestran todos los nodos y patillas que forman el circuito (figura 52).
Figura 52. La ventana Design Explorer