07 diciembre 2015

Reprogramando el ATtiny (y otros microcontroladores Amtel) con Arduino ISP

En una entrada anterior mostrabamos como ensamblar y poner a funcionar nuestro KIT Inalámbrico programable para medición de Temperatura y Humedad. El KIT hace uso de un ATtini85 para la lectura del sensor de temperatura y se encarga de codificar y transmitir los valores hasta su receptor.



El ATtiny85 es un pequeño microcontrolador del fabricante AVR que a pesar de su tamaño empaqueta mucha funcionalidad interesante como soporte para SPI, entradas y salidas digitales y convertidores análogo/digital.

En esta entrada te enseñaremos como reprogramar tu ATtiny85 para re-utilizarlo en otros proyectos utilizando tu Arduino UNO o compatible. ¡Comencemos!

Parte I - Convirtiendo nuestro UNO en Programador ISP


ISP viene de las siglas en inglés In-System Programmer o Programador En-Sistema. Este es el nombre utilizado por AVR para denominar a su interfaz de programación serie, esta interfaz permite re-programar los integrados sin necesidad de un costoso programador externo (como en el caso de las interfaces JTAG).

El ISP utiliza la interfaz SPI (Serial Peripheal Interface) para programar los dispositivos. Esto permite que puedas utilizar un UNO como programador ISP cargando el Sketch adecuado.

  • Para cargar el Sketch que convierte al UNO en un programador ISP abre tu Arduino y ve al menu "Archivo" > "Ejemplos" Y busca en la lista "Arduino as ISP".

  • Asegurate de seleccionar el puerto adecuado y haz clic en "Subir" para Cargar el Sketch.



Una vez el Sketch se ha subido satisfactoriamente estas a mitad de camino de re-programar tu ATtiny85.

Parte II - Instalando bibliotecas de Soporte (Para Arduino 1.6.x)


Para instalar las bibliotecas de soporte en Arduino hay dos formas una fácil y la otra difícil. Antes de continuar voy a explicar las ventajas y desventajas:
  • Soporte para ATtiny de highlowtech.org: Esta es la forma fácil, implica únicamente cambiar un par de opciones de configuración en el Arduino IDE y hacer unos cuantos clics. Sin embargo algunas bibliotecas de soporte y de funciones adicionales no compilan adecuadamente con estas bibliotecas.
  • Soporte para ATtiny con arduino-tiny: Esta biblioteca está diseñada para versiones previas del IDE arduino y funciona mejor en las versiones 1.0.x, es mucho más completa y compatible con más bibliotecas. Sin embargo el código de salida es considerablemente más grande y requiere una configuración manual dependiendo de lo que estemos programando.
Puedes instalar ambas si así lo deseas para tenerlas a la mano.

Paso II.a - Bibliotecas de soporte de highlowtech.org (Fácil) 


  • Abre el diálogo de preferencias en Arduino haciendo clic en "Archivo" > "Preferencias"
  • Busca la sección que dice "Additional Board Manager URLs"

  • Copia la siguiente dirección en la caja de texto y haz clic en "OK"
    https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
  • Ve al menú "Herramientas" > "Placa" y luego haz clic en "Board Manager..."
  • Busca en al lista "attiny by David A. Mellis" y haz clic en "Install". Un mensaje te informará que las bibliotecas han sido instaladas satisfactoriamente.

  • Puedes verificar que la instalación ha funcionado verificando que aparece en "Herramientas" > "Placa" la opción  "ATtiny" Bajo "ATtiny microcontrollers".


Si aparece la tableta ATtiny en la lista es que has logrado instalar satisfactoriamente las bibliotecas de soporte de highlow.

Parte II.b bibliotecas de soporte de arduino-tiny

  • Primero descarga las bibliotecas de soporte de la siguiente dirección:
    https://arduino-tiny.googlecode.com/files/arduino-tiny-0150-0020.zip
  • Si tienes abierto Arduino, cierralo en este momento. Si no, continúa con las instrucciones.
  • Descomprime el ZIP, se creará una tarjeta llamada "tiny".
  • Busca el directorio de instalación de "Arduino" busca la carpeta "hardware", copia la carpeta "tiny" adentro de "hardware".
Aquí es donde comienza la parte complicada:
  • En la carpeta "hardware" > "tiny" > "avr" busca el archivo "Prospective boards.txt", abre ese archivo con el block de notas.
En este paso haremos una pausa. Ya que depende del tipo de chip ATtiny y la configuración que desees lo que debes copiar.

Cada definición de tableta se encuentra "encerrada" por símbolos de numeral "#". Por ejemplo si queremos programar un ATtiny85 como el del transmisor de temperatura debemos de buscar la configuración apropiada. Por ejemplo si quieres utilizar el ATtiny85 con el oscilador interno de 8MHz debes de buscar la siguiente configuración:

###########################################################################
attiny85at8.name=ATtiny85 @ 8 MHz  (internal oscillator; BOD disabled)

attiny85at8.upload.tool=arduino:arduinoisp

attiny85at8.upload.maximum_size=8192
attiny85at8.upload.maximum_data_size=512

# Default clock (slowly rising power; long delay to clock; 8 MHz internal)
# Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 64 ms;
# [CKSEL=0010 SUT=10]; default value
# Brown-out detection disabled; [BODLEVEL=111]
# Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]

attiny85at8.bootloader.low_fuses=0xE2
attiny85at8.bootloader.high_fuses=0xD7
attiny85at8.bootloader.extended_fuses=0xFF

attiny85at8.bootloader.path=empty
attiny85at8.bootloader.file=empty85at8.hex
attiny85at8.bootloader.tool=arduino:avrdude

attiny85at8.build.mcu=attiny85
attiny85at8.build.f_cpu=8000000L
attiny85at8.build.core=tiny

###########################################################################

  • Dentro de la misma carpeta crea un archivo con el nombre "boards.txt" y pega adentro todas las configuraciones que te interesen. Solo ten cuidado de copiar los bloques enteros entre los símbolos "#"
  • Abre ahora Arduino y verifica que aparecen las tabletas que seleccionaste.

Parte III. Ensamblando el programador ISP


Para esta parte necesitas los siguientes materiales:
  • Arduino UNO o compatible con el Sketch Arduino ISP pre-cargado
  • Breadboard
  • Cables jumper M/M
  • Capacitor electrolítico de 10uF
Opcional:
  • 3x LED (para mostrar estado del programador)
  • 3x Resistencias de 220Ohm
Si te sientes valiente y no te importan los mensajes de estado puedes conectar tu ATTiny85 como se muestra a continuación:


Si eres un poco más cauteloso puedes conectar los LEDs de indicación, estos te servirán para identificar si ocurre algún problema en el proceso de grabado del programa.


Parte IV. Cargando el Sketch en nuestro ATtiny85


En esta parte al igual que en la instalación de las librerías la biblioteca nos hará más o menos difícil el grabado de nuestro Sketch.

Parte IV.a Utilizando las bibliotecas de highlowtech.org


  • En "Herramientas" > "Placa" selecciona "ATtiny".
  • En las opciones de configuración de la placa asegurate que el chip adecuado esté seleccionado. Para este ejemplo seleccionaremos el "ATtiny85" el menú "Herramientas" > "Procesador"




  • En la opción "Herramientas" > "Clock" debes seleccionar la velocidad de reloj a la que quieres que trabaje el ATtiny85. Aquí debes de tener cuidado si seleccionas un reloj "externo" no podrás re-programar tu ATtiny85 a menos que conectes un oscilador externo. Como queremos aprovechar todos los pines vamos a seleccionar "8 MHz (internal)". El reloj interno es un oscilador RC, usualmente no son demasiado estables como un cristal o como un oscilador calibrado, pero para aplicaciones sencillas que no requieran tiempos críticos de sincronización estos pueden funcionarnos de maravilla.


  • Por último solo verifica que el puerto coincida con el que tienes conectado el Arduino y verifica que en "Programador" aparesca seleccionado "Arduino as ISP"



Una vez la configuración esté lista puedes hacer clic en el botón "Subir" de tu Arduino para cargar Sketchs a tu ATtiny.

Sin embargo.... Hace falta un paso más:

Los Arduinos cargan por defecto un código conocido como bootloader, que se encarga entre otras cosas de configurar algunos registros del microcontrolador cuando este se inicia. El ATtiny85 viene configurado de fábrica para trabajar a 1MHz, sin embargo esta configuración será demasiado lenta para utilizar algunas utilidades como "SoftwareSerial" u otras bibliotecas para transmitir datos.

Para hacer permanente la configuración y obligar a que el ATtiny corra con el oscilador interno de 8MHz debes hacer clic a la opción "Herramientas" > "Quemar bootloader" como se muestra en la siguiente imagen:




Parte IV.b utilizando la biblioteca de arduino-tiny


Aunque configurar esta biblioteca resulta más complicado, subir Sketches es más sencillo ya que toda la configuración está especificada en el bloque de texto que copiamos en el paso anterior.

Para subir nuestro Sketch solo debemos asegurarnos de que esté seleccionada la tableta con la configuración correcta.


Luego de esto solo nos aseguramos que el puerto sea el correcto y que en programador esté marcado "Arduino as ISP" y podremos subir nuestros Sketchs al ATtiny85 con el botón "Subir".

Parte V - Más información


Una vez cargado el Sketch "Arduino as ISP" puedes utilizarlo para programar otros microcontroladores AVR que soporten ISP.


2 comentarios:

agusto cesar dijo...

Dentro de la misma carpeta crea un archivo con el nombre "boards.txt" y pega adentro todas las configuraciones que te interesen. Solo ten cuidado de copiar los bloques enteros entre los símbolos "#"
dentro de cual carpeta:¿tiny?¿hardware?¿avr?
y como pido permiso para pegar en esa carpeta pues me dice que no tengo permiso para pegar ahi y no tengo la opocion de ejecutar como administrador

urocan dijo...

Tengo una duda sobre a que pin conectar el condensador de 10uF y la polaridad de las patas