Problemi Programmazione ISP

Dopo aver letto le guide di MENNITI e TESTATO
Mi sono messo al lavoro.

I miei componenti:

Sistema operativo Ubuntu 10.10

Programmatore - Arduino UNO rev 3
Chip da programmare - ATmega328P su breadboard
IDE 1.0

I collegamenti li ho eseguiti come da guida MENNITI
utilizzando il connettore 6 poli esempio di pag. 27

Come indicato da TESTATO a pag.2

  1. Seleziono Board->Arduino UNO
  2. Carico lo sketch ArduinoISP da \Examples\ArduinoISP
    Nel caricamento rilevo dei Warning vedi allegati Warn_1 e Warn_2
  3. Seleziono la borad di destinazione, ho provato diverse board:
    Arduino Uno
    Arduino BT W/Atmega328
    Arduino Pro or Pro Mini (5v, 16Mhz) w/ATmega328
  4. Seleziono Tools\Programmer->Arduino as ISP
  5. Caricamento dello sketch blik.ino tramite
    File\Upload Using Programmer
    I LED del caricamento lavorano però mi ritorna
    questo Error "avrdude: stk500_recv(): programmer is not responding:

Naturalmente non mi funziona.

Ma dove sbaglio?

Grazie
Carletto

Ma nel chip di destinazione hai messo prima il bootloader?

niki77:
Ma nel chip di destinazione hai messo prima il bootloader?

Con la tecnica ISP il bootloader non serve perché scrivi direttamente nella Flash.

@carletto:
Questo errore:
Error "avrdude: stk500_recv(): programmer is not responding:
ti dice che c'è qualcosa che non va con l'Arduino che sta lavorando come programmatore ISP.
Prova a sostituire lo sketch ArduinoISP con lo sketch ArduinoISP2 che ho modificato qualche settimana fa. Questo perché lo sketch allegato alla IDE 1.0 non funziona, come è riportato anche nella guida di Testato. Ma l'ArduinoISP è migliore del TinyISP che c'è riportato nella guida di Testato (non me ne voglia Testato :sweat_smile: ).

ArduinoISP2.pde (12.8 KB)

Sono d'accordo con te leo, però se lui seleziona la board come se dovesse programmare normalmente una scheda riprogramma l'arduino che fa da isp, o sbaglio?

Io ricordo di aver dovuto modificare il file board.txt creando una entry apposita che tra le varie configurazioni aveva nomeconfigurazione.upload.usign=arduinoisp , altrimenti mi scriveva lo sketch sull'arduino che fungeva da programmatore!

Per caricare il bootloader via ISP non serve alcuna modifica alla board, con IDE 0022/23 è sufficiente caricare ArduinoISP sull'Arduino, selezionare una delle board ufficiali di Arduino (in base alla versione di bl che si vuole caricare), e poi il burn bootloader automaticamente va a scrivere via ISP sul micro stand-alone.
Se invece si vuole caricare uno sketch via ISP allora serve la riga aggiuntiva, altrimenti lo sketch finisce sull'Arduino, quindi non bisogna fare confusione tra le due operazioni.
Nel caso dell'IDE 1.0 la questione è un po' diversa, peraltro ArduinoISP originale non funziona e Testato ha messo a punto una tecnica che supera il problema con il TinyISP, confermo che la versione fatta da Leo e BrainBooster (almeno io ricordo che c'aveva messo mano pure lui) è decisamente superiore, ma non credo che da sola garantisca il buon fine dell'operazione; se c'è un errore non penso dipenda dal TinyISP.

leo72:

niki77:
Ma nel chip di destinazione hai messo prima il bootloader?

Con la tecnica ISP il bootloader non serve perché scrivi direttamente nella Flash.

Anche se non bisogna dimenticare di specificare che l'operazione di bootloader è obbligatoria se si sta usando un micro vergine e si pensa di volerlo far lavorare a frequenze diverse da 1MHz (valori di default); infatti solo col caricamento del bootloader è possibile cambiare i valori dei fuse. Naturalmente l'operazione è fattibile anche con AVRDUDE ma quando si parla con coloro che stanno facendo i primi tentativi meglio restare sulle facili operazioni software.

Premetto che non ho avuto modo di valutare bene l'ide arduino 1.0 ed eventuali sostanziali modifiche, in questo caso , visto che carletto doveva caricare lo sketch blink su un chip vergine tramite arduinoisp, non è necessario che crei una entry specifica sul file board.txt con la configurazione che ho allegato nel post precedente (ma in tutti i casi se il chip fosse veramente completamente vergine in questa maniera non verrebbero scritti i fuses con la configurazione del clock e varie e pertanto non funzionerebbe mai a 16mhz), oppure carichi necessariamente precedentemente il bootloader?

Temo di non aver capito bene la domanda, faccio quindi un riepilogo per totale chiarezza:
1 - Il chip esce da ATMEL a 1MHz
2 - Può essere programmato direttamente con una board virtuale (restiamo su IDE 0022/23 per non fare confusione) a patto che essa preveda la configurazione con clock interno a 1MHz
3 - Se invece vuole settare il chip a frequenza diversa (p.es 16MHz) DEVE farlo caricandoci il bootloader dell'UNO o 2009, usando le relative board Arduino.
4 - Se NON fa precedere questa operazione e invia direttamente lo scketch, anche se usa una board virtuale settata per 16MHz, i fuse del micro resteranno settati per 1MHz, quindi lo sketch darà letteralmente i numeri, cosa visibile facilmente anche colo solo blink classico a 1Hz
5 - Se carica lo sketch CORRETTAMENTE dopo l'invio del bootloader tutto funzionerà ma il bootloader verrà cancellato, ma questo non ha alcuna importanza ai fini di un circuito stand-alone
6 - Se vuole avere un su chip bootloader e sketch quest'ultimo può caricarlo solo tramite tecnica seriale o montando il chip su Arduino al posto dell'originale

Quindi, con la tecnica isp si sovrascrive sempre e comunque il bootloader (giusto e sacrosanto) , caricare il bootloader serve più che mai a settare i fuses in questo caso.

Quello che però non ha specificato è se per scrivere lo sketch blink via isp (ovviamente su un chip con fuses settati correttamente e correttamente collegato ad un arduino con a bordo il corretto software per emulare ISP) sia necessario o meno modificare board.txt come illustrato.

Con 022/023 mi pare di si perchè ci ho sbattuto la testa, con 1.0 è cambiato qualcosa?

Dipende dalla frequenza di clock dell'atmega di destinazione.

Io non riesco proprio a caricarlo il mio sketch.

Ho caricato ArduinoISP2.pde di leo.
Ho provato a compilarlo è andato a buon fine però con dei warning come da allegati.
Poi con File\Upload Using programmer carico il mio blink ma ricevo sempre lo stesso errore:
avrdude: stk500_recv(): programmer is not responding.
Allego lo schema che ho utilizzato e chiedo un chiarimento.
Come si vede l'ho collegato cosi:

Arduino programmer SCK con ATmega328P pin 19 SCK
" " MOSI " 17 MOSI
" " MISO " 18 MISO
E' corretto?

Non sono considerati Arduino come Master e l'ATmega328P come Slave?
Quindi MOSI con MISO e
MISO con MOSI?

Grazie

Carletto

ArduinoISP2_a.png

UNO_ICSP_C.pdf (10.1 KB)

devi collegare ogni pin al proprio omologo non invertirli

carletto:
Arduino programmer SCK con ATmega328P pin 19 SCK
" " MOSI " 17 MOSI
" " MISO " 18 MISO
E' corretto?

Non sono considerati Arduino come Master e l'ATmega328P come Slave?
Quindi MOSI con MISO e
MISO con MOSI?

Grazie

Carletto

MOSI = MasterOutputSlaveInput
MISO = MasterInputSlaveOutput

non devi collegarli all'inverso come si fa con Tx e Rx della seriale.

no

niki77:
Con 022/023 mi pare di si perchè ci ho sbattuto la testa, con 1.0 è cambiato qualcosa?

Si, e' cambiato
Nell'ide 1.0 e' stato ufficialmente inserita la programmazione di sketch via ISP, proprio per supportare questa importante novita' e' nata la mia guida.

leo72:
Ma l'ArduinoISP è migliore del TinyISP che c'è riportato nella guida di Testato (non me ne voglia Testato :sweat_smile: ).

figurati, fai bene a sottolinearlo, onestamente non ho modificato la guida perche' attendo la release ufficiale per vedere se lo sketch ufficiale funziona, a limite in quell'occasione aggiungo alla guida anche questa versione (che se non ricordo male e' migliore anche dell'eventuale nuova versione funzionante nella ide che uscira', giusto ?)

niki77:
Quindi, con la tecnica isp si sovrascrive sempre e comunque il bootloader (giusto e sacrosanto) , caricare il bootloader serve più che mai a settare i fuses in questo caso.

Quello che però non ha specificato è se per scrivere lo sketch blink via isp (ovviamente su un chip con fuses settati correttamente e correttamente collegato ad un arduino con a bordo il corretto software per emulare ISP) sia necessario o meno modificare board.txt come illustrato.

Con 022/023 mi pare di si perchè ci ho sbattuto la testa, con 1.0 è cambiato qualcosa?

Sì, l'ho scritto al punto 4 anche se infilato nel discorso del bl, e nel mio terzultimo post

Se invece si vuole caricare uno sketch via ISP allora serve la riga aggiuntiva, altrimenti lo sketch finisce sull'Arduino, quindi non bisogna fare confusione tra le due operazioni.

La riga aggiuntiva si potrebbe anche semplicemente aggiungere temporaneamente alla board di Arduino, oppure, come abbiamo sempre fatto, si crea quella virtuale con cui si recupera anche la parte di flash riservata al bootloader.
Con 1.0 effettivamente ora si specifica direttamente che si sta effettuando l'operazione ISP, come ha già spiegato Testato.

A Carletto: l'errore è proprio nel collegamento ISP: il RESET del micro da programmare NON va sul reset dell'ISP, che non deve essere collegato, bensì al pin 10 di Arduino; se guardi la mia Guida c'è uno schema disegnato e nel testo è spiegato tutto per bene, anzi ti allego l'immagine che ho usato su un mio articolo per Elettronica In, la Redazione non me ne vorrà :slight_smile:

Hai ragione,è un problema del mio schema allego lo schena corretto ricavato dal tuo tutorial.
Attualmente sono in questa situazione:

Con "ArduinoISP" oppure con "ArduinoISP2" mi da errore "programmer is not responding"

Con "TinyISP" di Testato riesco a caricare il mio "blink" e funziona!

Però trovo una cosa strana, la velocità è inferiore a quella che avrei con Arduino e
se tolgo il quarzo 16Mhz non cambia niente, continua a funzionare e se cambio
i tempi dei delay i tempi cambiano.
La mia impressione è che sia programmato con oscillatore interno. Possibile?

Carletto

UNO_ICSP.pdf (9.88 KB)

Bene, se con TinyISP funziona il primo passo è fatto.
ArduinoISP NON funziona, lo sappiamo, AsrduinoISP2 dovrebbe andare, ma io non uso IDE 1.0 e quindi non so aiutarti oltre.
Invece è possibilissimo che i fuse siano sballati, ma prima di caricare lo sketch hai messo il bootloader?