Arduino UNO R2 non smd nuovo che non carica sketch - problema risolto

Salve a tutti,
vorrei condividere la soluzione di questo problema, di cui si è parlato un paio di anni fa qui:

In pratica ero nella stessa identica situazione di djscolla, illustrata in apertura del thread citato:
un paio di anni fa, attratto dal prezzo basso, anche se al momento non mi serviva, ho acquistato in una fiera di elettronica un Arduino Uno R2 non smd originale, non sapendo che aveva entrambi i chip vuoti!
L’avevo lasciato nella scatola “Arduini”, poi la scorsa settimana l’ho tirato fuori ed ho avuto l’amara sorpresa!
Sono impazzito per cinque giorni, riassumo qui i vari tentativi senza successo.
Appurato che l’ATMEGA328P non aveva il bootloader (non andava neppure quando l’ho infilato in un arduino UNO R3 non smd che avevo), senza troppi problemi l’ho programmato.
Il microcontrollore funzionava perfettamente nell’R3 ma nell’R2 gli sketch giravano (il led lampeggiava) ma non era possibile caricarli da seriale, esattamente come accadeva a djscolla.
Con Flip 3.4.7 ho appurato che l’ATMEGA8U2 aveva il bootloader. L’ho allora riprogrammato, ma il solo file che veniva accettato per l’UNO era quello da 12K, dalla cartella arduino-usbserial.
Il file “UNO-dfu_and_usbserial_combined.hex”, contenente anche il bootloader non veniva neppure accettato da Flip ed in effetti ciò è giusto, il bootloader non può riscrivere se stesso!
La programmazione andava a buon fine ma rimaneva impossibile caricare gli sketch nella scheda.
Apparentemente la conversione USB-seriale funzionava perché se lasciavo il micro principale in reset (ponte tra RESET e GND), ponticellando TX (Digital Pin 1) con RX (Digital Pin 0) dallo stesso serial monitor dell’IDE se inviavo dei caratteri, questi mi tornavano indetro sempre esatti.
(prova descritta qui: http://forum.arduino.cc/index.php?topic=73748.0 ).
L’alimentazione era OK, così ho pensato che magari il risonatore del 328 avesse una tolleranza eccessiva, l’ho allora sfilato e montato in una breadboard (con quarzo da 16MHz ed i due condensatori) che ho collegato alla scheda solo con GND, +5V, RESET, RX e TX.
Ancora una volta con l’R3 funzionava ma con l’R2 no!
A questo punto il problema poteva essere solo nel firmware dell’ATMEGA8U2 e l’ultimo tentativo era quello di “infilarci” il file “UNO-dfu_and_usbserial_combined.hex”, contenente anche il bootloader e le varie impostazioni dei fuse.
La cosa però non si poteva fare via seriale, ma solo dal suo connettore ICP.
Come djscolla poi, anch’io mi domandavo come mai, a differenza di tutte le guide, con Flip dovevo indicare esattamente la sigla corretta (atmega8U2) invece di at90usb82.
Dopo un’infinità di prove ho capito che la risposta era semplice: le guide si riferivano evidentemente a vecchie versioni di Flip, che non supportavano l’8U2. Questo chip è stato supportato a partire dalla versione 3.3.4 e da allora bisogna evidentemente indicare la sua sigla esatta!
Dopo tutte queste chiacchiere ecco come ho risolto:

  1. Ho acquistato il programmatore USBtinyICP, l’ho collegato e ne ho installato il driver prelevato qui:
    http://www.adafruit.com/downloads/usbtiny_signed_8.zip

  2. Ho scaricato avrdude da qui:
    http://sourceforge.net/projects/winavr/

  3. Da questo file ("WinAVR-20100110-install.exe), senza installare niente, con 7zip ho estratto i due file
    avrdude.exe
    avrdude.conf

  4. In C: (ho usato un vecchio PC con windows XP) ho creato una cartella che ho chiamato “avrdude”
    e qui ho messo i due file appena estratti.

  5. In questa cartella ho messo anche il file
    UNO-dfu_and_usbserial_combined.hex
    copiato dalla cartella
    C:\Programmi\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2
    (l’avrei anche potuto prelevare da https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/firmwares/atmegaxxu2 )

  6. Con il prompt dei comandi mi sono posizionato nella cartella
    C:\avrdude
    e da qui ho dato il comando:
    avrdude -p at90usb82 -F -P USB -c usbtiny -U flash:w:UNO-dfu_and_usbserial_combined.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m

Qui va indicato esclusivamente il chip at90usb82 perchè l’atmega8u2 non sembra essere gestito da avrdude in quanto inviando il comando specificando “atmega8u2” al posto di “at90usb82” compare un messaggio di errore con la lista dei dispositivi supportati e non c’è niente che somiglia a atmega8u2.

Dopo qualche rifinitura al comando (che ho postato con la sintassi funzionante, come l’avevo letto nel libro “Arduino Cookbook, 2nd Edition” non andava) la programmazione è filata liscia ed ora il mio Arduino R2 è resuscitato!

Resta da capire perché la nostra scheda era così.
Non era stato mai programmato il firmware? Il bootloader nell’8u2 però c’era; è possibile che l’ATMEL fornisca questi chip già con bootloader?
Oppure, come invece temo, qualcuno ci aveva giocato e non era poi riuscito a ripristinare il tutto? E’ però strano che il micro 328 era completamente vergine, in caso di smanettamenti mi sarei aspettato di trovare almeno il bootloader in questo.

E’ stata dura, ma alla fine ho risolto ed ho imparato diverse cose. Sotto questo aspetto condivido pienamente lo spirito di djscolla, anche se comprendo chi ci dice “ma chi ve lo fa fare?” !


Credits:

Arduino Cookbook, 2nd Edition a pag.635, dove si spiega come tornare indietro dal “Reprogram the Uno to Emulate a Native USB device” (attenzione, nella prima edizione del libro questa parte non esiste!)

http://www.ladyada.net/learn/avr/setup-win.html

Qui si spiega anche come testare il tutto prima di programmare il chip:
“To test that avrdude is working properly open a command line and run the command
avrdude -c usbtiny -p m8
while the device is plugged in (the green LED is lit).”

Prima di procedere con la programmazione ho dato questo comando dal prompt in “C:\avrdude” ed ho ottenuto:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9389
avrdude: Expected signature for ATMEGA8 is 1E 93 07
Double check chip, or use -F to override this check.

avrdude done. Thank you.

Allego il log di ciò che mi è apparso durante la programmazione del chip.

Ciao a tutti e perdonatemi la lunghezza!
Bruno

log.txt (3.65 KB)

Grazie per la condivisione, sicuramente potrà essere utile a qualcuno :)

Poi ... essendo questo il tuo primo post, ti chiederei cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO. :)

Guglielmo