Alimentare AtMega328P con 3V

Ciao a tutti!
Sto costruendo un piccolo orologio da polso (o almeno questo è l'intento) con un atmega, il problema è che volevo utilizzare una classica batteria a bottone (visto che deve essere il più compatto possibile) e tali batterie sono a 3V.
Il display funziona a 3.3V circa, quindi sarebbe perfetto utilizzare tale batteria, e anche l'AtMega328p (sto usando la versione SMD ma è la stessa cosa) ha un range di tensione di alimentazione molto ampio (mi pare 1.8v-5.8v) dunque no problem per i 3v.
Chiaramente, sia per problemi di ingombri, sia per problemi di consumo ecc sto usando il quarzo interno dell'AtMega (anche perchè a 3V il datasheet dice che non si possono superare i 10MHz se non ricordo male).
Ho già fatto numerosi test, sull'AtMega ho caricato sketch e bootloader e quando alimento l'AtMega a 5V tutto funziona, se però sfrutto i 3.3v presenti sulla board di arduino per alimentare il tutto allora non funziona più.
Sapete se per utilizzare l'AtMega a 3V bisogna cambiare qualcosa nel bootloader o nei fuse? Online trovo ben poco e questo mi fa pensare che dovrebbe andare a prescindere da VCC (entro il range indicato nel datasheet chiaramente).
Grazie mille a chiunque mi sia di aiuto, spero di aver detto tutte le informazioni del caso!

Forse devi cambiare il fuse del BOD che magari sarà impostato a 4.3V e metterlo a 2.7V.

Inoltre se cambi la frequenza di clock devi caricare un nuovo bootloader ed usare un "core" differente altrimenti tutto ciò che è legato al clock (es. millis(), porte seiali, ecc.) NON funzionano più correttamente !

Guglielmo

Io ho caricato il bootloader per AtMega328p a 8MHz, quindi (suppongo) che millis delay e simili siano già a posto, no? Il bootloader dovrebbe servire a questo (in parte) ma potrei sbagliare, comunque eseguendo il programma mi pare che tutti i tempi siano corretti.
Per quanto riguarda il BOD, cosa sarebbe? LowFuse e HighFuse? Perdona l'ignoranza e grazie per la rapidità di risposta :slight_smile:

Perdona il doppio post, nel bootloader che ho usato vi è

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05

E leggendo online mi pare di capire che l'ultima riga sia quella che imposta la tensione minima e dipende da come si settano gli ultimi 3 bit, che ora sono impostati con 101 che mi pare di capire corrisponda a 2.7V e dunque dovrebbe funzionare. Sbaglio?
Posso provare ad abbassarlo a 1.8v ponendo 110 quei bit (cioè 0x06) ma tecnicamente non dovrebbe essere necessario.
Sbaglio io qualcosa? A me pare che così dovrebbe funzionare, ma se sto dicendo cose errate (cosa che spero) correggetemi! :slight_smile:

brizio95:
Perdona il doppio post, nel bootloader che ho usato vi è

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05

... ok, il BOD è impostato a 2.7V quindi va bene, oltre al bootloader (che serve SOLO in fase di caricamento del codice) devi usare un "core" per gli 8 MHz.

Ti conviene seletionare come board "Arduio Pro o Pro Mini" che ti permette di selezionare il clock (e l'alimentazione) del ATmega328P :wink:

Guglielmo

Avevo già provato a usare come board Arduino Pro or Pro Mini selezionando come Chip AtMega328p 3.3V 8MHz, e il caricamento del bootloader non mi dava problemi mentre il caricamento dello sketch si, e leggendo online mi pareva di capire che quello è fatto per essere utilizzato con un quarzo esterno a 8MHz (penso per garantire maggiore stabilità) e non con quello interno (che è quello che sto usando io e che a 5V mi funziona). Sbaglio?

Provando a cambiare il file txt del bootloader per abbassare la tensione di soglia a 1.8v, il caricamento dello sketch mi va in errore e non me lo fa caricare.

Inoltre, cosa sono i core?

Visto che usi il 328 prova a cercare il micrologio di Leonardo Miliani, usa una soluzione interessante per mantenere una certa precisione sul tempo. :slight_smile:

brizio95:
Avevo già provato a usare come board Arduino Pro or Pro Mini selezionando come Chip AtMega328p 3.3V 8MHz, e il caricamento del bootloader non mi dava problemi mentre il caricamento dello sketch si, e leggendo online mi pareva di capire che quello è fatto per essere utilizzato con un quarzo esterno a 8MHz (penso per garantire maggiore stabilità) e non con quello interno (che è quello che sto usando io e che a 5V mi funziona). Sbaglio?

Ovviamnete se vengono impostati i FUSE per quarzo esterno, se poi non lo trova NON parte ! Devi usare un programma (o usare a mano avrdude) per impostare correttamente i FUSE per 8Mhz, clock interno. Poi, puoi caricare i programmi selezionando la board che ti ho detto.

Guglielmo

E si possono cambiare questi fuse direttamente dal file boards.txt? Sono i bit CKSEL0 del Low Fuse? Se sì, come va impostato per usare un bit esterno? Vedo che di default sono pari a 0xFF, devo/posso modificarli per imporre di utilizzare il quarzo interno così da sfruttare la board "Arduino pro or mini"?

guarda questo, ci sono le opzioni che cerchi :slight_smile:

json

github

Doppiozero grazieeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!!!!
La cosa che mi hai mandato è stupenda!!!!!!! Una comodità assurda, mi hai salvato la vita!!!
In ogni caso, Dio sa perchè, ma nemmeno con questo inizialmente funzionava, però settando come soglia minima 1.8v invece che 2.7v allora con i 3v funziona tutto, grazie mille a entrambi davvero! Gentilissimi e disponibilissimi mi avete fatto scoprire tante cose nuove!
Al prossimo dilemma esistenziale :smiley:
Grazie!