jueves, 16 de febrero de 2012

Como simular Arduino en Proteus

El mejor programa que he visto para simular la placa Arduino UNO, es Proteus. Por una parte se necesita el programa con la plantilla de Arduino, y por otra se necesita el programa que queremos simular con la extensión HEX.

Proteus y Arduino
Una vez instalado el programa proteus, descargaremos el fichero correspondiente a la placa de Arduino que queramos simular.

Si abrimos el esquema correspondiente al UNO con el Proteus , (versión 7.7 o superior) nos encontraremos con la siguiente vista:


El Arduino UNO con sus pines de conexión




En ella se puede ver el modelo UNO de Arduino con los elementos que componen dicha placa, como el LED de indicación de encendido, el led 'L' conectado a la patilla digital 13, las patillas nombradas, etc.


Para poder simular el código, deberemos decirle al chip qué código y dónde se encuentra y para ello deberemos acceder al microcontrolador del Arduino. Esto lo conseguiremos haciendo clic encima del Arduino, con la combinación de teclas 'CTRL+C' accederemos al circuito que forma el Arduino en sí y haciendo doble clic sobre el microcontrolador se nos abrirá la ventana de configuración del ATmega328.



El ATmeg329 que compone el Arduino Uno

Una vez allí sólo nos queda cargar el código haciendo clic en el icono de la carpeta de 'Program File:' y buscar el archivo '.hex' generado por el Arduino durante la compilación.



Ventana de configuración del ATmega

El microcontrolador ya sabe que tiene que ejecutar, por lo que salimos de la ventana aceptando los cambios, pulsamos 'CTRL+X' para volver al circuito del Arduino y hacemos clic sobre el boton de play para iniciar la ejecución del código, pudiendo ver su resultado si todo ha ido bien.
Una vez que hayamos indicado la ruta al archivo .hex, no hace falta que se la volvamos a indicar, directamente modificamos el código, le damos a verificar y al darle al play en el Proteus, automáticamente tomará la nueva versión del código. También se puede verificar el código mientras la simulación está en curso sin ningún problema.

Si en vez de indicar la ruta al archivo .hex usamos el .elf podremos comprobar los errores del programa, ejecutándose paso a paso. Para ello primero pulsamos el 'play' en Proteus, para luego pulsar 'pausa', entonces saldrán las pantallas del código y de las variables. En mi opinión la pega que le he encontrado a ejecutar paso a paso, es que el código sale en C puro y no en wiring por lo que cuesta más la comprensión de este.





Obteniendo el .hex o .elf

Por defecto, al verificar el código (compilar) el archivo .hex se guarda en una carpeta temporal, por lo que su acceso no será sencillo. Tenemos dos posibilidades, se puede cambiar para siempre donde guardar el archivo .hex de Arduino o sino que Arduino nos diga en que carpeta se ha creado el archivo. Como la primera opción ya la tratamos en otro artículo aquí hablaremos sobre la segunda opción.

En las versiones del IDE anteriores al v1.0 para conocer la ruta en que el compilador guarda el '.hex' y el '.elf' mantendremos pulsada la tecla 'Mayus' o 'Shift' mientras hacemos clic sobre el botón de compilar, obteniendo en la pantalla de depuración la dirección de dicho archivo.
En la versión del IDE v1.0 para conocer la ruta, hay que ir a la pestaña 'File', 'Preferences' y marcar la opción 'Show verbose output during: Compilación'. Se podría seleccionar Carga pero no tiene demasiado sentido ya que si estamos simulando es porque no queremos tener la placa Arduino conectada al PC, por lo que tener pulsada esta pestaña no da más que problemas.


En ambos casos obtendríamos la ruta del archivo en el propio IDE.

Hay que tener en cuenta que la ruta del archivo puede pasar por carpetas ocultas y para mostrarlas haremos la siguiente secuencia:
  1. Inicio -> Panel de control -> Opciones de carpeta
  2. Abrimos la pestaña 'Ver'
  3. Activamos 'Mostrar todos los archivos y carpetas ocultas'
Podeis ver paso a paso la creación de un circuito en Proteus y la simulación con el archivo .hex




Si os ha gustado simular con Arduino podéis ver como se ve la simulación del control de un servomotor con un potenciometro.
Esta documentación está actualizada para la placa Arduino UNO con las versiones superiores del IDE 1.0. El documento original está escrito por para versiones anteriores a la 023, por Chiva.

16 comentarios:

  1. Muchas gracias. Me sirvio mucho. Ya antes habia intentado simular Arduino en Proteus, pero me quedaba en querer conectar entradas o salidas en los pines, pues no sabia que pin del Micro era el pin en la placa.

    Gracias

    ResponderEliminar
  2. Muchas gracias por compartir lo que sabes.

    ResponderEliminar
  3. buenas, como puedo ver lo que me tira el puerto serial, con proteus ??

    ResponderEliminar
  4. solucionado!!, virtual terminal

    gracias Omni!!

    ResponderEliminar
    Respuestas
    1. disculpa camarada, cómo conectaste la terminal al arduino?

      Eliminar
  5. Perfecto!

    Montado en VirtualBox en MacOS... ;D

    Escribo en MacOS, y emulo en VB virtualizando.

    Gracias por el fichero. ;D

    ResponderEliminar
  6. ufff eres un maestro, felicitaciones! soy programador java y apenas enpiezo en esto de los pics pero definitivamente estamos en el momento perfecto con estas herramientas que permiten concentrarse en las funciones que realiza el pic y no en las soldaduras y circuitos,

    ResponderEliminar
  7. excelente tutorial gracias me a ayudado mucho

    ResponderEliminar
  8. muchas gracias me ayudo por que no tenia como acceder a los componentes necesarios para la simulacion vale te pasaste, solo me queda ver como lo hago para el hmi en una comunicacion inalambrica con Xbee

    ResponderEliminar
  9. amigo esta biblioteca funciona tambien para hacer los pcb, osea en ares?????

    ResponderEliminar
    Respuestas
    1. No tengo ni idea, no uso ares para routear, todo el entorno arduino lo puedes ver como está routeado en Eagle. Un compañero sé que usa Ares pero no se como lo hace, le mando tu duda y haber que comenta. Salu2

      Eliminar
    2. El compañero me ha comentado que algunos componentes como los pulsadores y resistencias no tienen la huella. Así que no podrás usarlo sin más, tendrás que crear las huellas que faltan. Salu2

      Eliminar