Cómo convertir tu Arduino en un ISP: programando el ATmel ATtiny85

Publicado: 2017-06-13

Bytes cortos: a veces, usar una placa Arduino preconstruida en un proyecto es excesivo o simplemente demasiado grande. El ATtiny85 es un microcontrolador económico pero sorprendentemente capaz que puede ayudar a reducir la huella de su proyecto. Así es como puede programar un ATtiny para usarlo en su proyecto.

L a plataforma Arduino es una herramienta increíble para el aprendizaje, pero a veces las placas Arduino compatibles no encajan exactamente donde las necesita. Con el Arduino Uno (el modelo más común) que mide alrededor de 65 mm x 50 mm, es fácil ver cómo podría ser el componente más grande en algunos proyectos. Hay otras placas como la Nano que son mucho más pequeñas (mi imitación Nano es de 43 mm por 17 mm, 4,5 veces más pequeña) , pero aun así, a veces es demasiado grande. ¿Qué sucede si, por ejemplo, desea construir un dispositivo portátil, tal vez sea solo un LED parpadeante para que su perro lo use por la noche? Una vez que tenga en cuenta una batería, etc., puede volverse bastante grande.

Cue la línea ATtiny, el héroe de nuestro problema. El homónimo de ATtiny es obvio. Puede encontrarlo en un paquete DIP-8 (paquete dual en línea: 8 pines) , que tiene aproximadamente 9 mm cuadrados. En la verdadera naturaleza de su homónimo, el ATtiny es minúsculo, pero en más formas que solo su tamaño físico. El ATtiny85, que se usa para este artículo, solo tiene 8 KB de almacenamiento flash de programas, 512 bytes de RAM y 512 bytes de EEPROM (almacenamiento permanente fuera del almacenamiento de programas) .

Ahora el problema es programar a uno de estos pequeños. Hay algunos tutoriales en línea para esto, pero los encontré un poco incompletos o carentes de instrucciones.

ISP: programador del sistema

Un programador en sistema (ISP) no es tan elegante como parece. Por lo general, un ISP para un chip ATmel consta de un dispositivo con un cable USB con conector de seis pines. Los pines ISP son realmente fáciles de detectar en Arduinos, generalmente se encuentran frente al conector USB. Los chips ATmel están destinados a programarse a través de los pines ISP, pero la plataforma Arduino ha implementado un adaptador de USB a serie en la placa para eliminar la necesidad del dispositivo ISP. A pesar de esto, han dejado los pines ISP disponibles en muchos, si no en la mayoría de los modelos.

Debido a que nuestros chips ATtiny no tienen el dispositivo USB a serie que tienen los Arduinos, se requiere que estén programados usando un ISP. Los dispositivos ATmel ISP son bastante caros, al menos en comparación con el costo de un Arduino, por lo que nos ahorraremos dinero y el tiempo de envío al programar un Arduino para que se comporte como un ISP.

Hacemos esto abriendo el IDE de Arduino y seleccionando ArduinoISP de los bocetos de muestra.

Al abrir el archivo de boceto, verá información sobre el comportamiento esperado del código. En este archivo, debemos hacer una modificación rápida para que nuestro ISP se comunique correctamente con el IDE de Arduino.

En la línea 220 encontramos la función setup() .

 configuración vacía () {
  SERIE.begin(VELOCIDAD EN BAUDIOS);

  pinMode(LED_PMODE, SALIDA);
  pulso (LED_PMODE, 2);
  pinMode(LED_ERR, SALIDA);
  pulso (LED_ERR, 2);
  pinMode(LED_HB, SALIDA);
  pulso (LED_HB, 2);

}

Necesitamos cambiar BAUDRATE a 19200 para que la línea diga

 SERIE.begin(19200);

Por lo que he leído, el IDE de Arduino recibió una actualización que rompió la compatibilidad con este firmware de ArduinoISP. El Arduino y el IDE intentaban comunicarse a diferentes velocidades en baudios y eso dio como resultado que no se utilizara el Arduino como ISP, a pesar de que el firmware parpadeaba correctamente.

Bibliotecas ATtiny

Arduino IDE es compatible con una variedad de diferentes microcontroladores y placas, pero desafortunadamente, la serie ATtiny no está incluida. Esto significa que tenemos que conseguir apoyo para ellos nosotros mismos.

La forma en que funcionó para mí fue agregar la siguiente URL a las URL del Administrador de tableros adicionales en las preferencias del IDE de Arduino,

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

reinicie el IDE, abra el Administrador de tableros en Herramientas -> Tablero -> Administrador de tableros y luego busque el paquete ATtiny e instálelo.

Una vez hecho esto, puede comenzar a construir su circuito para programar su ATtiny.

Construyendo su ISP

Hay varias maneras de construir su ISP. Puede construirlo en una placa de prueba sin soldadura para que pueda reutilizar las piezas, o puede hacer una solución semipermanente soldándolo todo como hice yo. Si lo está soldando con cuidado, puede reutilizar el Arduino para otro proyecto si lo desea.

Mirando las primeras treinta y pico líneas del boceto de ArduinoISP, podemos encontrar la siguiente información sobre cómo configurar Arduino para que funcione como un ISP.

Alfiler 10 Para restablecer el PIN para
Microcontrolador objetivo
pin 11 Salida maestra SPI
esclavo en
Alfiler 12 Maestría SPI en
Esclavo fuera
Alfiler 13 Reloj serie SPI

Opcionalmente, puede conectar LED a los siguientes pines para indicar el estado

  • Pin 9 – Heartbeat – Indica que el ISP está funcionando
  • Pin 8 – Error – Indica que ha ocurrido un error
  • Pin 7 - Programación - Indica comunicación activa con el objetivo

Tenga en cuenta que estos LED requerirán resistencias.

Aquí podemos ver el pinout para el ATtiny85 y las conexiones apropiadas que necesitamos para volver al Arduino. Es un dibujo bastante tosco, pero he etiquetado los pines en el ATtiny85 por conveniencia. Sin embargo, debe tenerse en cuenta que los pines no están direccionados en 1,2,3..8 como están en el diagrama, están designados dentro del IDE de Arduino como han sido etiquetados en el texto diagonal.

Este es un diagrama mucho más detallado de las diferentes conexiones. Todos los LED son opcionales, pero son útiles para la resolución de problemas, además de los tres LED de estado que se recomendaron en el archivo de boceto de ArduinoISP, hay uno que simplemente se conecta de 5 V a tierra (con una resistencia, por supuesto) , y luego hay uno conectado al segundo pin (Pin 3 en el IDE) para probar el ATtiny con la prueba de parpadeo. Observe el condensador que conecta el pin de reinicio a tierra, esto es necesario para que el Arduino funcione como un ISP.

Este es el Arduino ISP que construí para los microcontroladores ATtiny. Puede ver que usé el enchufe DIP-8 para sostener el ATtiny mientras se programa. También dejé suficiente espacio a la derecha para instalar un zócalo DIP-28 para programar chips ATmega como el ATmega328P. La actualización será muy sencilla, solo requerirá que los pines necesarios para los chips Atmega estén conectados como lo hemos hecho con el ATtiny.

Una vez que haya ensamblado su Arduino ISP, seguramente querrá probarlo. Asegúrese de seleccionar la configuración adecuada para programar a través de su Arduino conectado y no programar el propio Arduino.

Para la placa, elegimos la opción ATiny 25/45/85, luego seleccionamos ATtiny85 en la selección del procesador y, finalmente, seleccionamos Arduino como ISP de los programadores. Eso le dice al IDE todo lo que necesita saber sobre el sistema de destino, incluida la forma en que se comunicará con él. Ahora estamos listos para abrir el boceto Blink (o escribirlo usted mismo si es tan entusiasta) y probarlo, solo asegúrese de cambiar el pin usado para hacer parpadear el LED al que usó en su circuito, ese es el pin 3 si está usando el esquema que proporcioné. Por último, compilamos y cargamos el boceto haciendo clic en Sketch -> Cargar usando el programador.

 configuración vacía () {
  pinMode(3, SALIDA);
}

bucle vacío () {
  escritura digital (3, ALTO);
  retraso (1000);
  escritura digital (3, BAJO);
  retraso (1000);
}

En total, mi Arduino ISP que está soldado probablemente cueste alrededor de tres o cuatro dólares. Los chips ATtiny también pueden ser extremadamente económicos, generalmente solo alrededor de un dólar por pieza. Recomiendo comprar los zócalos DIP-8 si planea poner chips ATtiny en proyectos porque es posible que desee actualizar algún código o reutilizar el chip. Es factible soldar un IC en su lugar, pero puede dañar fácilmente el IC, especialmente con la exposición repetida, como sería el caso si estuviera actualizando el código varias veces.

¿Alguien más ha hecho algo como esto? ¿Te gustaría ver más cosas de Arduino? Háganos saber en los comentarios a continuación.

Lea también: Raspberry Pi o Arduino: ¿qué placa es mejor para un principiante?