sábado, 29 de enero de 2011

Internautas MPSIM , MPSIM Internautas

Como puede entenderse del titulo este vendría a ser el capitulo en el cual les presento el simulador del MPLAB (MPSIM) a aquellos lectores que aun no hayan tenido el gusto de conocerlo lo primero que haremos en esta entrega es ver las ventajas del MPSIM como herramienta de depuración y luego veremos algunas de sus características mas importantes.


Esta primera parte la haremos en forma de preguntas y respuestas para hacerlo un poco mas ameno.


Porque debo a aprender a usar el MPSIM?
En realidad existen varias razones, la primera es que es gratuito y viene incorporado en el MPLAB (que también es gratuito), por lo que no tenemos que andar preocupándonos de conseguir de "manera solidaria" programas de pago para poder depurar nuestro código.
En mi experiencia otros simuladores, como el Proteus, tardan mas en dar soporte a lo microcontroladores mas nuevos de Microchip, al aprender el MPSIM podremos hacer pruebas con estos nuevos microcontroladores y no quedar amarrados a los microcontroladores clásicos.
Otra ventaja es que al familiarizarnos con el ambiente del MPSIM, nos sera mas fácil usar otras herramientas de depuración de Microchip como ser el PicKIT 2 o ICD 2.


Eso quiere decir que no tendré que aprender a usar otro simulador?
No, al MPSIM se lo debe ver como una herramienta mas para trabajar con microcontroladores, no como la única.


El MPSIM permite simular lo mismo que otros simuladores?
Realmente no, por lo menos no en cuanto a periféricos externos se refiere (LCDs, displays de 7 seg, etc), pero en cuanto a los módulos incluidos en el microcontrolador (temporizadores, USART,ADC)la mayoría se pueden simular de una forma bastante practica, pero existen formas para poder simular, con algunas limitaciones claro, otros módulos no soportados por defecto.

Bueno esas son todas la preguntas que se me ocurren como introducción, pasemos ahora a mostrar algunas características del MPSIM. 


Lo primero que debemos hacer es seleccionar el MPSIM como herramienta de depuración, para esto vamos al menú Debugger > Select Tool > MPLAB SIM. Cuando seleccionamos el MPSIM nos aparecerá los nuevos botones que se muestran en la Figura 5.1, estos botones sirven para ir controlando la ejecución del código. A continuación describiremos las funciones de los botones.
Figura 5.1
Para describir el uso de los botones para la simulacion, los enumeramos del 1 al 8 comenzando de izquierda a derecha.
  • Botón 1 (RUN) Sirve para ejecutar el programa, cuando se lo presiona el Botón 2 (Halt) se activa para poder detener la ejecución, otra forma de detener la ejecución es colocando un breakpoint en alguna linea del programa en la que queramos detenernos. Además decir que al ejecutar el programa usando RUN estaremos ejecutando el programa a su máxima velocidad, la verdad no se si es a tiempo real o no, pero es bastante rápido.
  • Botón 2 (HALT) Se utiliza para detener la ejecución del programa cuando esta ha sido iniciada con el botón Run o con el botón 3 (Animate), como solo se utiliza en estos casos el resto del tiempo aparece como deshabilitado.
  • Botón 3 (ANIMATE) Similar al botón Run, la diferencia es que usando ANIMATE se puede ver como se esta ejecutando cada instrucción y conjuntamente con la ventana watch veremos como cambia los valores de los registros, esto ultimo lo veremos mas adelante.
  • Botón 4 (STEP INTO) Este botón sirve para ejecutar el programa paso a paso, es decir, cada vez que se lo presiona se ejecutara solamente la instrucción que esta marcada, también se puede ejecutar este botón presionando la tecla F7.
  • Botón 5 (STEP OVER) Sirve para ejecutar subrutinas sin entrar en ellas,lo bueno es que  las subrutinas se ejecutan a la misma velocidad que usando RUN y además todos los registros, pines y demás parámetros que la subrutina deba afectar serán afectados, también puede usarse la tecla F8 para realizar un STEP OVER.
  • Botón 6 (STEP OUT) Sirve para salir de una subrutina  haciendo algo similar al STEP OVER, por ejemplo, si entramos a una subrutina por accidente(nos olvidamos usar STEP OVER), al usar STEP OUT la subrutina se ejecutara internamente y estaremos listos para ejecutar la instrucción siguiente a la llamada a subrutina.
  • Botón 7 (RESET) Sirve para resetear al microcontrolador, nos lleva al vector de reset, es similar a usar el pin de reset del microcontrolador.
  • Botón 8 (BREAKPOINTS)  Cuando se lo presiona abre una ventana para manejar los breakpoints(paradas del programa), veremos esta ventana mas adelante.
Junto con los botones que acabamos de describir también aparecerá una nueva pestaña en la ventana Output , en esta nueva pestaña el MPLAB mostrara diferentes mensajes relacionados con el MPSIM. Además de esta nueva pestaña también debemos notar que en la barra de estado aparecen nuevos elementos, el valor del PC (Contador de Programa), el valor del registro de trabajo W,  las banderas del registro STATUS, la frecuencia del oscilador y el banco en el que nos encontramos. Todos estos nuevos elementos pueden verse en la Figura 5.2
Figura 5.2

Ahora que ya tenemos activo el MPSIM debemos configurar algunas características del simulador, como por ejemplo la frecuencia de trabajo del microcontrolador, que por defecto (como podemos ver en la Figura 5.2) esta configurada a 20 MHz. Para cambiar la configuracion del oscilador debemos acceder a los parámetros del simulador, esto se hace en el menú Debugger > Settings... , esta opción nos mostrara la ventana de la Figura 5.3.
 Figura 5.3
La ventana Simulator Settings tiene varias pestañas, la que nos interesa por ahora es la de Osc/Trace, la cual tiene dos secciones, la sección Processor Frecuency nos permite modificar la frecuencia del oscilador del microcontrolador, recordemos que la "frecuencia real de trabajo" del microcontrolador es la frecuencia del oscilador dividida entre 4, por eso en esta sección debemos colocar la frecuencia del oscilador que vayamos a usar, para el ejemplo con el que estaremos trabajando (parpadea), lo ajustaremos a una frecuencia de 4 MHz.

La sección Trace Options nos permite modificar las opciones del trace, bueno y que es el trace?, el trace es una herramienta que nos permite grabar la ejecución del código paso a paso, y poder revisar esta grabación, una desventaja de esta opción es que al tenerla habilitada la velocidad de la ejecución se reduce. En esta sección podemos habilitar el trace (marcando Trace all), y también podemos definir el tamaño del buffer donde se va grabando el trace (si se aumenta, la velocidad de la simulación disminuye). La ultima opción en esta sección se refiere a Break on Trace Buffer Full, si marcamos esta opción nos aparecerá un mensaje cuando el Buffer para el grabado llegue a su limite.

La demás pestañas del Simulator Settings las iremos viendo a lo largo de los tutoriales. Ahora vamos a ver como incluir registros y variables para poder ver como varían sus valores a lo largo de la simulación. Para esto tenemos que activar la ventana Watch, esto lo hacemos en View > Watch, y nos aparecera la ventana de la Figura 5.4., en la ventana Watch se tienen por defecto 4 grupos de variables, ya que tenemos 4 pestañas inicialmente para seleccionar (Watch 1 a Watch 4). En la parte superior de la ventana Watch tenemos los botones para adicionar un registro del microcontrolador (Add SFR) o un variable (Add Symbol).

Figura 5.4

El proceso para adicionar un registro o una variable es bastante sencillo, para adicionar un registro del microcontrolador debemos buscarlo en el menú seleccionable que se encuentra a la derecha del botón Add SFR(Figura 5.5), para la primera simulación que haremos seleccionaremos los registros WREG,PORTA y PORTB.

Figura 5.5 Adicionando el registro WREG

Las variables se adicionan usando el menú desplegable ubicado a la derecha del botón Add Symbol(Figura 5.6), en este paso tenemos que tener en cuenta que además de las variables que definimos dentro el CBLOCK también aparecerán los nombres de variables que fueron definidas con otras directivas (por ejemplo EQU), dentro del menú de símbolos buscaremos la variable que usamos para la rutina de retardos Cant_ms.

Figura 5.6 Adicionando la variable Cant_ms.

Una vez adicionados los registros WREG,PORTA,PORTB y la variable Cant_ms, procedemos a ajustar su tamaño, por defecto la ventana   Watch, permite observar 8 bits (1 byte) del registro o variable, pero en nuestro caso la variable Cant_ms es de 2 bytes (16 bits), para poder aumentar los bytes que nos mostrara la ventana Watch debemos acceder a la propiedades de la variable, para esto hacemos click derecho sobre la variable o registro que queramos y en el menú desplegable que aparecerá seleccionamos la opción properties (Figura 5.7)
Figura 5.7 Accediendo a las propiedades de una variable 
La modificación  de la cantidad de bits que veremos de la variable se la hace en el menú size de la pestaña Watch Properties(Figura 5.8), una vez seleccionado el tamaño de la variable como 16 bits el menú desplegable Byte Order se habilitara y podremos seleccionar entre ver la variable en el orden natural (HIGH:LOW), es decir, que el byte mas significativo ira a la izquierda, o ver la variable con el byte mas significativo a la derecha (LOW:HIGH).
 Figura 5.8 cambiando el tamaño de la variable  Cant_ms
Si hasta aquí todos los paso se siguieron correctamente tendremos la ventana Watch como se muestra en la Figura 5.9, noten que la variable Cant_ms muestra 2 bytes, en caso de que queramos ver los 16 bits de la variable debemos alargar la columna Binary.
Figura 5.9

Para terminar con esta corta presentación veremos la herramienta del MPSIM que nos permitirá observar los tiempos de ejecución de nuestro programa , el Stopwatch, para abrirlo vamos al menú  Debugger > Stopwatch, esto nos abrirá la ventana del Stopwatch (Figura 5.10).

La ventana de Stopwatch nos mostrara el tiempo transcurrido ya sea en ciclos de instrucción (ic), o en unidades de tiempo(us,ms,seg,min). El tiempo que nos muestre lo calculara en base a los ciclos de instrucción y la frecuencia a la que queremos que trabaje el microcontrolador, para este caso 4 MHz (como muestra también la ventana del Stopwatch).

Figura 5.10 ventana del Stopwatch

Hasta aquí esta introducción del MPSIM, en la siguiente entrada, ya veremos de simular el ejemplo parpadea.








4 comentarios:

  1. Muchas gracias por toda la informacion que has publicado me ha sido de mucha ayuda.
    Es lamentabe que tu blog no tenga mas exito, me gusta la manera en la que explicas todo, pero bueno animo no todos los proyectos en la vida resultan como queremos

    ResponderEliminar
  2. parece bueno tu blog, lo lei y me gusto, animo no te rindas

    ResponderEliminar
    Respuestas
    1. Gracias, voy a retomar el proyecto del blog hay muchas cosas sobre electronica que quiero publicar.

      Saludos

      Eliminar
  3. Hola Sander, estoy en pañales aun en esto de programar en ASM, me es más cómodo que hacerlo en C(del cual ni lo intenté aún, solo lo hago cuando son para programas, no para firmware). podrías decirme como hacer para aparecer el registro Cant_ms, estoy con la versión de MPLAB 8.88, y no veo a mis registros creados. Además otra consulta, cuando uno de los pines los configuro como entrada, y deseo cambiar el estado de este como lectura (un 0 o 1 lógico) no se hace tal cambio, a diferencia de hacerlo con el estado de un pin configurado como salida que si me es posible.

    ResponderEliminar