40- Trabajando con Arduino 芦Desnudo禄

隆Atenci贸n! Esta lecci贸n se basa en la informaci贸n de la lecci贸n anterior sobre programadores. Aseg煤rese de estudiarlo primero.

En la 煤ltima lecci贸n, habl茅 sobre c贸mo cargar firmware en Arduino usando dispositivos externos: convertidor USB-TTL y programador ISP. Como puede imaginar, con las mismas herramientas, puede cargar el firmware en un chip arduino, ya sea un ATmega328 o un ATtiny85. Los Mc de la serie ATtiny son los hermanos peque帽os del ATmeg, tienen menos patas, menos memoria, menos interfaces y temporizadores, pero son m谩s baratos y adecuados para proyectos peque帽os. Comparemos algunos microcontroladores populares:

MicrocontroladorATmega328ATtiny85ATtiny13
FLASH32k8k1k
SRAM2k512b64b
EEPROM1k512b64b
Pines Digitales2366
Pines Anal贸gicos844
Temporizadores321
SPI+++
UART+
I2C++
Precio4 鈧3 鈧1 鈧
Caracter铆sticas de algunos Mc.

Nota: la mayor铆a de las funciones se combinan en los mismos pines.

Como puede ver, cuanto m谩s barato es el Mc, menos funciones tiene. Puede encontrar una comparaci贸n detallada completa aqu铆.


UART e ISP.

Para acceder a la memoria flash de un chip desnudo, necesitaremos estudiar el pinout del microcontrolador deseado. Las hojas de pines que se ven por la red son coloridas y hermosas (y a menudo con errores), y hay otros m谩s serios y correctos. Es mejor abrir la hoja de datos para el Mc deseado y encontrar el pinout 100% correcto en la segunda p谩gina. Por ejemplo, para ATmega328, ATtiny85 y ATtiny13:

Pinout arduino Mega328
Pinout arduino Mega328
Pinout arduino Mega328 a color
Pinout arduino Mega328 a color
Pinout arduino ATtiny25-45-85
Pinout arduino ATtiny25-45-85

Todas las funciones de los pines Mc est谩n marcadas en estos 芦esquemas禄. Para cargar el firmware a trav茅s de USB-TTL, es decir, usando un cargador de arranque que viva en la memoria, la MCU debe tener una UART de hardware a bordo, es decir, pines RX y TX. Si no hay tales pines, el firmware se puede descargar solo a trav茅s del programador ISP. Preguntas, 驴qu茅 pasa con Digispark? Hay un microcontrolador ATtiny85, que no tiene UART, 隆pero el firmware se carga a trav茅s de USB! Es cierto, pero all铆, los desarrolladores astutos han creado un gestor de arranque igualmente astuto que simula USB, y el firmware se carga en Digispark utilizando un programa especial que se ejecuta en segundo plano cuando presiona el bot贸n 芦Descargar禄 en el IDE de Arduino. Para resumir para el caso general:

  • Si el cargador de arranque se actualiza en el microcontrolador y hay un UART de hardware (pines RX TX) a bordo, el firmware se puede cargar a trav茅s de un 芦cargador de arranque禄 USB-TTL, y tambi茅n puede depurar el c贸digo utilizando el puerto Serial a trav茅s de 茅l.
  • Si no hay pines RX TX en el microcontrolador, entonces el firmware solo se puede descargar usando el programador ISP, y puede olvidarse del gestor de arranque como un todo, no lo necesita. La depuraci贸n a煤n se puede usar conectando USB-TTL y abriendo el 芦software禄 UART en el Mc. Por ejemplo, el kernel para ATtiny85 (m谩s sobre esto a continuaci贸n) ya tiene un SoftwareSerial incorporado y puede usarlo.

Conectando el programador.

El programador, o otro Arduino como programador, es muy f谩cil de conectar. Miramos el pinout y conectamos:

  • Bus ISP: Pines MOSI , MISO y SCK. Est谩n en todos los Mc.
  • Pin reset- RST.
  • Tierra GND. Cualquiera de los disponibles, est谩n conectados dentro del Mc.
  • Si el Mc no se alimenta desde su fuente, conectamos VCC al mismo tiempo.

Por ejemplo, conecte ATmega328p a USB ASP (discutido en la 煤ltima lecci贸n) 6 pines, como este ejemplo, puedes comprarlo aqu铆:

Programar el arduino atmega328p
Programar el arduino atmega328p

Nota: No se necesitan otros componentes. Un nuevo Mc (de la tienda) se sincroniza desde un generador interno a 8 MHz y se puede flashear sin problemas directamente como en el diagrama anterior.

Tinky adem谩s de USB ASP est谩n conectados as铆:

Programar el arduino attiny 85
Programar el arduino attiny 85

Para mayor comodidad, utilizo un dise帽o digispark, en el que los pines se colocan justo debajo del encabezado de 6 pines del ISP: est谩 pegado con una 芦llave禄 que sobresale hacia el Mc. Hay 8 pines en la placa, necesitamos los 6 superiores (la foto muestra los pines sin soldar debajo del enchufe). 

Programador TINY85 Digispark
Programador TINY85 Digispark

Tambi茅n puede flashear el microcontrolador a trav茅s de Arduino (Arduino como ISP, discutido en la 煤ltima lecci贸n). Esquema de ATtiny85:

Arduino como programador ISP para Tiny
Arduino como programador ISP para Tiny

Nota: se requiere un condensador.

Se han conectado. 驴Que sigue? Entonces ya podemos trabajar con fusibles a trav茅s del programa avrdudeprog (discutido en la 煤ltima lecci贸n) seleccionando el programador apropiado en la lista y el microcontrolador correspondiente en la lista. Adem谩s, a trav茅s de este programa puede descargar un 芦binario禄 compilado, un archivo de firmware. Pero todav铆a estamos interesados 鈥嬧媏n trabajar a trav茅s del IDE de Arduino.


Ponemos el 芦core禄.

Para trabajar con Attiny a trav茅s del IDE de Arduino, necesitamos instalar el llamado kernel, o como se llama en el propio IDE: la placa. Para el ATmega328, ya tenemos un n煤cleo est谩ndar, como la placa Arduino NANO. Pero hay un matiz: las configuraciones internas de la 芦placa禄 NANO est谩n dise帽adas para funcionar con un gestor de arranque y con un reloj externo de 16 MHz, es decir, es mejor no arriesgarse e instalar un kernel que admita el funcionamiento sin un gestor de arranque y con una elecci贸n de frecuencia para tener un control completo sobre el microcontrolador. Puedo recomendar estos:

  • MiniCore es el n煤cleo de soporte y configuraci贸n avanzada. de ATmega328 , ATmega168 , ATmega88 , ATmega48 y ATmega8 MK. Enlace para el administrador de la placa: https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
  • ATTinyCore : un kernel para soporte y configuraci贸n avanzada de ATtiny 441/841, 44/84, 45/85, 461/861, 48/88, 828, 1634, 87, 167. Enlace para el administrador de la placa: http://drazzy.com/package_drazzy.com_index.json
  • MicroCore es un kernel para el soporte y la configuraci贸n avanzada de los microcontroladores de ATtiny13, ATtiny13A y ATtiny13V. Enlace para el administrador de la placa: https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json
  • megaTinyCore : un kernel para soporte y configuraci贸n avanzada de Mc ATtiny 3217, 1617, 817, 417, 3216, 1616, 816, 416, 1614, 814, 414, 214, 412, 212, 1607, 807, 1606, 806, 406, 1604, 804, 404, 204, 402, 202. Los nuevos modelos se programan con UPDI. Puede hacer un programador a partir de una Arduino normal, lea aqu铆. Este n煤cleo se puede instalar a trav茅s del administrador de la placa, busque el nombre del paquete de la placa Arduino megaAVR, no es necesario insertar enlaces.
  • MightyCore es el n煤cleo de soporte y configuraci贸n avanzada para ATmega8535ATmega16ATmega3ATmega164ATmega324ATmega644 y ATmega1284. Enlace para el administrador de la placa: https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json
  • MegaCore es un n煤cleo de soporte y configuraci贸n avanzada de ATmega64 , ATmega128 , ATmega640 , ATmega1280 , ATmega1281 , ATmega2560 , ATmega2561 , AT90CAN32 , AT90CAN64 y AT90CAN128. Enlace para el administrador de la placa: https://mcudude.github.io/MegaCore/package_MCUdude_MegaCore_index.json

C贸mo instalar el kernel: vaya a Archivo / Preferencias y pegue el enlace en la ventana de enlaces adicionales para el administrador de la placa, en Gestor de URLs:

Instalar el kernel en el Ide Arduino
Instalar el kernel en el Ide Arduino

A continuaci贸n, vaya a Herramientas / Placa / Gestor de tarjeta… y busque el kernel requerido. Instalar en pc:

Gesti贸n de tarjetas Arduino Ide
Gesti贸n de tarjetas Arduino Ide

Despu茅s de eso, aparecer谩 una nueva familia de placas / MCU para elegir en la lista de placas. Trabajar茅 con ATtiny85

Estamos interesados 鈥嬧媏n el men煤 Reloj: marcado. El ATtiny85 es interesante porque se puede sincronizar desde una fuente interna a 8 MHz, pero tambi茅n se puede 芦multiplicar禄 por 2 para obtener 16 MHz, esta variante se llama 16 MHz (PLL). Esto es interesante porque un chip simple funcionar谩 a una velocidad casi m谩xima, lo que lo hace tan bueno como el Arduino Nano.

Seleccione un programador de la lista (flashear usando USB ASP). Seleccione Herramientas / Quemar bootloader para aplicar la configuraci贸n del reloj. Puede adivinar sobre el resto de los men煤s y las opciones a partir de sus nombres, o leer la descripci贸n detallada en GitHub usando los enlaces de arriba.


Programaci贸n.

Entonces, 驴Qu茅 nos da el kernel adem谩s de la elecci贸n de la configuraci贸n de Arduino? 隆Puedes programar el microcontrolador con los mismos comandos que antes! Podemos hacer LEDs intermitentes a trav茅s de digitalWrite, medici贸n de voltaje a trav茅s de analogRead y as铆 sucesivamente. Escribamos un Blink cl谩sico:

void setup() {
  pinMode(PB3, OUTPUT);
}
void loop() {
  digitalWrite(PB3, HIGH);
  delay(500);
  digitalWrite(PB3, LOW);
  delay(500);
}

PB3 es el n煤mero de pin, al igual que en el pinout.

隆Ya esta! Queda por descargar el firmware. Para hacer esto, haga clic en Programa / Subir Usando Programador:

Conect茅 el LED a trav茅s de una resistencia de 220 ohmios y parpadea dos veces por segundo, todo funciona como est谩 escrito.

Programando el microcontrolador
Programando el microcontrolador

Lo que debe recordar al trabajar con Arduino ATtiny85: tienen poca memoria, todas las funciones de Arduino ocupan mucho espacio en la memoria. Si Tiny85 todav铆a de alguna manera sobrevive a tal acoso y es capaz de encajar en s铆 mismo un proyecto completamente interesante de las funciones de Arduino, entonces en Tiny13 ya es dif铆cil encajar algo serio. Perm铆tame recordarle: 隆solo 64 bytes de RAM y 1 KB de flash! Para cambiar al Tiny13, se recomienda aprender a trabajar con el Microcontrolador directamente, utilizando su hoja de datos y los registros.

Creo que entiendes que, en general, trabajar con el Microcontrolador desnudo no es muy diferente de trabajar con una placa Arduino normal, y ahora puedes pasar a productos caseros complejos basados 鈥嬧媏n tu placa, en el centro de la cual habr谩 un microcontrolador. Compartamos algunos consejos para un cableado m铆nimo.


Tu propio Microcontrolador.

驴Por qu茅 hacer un proyecto en su propia placa y microcontrolador desnudo?

  • Por supuesto, el tama帽o de su Placa ser谩 m谩s compacto en la mayor铆a de los casos.
  • Consumo de energ铆a. No es un secreto para nadie que todo tipo de cosas convenientes en la placa Arduino consumen una gran cantidad de corriente seg煤n los est谩ndares de ahorro de energ铆a, y para un dispositivo aut贸nomo es mejor tomar un microcontrolador desnudo.
  • Trabajando con su propia placa, podemos elegir un microcontrolador para nuestras tareas. Por ejemplo, para un proyecto peque帽o, no es necesario tomar un ATmega328 , si Attini13, que cuesta menos, har谩 frente a la tarea.
  • Ahorros potenciales. Si tiene que montar unos cientos de placas, ahorraremos un buen dinero comprando nuestro microcontrolador aparte y usar nuestra propia placa.
  • Conveniencia del dise帽o de la placa. El IC tiene encapsulado SMD y los pines residen en una capa y no interfiere con las pistas de la otra capa.
  • Facilidad de instalaci贸n. Incluso si convierte su placa en un prototipo, entonces soldar un chip en 茅l es mucho m谩s conveniente y r谩pido que perforar tres docenas de agujeros para un arduino y luego soldarlos.
  • Producci贸n a peque帽a escala de tableros terminados o casi terminados, para usted mismo si necesita varios o para la venta. En el mismo jlc pcb, puede solicitar la fabricaci贸n de placas con atenci贸n de ruteado a componentes smd y cuanto mayor sea el lote, m谩s barato. 

Entonces, estaba convencido por experiencia personal de que el microntrolador es capaz de funcionar sin ning煤n tipo de problema. Realic茅 un proyecto de 鈥 lector de tarjetas SD 鈥 basado en ATmega328. El proyecto es bastante no es f谩cil: el microntrolador lee archivos de texto de una tarjeta de memoria microSD y los env铆a a una pantalla OLED. No hay componentes adicionales en la placa, el microntrolador se sincroniza desde los 8 MHz internos y todo funciona bien. Incluso la tarjeta de memoria est谩 conectada directamente al microntrolador =) 隆Pero esto no se recomienda en dispositivos fiables!

Qu茅 recordar y hacer si es posible:

  • Conecte todas las patas de VCC con las pistas m谩s gruesas posibles juntas.
  • Conecte todas las patas GND con los caminos m谩s gruesos entre s铆 (o incluso mejor, ll茅nelas con un pol铆gono GND)
  • Coloque un condensador cer谩mico (~ 100 nF) en la fuente de alimentaci贸n del microntrolador (entre VCC y GND) lo m谩s cerca posible de los pines de alimentaci贸n.
  • Coloque un condensador electrolito o tantalio a 10-47 渭F como fuente de alimentaci贸n. Especialmente si el microntrolador se alimenta de la misma fuente que otros consumidores
  • Se recomienda subir el pin RST a la fuente de alimentaci贸n (VCC) con una resistencia de 10 k惟, (PullUp)
    • Si necesita un bot贸n de reinicio, con茅ctelo a RST y GND
  • Si necesita un generador de reloj externo, con茅ctelo entre los pines XTAL1 y XTAL2 (vea el pinout de su microntrolador), y conecte ambos pines  a GND a trav茅s de capacitores cer谩micos a 18-22 pF (diagrama a continuaci贸n).
    • No olvide configurar el reloj externo en la configuraci贸n de la placa o directamente en los fusibles. 隆ATENCI脫N! Si los fusibles est谩n configurados para reloj externo y el generador externo no est谩 conectado a los pines, 隆no podr谩 flashear el MC incluso con el programador ISP!

Por ejemplo, algo como esto, conectamos la alimentaci贸n, m谩s un par de capacitores y un RST pull-up:

Pcb del microcontrolador desnudo
Pcb del microcontrolador desnudo

Diagrama de conexi贸n del oscilador externo (si es necesario). Pines 9 y 10 aqu铆, respectivamente, XTAL1 XTAL2.

Circuito oscilador para la placa
Circuito oscilador para la placa

Transfiriendo configuraci贸n de Arduino a su placa.

Perm铆tanme recordarles que la fuente del reloj juega un papel importante al cargar el firmware. El microcontrolador puede configurarse para sincronizarse desde un oscilador interno de 8 MHz o desde uno externo.

  • Cuando se trabaja desde un generador interno, el microcontrolador se inicia y funciona simplemente cuando se aplica voltaje, est谩 listo para ser flasheado tanto a trav茅s del UART (si hay un cargador de arranque) como a trav茅s del ISP.
  • Cuando se configura para funcionar desde un generador externo, el MK podr谩 funcionar y parpadear solo cuando se conecte un generador externo. Es decir, si el generador no est谩 conectado f铆sicamente al microcontrolador, no ser谩 posible flashearlo incluso a trav茅s de un ISP.

Lo mismo se aplica a la transferencia de la configuraci贸n de la placa Arduino a su placa: hay un cuarzo en el Arduino. Si su placa tiene cuarzo para el microcontrolador, todo funcionar谩 de inmediato. Si su placa no tiene cuarzo, el Mc soldado en ella no funcionar谩. Para transferir el software de la placa Arduino a su placa (sin cuarzo), necesita configurar el Mc para el reloj interno, hablamos de esto en la 煤ltima lecci贸n de programadores. Para hacer esto, necesita conectar un programador a la placa (USB-ASP o Arduino como ASP) y flashear los fusibles.

  • Manualmente a trav茅s de Avrdudeprog, configurando el deseado en la calculadora de fusibles incorporada.
  • Manualmente a trav茅s del IDE de Arduino y configurando manualmente el byte de fusible en boards.txt .
  • Autom谩ticamente a trav茅s de la configuraci贸n del kernel. Para Arduino Nano, puede ser miniCore visto m谩s arriba, hay un elemento Reloj -> Interno de 8 MHz en el men煤 de la placa. En el IDE de Arduino, haga clic en 芦Escribir gestor de arranque禄 y los nuevos fusibles, despu茅s de lo cual puede quitar el microcontrolador y ejecutarlo / flashearlo sin cuarzo.

Deja un comentario