Non riesco a caricare schizzi sul mio Arduino Uno.
- L'ho "murato"?
- Quali passi posso prendere per capire cosa non va?
- Cosa posso fare per risolverlo?
Non riesco a caricare schizzi sul mio Arduino Uno.
Risposte:
Ho un bel po 'di Arduinos e negli ultimi anni ne ho sempre solo "murato", e penso che lo abbia fatto zappando con elettricità statica. Sfortunatamente quello in particolare aveva un chip del processore SMD (montato in superficie), quindi non è facile provare a scambiarlo con un altro chip.
Mantieni la calma e prova i seguenti passaggi ...
Un "Arduino Uno" non è solo una cosa che potrebbe fallire. Ha più componenti principali e probabilmente uno solo ha fallito (se presente). Vedi questa fotografia di riferimento:
I componenti principali sono:
Notare che i LED Rx e Tx non sono collegati direttamente ai pin digitali 0 e 1 sulla scheda (contrassegnati con Rx e Tx). Si illuminano solo se si effettuano comunicazioni seriali tramite USB , non se si dispone di qualcosa (come un GPS) collegato direttamente ai pin digitali 0 e 1.
Inoltre, poiché il LED "L" è collegato tramite un amplificatore operazionale, potrebbe illuminarsi se il pin 13 è impostato su un ingresso nello schizzo. E 'normale. Ciò non significa che qualcosa stia inviando erroneamente dati.
Collegare la scheda al computer con il cavo USB e verificare che il LED verde "Acceso" si illumini.
Utilizzare un multimetro e un paio di cavi jumper per eseguire il test tra il pin 5 V e il pin GND (indicato dalla freccia nella parte inferiore). Dovresti ottenere una lettura di circa 5,0 V (ho 5.04 V sul mio).
(Puoi acquistare un multimetro economico per circa $ 10 se non ne hai uno, ma è meglio ottenerne uno migliore per circa $ 50 - controlla tutti i siti web e i negozi di elettronica.)
Se non si ottengono 5 V con il cavo USB inserito, accertarsi che l'altra estremità sia collegata al computer. Prova anche un altro cavo.
Se si sta utilizzando o si prevede di utilizzare il jack di alimentazione (contrassegnato con "power in" sulla foto), scollegare l'USB e collegare un alimentatore, che dovrebbe essere compreso tra 7 e 12 V CC con positivo sul pin centrale .
Misurare i pin 5 V e 3,3 V come sopra. Dovresti comunque vedere le stesse tensioni su di loro.
Se si ottengono 5 V con l'USB collegato, ma non con l'alimentatore, è probabile che il regolatore di tensione (contrassegnato sulla foto) sia danneggiato. O, forse, l'alimentazione è fallita. Prova un altro alimentatore per confermare quale sia.
Se si dispone del bootloader Optiboot (normalmente fornito da Uno), se si preme e si rilascia il pulsante di ripristino, oppure si scollega e ricollega il cavo USB o di alimentazione, il LED "L" dovrebbe lampeggiare rapidamente 3 volte. I tempi "on" e "off" sono 50 ms ciascuno, i tre lampeggi dovrebbero essere terminati entro circa 1/3 di secondo.
In caso contrario, potresti avere un problema con il bootloader o il chip del processore principale (Atmega328P).
Importante: se si verificano problemi durante il caricamento di schizzi, rimuovere tutti i dispositivi collegati (come gli scudi). Rimuovere anche i ponticelli collegati alle prese della scheda. In particolare, non ci dovrebbe essere nulla collegato ai pin digitali 0 e 1 (Rx e Tx) perché ciò interferirà con la comunicazione con il computer di caricamento.
Scegli uno dei semplici schizzi di esempio (es. Blink) e prova a caricarlo. Questo è ciò che dovresti vedere:
Il LED "L" dovrebbe lampeggiare 3 volte. Questo perché il chip principale viene ripristinato da un comando dal processo di caricamento.
Il LED "Rx" dovrebbe lampeggiare rapidamente. Queste sono le istruzioni del processo di caricamento che tenta di attivare il bootloader.
Il LED "Tx" dovrebbe lampeggiare rapidamente. Questo è il processore che riconosce i dati caricati.
Potresti vedere quanto sopra, anche se il processo di caricamento non riesce. Ciò potrebbe essere dovuto al fatto che è stato selezionato il tipo di scheda errato.
Se lampeggia solo il LED "Rx", potrebbe essere a causa di un problema con il bootloader o il chip del processore principale (Atmega328P). Qualcuno sta bussando, ma nessuno è a casa!
Se i LED lampeggiano, ma viene visualizzato un messaggio come questo:
avrdude: stk500_recv(): programmer is not responding
Controlla il tipo di scheda:
Se hai selezionato il tipo di scheda sbagliato, probabilmente invierà le istruzioni di caricamento errate e il timeout o altrimenti fallirà. Se sei come me e hai diverse schede in giro, è facile dimenticare che l'ultimo caricamento che hai fatto è stato per un diverso tipo di scheda.
Se i LED non lampeggiano affatto, è possibile che sia selezionata la porta di comunicazione errata.
Controlla la porta di comunicazione:
Prova il tuo Arduino su un altro PC / Mac se ne hai uno a portata di mano. Questo può restringere se hai o meno un problema con il particolare computer in cui lo hai collegato o con i computer in generale.
Cablaggio:
Se tutto riecheggia: questo conferma che hai la giusta porta di comunicazione, il cavo USB è OK e il chip di interfaccia USB (Atmega16U2) è probabilmente OK.
Se non viene restituito nulla, controllare:
Se la scheda non supera il test di loop-back e si è certi che il cavo USB sia OK, è possibile testare il chip Atmega16U2 stesso. C'è un'intestazione ICSP (In Circuit Serial Programming) sulla scheda, adiacente al chip Atmega16U2 e vicino alla presa USB.
Scollegare prima l'alimentazione (scollegare il cavo USB e qualsiasi cavo di alimentazione).
Quindi è possibile collegare l'intestazione ICSP tramite 6 cavi jumper a uno buono noto, come mostrato nella foto:
I pin-out per l'intestazione ICSP sono (dall'alto):
Il pin 1 sull'intestazione ICSP vicino al chip Atmega16U2 è contrassegnato da un piccolo punto bianco, vicino alla "F" in "AREF". Il pin 1 sull'intestazione ICSP vicino al chip ATmega328P è contrassegnato da un piccolo punto bianco, sotto la "N" in "ON".
Connetti:
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
Ricontrolla il tuo cablaggio.
Quindi sulla scheda "bene noto" installare lo schizzo "Atmega_Board_Detector" come descritto nella pagina del programmatore del bootloader Atmega . Il codice è su GitHub - nickgammon / arduino_sketches . Se fai clic sul pulsante Download in quella pagina otterrai una serie di utili schizzi. Quello che vuoi si chiama "Atmega_Board_Detector".
Una volta installato, apri il monitor seriale, impostalo su 115200 baud e dovresti vedere qualcosa del genere:
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000
Bootloader:
3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3
First 256 bytes of program memory:
0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...
Tuttavia, se ricevi un messaggio come questo:
"Failed to enter programming mode. Double-check wiring!"
Ciò sembrerebbe indicare che il tuo ATmega16U2 non funziona.
Scollega l'alimentazione dal "noto bene" Arduino Uno e ricollega i jumper ICSP come da questa foto, per collegarli al processore "principale" sul tuo Uno:
I pin-out per l'intestazione ICSP sono (dall'alto):
Il pin 1 sull'intestazione ICSP vicino al chip ATmega328P è contrassegnato da un piccolo punto bianco, sotto la "N" in "ON".
Il cablaggio è lo stesso di prima, tranne che per il collegamento all'altra intestazione ICSP, quella all'estremità della scheda, più lontana dalla presa USB.
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
Una volta connesso, apri il monitor seriale, impostalo su 115200 baud e dovresti vedere qualcosa del genere:
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...
MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328
First 256 bytes of program memory:
0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...
In questo caso conferma che il processore principale funziona e ha il bootloader Optiboot su di esso.
Non è facile da sostituire, ma è necessario solo se si utilizza il jack di alimentazione. Se si esegue da USB, non è necessario. In alternativa, è possibile predisporre un'alimentazione da 4 a 5 V (es. 3 batterie AA) e collegarle direttamente alla presa 5 V sulla scheda.
Ciò è necessario solo per il caricamento di schizzi tramite la porta USB e il debug seriale. Non è particolarmente facile da sostituire perché è un SMD (dispositivo montato in superficie). Tuttavia puoi farcela senza di essa.
È possibile caricare schizzi tramite l'intestazione ICSP, se si acquista un dispositivo di programmazione ICSP.
Esempi di tali dispositivi collegati alla presa ICSP:
(Quelle foto sono state scattate con un Ruggeduino, ma il concetto è lo stesso).
Puoi anche ottenere un cavo FTDI, in questo modo:
Collegalo alle porte seriali della tua scheda in questo modo:
FTDI Arduino Uno
GND GND (black wire on FTDI cable, blue jumper wire)
CTS not connected
VCC 5V
TxD D0 (RX)
RxD D1 (TX)
RTS To RESET with a 0.1 µF capacitor in series with it (green wire)
Ora puoi caricare schizzi direttamente sul processore principale, bypassando il chip USB.
Puoi anche usare il mio programmatore stand-alone del mio chip Atmega per caricare file .hex : questo ti consente di copiare il file .hex per uno schizzo su una scheda SD e quindi programmare la scheda tramite l'intestazione ICSP.
Il processore principale può essere sostituito abbastanza facilmente se è montato in un socket. Ottieni un chip sostitutivo da qualche parte come Adafruit per circa $ US 6. In alternativa, prova eBay. Cerca di ottenere un chip che abbia già il bootloader Optiboot, per evitare problemi.
Stacca con cura il chip esistente dal socket e installa quello nuovo, prendendo nota della posizione del pin 1. Il pin 1 ha una tacca sul chip e il suo orientamento corretto è indicato sulla prima foto in questo post con un giallo punto (il più vicino al bordo della tavola). Probabilmente dovrai raddrizzare leggermente le gambe. Tenere il chip dalle estremità e spingere delicatamente verso il basso su una superficie piana, come una scrivania, fino a quando non vengono spinti un po 'verso l'interno. Cerca di non toccare i perni di metallo, potresti zapparli con elettricità statica.
Ho uno schizzo sul programmatore del bootloader Atmega che sostituirà il bootloader Optiboot. Il cablaggio è lo stesso dello schizzo del rivelatore di chip. Il codice è su GitHub - nickgammon / arduino_sketches . Se fai clic sul pulsante Download in quella pagina otterrai una serie di utili schizzi. Quello che vuoi si chiama "Atmega_Board_Programmer".
Installa lo schizzo sul tuo "noto bene" e collegalo alla scheda di destinazione con il cablaggio mostrato in precedenza.
Apri il monitor seriale sul tuo "buono" Uno e dovresti vedere questo:
Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul 9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Digitare "U" per il caricatore Uno (Optiboot).
Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...
Digitare "G" per programmare il chip.
Tu dovresti vedere:
Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...
Questo richiede circa un secondo. Ora il bootloader è installato.
Il timer del watchdog (disattivato per impostazione predefinita) può essere configurato per ripristinare il processore dopo un certo tempo. L'intenzione è di recuperare da un "blocco" per un processore distribuito sul campo. Tuttavia, se il timer è impostato per un breve periodo (come 16 ms), il processore può reimpostarsi nuovamente prima che il bootloader abbia la possibilità di fare qualsiasi cosa.
I sintomi sono che non è possibile caricare nuovi schizzi. Alcuni bootloader moderni (come Optiboot) prendono provvedimenti per fermare questo problema come una delle prime cose che fanno. Tuttavia altri no.
Questo può essere difficile da recuperare, perché una volta eseguito lo schizzo, si ha il problema di ripristinarlo e se si ha il problema non è possibile sostituire lo schizzo. Le persone spesso segnalano di dover masterizzare un nuovo bootloader per ripristinare. Tuttavia questo è solo perché, come effetto collaterale, la masterizzazione di un bootloader cancella lo schizzo corrente.
V'è un modo di recuperare. Segui questi passaggi:
Lo menziono qui, anche se questo post è davvero indirizzato alla scheda Uno, perché è abbastanza comune.
Alcune versioni del bootloader Mega2560 cercano "!!!" nel caricamento in arrivo dal PC e, se lo vedono, passa in modalità debug. Ciò causa il fallimento del caricamento.
Codice di esempio:
Serial.println ("Furnace overheating!!!");
soluzioni:
O (più semplicemente):
Le schede con ATmega32u4 come processore principale (e unico) possono essere più difficili da caricare. Questo perché lo stesso chip deve gestire i caricamenti ed eseguire anche il tuo codice.
C'è una piccola finestra di opportunità, dopo che la scheda è stata ripristinata, quando cerca un nuovo schizzo da caricare. La tecnica per caricare su queste schede è:
Hai solo un secondo circa per farlo, prima che il vecchio schizzo inizi a funzionare. Non scoraggiarti se devi ripetere questo processo un paio di volte. È normale
Almeno, dato che suppongo che tu carichi il tuo schizzo tramite avrdude, ti preghiamo di fornire maggiori informazioni sul fallimento del caricamento (es. Output del programma di caricamento del disegno) in modo che le persone qui possano aiutarti meglio.
Oltre alla grande risposta di Nick Gammon, cerca i punti esclamativi nel tuo schizzo. Se lo schizzo contiene una stringa con un numero maggiore o uguale a 3 punti esclamativi, il caricamento non riuscirà, poiché le vecchie versioni di Arduino Bootloader interpreteranno questi punti esclamativi come un'altra funzione e il caricamento verrà interrotto.
Un esempio per interrompere il caricamento:
char* test = "This will stop the upload!!!";
Vedi il problema con il codice di Google .
Ho brickato 2x ATMega328P sulla mia scheda Arduino Uno a causa di elettricità statica (credo).
L'elettricità statica sembra aver ucciso il pin TX e quindi il programma non può essere scaricato utilizzando il cavo USB.
La soluzione più semplice è sostituire il microcontrollore. Puoi acquistare un nuovo DIP ATMega328P programmato con il bootloader di Arduino ( come questo di Adafruit ) e sei pronto per ripartire.
In alternativa, è ancora possibile programmare gli ATMega328P utilizzando il programmatore AVRISPmkII. Quando lo fai, tutto tranne il pin Tx funziona bene.