Arduino Uno R3 SMD e convertitore USB-seriale

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!! :blush:)

Grazie!

azz, mitico finora non l'avevo mai sentita :blush: :blush: :blush:
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.

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 :slight_smile: )

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"

Cerchiamo di spiegare tutti i passaggi altrimenti diventa problematico capire dove ci troviamo :sweat_smile:

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?

Si, scusa... :blush:

  • 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... :frowning:

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! :frowning:

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.

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"

Bella descrizione :slight_smile: 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

[quote author=Michele Menniti link=topic=224779.msg1629011#msg1629011 date=1394528245]
il 16u2 NON ha un proprio bootloader.[/quote]

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.

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.

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:

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.

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:

tapirinho:
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.

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?

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.

:fearful:
Ora state andando oltre le mie conoscenze! :roll_eyes:

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...

tapirinho:
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.

Benissimo.
Adesso collega semplicemente la UNO alla USB del PC e prova a fare l'upload dello sketch "blink".

@Michele
Si hai ragione, i fusi sono già impostati correttamente per far partire il bootloader del 16U2 che poi richiama il firmware che fa funzionare il 16U2 come convertitore. Quindi non c'è bisogno di variarli.
Pensavo che in qualche modo avesse caricato il firmware da solo e quindi cambiato i fuse per farlo partire automaticamente, ma così non è stato.

Stessi sintomi:
-lampeggìo del 13
-3 blink del RX

  • messaggio di errore "avrdude: stk500_getsync(): not in sync: resp=0x00"
    :~

Ok.
Per verificare se il 16U2 funziona ben puoi seguire queste istruzioni
--> Loop-Back Test Instructions - IDE 1.x - Arduino Forum

In pratica stacchi la scheda, ponticelli rx con tx, pin 0 e 1, ricolleghi alla USB e apri l'IDE e poi il serial monitor.
Scrivendo sul serial monitor dovrebbe restituirti ciò che hai scritto.

Se funziona allora bisogna procedere riscrivendo il bootloader del 328P.

funziona, nella parte sottostante appare quello che invio.

edit: il bootloader l'ho riscritto almeno 5 volte! :frowning:

Allora il problema potrebbe essere il RESET del 16u2.
TAP, in effetti la programmazione in parallelo era un blando tentativo, a motivo del fatto che i due micro sono diversi, altrimenti NON collegando l'RX ti avrebbe funzionato. Però puoi provare così:
1 - Togli il micro 328 dall'UNO
2 - Usa la UNO come programmatore seriale (collegala all'USB del PC) e la MEGA come Target, quindi setta la COM della UNO ma come board setta la MEGA
3 - Collega le due board in parallelo: 5V-5V - GND-GND - TX-TX - RX-RX - RESET-RESET
4 - fai l'upload del blink.

Questo test, oltre a verificare (cosa che hai già fatto) il passaggio dei dati tx/rx verifica anche il buon funzionamento del segnale del RESET.