Go Down

Topic: Arduino Uno R3 SMD e convertitore USB-seriale (Read 968 times) previous topic - next topic

tapirinho

ciao a tutti
un amico mi ha portato una Arduino UNO R3 SMD che non veniva riconosciuta come periferica.

Dopo aver letto svariati topic, ha riscritto il bootloader dell' ATmega16U2 e gli ho ricaricato il bootloader della mega238P usando la guida del mitico prof Menniti. Ora, quando resetto la scheda, il led 13 lampeggia, quindi credo che il bootloader sulla mega238P funzioni correttamente.

Dopo questa procedura, il pc (W XP) riconosceva la periferica come UNO, ma durante il caricamento dello sketch lampeggiava il led RX un paio di volte ed il tutto si concludeva con il solito triste messaggio di mancata sincronizzazione. Lo stesso pc lo utilizzo con una MEGA2560 R3 ed una UNO R3, quindi tenderei ad escludere problemi su questo lato.

Ho sfogliato un po' il forum, ed ho trovato istruzioni su come fare la riscrittura del 16U2 ma parlano di UNO NON SMD...
Al momento,dopo varie prove, la periferica viene riconosciuta come ATmega16U2 e non più come arduino.

Vorrei quindi una conferma sull'HEX giusto da caricare (io ho usato Arduino-usbserial-atmega16u2-Uno-Rev3.hex) e le procedure per l'aggiornamento del bootloader, visto che la versione UNO R3 SMD nella guida non viene contemplata... (ed eventuali errori/omissioni che posso aver commesso!!  :smiley-red:)

Grazie!

Michele Menniti

azz, mitico finora non l'avevo mai sentita :smiley-red: :smiley-red: :smiley-red:
Hai provato a caricare il bootloader anche sul micro 328P? che sia PDIP o SMD non cambia nulla.
A "occhio" il firmware che hai caricato sul 16u2 è proprio quello, peraltro la scheda ti viene riconosciuta, quindi ora il problema è sul microcontrollore principale, ho risolto due casi identici proprio nei giorni scorsi.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

tapirinho

Se non confondo le cose, non è la procedura descritta nella guida che hai fatto? (mi permetto di darti del tu nell'ottica friendly del forum :) )

con il mio MEGA ho seguito la guida come descritto ai punti 2A1-3-4-5
apro poi l'ide (1.0.5), faccio l'upload dello sketch Blink
quando arriva la scritta "sto caricando" il led 13 lampeggia, poi il led RX fa tre lampeggi e si risolve con la solit scritta "not in sync"

Michele Menniti

Cerchiamo di spiegare tutti i passaggi altrimenti diventa problematico capire dove ci troviamo :smiley-sweat:

Tu hai usato la programmazione ISP per caricare il firmware nel 16u2 e l'operazione è andata a buon fine visto che ora la board viene riconosciuta.

Poi dovresti aver usato la programmazione ISP (ovviamente cambiando connettore ICSP...) per caricare il bootloader nel 328P-AU (versione SMD, come detto le istruzioni sono identiche), riferendoti al paragrafo 5, specifico per l'IDE 1.0.x

Se anche questa operazione è andata a buon fine allora puoi caricare il blink e dovrebbe funzionare senza problemi.

Hai fatto così o no?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

tapirinho

Si, scusa... :smiley-red:

- usando flip ho programmato il 16U2 usando i file HEX presenti nella cartella C:\Programmi\Arduino\hardware\arduino\firmwares\atmegaxxu2 .
Primo dubbio: non è che così ho caricato solo il firmware e non il bootloader?

- poi la scheda viene riconosciuta come Arduino UNO dal pc

- a questo punto ho caricato il bootloader nel 328P-AU usando la tua preziosa guida e sia il lampeggìo dei led che i messaggi dell'IDE confermano che l'operazione è andata a buon fine

- provo a caricare lo sketch blink e da i sintomi descritti sopra...  :(

probabilmente ho saltato qualche passaggio; ho letto una decina di post che trattano l'argomento e probabilmente ho fatto un mix con gli ingredienti sbagliati!  :(

Michele Menniti

L'operazione con flip ti ha caricato il solo file hex nel 16u2 e va bene così, il 16u2 NON ha un proprio bootloader.
L'operazione fatta seguendo la guida invece dovresti averla fatto seguendo espressamente il capitolo destinato alla versione 1.0.x dell'IDE, scritta così sembra ok, ma a questo punto dovrebbe andare. Prova a descrivermi i passaggi che hai fatto punto per punto, riguardo il solo bootloader, ad iniziare dal tipo di collegamento e poi i successivi passaggi software.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

tapirinho

ok, lo rifaccio in diretta:

- apro IDE 1.0.5
-controllo settaggi seriale e modello Arduino
- imposto "Arduino as ISP"
- apro lo sketch di esempio "Arduino ISP"
-lo carico nella MEGA funzionante
-scollego la MEGA
-eseguo i collegamenti HW
-ricollego la MEGA
-seleziono la UNO come modello
-strumenti->Scrivi il bootloader
-lampeggìo di led per diversi secondi finchè appare la scritta "Scrittura bootloader terminata"
-collego direttamente la UNO
-seleziono porta e modello per la Arduino UNO
-carico lo sketch
-il led 13 lampeggia
-il led RX fa tre lampeggi
-appare l'errore "avrdude: stk500_getsync(): not in sync: resp=0x00"

Michele Menniti

Bella descrizione  :) ok tutto perfetto. A questo punto il problema potrebbe riguardare i pin seriali del micro o del convertitore. Avendo la mega puoi provare la strana manovra della seriale. Collega mega e uno tra loro con 5v gnd reset e tx in parallelo, non usare l'rx. Collega la mega all'usb apri l'ide e setta la mega quindi carica il blink. Poi scollega tutto e verifica se il blink funziona separatamente sulle 2 board
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

PaoloP


il 16u2 NON ha un proprio bootloader.


Non sono d'accordo. Il bootloader del 16U2 e del 8U2 è il DFU; esiste infatti un file per il firmware, un file per il bootloader e un file combinato che permette di riscrivere entrambi con la sola tecnica ISP.
Trovi tutto qui --> https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/atmegaxxu2
oppure dentro le directory dell'IDE.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Michele Menniti

Grazie per la precisazione Paolo, onestamente non ho mai messo mano a quei chip e non ne conoscevo la gestione.
Allora se lui ha caricato il solo bootloader (o il solo firmware?) tutto si spiega.
OK Tap, prova a caricare il blocco che ti ha linkato Paolo, al 99% risolvi.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

PaoloP

#10
Mar 11, 2014, 05:48 pm Last Edit: Mar 11, 2014, 05:53 pm by PaoloP Reason: 1
Tramite tecnica DFU deve caricare solo il firmware: https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/atmegaxxu2/arduino-usbserial : Arduino-usbserial-atmega16u2-Uno-Rev3.hex

Tramite ISP (ma servono i fuse corretti) questo --> https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/atmegaxxu2 : Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex

I fuse dovrebbero essere:
Quote
To burn (Uno):
avrdude -p at90usb82 -F -P usb -c avrispmkii -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

Ma questo è argomento di Michele.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

leo72

Se lui ha caricato il firmware, la scheda deve essere vista come Arduino perché il firmware invia VID/PID per farsi identificare dal sistema operativo proprio come Arduino. Ma qui scrive che ora è vista come Atmega16U2:

Ho sfogliato un po' il forum, ed ho trovato istruzioni su come fare la riscrittura del 16U2 ma parlano di UNO NON SMD...
Al momento,dopo varie prove, la periferica viene riconosciuta come ATmega16U2 e non più come arduino.

mi viene da pensare allora che abbia riscritto solo il bootloader DFU, ed è per questo che non riesce a spedire gli sketch.

Michele Menniti

Paolo, fammi capire, ma gentilmente leggiti bene il suo primo post, se no ci imbarchiamo in discussioni senza fine per mancanza di particolari.
Lui ha usato la tecnica ISP però ha caricato il file sbagliato, almeno così capisco dal suo e dal tuo intervento.
Comunque sia se usa la tecnica ISP deve caricare il file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex
Ora perché dici che serve settare i fuse? Il chip è saldato sulla board quindi deve essere già settato; allora non è sufficiente fare una cormale programmazione ISP con il file "combined" che hai indicato tu?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Se non si erasa il chip usando il parametro "-e", avrdude i fuse non li tocca di suo. Quindi può semplicemente scrivere la Flash e basta. Che sia bootloader o firmware completo, non fa differenza.

tapirinho

:smiley-eek-blue:
Ora state andando oltre le mie conoscenze!  :smiley-roll-blue:

Dopo aver riprogrammato il 16u2 con flip ed averci caricato il file C:\Programmi\Arduino\hardware\arduino\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Uno-Rev3.hex L'arduino viene riconosciuto correttamente come UNO. Per essere sicuro di aver eseguito tutto correttamente:
-collego la UNO
-ponticello sul primo jumper vicino al connettore USB
-su flip seleziono il modo di comunicazione USB
-carico l'HEX
- clicco su "Start application"

Ho provato ad usare la programmazione "in parallelo" della MEGA e della UNO, ma al momento dell'upload va tutto in timeout...

Go Up