Go Down

Topic: Posso sovrascrivere il bootloader? (Read 7722 times) previous topic - next topic

leo72

Prova rimontando tutto sulla breadboard e poi disabilitando l'Autoreset sull'Arduino (condensatore o resistenza, a seconda della scheda).

Quella porzione di codice è da inserire in /sketchbook/hardware/boards.txt: se hai letto il mio tutorial sulla programmazione dell'Attiny, c'è ad un certo punto un passaggio in cui va inserito tale file per far vedere l'Attiny all'IDE. Usando lo stesso principio, quel codice DOVREBBE far capire all'Arduino IDE di usare un Arduino per programmare un Atmega, ma non ne ho la più pallida idea se funziona oppure no  XD Lo scritto di getto...

Beh, se togli il chip con lo sketch ArduinoISP, come fa la scheda Arduino a lavorare come programmatore ISP?  :P :D
Riparti da qui:
http://arduino.cc/en/Tutorial/ArduinoISP
bloccando l'autoreset


Cmq, se sei riuscito a scrivere un bootloader, mi pare strano che tu non riesca a scrivere uno sketch. Secondo me

menniti

Grazie, posto che sono passate un paio di settimane e non mi ricordo più che prove ho fatto, non so se ho tentato di caricare uno sketch seguendo la stessa procedura del bootloader. Se faccio il collegamento Arduino completo - breadboard, quando invio uno sketch dall'IDE mi viene caricato sull'AT dell'Arduino, e infatti è quello che succede quando invio ArduinoISP. Dopo aver fatto questa operazione eseguo il burn bootloader e così programmo l'AT sulla breadboard. Domanda secca: mi stai dicendo che se invece del bootloader invio un secondo sketch questa volta se ne va sull'AT della bb?  :smiley-eek:
Quote
Beh, se togli il chip con lo sketch ArduinoISP, come fa la scheda Arduino a lavorare come programmatore ISP?   
Riparti da qui:
http://arduino.cc/en/Tutorial/ArduinoISP
bloccando l'autoreset

Infatti non credevo si dovesse usare Arduino come ISP, visto che perché sul tutorial ufficiale trovo questa cosa (v. immagine), che è quella che mi sta facendo imbestialire!   :0
Aspetto la tua gentile risposta e domani rimetto in piedi tutto e spero di far funzionare anche questa cosa, così implemento la guida e faccio anche le variazioni in riferimento ai tuoi suggerimenti.
Grazie!  XD
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

leo72

Quello schema a me non funziona. Non so se è perché non va bene per l'Optiboot oppure per via del fatto che sto usando una UNO.

leo72

Ci sono riuscito!!!!
Ho caricato uno sketch su un Atmega standalone usando un Arduino UNO come programmatore ISP!!!

Quanto mi dai per sapere come ho fatto????  $) $) $)

menniti


Ci sono riuscito!!!!
Ho caricato uno sketch su un Atmega standalone usando un Arduino UNO come programmatore ISP!!!

Quanto mi dai per sapere come ho fatto????  $) $) $)


Ti vanno bene 1000 euro via fax (stile rapina di Cacioppo - Zelig)?  XD
Intanto mi sono messo in ginocchio, aspetto e spero..... :)
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

leo72

La strada da percorrere era proprio quella di modificare, anzi creare, una nuova voce nel file boards.txt.
Come sai, quel file è usato dall'IDE per caricare non solo le librerie del core adatte ai singoli micro (un Atmega328 è diverso da un Attiny85 ecc...) ma anche per fornire la base su cui preparare i parametri per avrdude, che sarà poi usato per programmare il micro. In effetti, l'IDE funge un po' da frontend perché non è l'IDE che compila e prepara il file .hex ma avr-gcc, e non è l'IDE che spedisce il file generato, ma è avrdude.

Allora cosa ho fatto?
Ho preso il file /arduino-00xx/hardware/arduino/boards.txt ed ho aggiunto il seguente codice:

Quote
##############################################################

atmega.name=Atmega (w/ Arduino as ISP)
atmega.upload.protocol=stk500
atmega.upload.maximum_size=32256
atmega.upload.speed=115200
atmega.upload.using=arduino:arduinoisp
atmega.bootloader.low_fuses=0xff
atmega.bootloader.high_fuses=0xde
atmega.bootloader.extended_fuses=0x05
atmega.bootloader.path=optiboot
atmega.bootloader.file=optiboot_atmega328.hex
atmega.bootloader.unlock_bits=0x3F
atmega.bootloader.lock_bits=0x0F
atmega.build.mcu=atmega328p
atmega.build.f_cpu=16000000L
atmega.build.core=arduino


Puoi metterlo in qualsiasi punto di quel file, anche in fondo. Salvi il file e riapri l'IDE. Adesso in Tools/Boards avrai una nuova voce denominata "Atmega (w/ Arduino as ISP)": grazie ad essa puoi ora programmare un Atmega standalone!!!!

Come fare?
Ecco i punti:

1) prendi una Arduino UNO, avvii l'IDE, scegli come board "Arduino Uno"
2) ci carichi lo sketch "ArduinoISP"
3) chiudi l'IDE e stacchi l'Arduino dal PC
4) prendi una breadboard e prepari un circuito Arduino standalone come quello descritto qui nella foto in fondo alla pagina a DESTRA (usando quindi un quarzo esterno, 2 condensatori da 22 pF, ecc)
5) colleghi i cavi per programmare l'Atmega sempre come indicato in quella figura, ossia i pin 13/12/11 di Arduino ai pin 19/18/17 ed il pin 10 di Arduino al pin 1 dell'Atmega. Collega poi un pin GND alla linea GND della breadboard, ma NON collegare i +5V
6) collega l'Arduino al PC col cavetto USB
7) apri l'IDE
8) adesso metti il condensatore fra i pin RESET ed un pin GND di Arduino
9) adesso collega il pin +5V alla linea +5V della breadboard
10) carica nell'IDE uno sketch, va bene anche "Blink"
11) scegli la scheda "Atmega (w/ Arduino as ISP)"
12) fai l'upload!

Dopo pochi secondi vedrai che l'IDE ti dirà che è andato tutto a buon fine e che il LED sull'Arduino lampeggerà!
Non ti preoccupare, non è stato programmato l'Atmega dell'Arduino ma l'Atmega standalone!!! Il LED lampeggia perché il pin 13 è collegato ancora al pin 19 dell'Atmega standalone. Per riprova, scollega tutto, smonta il micro dell'Arduino e scambialo col micro standalone. Ridai tensione e vedrai che il LED integrato sull'Arduino continua a lampeggiare :-)

Adesso preparo un tutorial  :D

menniti

Grazie!
Ho stampato il tuo post e appena possibile faccio le prove, voglio dedicare comunque più tempo a questa cosa; riguardo la sequenza dei collegamenti avevo già riscontrato dei problemi nel collegamento contemporaneo di alimentazione e autoreset, infatti nella mia guida avevo scritto:
Quote
È da dire che in alcuni casi può succedere che non si riesca a caricare nel chip dell'Arduino il programma ArduinoISP, proprio a causa di questi collegamenti; in questi casi bisogna staccare tutto, caricare lo sketch sull'Arduino, poi collegare l'altro Arduino e, eventualmente, il filo per la disabilitazione dell'autoreset.

Voglio inoltre provare a capire se si può semplificare la procedura dei collegamenti in sequenza, ti farò sapere l'esito di tutto, tu intanto scrivi il tutorial, visto che comunque funziona; se, partendo da questo, trovo una soluzione alternativa la riporto nel mio e ti faccio una citazione di ringraziamento.
Voglio inoltre insistere sulla prova dei due soli fili tx/rx, se  Banzi & Co l'hanno scritta vuol dire che loro l'hanno provata in qualche modo, o no? :smiley-eek:
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

stefanoxjx

Però che senso ha fare tutto sto casino per sparare dentro uno sketch dai sorgenti?  :D
E se come nel mio caso ci fosse un file già in formato .hex da uplodare sull'atmega?
Credo bisogni andare direttamente di avrdude, però in questo caso bisogna sapere quali sono i parametri giusto da passare :(

leo72

@menniti:
io il metodo dei 2 fili l'ho provato, ma mi dà il solito errore di riconoscimento del programmatore stk500.
Con questo metodo ci riesco

@stefanoxjx:
tutto sto casino serve proprio per avere la comodità di usare l'IDE. ;)
Sinceramente io ho un programmatore esterno quindi potrei anche fregarmene di star dietro a questo problema. Ma siccome mi piace aiutare la comunità dato che la comunità aiuta me, ci ho studiato e ho trovato questo metodo.  XD
Forse si potrebbe passare direttamente dal terminale e da avrdude ma non ne sono sicuro. Avrdude lavora con programmatori, l'Arduino non lo è ma ne può simulare uno caricando appunto lo sketch ArduinoISP: solo che in questo modo non so se si può usare avrdude.

GianfrancoPa

Uhm, che ne dite di realizzare un pcb dove mettere un ATmega da usare solo come ISP? Piccolo piccolo, comodo, grazioso, con il connettore a 6 poli, proprio come un vero e proprio ISP programmer!!

Altra curiosità: Ma il programmatore, dev'essere proprio un ATmega?? Non ci sta tutto dentro un ATTiny???
Gianfranco

leo72

Lo sketch è piccolo, forse ci sta.
L'USBtinyISP di Adafruit mi pare usi proprio un Attiny2313.

menniti


Uhm, che ne dite di realizzare un pcb dove mettere un ATmega da usare solo come ISP? Piccolo piccolo, comodo, grazioso, con il connettore a 6 poli, proprio come un vero e proprio ISP programmer!!

Altra curiosità: Ma il programmatore, dev'essere proprio un ATmega?? Non ci sta tutto dentro un ATTiny???

Ciao GianfrancoPa, un'altra delle tue illuminazioni? ma non capisco l'idea, se vuoi usarlo come programmer, al posto di un Arduino serve comunque la connessione al PC, quindi usb, ecc.; poiché tutti o quasi quelli che gironzolano qui hanno almeno un Arduino, io avevo già detto che prossimamente (risolta prima la questione della programmazione degli sketch, in cui mi sta dando una grossa mano proprio Leo72) avrei creato una millefori o pcb (o entrambe...) che in pratica emulasse la breadboard, ma mi pare di capire che tu stia parlando di un'altra cosa, vuoi chiarirmela?
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

GianfrancoPa

Uhm dico questo, ovvero, prendere un ATmega (o altri), carcargli su lo sketch ISP Programmer, piazzarlo su pcb dotata di usb e connettore a 6 poli, e se vogliamo per far figura ci piazziamo qualche led. Cosa otteniamo? Un vero e proprio programmatore ISP, piccolo, da usare all'occorrenza e da conservare quando non necessario. Ovviamente è superfluo dal momento in cui basta utilizzare l'UNO per far tutto, però sai com'è, le esigenze sono tante, e magari stare li a montare e smontare cavi per qualcuno potrebbe essere scocciante!
Gianfranco

menniti

D'accordo, ma noi viviamo di cose superflue altrimenti dov'è il divertimento? Ma poi questo programmer lo devi comandare in qualche modo, non andrebbe a sua volta collegato ad un pc, o stanotte mi hanno portato sulla Luna e sto rinco per l'assenza di gravità?
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

GianfrancoPa

Il programmer fa da tramite tra pc e ATmega. Per farti capire, ecco cosa ho acquistato tempo fa:

http://cgi.ebay.it/ws/eBayISAPI.dll?ViewItem&item=350421486662#ht_4972wt_1140

E sai quando l'ho acquistato? Il giorno prima di scoprire che l'UNO bastava ed avanzava per caricare il bootloader su ATmega vergini...
Gianfranco

Go Up