Die Formel scheint Volt * 5,9-6,6 = MHz zu sein (gültig zwischen 1,8 V und 4,5 V), also würde dies bei 3,3 V 12,8 MHz ergeben. Beachten Sie, dass bei einem Betrieb mit 12,8 MHz JEDER Abfall unter 3,3 V Probleme verursachen kann (und auch sehr schwer zu diagnostizieren ist!), Oder dass Sie damit durchkommen.
Arduino Atmega328p-Chips haben jedoch eine "Brown-out" -Erkennung von 4,3 V - bei jedem Abfall darunter wird der Chip heruntergefahren. Sie können einen ISP (AKA ICSP) beauftragen, die Sicherungen zu wechseln. Unter http://www.engbedded.com/fusecalc/ können Sie herausfinden, auf welche Sicherungen die Sicherungen eingestellt werden sollen. Sie können auch den ISP verwenden, um die aktuellen Sicherungen zu lesen oder den Chip ohne Arduino-Karte neu zu programmieren - alle meine Projekte haben einen 6-poligen Header. Wenn Sie dies tun, müssen Sie vor dem Neuprogrammieren mit der Arduino-Karte "Bootloader brennen" (im Menü "Extras"). Beachten Sie, dass die Programmierung weiterhin über die Arduino IDE erfolgen kann.
Wenn Sie alternativ "leicht" werden möchten (und einen ISP haben möchten), können Sie die Sicherungen austauschen, um die interne 8-MHz-Uhr zu verwenden - dies spart auch 2 zusätzliche Pins! Beachten Sie jedoch, dass die interne Uhr 1,2 Stunden pro Tag (= 5%) driften kann, verglichen mit 1,7 Sekunden pro Tag (= 20 ppm) bei einem typischen Quarzkristall. Wenn Sie es nicht zur Zeitmessung verwenden, spielt dies wahrscheinlich keine Rolle.
Sie müssen das Timing für Ihren Code ändern - Sie müssen eine board.txt mit den richtigen Einstellungen für Ihren Chip / Ihre Taktrate usw. hinzufügen - Sie können die Einstellungen aus dem Eintrag für die Karte kopieren, den Namen ändern und ändern die Einstellung "build.f_cpu"; Starten Sie Ihre Arduino IDE neu (oder starten Sie sie), gehen Sie zu "Tools-> Board" und wählen Sie das Board aus, das Sie hinzugefügt haben.
Sie können den Chip auf der Karte ein- und ausschalten und dort neu programmieren (beachten Sie, dass die unter Tools-> Karte ausgewählte Karte die FINAL-Karte und nicht die Programmierkarte ist). Seien Sie vorsichtig beim Ein- und Ausstecken - schließlich werden Sie die Stifte verbiegen! Alternativ können Sie ISP (ICSP) wie oben erwähnt verwenden - sehr zu empfehlen. Die ISP-Programmierung funktioniert auch, wenn der Chip werkseitig ist, solange er eine funktionierende Uhr hat.
Wie viel Strom der Chip verbraucht, hängt stark davon ab, was Sie damit machen - nicht nur Taktraten, Taktquelle usw., sondern auch Schlafmodi. Wenn Sie viel schlafen, zieht es möglicherweise weniger, wenn Sie schneller laufen als langsamer - wenn fast Ihre gesamte Zeit schläft, sollte der Stromverbrauch pro Taktzyklus und nicht pro Sekunde gezählt werden - wenn Ihre Uhr halb so schnell ist und halber Strom, dann ziehen Sie den gleichen Strom pro Befehl. Da der Rest Ihrer Zeit im Schlaf verbracht wird, erhalten Sie keinen Vorteil. Unter http://www.gammon.com.au/power finden Sie eine sehr gute Aufschlüsselung des Stromverbrauchs, Tipps zum Energiesparen usw.
Wenn Sie Ihre Uhr zu stark verlangsamen, werden Seriell und i2c möglicherweise unzuverlässig (es sei denn, Sie verlangsamen die Geschwindigkeit), aber ich würde erwarten, dass dies vorher auf 1 MHz reduziert werden kann, was ein Problem darstellt - ein 1-MHz-Chip, der versucht, 9600 Bit / s zu erreichen hat 104 Anweisungen pro übertragenem Datenbit. i2c läuft mit 100 kHz, sodass Sie 10 Anweisungen pro Bit (bei 1 MHz) erhalten - möglicherweise drücken. 8 MHz sollten in Ordnung sein. Test, Test, Test.
UPDATE: Es gibt 3 mögliche Einstellungen für die Brown-Out-Erkennung - es gibt 3 mögliche Werte für den AtMega328p: deaktiviert, 1,8 V, 2,7 V und 4,3 V. Ich hatte den Eindruck (oben), dass Arduinos normalerweise auf 4,3 V eingestellt waren; anscheinend ist das nicht der Fall (siehe Kommentar unten). Ich erinnere mich, dass ich irgendwo gesehen habe, dass ein Brownout erkannt wurde. Dies ist zu beachten, wenn Ihr Arduino zurückgesetzt wird, insbesondere wenn die Batterie stärker belastet wird (laufende Motoren, mehrere LEDs usw.).