¡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:
Microcontrolador | ATmega328 | ATtiny85 | ATtiny13 |
FLASH | 32k | 8k | 1k |
SRAM | 2k | 512b | 64b |
EEPROM | 1k | 512b | 64b |
Pines Digitales | 23 | 6 | 6 |
Pines Analógicos | 8 | 4 | 4 |
Temporizadores | 3 | 2 | 1 |
SPI | + | + | + |
UART | + | – | – |
I2C | + | + | – |
Precio | 4 € | 3 € | 1 € |
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:
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í:
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í:
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).
También puede flashear el microcontrolador a través de Arduino (Arduino como ISP, discutido en la última lección). Esquema de ATtiny85:
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 en 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 ATmega8535, ATmega16, ATmega3, ATmega164, ATmega324, ATmega644 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:
A continuación, vaya a Herramientas / Placa / Gestor de tarjeta… y busque el kernel requerido. Instalar en pc:
Después de eso, aparecerá una nueva familia de placas / MCU para elegir en la lista de placas. Trabajaré con ATtiny85
Estamos interesados en 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.
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 en 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:
Diagrama de conexión del oscilador externo (si es necesario). Pines 9 y 10 aquí, respectivamente, XTAL1 y XTAL2.
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.