Arduino e Atmega come cambiare i fuse tramite IDE

03

Lug 2017

Per diversi progetti di domotica (legati principalmente alla realizzazione di nodi per la rivelazione di temperatura ed altri sensori) volevo cambiare i fuse degli Atmega, sopratutto quello “Extended” per disabilitare il BOD.

Cosa sono i fuse

Su internet si trova moltissimo materiale, cito www.leonardomiliani.com:

I microcontrollori Atmel possiedono al loro interno alcuni registri che servono a modificare alcune caratteristiche particolari del microcontrollore, ad esempio le opzioni riguardanti il clock, l’area di memoria da riservare al bootloader, l’attivazione di circuiti interni quali il WatchDog (WD) o il Brown-out Detector (BOD), l’abilitazione del pin del reset ed altro ancora. Questi registri sono detti Fuse […]

(potete approfondire qui)

Cos’è il Brown-out Detector

Il Brown-out detector è quel particolare registro esteso che sostanzialmente fa resettare il nostro microcontroller se la tensione in ingresso è più bassa di una certa soglia. I chip vergini non contengono alcun bootloader ed è disabilitato di default, mentre quello che andiamo a flashare per Arduino li imposta, a mio avviso, molto conservativi. Citando sempre il link di cui sopra di www.leonardomiliani.com

Il microcontrollore può operare ad una tensione variabile che, nel caso dell’Atmega328P, può oscillare da un minimo di 1,8V ad un massimo di 5,5V. Anche la frequenza operativa è variabile, potendo oscillare fra 1 e 20 MHz. Esiste un problema: la stabilità. Più la frequenza sale di valore e più la tensione deve stare sopra ad una certa soglia per garantire la stabilità di funzionamento del microcontrollore […] Nell’Arduino il microcontrollore è impostato a 16 MHz: a tale frequenza, necessita di una tensione minima che si aggira intorno ai 4,5V. Per questo motivo, l’Arduino imposta un livello di BOD di 4,3V. I possibili libelli di BOD sono: 4,3 V (fuse “1-0-0” rispettivamente per BODLEVEL2..0), 2,7 V (fuse “1-0-1”) e 1,8 V (fuse “1-1-0”).

Dato che:

  1. 2 batterie stilo ricaricabili erogano circa 2.90 volt quando cariche
  2. A 2.90 volt il nostro Atmega, sopratutto se a 8MHZ non ha problemi

Ho deciso di disabilitare proprio la funzionalità. Cambierò le batterie prima che si scarichino completamente e che quindi scendano sotto ad una certa soglia.

Come modificare i fuse tramite IDE

Dobbiamo modificare il file boards.txt che si trova all’interno della nostra cartella di installazione Arduino IDE (se siete su Windows, il percorso dovrebbe essere [cc]C:\Program Files (x86)\Arduino\hardware\arduino\avr[/cc].

Vi do un consiglio: non modificate direttamente la board, in quanto un aggiornamento vi farebbe perdere tutte le modifiche.

Aprire l’IDE e nella pagina delle impostazioni (File > Impostazioni) inserite un nuovo percorso (io ad esempio salvo sempre nell’hard disk secondario)

Arduino IDE impostazioni

In questa cartella create un nuovo percorso: [cc]D:\ARCHIVI\ARDUINO\hardware\breadboard\avr[/cc]

ed in questo percorso salvate il bootloader per l’Arduino a 8 Mhz (istruzioni più dettagliate sul link ufficiale)

Ora modificare il file boards.txt che avete in questo secondo spazio, aggiungendo una nuova board che comunque punti al bootloader già presente:

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

atmega328bbnobod.name=ATmega328 Bare 8MHZ No BOD
atmega328bbnobod.upload.protocol=arduino
atmega328bbnobod.upload.maximum_size=30720
atmega328bbnobod.upload.speed=57600
atmega328bbnobod.bootloader.low_fuses=0xE2
atmega328bbnobod.bootloader.high_fuses=0xDA
atmega328bbnobod.bootloader.extended_fuses=0x07
atmega328bbnobod.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bbnobod.bootloader.unlock_bits=0x3F
atmega328bbnobod.bootloader.lock_bits=0x0F
atmega328bbnobod.build.mcu=atmega328p
atmega328bbnobod.build.f_cpu=8000000L
atmega328bbnobod.build.core=arduino:arduino
atmega328bbnobod.build.variant=arduino:standard
atmega328bbnobod.build.board = AVR_ATMEGA328BB
atmega328bbnobod.bootloader.tool=arduino:avrdude
atmega328bbnobod.upload.tool=arduino:avrdude

Non ho fatto altro che:

  1. Copiare tutte le righe della breadboard “ufficiale”
  2. Cambiare l’extended fuses a 0x07 che vuol dire “NO BOD”
  3. Cambiare il nome alla board dandone uno più accurato (ATmega328 Bare 8MHZ No BOD)

Una volta che scriveremo il bootloader, sarà scritto con i fuse che noi desideriamo.

Facile facile!

Avete già provato questa modalità? Fatemi sapere nei commenti!

 

One thought on “Arduino e Atmega come cambiare i fuse tramite IDE

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *