🛠 Convertir la Duemilanove en programmateur AVR (ArduinoISP) pour graver des puces nues
Objetivos
La Duemilanove posee un conector ICSP de 2×3 y el ATmega168/328 habla el mismo lenguaje que cualquier AVR: con el ejemplo ArduinoISP del core, la placa se convierte en un programador AVR-ISP serie. Vas a grabar un bootloader en un ATmega328P virgen para transformarlo en un clon autónomo de Uno/Duemilanove — el gran clásico de la producción de placas caseras, documentado en el tutorial oficial «Programmer».
Material
- 1 Arduino Duemilanove (el programador)
- 1 ATmega328P (o 168) virgen + zócalo/DIP socket en placa de pruebas
- 1 cristal de 16 MHz + 2 condensadores cerámicos de 22 pF (o usar el oscilador interno de 8 MHz, adaptando los fusibles)
- 1 resistencia de 10 kΩ en RESET, alimentación de 5 V de la Duemilanove (el objetivo consume poco en reposo; atención al polyfuse de 500 mA de la placa)
- 6 cables + cable USB; opcionalmente un LED en el pin 13 para seguir la actividad
Código completo
1) Charger l'exemple : Fichier > Exemples > 11.ArduinoISP > ArduinoISP
(sur les vieux IDE : Examples > ArduinoISP). Televerser sur la
Duemilanove avec le bon processeur (328 : 57600 / 168 : 19200).
2) Cables cible (Duemilanove -> ATmega nu, boitier DIP-28) :
MOSI = broche 11 -> broche 17 (PC4)
MISO = broche 12 -> broche 18 (PC5)
SCK = broche 13 -> broche 19 (PC6)
RESET= broche 10 -> broche 1 (avec pull-up 10k vers VCC)
VCC = 5V -> broches 7 et 21 ; GND -> broches 8 et 22
3) IDE : Outils > Programmateur > "Arduino as ISP" (le vieux nom
"Arduino as ISP (ATmega328)" selon les versions).
4) Graver les fusibles puis le bootloader :
Outils > Graver les fusibles (optionnel, cf. valeurs ci-dessous)
Outils > Graver la sequenceur de demarrage (bootloader "Arduino on a Breadboard")
puis televerser un Blink en choisissant "Arduino Duemilanove or
Diecimila / ATmega328" comme carte et "Arduino as ISP" si besoin.
Valeurs de fusibles officielles (ArduinoCore-avr boards.txt) :
ATmega328 : low=0xFF high=0xDA extended=0xFD (lock bits 0x0F)
ATmega168 : low=0xFF high=0xDD extended=0xF8
Ligne de commande equivalente :
avrdude -c arduino -p m328p -P COM7 -b 19200 -U lfuse:r:-:h -U hfuse:r:-:h
Verificación esperada
«Grabar los fusibles» termina sin error «not responding»; la lectura de los fusibles devuelve low=0xFF, high=0xDA, extended=0xFD para un 328. Tras grabar el bootloader, un Blink cargado (placa Duemilanove/ATmega328) hace parpadear el LED del objetivo alimentado de forma autónoma — el chip virgen se ha convertido en una placa por derecho propio.
Errores frecuentes
- Olvidar cambiar Herramientas > Programador: el IDE permanece en «Programador por defecto» y habla con el bootloader de la Duemilanove en lugar del ISP — mensaje «Expected signature».
- Número de pin incorrecto para el RESET del objetivo: en ArduinoISP, es el pin 10 del Arduino programador el que controla el RESET del objetivo (y también sirve como SS para evitar el modo esclavo SPI).
- Cristal ausente sin indicarlo a los fusibles: con los fusibles «full crystal» y sin cristal, el chip no arranca; para el oscilador interno de 8 MHz, fusibles dedicados (low=0xE2 en el 328) — si no, mantener el cristal de 16 MHz.
- Alimentar el objetivo con otra fuente al mismo tiempo que los 5 V del programador: conflicto de alimentación clásico que hace la programación aleatoria.
- Invertir MISO/MOSI: firma ilegible (0x00 o 0xFFFFFF); verificar los pines 17/18 del DIP-28.
- Grabar fusibles que corten el pin RESET o el SPI: el chip se vuelve inaccesible por ISP — no tocar los fusibles de seguridad sin red de seguridad.
- Confundir las velocidades de transmisión: el programador ArduinoISP funciona a 19200 baudios en avrdude (
-b 19200) aunque el bootloader de la Duemilanove, para un 328, esté a 57600.
Otros tutoriales para esta placa
- Faire clignoter la LED 13 d'une Duemilanove (et choisir le bon ATmega)
- Bouton poussoir et moniteur série sur la Duemilanove (avec ses 0,5 s de silence)
- Potentiomètre et variation LED : l'ADC 10 bits et le PWM 8 bits version AVR
- Ajouter un deuxième port série avec SoftwareSerial (GPS sur broches 10/11)
- Régler la référence de mesure avec AREF et analogReference
- Persister une calibration dans l'EEPROM de l'ATmega (512 octets ou 1 Ko)
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduinoservo-balayage.inoArduinobuzzer-melodie.inoArduino