Arduino Mega 2560 como ISP

Electrónica: 

Me ha surgido la necesidad de realizar un pequeño proyecto en el que necesitaba:

  • Poder contar tiempo -unos delays determinados-
  • Dos salidas digitales
  • Una entrada analógica

Y hace unos meses leí en alguna parte que se podía utilizar Arduino como ISP.

Busqué un poco y encontré este artículo de los chicos del MIT sobre ATtiny y Arduino y me decidí por un ATtiny 85 -simplemente porque lo necesitaba de forma urgente y mi proveedor lo tenía disponible de forma inmediata... no hay un análisis detrás de esta decisión... además, sólo iba a desarrollar un prototipo y éste cumplia los requerimientos técnicos-

¿Qúe necesitamos?

  • IDE Arduino inferior a 1.0.1 ó 1.0.3 -aunque este último no lo he probado...-
  • Cabeceras e info para el ATtiny en Arduino
  • Arduino Mega rev3
  • Condensador de 100nF (esto es 0.1uF) -puede ser opcional pero es mucho más cómodo-
  • ATtiny85

Abre tu IDE de Arduino y carga el sketch ArduinoISP -File, Examples, ArduinoISP- En la función void heartbeat( ) deberás cambiar el delay(40) por delay(20). Ahora lo subes a tu placa -puedes conectar los diodos como indica en el sketch y así tienes una forma visual de que las cosas van como deberían... pero tampoco es muy necesario-

A partir de aquí ya no queremos sabernos nada del bootloader de Arduino, queremos utilizar éste como ISP. Aquí es donde entra en juego nuestro condensador. Conectaremos el RESET a +5V mediante nuestro condensador -esto impedirá que nuestra placa se resetee al programar al ATtiny-. Si no tienes un condensador de estas características... no pasa nada, pero tendrás más trabajo jejeje.

Bueno, ya tenemos nuestro Arduino como ISP, ahora como se indica en la página del MIT, tienes que crear la carpeta hardware en tu sketchbook y pegar el contedio del zip -el directorio attiny, esto es importante-, cerrar y volver a abrir el IDE de Arduino. Ahora, en: Tools, Board nos apareceran un montón de ATtinies. Escogemos el nuestro -el ATtiny85 con el reloj interno de 1Mhz-. También deberemos seleccionar Arduino como ISP: Tools, Programmer, Arduino as ISP.

Tenemos que cablear para programar al pequeño ATtiny. La Mega 2560 tiene 2 conectores de ISP pero yo al no disponer de un cable adecuado he ido cableando uno a unos los 6 cables desde los pines de Arduino. Lo único que tienes que hacer es conectar:

  • ATtiny Vcc (pin8): +5V
  • ATtiny Gnd (pin4): 0V
  • ATtiny MOSI (pin5): Arduino MOSI (pin51)
  • ATtiny MISO (pin6): Arduino MISO (pin50)
  • ATtiny SCK (pin7): Arduino SCK (pin 52)
  • ATtiny Reset (pin1): Arduino SS (pin 53)

Aquí tienes el significado de todos los acrónimos del SPI, que estos no son hermanos del Osito Misha ni son comestibles apetitosos se sushi.

Cargamos por ejemplo el sketch del Blink. Cambiamos el pin 13 a pin 0 -mejor... crea una variable global int ledPin- y escogemos Tools, Programmer, Arduino as ISP.

Ya sé que lo sabes... pero el pin 0 -PB0- es el pin 5 en el ATtiny -debes mirar el pdf-. Lo digo porque es fácil confundirse y pensar que no ha funcionado.

Tengo condensador

Lucky you!! Simplemente sube el código y después monta el LED con su resistencia -330ohm para un LED rojo corriente- para ver como parpadea cada segundo -no deberías programarlo con el LED conectado...-

Verás como el código es bastante más pequeño que si fuera para otro micro -por ejemplo el de tu Arduino Mega- pero también tienes más limitadas las funciones de C disponibles.

No tengo condensador

Vaya... no pasa nada. Tendremos que compilar el código -¡¡no subirlo!! sólo haz verify-. Una vez compilado nos haremos con el .hex  -puedes averiguarlo añadiendo información cuando compila File, Preferences, Show verbose output during: compilation & upload -lo normal es que esté en: C:\Documents and Settings\tu_nombre\Configuración local\Temp- y el directorio temporal que verás en la ventanita de información de Arduino. Ahora crearemos un acceso directo a avrdude.exe -que estará en: path_arduino\hardware\tools\avr\bin en el directorio donde tenemos nuestro hex y le pasaremos los siguientes parámetros:

-P tu_puerto -C path_arduino\hardware\tools\avr\etc\avrdude.conf -b 19200 -c stk500v1 -p t85 -U flash:w:Blink.cpp.hex

Esto es una chapuza y como el IDE de Arduino viene con Tcl/Tk, puedes crear un fichero gráfico para realizar esta tarea -y la de cambiar los fuses, por si no te interesan los parámetros por defecto de los fusibles del ATtiny85-

 

Otros enlaces:

Nota: para saber más sobre cómo utilizar avrdude, puedes leer el documento que viene con Arduino, lo encontrarás en: path_arduino\hardware\tools\avr\doc\avrdude pero seguramente lo que quedrías cambiar son las cosas del reloj. Leyendo la documentación del micro -busca en la sección Memory programming- encontrarás de qué fusibles dispones y dónde se encuentran -por ejemplo, el CKSEL está en el low fuse-. Para cargar otras configuraciones de temporización -por defecto el ATtiny utilizará el reloj interno a 1Mhz (sin calibrar)- recuerda añadir -u y la -U correspondiente (por ejemplo, -u -U flash:w:Blink.cpp.hex -e -U efuse:w:0xff:m -U hfuse:w:0xdf:m -U lfuse:w:0xe2:m para utilizar un oscilador de cristal exterior de 8Mhz)

Social_buttons: 

Comments

Por cierto... se me olvidó recordar que no se pueden utilizar los pines de los ICSP para esta tarea: no funcionan.
Esta semana gravé unos cuantos y poco después también leí por ahi -creo que en Element14- que efectivamente no funcionaban.