[RISOLTO]Aiuto: Problemi nell'utilizzo di Arduino UNO come ISP

Ciao, sto usando una Arduino UNO, IDE 1.0.4, con Ubuntu 12.04. Gli sketch vengono caricati correttamente.

Ora però sto riscontrando problemi nella programmazione di un chip su breadboard. Ho seguito le istruzioni della Guida alla programmazione, riesco a caricare lo sketch Arduino ISP ma dopo non riesco ad andare più in là, la scrittura del bootloader sul chip target fallisce con errori vari, tra cui:

avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.

Questo capita caricando ArduinoISP e successivamente il bootloader sulla scheda target, come suggerito dalla guida. Anche inserendo il condensatore il risultato non cambia.

Ho provato a caricare la IDE 0022 ma con questa non riesco a compilare, problemi con il gcc in /usr.

Qualcuno può darmi un qualche suggerimento?

Ciao, non so se ti riferisci alla mia Guida....nel qual caso fai ben attenzione a seguire le indicazioni specifiche per l'IDE 1.0.x, che sono riportate in un capitolo a parte, ivi compreso il fatto che le boards virtuali hanno differenze sostanziali tra la 0022 e la 1.01. In genere quel messaggio indica il mancato dialogo tra Arduino ed il micro Target, per cui il software non riesce a leggere la signature di quest'ultimo e dà errore. Ora il collegamento è abbastanza semplice, ma un errore ci deve pur essere, quindi per arrivare a risolvere il problema dovresti fare un riepilogo sintetico dei passaggi che hai fatto, postare la board virtuale che hai usato e una foto dei collegamenti che hai effettuato.

Wolfman: Ho provato a caricare la IDE 0022 ma con questa non riesco a compilare, problemi con il gcc in /usr.

Se hai installato l'IDE dai repo di Ubuntu, toglila insieme alla toolchain che hai messo sul tuo sistema. Scaricati l'IDE dal sito di Arduino, le versioni 1.0.x integrano anche una toolchain funzionante (se vuoi aggiornarla, ho scritto una guida per Linux).

Fatto questo, come ti ha detto Michele, ricontrolla i collegamenti perché ci dev'essere qualcosa che non va. Ah, se il chip che vuoi programmare lavorava con un quarzo esterno prima di metterlo in standalone, devi collegarglielo perché lo richiede per funzionare correttamente.

Grazie a tutti e due. Ho controllato i collegamenti e sono corretti. Tutto è stato preso dalla guida di Michele seguendo i passi. Ho il sospetto che ci sia qualche affinamento da fare sulle modifiche al boards.txt in quanto per poter compilare per il target scelto ho dovuto aggiungere la riga mega3208.build.variant=arduino:standard e inoltre mi pare che il protocollo vada modificato in stk500v1. Ho provato anche a inserire "arduino" nel protocollo ma senza risultato. Buon Primo Maggio a tutti e due e ancora grazie. Lorenzo

No, la board che ho messo nella guida è corretta, la uso regolarmente; solo mi incuriosisce il codice mega3208, non potresti postare l'intera board che stai usando? Se fai il tirchio con le info sarà difficile risolvere il problema :)

[quote author=Michele Menniti link=topic=163766.msg1223561#msg1223561 date=1367389736]Se fai il tirchio con le info sarà difficile risolvere il problema :slight_smile:
[/quote]
Hai ragione, scusa. Dunque, ho caricato le righe come dalla tua guida, ma quando compilo lo sketch ottengo un errore di compilazione:

In file included from Blink.ino:10:
/home/lorenzo/arduino-1.0.4/hardware/arduino/cores/arduino/Arduino.h:213:26: error: pins_arduino.h: File o directory non esistente

Ho aperto il file arduino.h ma non sono riuscito a capire la natura dell’errore; controllando gli altri elementi del boards.txt ho potuto notare che tutti riportano una riga aggiuntiva, del tipo:

uno.build.variant=standard

Inserendo questa riga come ultimo parametro, l’errore di compilazione è scomparso. Ho pensato che si trattasse di un’evoluzione del file e ho proseguito con il lavoro, ottenendo l’errore che ho inserito nel primo post.

Ho provato anche a modificare il protocollo, in quanto in qualche altro file ho trovato l’indicazione di stk500v1, ma non ne è sortito alcun effetto. Peraltro anche inserendo “arduino” come protocollo, come ho visto in qualche altro topic, la situazione non migliora.

Inserendo il condensatore parimenti non cambia nulla. In pratica dopo aver avviato ArduinoISP ogni successivo tentativo di caricare uno sketch o il bootloader stesso falliscono con quell’errore di identificazione.

In questo momento la configurazione caricata nel boards.txt è la seguente:

mega3208.name=ATmega in Stand Alone 8MHz internal clock (w/ Arduino as ISP)
mega3208.upload.protocol=stk500
mega3208.upload.maximum_size=32768
mega3208.upload.speed=115200
mega3208.upload.using=arduino:arduinoisp
mega3208.bootloader.low_fuses=0xe2
mega3208.bootloader.high_fuses=0xdf
mega3208.bootloader.extended_fuses=0x07
mega3208.bootloader.path=optiboot
mega3208.bootloader.file=optiboot_atmega328.hex
mega3208.bootloader.unlock_bits=0x3F
mega3208.bootloader.lock_bits=0x0F
mega3208.build.mcu=atmega328p
mega3208.build.f_cpu=8000000L
mega3208.build.core=arduino
mega3208.build.variant=standard
##############################################################

E' vero, Nelle ultime versioni dell'IDE (non ricordo da quando esattamente) i file contenenti le definizioni dei pin sono stati divisi in una cartella a parte, ed ora il file boards.txt richiede l'aggiunta del parametro "variant", che specifica quale definizione usare. Le definizioni sono in /hardware/arduino/variants. Ogni cartella lì presente contiene le definizioni dei pin di una particolare scheda di Arduino. "standard" contiene quelle per l'Arduino UNO/2009/10000/Ethernet

Sì ma la sua board contiene comunque degli errori, rispetto a quella che uso io con successo. Wolfman, applica gentilmente queste variazioni: mega3208.upload.protocol=stk500 diventa: mega3208.upload.protocol=arduino mega3208.upload.using=arduino:arduinoisp la devi ELIMINARE completamente, questa crea conflitto con l'IDE 1.0.x

A questo punto diventa importante capire: a - il micro target è vergine o ne hai già fatto uso e quale? b - se è vergine devi PRIMA fare l'operazione di caricamento del bootlader, per cambiare i fuse, poi puoi caricare lo sketch c - se non è vergine ed in precedenza hai usato il quarzo esterno anche ora devi configurarlo col quarzo e caricare il bootloader d - condizione diversa dalle suelencate... quale?

Grazie Michele, ho applicato le modifiche da te suggerite al file boards.txt. Il micro è nuovo e mi è stato assicurato che al suo interno è già presente il bootloader. Per inciso lo utilizzerò in configurazione standalone, anche se ho previsto i fori per quarzo e condensatori sul PCB. Eseguo le seguenti operazioni:

a) accensione di entrambe le schede b) avvio IDE c) caricamento dello sketch "ArduinoISP" d) selezione "Tipo di Arduino" > Arduino UNO e) upload su Arduino (con successo) f) (senza spegnere) caricamento sketch "blink" g) selezione "Tipo di Arduino" > ATmega in Stand Alone 8 MHz... h) strumenti > Carica il bootloader > errore di riconoscimento target i) senza uscire, dalla stessa finestra IDE, upload sketch (tanto per provare...), che va a buon fine, con il risultato che lo sketch viene caricato su Arduino (?)

Per quanto riguarda le connessioni del micro sulla breadboard (osservati direttamente su di essa): pin 1 del micro al 10 di Arduino e al +5V mediante 10K pin 7 a +5V pin 8 a GND pin 9 al quarzo pin 10 al quarzo pin 17 all'11 di Arduino pin 18 al 12 di Arduino pin 19 al 13 di Arduino pin 20 a +5V pin 22 a GND

Il pin 19 è a sua volta collegato, tramite 1K, all'anodo del led il cui catodo è a GND. Finora rappresenta l'unico segno di vita della breadboard. :(

Se il micro è con bootloader precaricato lo possiamo considerare "usato" e quindi settato a 16MHz, di conseguenza la configurazione stand-alone va fatta con quarzo e condensatori. Nella configurazione non leggo i condensatori da 22pF tra pin 9 e GND e tra pin 10 e GND, se non ci sono davvero il problema è tutto lì, il micro non sta lavorando. A regime (8MHz interni) quarzo e C non serviranno, ma in questo momento il micro è settato per l'oscillatore esterno ed il quarzo senza C non oscilla. Riguardo le operazioni software, una volta risolta la questione hardware ricorda che per caricare lo sketch sul micro stand-alone con l'IDE 1.0.x (punto "i" del tuo elenco) NON devi usare il normale comando UPLOAD bensì il comando File - Carica con un programmatore e naturalmente nelle opzioni (Strumenti - Programmatore) dovrà essere settato Arduino as ISP. Il resto delle manovre è corretto ma hai l'errore al punto "h" dovuto certamente alla configurazione hardware (condensatori??) Fammi sapere.

Ehm, i condensatori c'erano, ho solo dimenticato di elencarli. Ad una più attenta analisi però ho scoperto che uno dei due non era da 22pF. Stamattina sono andato a comprarne un altro e magicamente tutto ha funzionato al primo colpo. Si vede che nel cassetto del negoziante c'è un po' di confusione...

Ringrazio tutti per i preziosi consigli.

Bene, l'importante è che le nostre ipotesi siano state confortate, ormai sappiamo che la tecnica ISP è "scienza esatta" quindi dietro le situazioni strane ci sono sempre banalità. Benvenuto nel Club XD