ATmega328P-UP als Standalone mit 3,3V und 4MHz

Ich bin derzeit beim Bau einer Uhr ähnlich dieser: „http://www.waniewski.de/And_more/uhr_clock_horloge.htm“
Dazu nutze ich einen ATmega328P-UP als Standalone, ein DS3132 Modul und einen „HKW“ DCF77 Empfänger.
Die Stunden und Minuten werden über das analoge Meßwerk ausgegeben. Das Datum über ein kleines 2 zweizliges OLED.
Das DS3132 Modul wird dabei regelmäßig alle par Minuten mit der DCF Zeit synchronisiert.
Soweit ist alles gut.
Um das ganze mit einem LiPo Akku zu Puffern versuche ich den Energiebedarf zu senken.
Dazu soll ein ATmega328P-UP mit 3,3V und 4MHz Takt (Quarz) betrieben werden.
Nach viel Sucherei bin ich soweit das ich einen angepassten Bootloader per ISP brennen muß.
Hierzu fehlt mir das Wissen und man kann scheinbar sehr viel falsch machen.
Dazu muß wohl ein passender Bereich in der Datei „boards.txt“ erstellt werden.
Kann mir freundlicher Weise jemand helfen diesen Eintrag zu erstellen oder liege ich hier völlig falsch?

Nein, grundsätzlich liegst du richtig.

Wobei ich dir folgendes raten würde.

Erstelle eine eigene Boarddefinition, nicht die originale ohne Not verändern.
Denn das nächste Update wirds dir zerdengeln.

Die DS3132 und die DCF77 ist eine DoppelMoppelei.

Alternativ:
Lasse deinen ATMega mit intern 1MHz(oder 8MHz) laufen.
Verwende einen 32,xxxxkHz Uhrenquarz
Synchronisiere den RealTimeCounter mit der DCF77
Dann brauchst du die DS3132 nicht mehr.

Und dafür, für diese Konfiguration, könnte ich dir eine Boarddefinition zukommen lassen.

Das mit dem DS3132stimmt schon. Aber ist ja nun da und läuft.
Da bei mir der DCF Empfang unzuverlässig ist (manchmal mehrere Tage kein vernünftiger Empfang) kam die Idee mit dem DS3132 auf.
Den ATmega mit intern 1MHz laufen zu lassen finde ich gut.
Die Konfiguration für 1MHz intern würde mich sehr Interrsieren.

Siehe Anhang

CombieHardwareDefinition.zip (6.21 KB)

Ihr meint DS3231 oder habe ich was verpaßt?

erhard:
Nach viel Sucherei bin ich soweit das ich einen angepassten Bootloader per ISP brennen muß.

Die Grundkonfiguration des µC wird in Merkern (fuses) festgelegt und ist durch "Brennen" dieser veränderbar. Mittels Konfigurator lassen sich die zu setzenden Bits definieren (gesetzt = 0). Die Ergebnisse (Beispiel: AVRDUDE -U lfuse:w:0x62:m -U hfuse:w:0xD9:m -U efuse:w:0xFF:m -U lock:w:0xFF:m ) müssen dann in die schon erwähnte Boarddefinition in boards.txt übernommen werden.

AVR Fuses

Wenn du viel Energie sparen willst, kannst du den Atmega auch die allermeiste Zeit schlafen lassen. Die DS3231 bietet einen Weckausgang. So kann der Arduino einmal pro Sekunde geweckt werden und die Anzeige aktualisieren. Da der Atmega fast nur schläft, kann er auch mit 8Mhz wie der ProMini laufen. Im Vergleich zu dem Oled-Display ist der Verbrauch eines viel schlafenden Atmegas vernachlässigbar. Richtig sparsam sind LCDs ohne Hintergrundbeleuchtung.

combie--- Danke! Werde ich heute abend testen. Ich nutze diess Shield "Christians Bastel-Laden | Benutzungsanleitung für den Arduino-ISP"

agmue--- Natürlich sollte es DS3231 heißen. Man sollte halt auch mal lesen was man da so tippt.
Den Konfigurator hatte ich schon einmal gefunden, bin aber derzeit damit etwas überfordert, da ich
bisher nur die Aruino IDE benutze. Da muß ich mich noch etwas einlesen.

Theseus--- Diese Variante hatte ich auch schon angedacht. Da der DCF Empfang aber nur sporadisch brauchbar
ist werte ich das DCF Signal ständig aus. Die analogen Ausgänge müssen ja auch laufen.Ich weiß nicht
ob die kurzen Zeiten dazwischen wirklich viel bringen.

Das primäre Ziel ist auch nicht einen Batteriebetieb zu ermöglichen. Der Akku soll nur mal ein par Stunden überbrücken.

erhard:
Ich bin derzeit beim Bau einer Uhr ähnlich dieser: „http://www.waniewski.de/And_more/uhr_clock_horloge.htm“
Die Stunden und Minuten werden über das analoge Meßwerk ausgegeben.


Das ist ja eine sehr nette Idee.
Mir stellt sich allerdings die Frage: Wie genau kann man die Minuten ablesen bei so einem Display.
Ich würde sagen +/-1 Minute ist recht optimistisch geschätzt.
Eine DS3231 läuft meiner Erfahrung nach pro Jahr nur um ein paar Sekunden falsch. Wozu also der große Aufwand mit der DCF77-Synchronisation?
Auch wird sich wohl wenig Zeit zum Schlafen ausgehen, wenn ständig das analoge Anzeigeinstrument (wahrscheinlich mit PWM) angesteuert werden muss.

Nur so meine Gedanken... :slight_smile:

Edit:
Und falls es um automatische Umstellung Winterzeit/Sommerzeit geht - siehe:
http://forum.arduino.cc/index.php?topic=313942.msg2177694#msg2177694
und
http://forum.arduino.cc/index.php?topic=154768.msg1163549#msg1163549

Das Problem ist nicht die Genauigkeit.
Eine RTC muß irgend wann gestellt werden. Das erfordert Bedienelemente.
Ein ansprechendes Gehäuse zu bauen stellt so schon eine große Herausforderung dar.
Dann noch zuverlässige und optisch ansprechende Bedienelemnte zu intgrieren überfordert mich.
Der derzeitige Stand funktioniert ohne äußere Eingriffe. Die Uhr einfach an einem Empfangstechnisch günstigen Platz stellen und abwarten. Irgend wann ist sie wieder aktuell.

-combie-

Der Bootloader lässt sich leider nicht brennen.
Fehlermeldung:
" ***failed;
avrdude: WARNING: invalid value for unused bits in fuse "efuse", should be set to 1 according to datasheet
This behaviour is deprecated and will result in an error in future version
You probably want to use 0xfd instead of 0x05 (double check with your datasheet first)."
Der Standart Bootloader lässt sich Problemlos brennen.

erhard:
Das Problem ist nicht die Genauigkeit.
Eine RTC muß irgend wann gestellt werden. Das erfordert Bedienelemente.
Ein ansprechendes Gehäuse zu bauen stellt so schon eine große Herausforderung dar.
Dann noch zuverlässige und optisch ansprechende Bedienelemnte zu intgrieren überfordert mich.
Der derzeitige Stand funktioniert ohne äußere Eingriffe. Die Uhr einfach an einem Empfangstechnisch günstigen Platz stellen und abwarten. Irgend wann ist sie wieder aktuell.

Das ist natürlich ein Argument :slight_smile:
Und das ist in der Tat ein elegantes Konzept.

Du hast ja geschrieben, dass bei dir der DCF77-Empfang nicht allzu gut ist. Das ist er bei mir auch nicht, da ich am Rand des Bodenwellenbereichs wohne. Mir scheint auch, dass in den vergangenen Jahren der Empfang (hier) schwieriger geworden ist - ich führe das nicht zuletzt auf den verstärkten Einsatz von Schaltnetzteilen zurück (aber vielleicht liege ich da auch falsch). Tatsache ist jedenfalls, dass ich kaum ein auswertbares Signal bekomme, wenn sich ein Schaltnetzteil näher als ca. 2-3 Meter vom Empfänger befindet. Im dicht verbauten Gebiet spielen natürlich auch noch die Nachbarn mit ihren Elektrogeräten eine nicht zu unterschätzende Rolle.
Ich versuche also auf DCF77-Empfang eher zu verzichten und gebe anderen Lösungen den Vorzug.

Nur um den Gedankengang noch abzuschließen:
Wenn du keine sichtbaren Bedienungselemente haben möchtest (was ich verstehen kann), dann fallen mir spontan noch folgende Möglichkeiten ein:

  • über eine serielle Schnittstelle
  • über Infrarot
  • über (von außen nicht sichtabe) Reed-Schalter
    Man muss auch bedenken, dass die RTC nur sehr selten gestellt werden muss (wenn Sommer-/Winterzeitumstellung per Sorftware).

You probably want to use 0xfd instead of 0x05 (double check with your datasheet first)."

Ok...
Bei mir kommt die Warnung nicht...
Werde ich aber untersuchen.
(nur nicht heute)

Aber dennoch kannst du das Zeugs als Grundlage für eigene Boarddefinitionen nutzen.

Hi

uxomm:
Nur um den Gedankengang noch abzuschließen:
Wenn du keine sichtbaren Bedienungselemente haben möchtest (was ich verstehen kann), dann fallen mir spontan noch folgende Möglichkeiten ein:

  • über eine serielle Schnittstelle
  • über Infrarot
  • über (von außen nicht sichtabe) Reed-Schalter

Man muss auch bedenken, dass die RTC nur sehr selten gestellt werden muss (wenn Sommer-/Winterzeitumstellung per Sorftware).

Da fallen mir noch

  • kapazitive Sensoren

ein.
Meine China-Dinger haben natürlich eine grell leuchtende LED drauf - für's Akku Sparen ist Das natürlich nicht sonderlich schicklich, würde aber direkt so erst Mal nicht im Gehäuse stören.

Das Argument, daß man SO keine Bedienelemente braucht, fand ich so unglaublich weitsichtig ... war mir ein Karma wert.
DCF77, wenn vorhanden, sonst DS3231 - elegant gelöst.

MfG

uxomm:
Nur um den Gedankengang noch abzuschließen:
Wenn du keine sichtbaren Bedienungselemente haben möchtest (was ich verstehen kann), dann fallen mir spontan noch folgende Möglichkeiten ein:

  • über eine serielle Schnittstelle
  • über Infrarot
  • über (von außen nicht sichtabe) Reed-Schalter

Man muss auch bedenken, dass die RTC nur sehr selten gestellt werden muss (wenn Sommer-/Winterzeitumstellung per Sorftware).

Kapazitive Taster gibt es auch noch.
Auch Neigungsschalter bzw Beschleunigungsmesser. Da kann man die Uhr zB durch auf den Kopf stellen einstellen.
Grüße Uwe

erhard:
agmue--- Den Konfigurator hatte ich schon einmal gefunden, bin aber derzeit damit etwas überfordert,
da ich bisher nur die Aruino IDE benutze. Da muß ich mich noch etwas einlesen.

Du hast den Fehler "You probably want to use 0xfd instead of 0x05". Da öffne ich den Konfigurator und schaue mir mal die Bedeutung der Bits an. Ohne weitere Hilfe würde ich zu dem Schluß kommen, daß beide Werte die selbe Bedeutung haben, nur anders mit den unbenutzten Bits umgehen. Wenn Du also "0x05" in "0xFD" änderst, sollte die Funktionalität erhalten bleiben.

Bitte warte aber auf combie.

Ich bin derweil gespannt, ob ich mit meiner Sicht richtig liege. Auf diese Art lerne ich was :slight_smile:

Ich bin derweil gespannt, ob ich mit meiner Sicht richtig liege.

Habe das eben untersucht, ja, kann man einfach ersetzen.
Das gilt auch für die andern BOD Einstellungen.

Bitte warte aber auf combie.

Bitte nicht.
Habe leider keine Zeit mich darum zu kümmern.
Kann mich freuen, wenn ich ab und zu ins Forum schauen kann, die nächsten Tage.
Eine vernünftige Testumgebung habe ich nicht dabei.

Aber das Problem ist erkannt und die Boarddefinition wird überarbeitet.
(irgendwann)

An diese diversen Bedienmöglichkeiten hatte ich noch gar nicht gedacht. Infrarot ist auch generell eine sehr interessante Lösung. Da ich sowiso eine Min-USB Buchse zur Stromversorgung vorsehe, könnte ich die Uhr ja per Pc synchronisieren.
Das ist aber alles auch nicht "Hausfrauensicher". :slight_smile:
Wenn man für ein so einfaches Gerät wie eine Uhr eine Bedienungsanleitung braucht, ist das meiner Meinung nach eine Fehlkonstruktion!
Mit dem Bootloader werde ich mich noch beschäftigen und mal auf combie warten.
Derzeit verbraucht das ganze bei 3,2 V knapp 12mA.
3,8 mA für das OLED
0,7mA DS3231 Modul ohne LED (2,2mA mit LED)
0,04mA DCF Modul
7mA ATmega
Damit könnte ich Notfalls schon leben.
Aber es gibt ja nichts das man nicht verbessern könnte.

erhard:
Mit dem Bootloader werde ich mich noch beschäftigen und mal auf combie warten.

Nicht nötig, er hat doch schon zugestimmt:

combie:
Habe das eben untersucht, ja, kann man einfach ersetzen.
Das gilt auch für die andern BOD Einstellungen.

Also

atmega328bb.menu.bod.bod27.bootloader.extended_fuses=0x05

ändern in

atmega328bb.menu.bod.bod27.bootloader.extended_fuses=0xFD

Wenn das funktioniert, kannst Du auch noch die anderen Einstellungen für BOD anpassen.

Mit dieser Änderung lässt sich der Bootloader brennen.
Dafür lässt sich der Sketch nicht aufspielen.

"exec: "E:\bin\avr_asm_dump.bat": executable file not found in $PATH
Fehler beim Kompilieren für das Board ATmega328 on a breadboard internal clock (Combie).

Dieser Pfad steht in der "platform.local.txt" und passt wol nicht zu meinem System.
"

Ohh..
Da habe ich zuviel kopiert....

Lösche bitte die Datei "platform.local.txt" in dem Ordner.
(das dient mir dazu, damit ich den Assemblercode des Kompilats zu sehen bekomme)

Sorry.