Go Down

Topic: Caricamento bootloader su ATMEGA88 (Read 964 times) previous topic - next topic

giox79

Buongiorno a tutti,
sono un nuovo appassionato di Arduino, e in collaborazione con alcuni amici abbiamo deciso di fare alcuni test su una board Arduino compatibile  che monta un ATMEGA88P.
A breve vorrei provare a caricare il bootloader sul uP e pertanto ho scaricato il manuale del prof. Menniti, e credo di avere capito i passaggi cruciali, ma mi rimane un dubbio.
L'unico punto in cui viene nominato l'ATMEGA88 si accenna alla necessità di usare delle board virtuali, per definire i dettagli del device target.
Se ho ben capito, le board virtuali sono quelle descritte nel capitolo

7B4-Caricare uno sketch con IDE 1.0.1 mediante tecnica ISP

Tuttavia mi mancano alcuni dettagli, che segnalo qui di seguito, sarei grato se poteste darmi una dritta:


  • è corretta la mia ipotesi che per caricare il bootloader sul mio ATMEGA88, basti definire la board virtuale e poi seguire la guida del paragrafo p 5 a pagina 26 (ovviamente usando come target la board appena configurata)?

  • bootloader.file: come faccio a creare quello per ATMEGA88? Ho visto che i device 88 e 328 sono pressoché identici (almeno dando una occhiata online/Google), ma non credo che lo stesso file sia valido per i due device

  • i dettagli sui lock e unlock bits, li desumo dal datasheet? Avete una idea se e come debbano essere cambiati?



Grazie a chiunque possa darmi qualche dritta
Giovanni

Michele Menniti

#1
Oct 06, 2012, 05:15 pm Last Edit: Oct 06, 2012, 05:21 pm by Michele Menniti Reason: 1
Ciao Giovanni, vedo con piacere che hai studiato :)
Per caricare il bootloader su ATmega88 devi avere un bootloader per ATmega88, non puoi usarne uno qualsiasi, chi ti ha fornito questa scheda dovrebbe averti dato anche il firmware, nel qual caso si può creare una board virtuale specifica.
Comunque, considerando che l'88 è pressoché identico all'8, si potrebbe creare una board virtuale a partire dalla board originale Arduino NG or older with ATmega8, ma il mega8 NON ha l'EFuse che invece è presente sul mega88
Oppure potresti partire da una board "Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168" e fare così
1 - copia ed incolla nel file boards.txt le righe di questa board
2 - cambia il codice della board (sono i caratteri iniziali di ogni riga: pro5v, falli diventare altra cosa)
3 - cambia il nome della board (la prima riga)
4 - alla voce MCU scrivi atmega88 (o atmega88P a tentativi)
5 - alla voce maximum_size scrivi 6144
Poi segui la Guida. Io stasera sono fuori, rientro penso verso le 23, se non hai risolto (ma ti aiuteranno altri, non ti preoccupare) vediamo come fare in base alla problematica che hai.

EDIT: naturalmente do' per scontato che la scheda sia identica all'Arduino, cioè con il quarzo/risuonatore da 16MHz; peraltro per non complicarti troppo la vita potresti mettere un 328P al posto dell'88 e non dovresti fare alkcuno sbattimento. Infine ti ricordo che il bootloader serve SOLO se hai necessita di usare la scheda proprio come un Adruino, cioè caricando gli sktech via USB, altrimenti, potresti farne a meno e usare direttamente la tecnica ISP. Al prossimo post fornisci più info sulla scheda che hai (magari un link), e poi anche la versione IDE che stai usando e quant'altro tu ritenga utile farci sapere, più sappiamo prima risolviamo. ;)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

giox79

#2
Oct 06, 2012, 06:19 pm Last Edit: Oct 06, 2012, 06:26 pm by giox79 Reason: 1
Ciao, prima di tutto grazie mille.
In effetti sono stato un poco fumoso, nel senso che in realtà la scheda è un progetto custom che utilizza questo device per questioni di scelta progettuale, quindi non ho margine di manovra sulla scelta del device.
Gli schedini dovrebbero arrivarmi tra un pò di tempo, quindi per il momento non riesco a dare più dettagli, circa l'esito dei trucchi che mi hai insegnato, il mio post serviva soprattutto per sondare il terreno e capire se quello che pensavo di fare aveva possibilità di successo o se era destinato al fallimento. Confermo comunque che l'oscillatore a 16 MHz è compreso nel piastrino.

Se secondo te va bene, io pensavo di far tesoro delle indicazioni che mi hai fornito e non appena avrò sotto mano il pezzo, potrò tornare a chiedere (oppure a dire che tutto è andato liscio come l'olio, ringraziandoti ulteriormente).
Comunque grazie mille, quantomeno adesso so che seppur con un pò di fatica e di consigli dalla comunità potrò trasformare il mio device in un Arduino equivalente.

Solo una ultima domanda: è preferibile editare come [RISOLTO] il thread e poi riesumarlo quando avrò nuove domande? Grazie ancora
Giovanni


leo72

Datosi che l'Atmega88 è l'antenato dell'Atmeg328, potresti provare a compilare l'Optiboot per la tua MCU. Il makefile dell'Optiboot ha già l'opzione pronta per compilare per questo micro.

Vai nella cartella dell'IDE di Arduino, poi in /hardware/arduino/bootloaders/optiboot, apri un terminale e poi dai "make atmega88".

giox79

Ciao,
grazie mille, sono riuscito a creare il file hex corrispondente a atmega88.
A questo punto, se ho ben capito, basta che io vada a creare una board virtuale con una cosa del genere nel file boards.txt

Quote


##############################################################

atmega88.name=Arduino Giovanniw/ atmega88

atmega88.upload.protocol=arduino
atmega88.upload.maximum_size=6144                        <<<<< grazie Michele!!!
atmega88.upload.speed=57600

atmega88.bootloader.low_fuses=0xFF                         <<<<< Questi due mi sa che mi serve il datasheet
atmega88.bootloader.high_fuses=0xDA                       <<<<<
atmega88.bootloader.extended_fuses=0x05
atmega88.bootloader.path=atmega
atmega88.bootloader.file=optiboot_atmega88.hex        <<<<< Ovviamente questo dopo aver copiato il file creato dalla build in atmega
atmega88.bootloader.unlock_bits=0x3F                       <<<<< Questi due mi sa che mi serve il datasheet
atmega88.bootloader.lock_bits=0x0F                          <<<<<

atmega88.build.mcu=atmega88p                                <<<<< o atmega88?!?!?
atmega88.build.f_cpu=16000000L
atmega88.build.core=arduino
atmega88.build.variant=standard



e a quel punto il più dovrebbe essere fatto.
Puoi mica confermarmi che non ci siano grossolani errori in quanto ho scritto?
Non è impossibile che non padroneggiando Arduino abbia preso un palo...
Perdona se faccio domande cui, con un rapido test su scheda, potrei rispondere da solo, ma non ho ancora la scheda e la curiosità è tanta  :P
Grazie ancora e buon week end.
Giovanni

Michele Menniti

Chiedi chiedi, non ti preoccupare. :)
La prova consigliata da Leo è valida, ovviamente (Leo è uno dei maghi del Forum, ma tu non farglielo sapere ;))! Devi verificare se funziona, è pur sempre un esperimento, vediamo invece le correzioni alla board che hai scritto:

atmega88.upload.maximum_size=7680                 <<<< stai usando l'optiboot, occupa solo 512 byte
atmega88.bootloader.high_fuses=0xDE                 <<<< è questo il valore corretto per il BOD LEVEL
atmega88.build.mcu=atmega88p                         <<<< sì, ho verificato e nell'AVRDUDE.CONF questo micro c'è.

I lock/unlock bits sono a valore standard, non ti preoccupare, sono praticamente sempre quelli su tutti i micro (dai un'occhiata alle varie board del file boards.txt e ti tranquillizzi ;))

Come hai giustamente compreso questa nuova board la devi mettere (segui BENE le istruzioni della mia Guida) nel file boards.txt, salvi chiudi ed al riaprire l'IDE 1.0.1 (NON usare 1.0!!) troverai la tua board pronta per il caricamento del bootloader

Non c'è bisogno che scrivi RISOLTO visto che ancora non sai se hai risolto qualcosa, quando hai notizie continua a scrivere su questo TOPIC e noi rispondiamo. Stai tranquillo, in un modo o nell'altro "Arduino Giovanniw/ atmega88" funzionerà! XD
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

giox79

Di nuovo grazie, ho provato a salvare e riaprire Arduino 1.0.1 (avevo già letto circa le criticità di 1.0 e lo avevo abbandonato prontamente) e vedo comparire la scheda.
Grazie a tutti, ora aspetto che arrivi il piastrino e cercherò di divertirmi, chiedendo aiuto quando sono nelle canne.
Saluti e buon we.

PS tranquillo non dico niente a Leo, rimarrà un segreto  :P

cece99


Datosi che l'Atmega88 è l'antenato dell'Atmeg328, potresti provare a compilare l'Optiboot per la tua MCU. Il makefile dell'Optiboot ha già l'opzione pronta per compilare per questo micro.

Vai nella cartella dell'IDE di Arduino, poi in /hardware/arduino/bootloaders/optiboot, apri un terminale e poi dai "make atmega88".

anche io voglio provare l'atmega88 :D, ma quando do sul terminale (di mac osx) make atmega88 mi da questo errore: -bash: make: command not found
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

leo72


anche io voglio provare l'atmega88 :D, ma quando do sul terminale (di mac osx) make atmega88 mi da questo errore: -bash: make: command not found


Per compilare un programma servono gli strumenti. Ogni distribuzione ha il suo pacchetto di strumenti di sviluppo, quindi dipende da che distro usi. Di solito si tratta di installare gcc, g++, make, automake ed altri. Su Ubuntu basta di solito installare il pacchetto "build-essential", sulla mia Arch il pacchetto è "base-devel", su altre distro ci sono singoli pacchetti o metapacchetti da installare.

giox79

Solo una nota aggiuntiva: su Windows 7 il problema che avevo avuto io era la assenza della variabile che puntava alla folder del compilatore, che mi comportava un errore lievemente diverso, in cui mi si diceva (ormai l'ho risolto, quindi non riesco ad essere più preciso) che non veniva trovato il comando avr-gcc.
Aggiornando la variabile di ambiente e riavviando ho sistemato.
Per MacOsx, non so che dirti, unica cosa, sei sicuro di esserti messo come path nella folder indicata da leo72 e aver poi digitato il comando di make?
La folder è:

/hardware/arduino/bootloaders/optiboot

Perdona la domanda banale, ma son alle prime armi e quindi penso sempre che anche gli altri possano fare i miei errori banali :P

Go Up