Programador para ATtiny’s.

ÚTIL PARA PROGRAMAR VARIOS MODELOS DE ATTINY’S.
CREADO POR V. GARCÍA. EL 12.12.2015

INTRODUCCIÓN.

Hace unos pocos días inicié una incursión en el apartado del quemado de fusibles de los micros de la familia Attiny (lo que llamamos programación de un micro), como consecuencia de realizar un trabajo para mostrar como poner un voltímetro digital en una fuente de alimentación utilizando una pantalla LCD numérica controlada por la HD44780. La cuestión es que, cuando terminé el artículo, me di cuenta que para reducir costos sería adecuado utilizar un pequeño micro de ATmel, y por lo tanto necesitaría una herramienta para programar a estos “pequeños”.

Ciertamente la mayoría de los interesados no van a realizar una grabación en cantidad de estos micro, en el mejor de los casos, se limitarán a grabar unas 2 unidades a lo sumo 3 o 4, por ese motivo la gran mayoría de páginas que presentan los diferentes sistemas de lograrlo, se limitan a tratar un tipo de micro, sin embargo, he pensado que con un poco más de esfuerzo, sería conveniente que dicha herramienta fuera útil y pudiera servir para distintos modelos de micros, ya que, todos ellos requieren de los mismo puertos (pines) para su “quemado” y todo esto desde nuestro habitual Arduino que ha ido mejorando sus versiones y mediante el ISP nos permite la opción de dicha posibilidad, así me vi inmerso en este nuevo “lío”. Estos son los modelos por los pines que podremos programar:

attiny2313

attiny4484p attiny85p
pines-attiny2313 pines-attinys84 pines-attinys85

Fig. 1

CONVIRTIENDO EL ARDUINO EN PROGRAMADOR ISP.

Para programar un ATtiny, sea del tipo que sea, necesitamos un programador y una forma económica de disponer de uno es aprovechar las condicionantes que nos ofrece nuestra placa Arduino y la ayuda del boceto (ArduinoISP) que tenemos en los ejemplos del IDE y así de simple ya dispondremos del programador. Además, si lo que vamos a hacer es más de una grabación, podemos que crear una sencilla tarjeta que nos sirva para realizar esta tarea sin riesgos de equivocarnos con el cableado del programador.

De modo que vamos a utilizar nuestra placa Arduino para programar un Attiny85. Para lo cual, necesitaremos convertir el Arduino en un programador ISP (“In-System Programmer”), siguiendo estos pasos:

  • Iniciamos el IDE Arduino, conectándolo al PC.
  • Ahora, en el menú abrimos el boceto o sketch “ArduinoISP” que está en el menú ejemplos.
  • Seleccionamos el puerto y la placa correspondientes a nuestro Arduino (en mi caso Arduino Duemilanove w/ ATmega328).
  • Ya sólo nos queda cargar el boceto “ArduinoISP” en el Arduino.

Como he mencionado entes, vamos a construir una pequeña placa con la que podremos programar cualquiera de los pequeños micros que nos presenta AVR, como la mayoría he realizado pruebas utilizando tan socorrido protoboard, y pensando en construir una pequeña placa me decidí a trazar una más completa que sirviera para distintos modelos de micros y para esto lo primero que hay que preparar es el esquema.

EL ESQUEMA.

Los micros ATtiny son pequeños microcontroladores de 8 bits con poca memoria flash y memoria EEPROM, encapsulados desde los 6 pines hasta los de 32 pines el más grande. Existe un abanico de esquemas en otras tantas páginas, así que, resumiendo este que sigue podemos decir que cubre las opciones que me he propuesto para este útil de programación, creando un escudo Arduino para programar el ATtiny85, el ATtiny84. No es complicado de seguir y bastante sencillo para realizar.

 esq_programadorFig. 2

El mayor problemas que se puede presentar es a la hora de realizar el trazado del PCB, pero esta vez no quiero poner las cosas difíciles y desde este enlace podrán descargar dicho programa en PDF. He dispuesto los zócalos de 8 pines, 14 pines y 20 pines que son los más comunes de la serie, he dotado de un regulador de tensión 78L05 y un electrolítico como filtro, además de un condensador cerámico de 100nf/63V para evitar oscilaciones indeseadas. Posteriormente añadí un LED con su resistencia.

Vamos a realizar un circuito impreso, mediante film de película negativa (la de color azul claro) como la que se ve en la foto, lo que se conoce como máscara de película seca, utilizando el negativo del circuito que hemos creado.

dryfilm impresos-placa-pcb
Fig. 3

Aunque esta no es una página dedicada a temas de química, bueno es saber como salir al paso en ciertos casos, obteniendo elementos químicos de productos a nuestro alcance. El que sigue es un extracto.

[Para obtener un buen carbonato de sodio, según nuestro método, debemos partir del bicarbonato de sodio común, de farmacia, material sumamente barato conseguible en todas partes y países. Además, debemos disponer de una cápsula de vidrio pírex (para hervir en ella), o bien de porcelana, o de gres esmaltado…, ciertos esmaltes de baja calidad pueden disolverse al contacto con el carbonato a hervir.

Se vierten 100 centímetros cúbicos (medidos con probeta graduada) de agua natural (no agua mineral) al interior de la jarra. Se añade al agua 10 gramos de bicarbonato de sodio de farmacia. Se revuelve bien en frío con varilla de vidrio o cuchara plástica o madera (nunca con metal). Se coloca todo sobre la llama de la cocina casera, al mínimo. Se revuelve bien al comienzo y se deja calentar lentamente hasta hervir. El agua se irá evaporando con lentitud, y se observará que al fondo de la cápsula poco a poco se formará un precipitado blanco que es el CARBONATO DE SODIO buscado.]

En este blog indica como proceder para obtener el carbonato de sodio (Na2CO3), usted puede producir una cantidad suficiente para usar en los circuitos impresos que vaya a realizar.

NOTA.

Si está interesado en realizar este PCB, y no está familiarizado en como utilizar la película (film) en sus trabajos, le sugiero que se asegure como poner el papel impreso sobre la película (film) de modo que pueda leer el texto “Esto lo puedes leer“, está ahí para que no se equivoque (le aseguro que no sería la primera vez), también yo he errado. La imagen siguiente, se aprecia que aún no se ha quitado el film protector. He utilizado una lámina DIN A4 transparente para obtener un mejor resultado, sin embargo la tinta impresa no es suficientemente opaca y la desestimé, mejores resultados en papel.

antes_del_acido-multi-progp despues_del_acido-multi-progp
Fig. 4

Por cierto, quizás sea una cuestión personal, algunas veces uno imprime sobre DIN A4 de calidad (80-90 gr.), creo que no es correcto, ya que si bien es más blanco que el de 60 gr. sin duda que a la luz le cuesta más atravesar dicha capa, no obstante si usted no dispone de papel de baja calidad, también tiene un recurso a su alcance, cuando vaya a superponerlo sobre el film, pruebe a mojarlo con aceite del que utiliza en la cocina, esto le da la propiedad de hacerse casi transparente, lo que debería favorecer el paso de la luz al transferible.

mascaraFig. 5

La imagen anterior, se puede aprovechar para imprimir los perfiles de los componentes en la cara donde irán instalados estos. Esta opción, si decide utilizarla se debe realizar una vez se haya pasado el PCB por la solución ácida, de modo que no interfiera con la película de la cara de cobre. También, puede imprimir la figura anterior en papel con adhesivo doble cara y pegarlo en la cara de los componentes, para un mejor acabado.

Respecto de los tiempos de exposición a la luz, hay un ancho margen de posibilidades, ya que depende del tipo de luz, distancia y eso representa una variable no sencilla de cuantificar. Deberá hacer sus pruebas pertinentes antes de obtener el resultado optimo. En mi caso, he probado con la luz del Sol de la mañana, durante unos 145 segundos (vamos que he contado hasta 160) y el resultado es el que se aprecia en la placa.

aspecto-multi-prog mult-prog1 multi-prog

Fig. 6

PRIMERA PRUEBA.

Ha llegado el momento de convertir nuestro Arduino en un programador ISP que nos asista en esta tarea. En este procedimiento se mostrará cómo convertir un Arduino Uno (Duemilanove) en Programador In-Sistema o ISP. El ISP permite programar los microcontroladores AVR y reprogramar, in-situ (sin tener que quitarlos del circuito en el que han de trabajar). Para programar cualquier microcontrolador AVR, mediante 6 cables, realmente son cuatro más la alimentación +VCC y GND.

Si observamos la imagen de abajo, tres de estos cables con referencias como: MISO (Maestro-In-Slave-Out); MOSI (Maestro-Out-Esclavo-In) y SCK (Reloj Serial), donde el IDE Arduino es el Maestro y el dispositivo bajo prueba (programación) es el Esclavo.

funcattinys45854484pFig. 7

Este es el momento más esperado y que nos tiene como encogidos, estamos seguros, pero siempre queda alguna duda, me habré olvidado de algo, pero vamos a seguir y salgamos de dudas. En todas las webs que he consultado, todas te remiten a probar con el sencillo programa “Blink” y la vedad es que se presta para dicha prueba, pero vamos a ir un paso más adelante, si no funcionara ¿que puede pasar?, simple, sale bien o seguimos con más pruebas.

La verdad es que he logrado programar un Attiny2313 conectado a la protoboard y está funcionando, lo que ocurrió en ese caso es que, dicho micro no disponía de un par de puertos analógicos para mi proyecto y ese es el motivo por el que empecé este nuevo proyecto. Desde luego que no tengo remedio, siempre hay un desafío que me llama poderosamente, es decir, esta historia empezó porque quise dotar de un LCD a mi fuente de alimentación para eliminar los voltímetro y amperímetro analógicos. Y mira en el tinglado que estoy. Pero esto no es nada, en un par de semanas (creo) estará solucionado este tema.

Después de varios días estudiando las posibilidades que me ofrecen los distintos dispositivos, he decidido utilizar el ATtiny85, aunque he de decir que, todo lo descrito aquí puede ser aplicado a cualquiera de la gama, con las variaciones mínimas. Éstas son las características básicas:

  1. Memoria ROM: 8Kb
  2. Memoria RAM: 512 bytes
  3. Pines I/O:6
  4. Frecuencia: 20 Mhz con cristal externo
  5. Programación ICSP
  6. Datasheet

A tener en cuenta, la denominación de las patillas o pines, una forma de identificarlos viene descrito en las hojas de datos del dispositivo, también puede usted identificarlos en base a la figura de abajo.

pines-attinys85Fig. 8

Usted necesitará:

Un Arduino UNO/Duemilanove y uno de los siguientes microcontroladores. Todos estos son microcontroladores de 8 bits soportados en la plataforma estándar de Arduino. El que mejor se adapte a sus necesidades. (Estoy utilizando un ATtiny85)circuito-practico

  1. ATtiny44 – 4kb flash de almacenamiento y 14pins
  2. ATtiny45 – 4kb flash de almacenamiento y 8pins
  3. ATtiny84 – 8 kb de flash de almacenamiento y 14pins
  4. ATtiny85 – almacenamiento flash de 8 kb y 8pins

Conecte el Arduino al ATtiny:

  1. Arduino 5 voltios al pin 8 ATtiny.
  2. Pin GND Arduino al pin 4  ATtiny.
  3. Pin de Arduino 10 al pin 1 ATtiny.
  4. Pin de Arduino 11 al pin 5 ATtiny.
  5. Pin de Arduino 12 al pin 6 ATtiny.
  6. Pin de Arduino 13 al pin 7 ATtiny.

Ahora hagamos la instalación física.

  1. Desconecte el conector USB del PC
  2. Deje el ATtiny conectado a la placa/protoboard.
  3. Es necesario un LED y una resistencia 220Ω
  4. Añadir la resistencia como se muestra.

NOTA IMPORTANTE:

Primer contratiempo, el error: avrdude_stk500_getsync(): not in sync:…

Creo que este problema se le presenta a mucha gente, cuando intenta programar un micro ATtiny utilizando su habitual Arduino. Ya experimenté lo mismo en el anterior intento que he mencionado, no recuerdo como lo superé, a pesar de las anotaciones que tomé. He buscado una respuesta que me diera solución al problema y he de mencionar que me he leído unas cuantas respuestas y algunas las he probado, pero no me resolvieron el problema.

Empecemos a configurar el IDE Arduino (he probado con diferentes versiones), usted siga estos pasos. Conecte Arduino, inicie el IDE y elija el puerto, luego elija la versión de la placa en la lista que se muestra.

conf_board_ide-pFig. 10

 Al compilar el ArduinoISP, también es habitual que se muestre un reconocido error, como puede apreciarse en las imágenes que siguen, salta este mensaje.

avrdude_stk500_getsyncpavrdude_stk500_getsync-01 Fig. 11

Como he mencionado arriba, son muchas las pruebas que he realizado y por último seguí un consejo y me dio resultado, si usted tiene este problema quizás debería probar este proceso y tal vez obtenga como yo la solución. Al parecer (según se describe en un foro) debe de ser un problema de protocolos, personalmente y siguiendo el consejo del foro, lo probé con la versión 022 de Arduino y me funcionó, posteriormente en versiones más actuales vi que se produce la incompatibilidad a la hora de programar los Attiny’s, así que, para evitar dicho error, seguí estos pasos:

La cuestión es que se debe modificar el fichero “boards.txt” que hace referencia a los protocolos, usted verá que es muy sencillo y rápido.

Debemos acceder al Arduino que utilizamos para compilar los programas, para localizar el archivo “boards.txt“, abrimos el IDE y vamos al menú Archivo/Preferencias o si lo prefiere pulse “Ctrl+coma” y se abrirá una ventana a cuyo pié se indica la localización del archivo. Abramos el archivo y editémoslo:

 preferencesFig. 12

Busquemos esta línea: atmega328.upload.protocol=arduino

Y cámbiela por esta: atmega328.upload.protocol=stk500

Si en su caso no pone exactamente lo mismo, el caso es que debe modificar en dicho fichero, todas aquellas veces que encuentre: protocol=arduino , por protocol=stk500.

Espero que le sirva este procedimiento. Como decía, antes de poder programar un ATtiny, es necesario cargar el programa “ArduinoISP” en el IDE. Por lo que nuestro Arduino puede programar tantos ATtiny como se desee. Téngase en cuenta que, si cargamos un programa para trabajar con la placa Arduino, como los presentados en estas páginas, se hace imposible reprogramar un ATtiny. De hecho, el programa que hemos cargado el Arduino sobrescribirá el ArduinoISP.

En este caso, si intentamos programar un ATtiny a continuación, aparecerá el consiguiente mensaje de error. De modo que si queremos programar de nuevo un ATtiny, será preceptivo volver a cargar el boceto ArduinoISPya que lo habremos sobre-escrito.

PROBLEMA CONOCIDO CON AUTO-RESET

Hay un problema conocido con el auto-reset y la técnica ArduinoISP (una característicaanti-errorcomún en la placa Arduino – en la mía no siempre se manifiesta el problema). Es posible, por ejemplo, obtener el mensaje de “error: avrdude_stk500_getsync(): not in sync: resp=0x15“. Si es así, puede que tenga que poner un condensador de 10uf entre los pines de la placa Arduino “Reset” y + del electrolítico y su negativo al GND.

Este es el aspecto que presentan los pasos que vamos dando. Al terminar la carga de Arduino ISP.

cargar_arduinospFig. 14

Una vez se ha cargado el Arduino ISP, ya estamos en condiciones de cargar el conocido programa de pruebas “Blink”, pero antes vamos elegir el micro al que vamos a grabar nuestro proyecto, en este caso el ATtiny85, la versión de 1MHz oscilador interno, sin embargo si queremos que disponga de más funciones a compilar, debemos elegir el de 8MHz oscilador interno (necesario para correr la librería SoftwareSerial) no elija oscilador externo, si no va a utilizar un cristal de cuarzo no funcionará, como se aprecia en la imagen.

conf_board_ide-pFig. 15

Suponiendo que usted ha superado todos estos contratiempos, ahora deberíamos poder programar el ATtiny85 o el que usted haya elegido utilizar en su proyecto. ¡Ya era hora!

cargar_blinkpFig. 16

Si al terminar de cargar el programa indica la esperada “Carga terminada”, no le de demasiada importancia a las notas en rojo que se muestran. Quizás lo más complejo sea adaptar el código que vamos a grabar en el micro puesto que muchas funciones de uso habitual no son compatibles según con que micro haya decidido utilizar usted.

Los siguientes comandos Arduino deben ser compatibles:

pinMode()
digitalWrite()
digitalRead()
analogRead()
analogWrite()
shiftOut()
pulseIn()
millis()
micros()
delay()
delayMicroseconds()
SoftwareSerial()
(se ha actualizado desde Arduino 1.0)

Es evidente que usted no ha realizado todo este trabajo para ver si puede grabar un ATtiny, entonces, ahora es cuando empieza su verdadero rompecabezas, ¡póngase a adaptar código y disfrute!.

2 comentarios sobre «Programador para ATtiny’s.»

  1. Hola

    A ver si alguien puede ayudarme con un problema que no acabo de resolver…

    Estoy intentando pasar algunos sketchs a un chip Attiny85 utilizando la placa Arduino UNO como programador y cuando cargo un simple sketch como el «Blink» todo perfecto, se me carga y el led empieza a parpadear…

    … però cuando intento cargar un sketch que contiene instrucciones Serial, ni me deja compilar ni obviamente cargarlo en el chip, siempre me aparece un error que me dice que «Serial no està definido en este «scope»…

    Lo he probado con diversos sketches que contienen instrucciones o funciones típicas Serial como Serial.print y en todos me aparece el mismo error.

    Estoy utilizando la versión 1.8.10 del IDE DE Arduino, con lo cual no puede ser problema de versión obsoleta…

    Alguien sabe porqué me puede estar ocurriendo esto?

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.