La formula sembra essere volt * 5,9-6,6 = mhz (valido tra 1,8 V e 4,5 V), quindi a 3,3 V, questo darebbe 12,8 mhz. Tieni presente che, se corri a 12,8 mhz, QUALUNQUE calo al di sotto di 3,3 V PU MAY causare problemi (e anche molto difficile da diagnosticare!) O PUOI cavartela.
Tuttavia, i chip Arduino Atmega328p hanno un rilevamento "brown-out" impostato a 4,3 v - qualsiasi calo al di sotto di questo, il chip si spegne. È possibile ottenere un ISP (AKA ICSP) per cambiare i fusibili: visitare il sito Web http://www.engbedded.com/fusecalc/ per scoprire a cosa impostare i fusibili. Puoi anche usare l'ISP per leggere i fusibili attuali o riprogrammare il chip senza una scheda Arduino: tutti i miei progetti hanno un'intestazione a 6 pin. Se lo fai, prima di riprogrammare usando la scheda Arduino, dovrai "Masterizzare Bootloader" (nel menu strumenti). Si noti che la programmazione può ancora essere eseguita tramite IDE Arduino.
In alternativa, se vuoi andare "leggero" (e avere un ISP), puoi cambiare i fusibili per usare l'orologio interno da 8mhz - questo libera anche 2 pin extra! Tenere presente, tuttavia, che l'orologio interno potrebbe spostarsi di 1,2 ore al giorno (= 5%), rispetto a 1,7 secondi al giorno (= 20 parti per milione) su un tipico cristallo di quarzo. Se non lo usi per il cronometraggio, questo probabilmente non ha importanza.
Dovrai apportare modifiche ai tempi, per il tuo codice - devi aggiungere un boards.txt con le impostazioni corrette per il tuo chip / clock ecc. - puoi copiare le impostazioni dalla voce per la scheda, cambiare il nome e cambiare l'impostazione "build.f_cpu"; riavvia (o avvia) il tuo IDE Arduino, vai su "Strumenti-> Scheda" e seleziona la scheda che hai aggiunto.
È possibile spostare il chip dentro / fuori dalla scheda e riprogrammarlo lì (si noti che la scheda selezionata in Strumenti-> Scheda è la scheda FINALE, non la scheda di programmazione). Fai attenzione a collegarlo / scollegarlo - alla fine piegherai i perni! In alternativa, è possibile utilizzare ISP (ICSP), come menzionato sopra, molto consigliato. La programmazione ISP funzionerà anche se il chip è predefinito in fabbrica, purché abbia un orologio funzionante.
La quantità di energia utilizzata dal chip dipende enormemente da ciò che si fa con esso - non solo velocità di clock, sorgente di clock, ecc. Ma anche modalità di sospensione. Se stai dormendo molto, potrebbe funzionare di meno quando corri più veloce che correre più lentamente - se quasi tutto il tuo tempo è addormentato, il consumo energetico dovrebbe essere conteggiato per ciclo di clock, non al secondo - se il tuo orologio è metà della velocità e metà corrente, quindi si disegna la stessa corrente per istruzione. Dal momento che il resto del tuo tempo viene dormito, non ottieni alcun beneficio. Vedi http://www.gammon.com.au/power per una ripartizione molto buona del consumo di energia, consigli su come risparmiare energia, ecc.
Se rallenti troppo l'orologio, seriale e i2c potrebbero diventare inaffidabili (a meno che non rallenti la velocità), ma mi aspetterei di essere in grado di scendere a 1 mhz prima che ciò sia un problema: un chip da 1 mhz che prova a fare 9600bps ha 104 istruzioni per bit di dati trasferiti. i2c funziona a 100khz, quindi ottieni 10 istruzioni per bit (a 1mhz) - possibilmente spingendolo. 8mhz dovrebbe andare bene. Test, test, test.
AGGIORNAMENTO: ci sono 3 possibili impostazioni per il rilevamento brown-out - ci sono 3 possibili valori per AtMega328p: disabilitato, 1.8v, 2.7v e 4.3v. Avevo l'impressione (sopra) che gli Arduinos fossero normalmente impostati su 4.3v; apparentemente non è così (vedi commento sotto). Ricordo di aver visto da qualche parte che c'era il rilevamento del brownout. Questo è qualcosa da tenere a mente, se il tuo arduino si reimposta, soprattutto quando si caricano carichi maggiori sulla batteria (motori in funzione, più led ecc.).