Quali sono le implicazioni del funzionamento di un ATmega328P a 8 MHz e 3,3 V con il sistema Arduino?


8

Sto lavorando su un arduino personalizzato che funzionerà a 3,3 V senza regolatori o chip USB (per il consumo di energia). Ho sentito che l'overclock del chip a 16 MHz / 3,3 V è generalmente buono, ma mi piacerebbe comunque rimanere nelle specifiche.

Primo: per funzionare a 8 MHz, devo solo sostituire il cristallo? O c'è qualcos'altro che devo fare?

Secondo: devo apportare modifiche al codice per riflettere la nuova velocità? Sto usando connessioni seriali, SPI e I2C in questo progetto, insieme al sistema operativo NilRTOS e alle funzioni millis / delay. Qualcuno di questi sarà rotto? Il codice funzionerà notevolmente più lentamente?

Terzo: come posso programmare il chip? Va bene programmarlo in un Arduino Uno a 16 MHz, quindi trasferirlo nell'arduino personalizzato?

Quarto: il consumo di energia cambierà a 8 MHz?

Grazie!


2
Ci sono molte schede compatibili con Arduino da 3,3 V, Sparkfun Pro mini ne è un esempio. È supportato dall'IDE, quindi tutte le regolazioni specifiche dell'orologio verranno eseguite per te una volta che lo scegli dal menu a discesa "schede".
Oleg Mazurov,

A 8MHz probabilmente starai bene usando l'oscillatore interno invece di un cristallo. Fai attenzione quando compili il codice quando ad esempio scegli "Pro Mini 328p a 8MHz" che 8 viene applicato al codice, quindi non consiglierei la compilazione per 16MHz e poi il trapianto o potresti scoprire che un ritardo (1000) richiede due secondi come un semplice esempio. E controlla il risparmio energetico / sleep nel codice H2OhNo. (Un altro momento in cui ti suggerisco di ottenere qualsiasi programmatore invece di limitarti ai caricamenti seriali, cerca Tindie per "ISP.")
Patrick Tudor,

Risposte:


7

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.).


Grazie per questa risposta! Sono un po 'sconcertato da quello che hai detto sul rilevatore di brownout che si spegne sotto 4,3 V. Ora sto funzionando a 3,7 V e funziona benissimo; non è stato necessario apportare modifiche ai fusibili.
Vulcano,

@ user40, vedere la sezione "AGGIORNAMENTO" nella parte inferiore del mio post.
AMADANON Inc.,

4

Primo: per funzionare a 8 MHz, devo solo sostituire il cristallo? O c'è qualcos'altro che devo fare?

No, avvia l'oscillatore interno come suggerito da AMADANON Inc.

In alternativa, imposta il fusibile "divide clock per 8" (che lo farebbe funzionare a 2 MHz da un cristallo da 16 MHz) e poi nel codice cambi la divisione di nuovo a 2. ie.

#include <avr/power.h>

void setup ()
  {
  // slow clock to divide by 2
  clock_prescale_set (clock_div_2);
  } // end of setup

O per la programmazione in un altro Uno, lascia da solo il fusibile, programma a 16 MHz e poi abbassa l'orologio nel chip target, sperando che funzioni abbastanza a 3,3 V per eseguire quella prima istruzione. La cosa più sicura sarebbe installare un cristallo o un risonatore a 8 MHz sulla scheda target. Tuttavia, se la temporizzazione non è critica, eseguire con l'oscillatore interno.

Secondo: devo apportare modifiche al codice per riflettere la nuova velocità? Sto usando connessioni seriali, SPI e I2C in questo progetto, insieme al sistema operativo NilRTOS e alle funzioni millis / delay.

Se dici all'IDE che hai un processore a 8 MHz (es. Un Lilypad), allora dovrebbe regolare i ritardi, i calcoli della velocità di trasmissione ecc. In modo appropriato.

Qualcuno di questi sarà rotto?

I2C e SPI sono auto-clock. Possono funzionare a vari tassi. Dubito che ci saranno problemi con loro. Per quanto riguarda il seriale, purché i calcoli vengano eseguiti correttamente, dovrebbe essere ancora disponibile un'ampia gamma di baud rate.

Il codice funzionerà notevolmente più lentamente?

Bene sì, funzionerà a metà velocità rispetto a 16 MHz.

Terzo: come posso programmare il chip? Va bene programmarlo in un Arduino Uno a 16 MHz, quindi trasferirlo nell'arduino personalizzato?

Ce la puoi fare. Oppure potresti collegare un'intestazione ICSP o un'intestazione FTDI e programmarla in situ.

Esempi qui: http://www.gammon.com.au/breadboard

Quarto: il consumo di energia cambierà a 8 MHz?

Sì, è leggermente ridotto.

Puoi ridurlo considerevolmente di più usando altre tecniche come descritto su http://www.gammon.com.au/power e indicato da AMADANON Inc.


Grazie Nick! In realtà ho già letto il tuo sito Web e mi ha aiutato a ridurre radicalmente il mio consumo di energia. Di conseguenza, gli AA e gli AAA sono ora una fonte di energia praticabile per questo dispositivo, il che è un grosso problema perché il peso è importante. Quindi grazie anche per quel sito web - è un servizio enorme per la comunità e davvero utile per le persone come me.
Vulcano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.