domingo, 18 de mayo de 2014

Arduino Uno (ATmega328P) + simulación con Proteus 7

En esta entrada veremos los pasos a seguir para simular correctamente un microcontrolador ATmega328P conocido comúnmente como Arduino Uno R3. 

Hay veces en las que es necesario simular nuestros circuitos y ver su correcto funcionamiento antes de comprarlos físicamente, así nos ahorramos la compra innecesaria de componentes e iremos a lo seguro.

Antes que nada, debemos instalarnos el programa de simulación Proteus en este momento utilizaremos la versión 7 del mismo, su pagina oficial es www.labcenter.com/.

Una vez instalado procedemos a abrir la aplicación ISIS Professional y nos aparecera una ventana como esta:


Esta sera nuestra zona de trabajo, donde colocaremos los componentes que vayamos a utilizar.

Ahora tenemos que buscar nosotros estos componentes y lo haremos de la siguiente manera:

1.- Damos click al cuadro llamado: "Component Mode" como se muestra a continuación:



2.- Después daremos click a la "P" por nombre llamada: Pick from libraries.


4.- Nos aparecerá una ventana como la siguiente:


5.- En esta ventana se encuentran toda la paqueteria de componentes electrónicos que contiene el programa.

Aquí buscaremos el Chip ATmega328P como se muestra a continuación:


Como se podrán dar cuenta al momento de buscar el micro-controlador nos aparece que es un Chip AVR de Atmel, eso quiere decir que todo anda bien. Tener cuidado de que todo coincida y seleccionamos la opción que se indica en la imagen y presionamos OK.

Una vez echo esto, nos aparecerá en nuestra "caja de componentes" los que hemos seleccionado de la librería, en este caso el ATmega328P.


Procedemos a darle Click al nombre del componente "ATmega328P" y seguidamente nos vamos a nuestra zona de trabajo y damos Click en cualquier parte de la zona de trabajo y nos aparecerá una imagen ilustrativa del Chip, notaremos que se mueve conforme movamos el cursor. Daremos un tercer Click donde lo queramos colocar. 


5.- Final mente nuestro Chip Atmega328P estará colocado como se muestra a continuación:


Con esto ya tenemos el micro-controlador de Arduino en el simulador, pero aun no podemos iniciar la simulación debido a que el Chip ATmega328P necesita un oscilador externo para funcionar como nos muestra en su DataSheet. (Pagina 29). 

El oscilador es sumamente importante y necesario para el correcto funcionamiento de los ciclos en los programas que realicemos. 

Para agregarlo simplemente vamos a Component mode:


Seguido a Pick from Libraries:


En breve nos aparecerá la ventana donde seleccionaremos nuestros componentes, para esta ocasión seleccionamos el componente llamado "crystal" de cuarzo que es un típico oscilador como se muestra en la imagen y damos OK. 


Después de esto seleccionaremos el condensador cerámico de 22pF que nos pide el DataSheet del fabricante de la misma manera lo seleccionaremos como se muestra a continuación:


Una vez echo esto ya tendremos nuestros componentes seleccionados, pero debemos colocarlos en nuestra zona de trabajo. Procedemos a colocarlos de la misma manera como se muestra a continuación:


Agregaremos una conexión a tierra como nos indica el DataSheed de la siguiente manera, nos vamos a "Terminal Mode" 


Seguido nos despliega una lista de terminales y escogeremos "Ground", de damos Click y la colocamos cerca de nuestro oscilador en la zona de trabajo.


Una vez echo esto procedemos a conectar los componentes de la siguiente manera:

Los nombres XTAL1 y XTAL2 corresponden a los Pins del micro-controlador que son designados para el oscilador, siendo estos los puertos donde se conectaran el cristal de cuarzo(Oscilador) y sus capacitores.

Después de esto debemos configurar nuestro cristal de cuarzo para que trabaje a una frecuencia de 16MHz como lo indica el DataSheet.

Para ello nos vamos al componente, damos Click derecho en el, nos saldrá una lista y seleccionaremos la opción llamada "Edit Properties" como se muestra a continuación:


Nos aparecerá una ventana como la siguiente:


Ahí es donde cambiaremos la frecuencia de nuestro oscilador a 16MHz y daremos OK.


Con esto ya tendremos nuestro oscilador configurado.

Ahora para continuar, debemos agregarle un pequeño RESET (Pagina 47 DataSheet) a nuestro micro-controlador.

Por defecto este se encuentra en el Pin llamado "RESET" y para agregarlo debemos poner este pin a un voltaje "VCC" en serie con una resistencia de 1Kohms.

Lo primero que hay que hacer es buscar nuestra resistencia de 1 Kohm en nuestra paqueteria de componentes desde "Pick from Libraries"

Luego nos vamos "Terminal Mode" y escogemos de la lista el terminal llamado "POWER" y lo colocamos como se muestra a continuación:


Nos vamos a "Edit Properties".....


Y en "String" seleccionamos la opción "VCC" y damos OK...


Ahora solo nos queda colocar nuestra resistencia y unir el circuito como se muestra a continuación:


Ahora si nuestro ATmega328P esta listo para funcionar!

Para simularlo solo tienen que crear un programa en Arduino IDE y extraer el Hexadecimal de su programa.

Para ello tienen que irse "Archivo" después a "Preferencias" y colocamos todo como parece a continuación:


Ahora compilaremos nuestro programa, en esta ocasión yo compile el ejemplo llamado Blink que trae el Arduino IDE.

Nos aparecerá en la ventana de procesos en la parte de abajo una dirección de nuestro archivo Hexadecimal, lo que haremos sera copiar esta dirección como se muestra a continuación:



Nota: para cada computadora sera diferente, así que tengan cuidado de que la extensión del archivo termine como .hex

Una vez echo esto, nos iremos a ISIS donde tenemos nuestra simulación del micro-controlador. 

Ya estando ahí daremos Click derecho en el Chip ATmega328P.

En la lista escogeremos la opción "Edit Properties" y colocaremos la dirección del archivo que copiamos y damos OK. Esto se vera de la siguiente manera:



Una vez echo esto ya podemos simular nuestro programa, pare ello tenemos que darle Click a Play y nos correrá nuestro programa.


Le agregamos al circuito un led conectado al Pin 13 del Arduino ya que en el ejemplo "Blink" de Arduino IDE no los pide. 

ANEXO: Conexiones correspondientes a una placa Arduino:



Con este ultimo paso damos por concluida la entrada "Arduino Uno (ATmega328P) + simulación con Proteus 7" espero sea de su ayuda, cualquier duda o aclaración no duden en compartirla.



7 comentarios:

  1. Hola buenas, gracias por la info. Pero en la configuración del Atmega328p, para que funcione con un reloj externo hay que realizar una serie de ajustes. El parámetro CLKDIV8 hay que ponerlo en unprogrammed, el CKSEL Fuses hay que ponerlo en Ext.Clock y en Advanced Properties hay que indicar los 16 MHZ de la frecuencia del cristal, al menos así me funciona. La prueba la he realizado colocando una terminal virtual y transmitiendo una palabra desde el Atmega al terminal. Si no se pone esa configuración el mensaje no sale correcto. Y otra cosa que no entiendo, el datasheet del Atmega dice que la cpu interna corre a 20MHZ, pero si le configuras esa velocidad no envía bien el mensaje, haciéndolo correctamente sólo cuando le pones los 16 MHZ. (no lo entiendo). Bueno de todas formas el aporte está de cine, un saludo.

    ResponderBorrar
    Respuestas
    1. Estimado J.Garrido, Arduino basa su configuración en un Cristal de 16Mhz, por lo que Cristales diferentes generan diferentes tiempos de instrucción, en tu caso, si envías un mensaje al terminal serial a 9600 baudios( por ejemplo) en tu configuración escribes Serial.begin(9600), cálculo que se genera en base a un cristal de 16Mhz, con un cristal de 20Mhz el Baudrate es otro, por ende no funciona correctamente.
      Se puede usar el Atmega328 a 20Mhz pero no con el software de Arduino. Saludos

      Borrar
  2. Gracias... Por la ayuda y las respuestas respecto a los cristales osciladores

    ResponderBorrar
  3. Muy acertado tu comentario J. Garrido, me ayudó mucho

    ResponderBorrar
  4. HOLA!!!!! GRACIAS POR COMPARTIR LA INFORMACION. SOLO QUE CLKDIV8 HAY QUE PONERLO EN UN PROGRAMMED, Y ADEMAS HAY QUE ACTIVAR EL RELOJ ESTERNO PARA QUE FUNCIONE. SALUDOS CORDIALES.

    ResponderBorrar
  5. Hola!!... he tratado incansablemente de buscar la librería del Atmega 328p para proteus, pero solo tengo instalado la versión SMD... Podría alguien regalarme un link de descarga para el micro?... Gracias

    ResponderBorrar
  6. Me marca este error en la placa del atmega328p :C
    mixed model AVR2.DLL failed to authorize - Missing or invalid Customer Key.. [U1]

    ResponderBorrar