Posso sovrascrivere il bootloader?

Ciao a tutti, chiedo quanto in oggetto perchè dovrei fare un applicativo che richiede di uplodare dentro al atmega328 un programma già pronto che però non è per arduino.
Ho fatto parecchie ricerche, però o si trovano solo gli atmega con bootloader, oppure si trovano quelli senza bootloader ma gli stessi venditori non hanno il quarzo a 16mhz e quindi dovrei prendere una cosa da una parte e una cosa dall'altra.
Mi è però venuto in mente che ho degli atmega328 messi da parte con il bootloader di arduino uno.
Potrei "sacrificarne" uno di questi cancellando il bootloader e uplodando il programma che mi serve, però non so se è possibile.
Inoltre, in caso fosse possibile, posso uplodare il programma che mi serve sul chip e poi per i primi esperimenti utilizzarlo montato nella board di arduino uno?
Il quarzo è indispensabile?
Grazie.
Ciao.

Il bootloader non è altro che un programma che serve alla scheda Arduino per comunicare più facilmente con il computer e permettere l'upload degli sketch senza usare un programmatore ISP esterno.

Ovviamente puoi eliminare il bootloader: devi riprogrammare i fuse del micro in modo da eliminare tale spazio riservato di memoria così da poter usare tutta la Flash per il tuo codice.
In questo modo devi però usare un programmatore esterno (o un altro Arduino) per flashare il tuo programma. Non consiglio di tenerti un Atmega senza bootloader nella scheda di Arduino perché questa è impostata per dialogare con il bootloader all'avvio.

Il quarzo esterno è impostato con i fuse. Volendo puoi togliere anche quello e programmare il micro per usare l'oscillatore interno ad 8 MHz.

Grazie Leo, mi devo studiare il tutorial su come programmare il bootloader, da li dovrei riuscire a capire come fare anche l'altra cosa, ma sono sicuro che dovrò farmi sentire ancora :frowning:

Se il programma che devi metter sul ATmega non é troppo grande (che servono anche i 500 byte del Bootloader) puoi anche lasciare su il bootloader. Anzi attraverso l' IDE puoi usare il ootloader per caricare il file .hex non derivante dal IDE.
Per il Clock ci sono diverse possibilitá come anche un oscillatore RC interno (ma poco preciso).
Leggiti il datasheet del ATmega.
Ciao Uwe

Il programma (.hex) è di 8,4K.
Ma come posso fare per inviare un file hex tramite l'ide? Esiste il modo?
Ho provato a guardare, ma la voce open apre solo i pde e non credo sia quella adatta :blush:

Allora, ho fatto delle prove con avrdude:

avrdude -p atmega328p -b 19200 -c stk500 -P /dev/ttyACM0 -e -U flash:w:./ap_ppm_encoder/default/ap_ppm_encoder.hex

ma non ne vuole sapere.
inizia a darmi una fila infinita di:

avrdude: stk500_ReceiveMessage(): timeout

Quindi ho guardato un po' i vari parametri che gli si possono passare, ed ho provato a fare un po' di prove con quelli del parametro -c, mettendo stk500v1, stk500v2, avr910 ecc. ma il risultato è sempre quello.
Vedo il led RX che si accende per un attimo e poi basta.
C'è qualcosa che sbaglio?

Non vorrei dire eresie ma credo che così non possa funzionare.
In realtà tu non hai un programmatore STK500 ma hai una scheda Arduino, che è "vista" come STK500, non so se a livello di Atmega8U2 o di bootloader stesso. I timeout dovrebbero proprio indicare che avrdude non riesce a comunicare con l'STK500.

Secondo me dovresti caricare sull'Atmega lo sketch per usarlo come programmatore ISP e poi collegare l'Atmega da programmare su una breadboard, ed usare il metodo del condensatore per evitare l'autoreset e provare a programmare il bootloader così.
Prova a vedere anche se questo tutorial può aiutarti:
http://www.michelemenniti.it/VHD/Elettronica/ABBL.pdf

Quella guida l'ho stampata ieri sera ma devo ancora trovare il tempo di leggerla.
Pensavo comunque di provare a vedere se da li tiravo fuori qualche idea per quello che devo fare.

Allora, ho fatto il cavetto ISP e sono riuscito a programmare il bootloader, solo che non riesco comunque a buttare dentro un programma diverso dal bootloader :frowning:
Mi sa che per il momento mi tocca arrendermi :frowning:

Come hai programmato il bootloader?
Come sai che il bootloader è stato caricato correttamente?
Come hai cercato di caricare lo sketch che dici non riesci a metter su?

leo72:
Come hai programmato il bootloader?
Come sai che il bootloader è stato caricato correttamente?
Come hai cercato di caricare lo sketch che dici non riesci a metter su?

Il bootloader l'ho programmato seguendo la guida Arduino/Arduino.
Non avendo Atmega senza bootloader, ho provato a riprogrammarne uno che già l'aveva e visto che la procedura non ha dato errori ho dedotto che l'abbia fatto correttamente, anche perchè poi il secondo arduino funzionava perfettamente.
Lo sketch invece in realtà non è uno scketh ma è un file .hex che ho provato a sparare dentro direttamente tramite avrdude usando sempre il cavo arduino/arduino con l'arduino master contentente lo sketch Arduino ISP.
Qui avrdude mi da sempre il solito timeout e non riesco a venirne fuori.
Conosci qualche altro modo per uplodare su un atmega un file in formato .hex?

Secondo me per caricare lo sketch nel secondo Atmega non devi usare la procedura Arduino/Arduino ma devi usare la procedura Arduino/Atmega standalone, ossia nell'Arduino, che userai come programmatore, ci carichi lo sketch ArduinoISP (come hai fatto), poi monti l'Atmega su una breadboard mettendo il quarzo esterno e quelle poche cose che servono, dopodiché programmi il micro usando avrdude al di fuori dell'IDE impostando come parametri di usare il secondo Arduino come programmatore.

Scusate se mi intrometto, ma siccome la situazione è similare...
@Leo72
come sai vorrei completare la guida proprio con un capitolo relativo al caricamento di uno skecth su un ATmega in modalità stand alone; ho provato a seguire il tutorial ufficiale ma sono proprio sfortunato oppure non ho capito nulla, ma mi sembra così facile! :astonished:
In pratica ho montato un ATmega328 in stand alone, Vi ho caricato caricato il bootloader tramite Arduino (con la procedura ormai nota ;)), poi ho provato a collegare i soli due pin tx/rx di Arduino ai corrispondenti pin dell'ATmega (come sul tutorial ufficiale), ho tolto il chip da Arduino, ho inviato lo sketch ma mi dà i soliti errori (non me li ricordo)! =(
Nel programmer ho impostato sempre Arduino UNO (l'ho usata come programmatore ed anche il chip di destinazione ha lo stesso bootloader).
Hai qualche idea?
Ti ho fatto alcune osservazioni sul bel lavoro che hai messo su Gioblu,anche in riferimento a questa cosa, sto aspettando una risposta :sleeping:

Premesso che non ho ancora provato, ma credo che avendo una UNO non puoi seguire la procedura standard, ossia quella di togliere l'Atmega dall'Arduino per programmare un Atmega standalone.

Secondo me bisogna lavorare a livello di file boards.txt. Prova a costruire un caso "Atmega (w/Arduino as ISP)" e metterci dentro qualcosa tipo questo:

atmegaarduinoisp.upload.speed=115200
atmegaarduinoisp.name=Atmega (w/ Arduino as ISP)
atmegaarduinoisp.upload.using=arduino:arduinoisp
atmegaarduinoisp.upload.maximum_size=32768
atmegaarduinoisp.build.mcu=atmega328
atmegaarduinoisp.build.f_cpu=16000000L
atmegaarduinoisp.build.core=arduino
atmegaarduinoisp.build.mcu=atmega368
atmegaarduinoisp.build.f_cpu=16000000L
atmegaarduinoisp.build.core=optiboot_atmega328

PS:
non ho visto il tuo commento. ora ci guardo...

leo72:
Premesso che non ho ancora provato, ma credo che avendo una UNO non puoi seguire la procedura standard, ossia quella di togliere l'Atmega dall'Arduino per programmare un Atmega standalone.

No, posseggo anche una 2009 ed una compatibile, non riesco con nessuna delle tre :* come mai?

Secondo me bisogna lavorare a livello di file boards.txt. Prova a costruire un caso "Atmega (w/Arduino as ISP)" e metterci dentro qualcosa tipo questo:
atmegaarduinoisp.upload.speed=115200
atmegaarduinoisp.name=Atmega (w/ Arduino as ISP)
atmegaarduinoisp.upload.using=arduino:arduinoisp
atmegaarduinoisp.upload.maximum_size=32768
atmegaarduinoisp.build.mcu=atmega328
atmegaarduinoisp.build.f_cpu=16000000L
atmegaarduinoisp.build.core=arduino
atmegaarduinoisp.build.mcu=atmega368
atmegaarduinoisp.build.f_cpu=16000000L
atmegaarduinoisp.build.core=optiboot_atmega328

non ho idea :astonished: di cosa sia questo suggerimento, immagino di dover cercare questo file della cartella dell'IDE e aggiungere queste righe, vedremo che succede :fearful:

PS:
non ho visto il tuo commento. ora ci guardo...

visto, grazie! allora forse non devo togliere il chip dall'Arduino per programmare lo sketch nel chip stand alone?, mi sento proprio un :zipper_mouth_face:

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? :stuck_out_tongue: :smiley:
Riparti da qui:

bloccando l'autoreset

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

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? :astonished:

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

UploadingATmega.jpg

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.

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???? $) $) $)

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???? $) $) $)

Ti vanno bene 1000 euro via fax (stile rapina di Cacioppo - Zelig)? XD
Intanto mi sono messo in ginocchio, aspetto e spero..... :slight_smile: