Hallo Forum!
Ich hatte mir bei Ali ein paar RTCs bestellt.
Auf dem Uno Rev.4 läuft auch schön die Laufschrift und die Uhrzeit wird korrekt angezeigt.
Allerdings läuft die Uhr nicht weiter, wenn nur noch über die Knopfzelle Strom kommt. Am DS3231 kommt 3.3V an (Pin 13 u. 14 gemessen).
Den Widerstand für die Ladeschaltung habe ich entfernt.
Statt Knopfzelle hatte ich auch das Labornetzteil dran.
Wenn ich mir mit "Serial.println(0xE);" das Register anzeigen lasse, bekomme ich "14" angezeigt.
Was ist dann dort eingestellt? Vorher wurde dort 20 angezeigt.
Wenn ich das zum umrechnen in einen Rechner eingebe, dann bleibt das MSB immer 1.
Erstmal wüsste ich gerne was diese "14" für ein Wert ist und kann man den auch binär ausgeben?
Und weiter wüsste ich gerne, wie ich das auf 0 (Null) einstellen kann?
Alles was ich im Netz gefunden habe, führte nicht zum Ziel.
Seit gestern Abend hatte ich mich damit befasst und wirklich lange gesucht.
Was ich oben schon an Code eingefügt habe, hatte ich jetzt noch einmal in binär geschrieben und die 0, für schreiben, angehängt.
Keine Fehlermeldung, aber die Uhr bleibt weiter stehen, sobald die Spannung weg ist.
Das liest man ganz oft, wenn man nach diesem Thema sucht. Leider liest man keine anderen Lösungen, als die, die ich schon ausprobiert habe.
Ist aber auch nicht so wichtig.
Habe da eh schon eine Menge Zeit mit verschwendet.
Danke!
Siehe Anhang. Es ist das Modul hier, es hängt direkt am Arduino Uno.
Wo ist denn da die Pufferbatterie?
Pin 13 Als Spannung für die Uhr zu nehmen, ist auch nicht schlecht. :-)
Wäre ich jetzt nicht drauf gekommen. Gute Idee.
Falk, vielleicht magst du ja mal drauf schauen.
Jeder andere selbstverständlich auch.
Naja, sooo viel kann man bei dem IC nicht falsch machen. Bestenfalls das EOSC Bit setzen, dann bleibt der Oszillator stehen, wenn die normale Versrogung weggeht. Das kann irgendwo aus Versehen passieren. Also mal Register 0E auslesen und den Wert anzeigen lassen. Er muss kleiner 128 sein, nur das ist das Bit gelöscht und der oszillator läuft im Batteriebetrieb.
Im einfachsten Fall schreibt man 0 ins Register 0xE.
Du benutzt eine Bibliothek und die muss sich darum kümmern. Man kann aber auch mal einen "manuellen" Zugriff machen. Wie das geht, steht in meinem Programm.
writeRegister(0xE, 0);
Mit der im Moment auskommentierten Funktion dump_regs() kann man sich alle Register anzeigen lassen.
Moin!
Gleich muss ich erstmal weg. Ich habe jetzt von den restlichen DS3231-Modulen den Widerstand für die Ladeschaltung runter gemacht und werde alle probieren.
Was man so liest und vor allem laut Datenblatt, muss der IC selbst erkennen welche Spannung anliegt.
Ich werde mir die Module einmal genau ansehen.
Leider habe ich bisher keinen Schaltplan dazu gefunden. Wenn also jemand einen Schaltplan hat, wäre es schön, wenn er den hier verlinken würde.
Vielen Dank dafür!
Auch wenn ich bisher keine Uhr gebraucht habe und auch jetzt nicht brauche, nervt es gewaltig, dass das nicht so funktioniert.
Das alles sind eigentlich nur Programmierübungen, weil ich in meinem eigentlichen Projekt feststecke. Ich muss erstmal wieder besser programmieren können. Und deshalb schaue ich mir verschiedenen Code an, nehme diese Sachen als Vorlage für eigenen Code, damit ich das alles besser verstehe.
Mit anderen Worten, mein Leben hängt nicht von diesem Modul ab.
Aber schön wäre es schon, es in den Griff zu bekommen.
Bei der Bundeswehr hatte ich Hubschrauber repariert und wenn die Piloten zurück kamen, gab es dann immer ein Debriefing. Wenn wir die Fehler, die uns die Piloten erzählten, nicht nachvollziehen konnten, also nichts kaputt war,
dann sagten wir immer: "Der Fehler lag zwischen den Kopfhörern!"
In diesem Fall auch.
Die Module funktionieren richtig, aber mein Verständnis für die Programmierung noch nicht so ganz.
Aber jetzt habe ich den Fehler gefunden.
Vielen Dank an alle!
Ich muss jetzt zum Arzt.
Hätte ich später noch ausführlich geschrieben.
Im Setup habe ich doch die Zeit gesetzt.
Mit jedem neuen Anschließen des Arduinos, setze ich automatisch die Zeit, da natürlich keine aktuelle Zeit kommt, nimmt er immer die letzte Zeit, der letzten Einstellung.
Leider habe ich bisher keinen Schaltplan dazu gefunden.
Suchmaschinen wurden schon erfunden. Solange hier keiner weiß, welches Modul genau du besitzt, wirst du wohl selber suchen und ihn dir ggf. selber zeichnen müssen.
Suchmaschinen wurden schon erfunden. Solange hier keiner weiß, welches
Modul genau du besitzt, wirst du wohl selber suchen und ihn dir ggf.
selber zeichnen müssen.
Wenn ich wüsste wie man die nennt.
Das sind die Teile, die es haufenweise bei eBay, Ali und Amazon für ein paar Euro gibt. Diese Module mit dem EEPROM drauf.
https://de.aliexpress.com/item/1005006685897934.html
Geht doch - und so einfach 😄
Nachteil von so einem Angebotslink ist, dass der schon bald Geschichte sein kann. Ein Bild hier im Forum hält sich so lange, wie der Thread.
Aber die HW war ja nun doch nicht Schuld ...
Nein, war sie nicht.
Ich habe es nicht richtig gemacht.
Ich habe erst ca. Ende Februar wieder angefangen und im Grunde fast bei Null.
Aber letztlich habe ich den Fehler dann doch alleine gefunden.
Zur Zeit bin ich noch sehr weit weg, von dort wo ich sein will.
Dass ich hier nicht mehr zum Guru werden kann, ist mir klar. Dafür ist die Lebenszeit wohl nicht mehr ausreichend.
Aber das was ich da jetzt gemacht habe, auch wenn es nur eine Spielerei ist, sieht schon einmal ganz nett aus und ich bin zufrieden.
Kleine Brötchen schmecken auch, man muss nur mehr davon essen, um satt zu werden.
Also nochmal vielen Dank euch allen!
Insbesondere Falk, für seinen Code.
Moin!
Gleich muss ich erstmal weg. Ich habe jetzt von den restlichen
DS3231-Modulen den Widerstand für die Ladeschaltung runter gemacht und
werde alle probieren.
Was man so liest und vor allem laut Datenblatt, muss der IC selbst
erkennen welche Spannung anliegt.
Ich werde mir die Module einmal genau ansehen.
Leider habe ich bisher keinen Schaltplan dazu gefunden. Wenn also jemand
einen Schaltplan hat, wäre es schön, wenn er den hier verlinken würde.
Vielen Dank dafür!
Auch wenn ich bisher keine Uhr gebraucht habe und auch jetzt nicht
brauche, nervt es gewaltig, dass das nicht so funktioniert.
Das alles sind eigentlich nur Programmierübungen, weil ich in meinem
eigentlichen Projekt feststecke. Ich muss erstmal wieder besser
programmieren können. Und deshalb schaue ich mir verschiedenen Code an,
nehme diese Sachen als Vorlage für eigenen Code, damit ich das alles
besser verstehe.
Mit anderen Worten, mein Leben hängt nicht von diesem Modul ab.
Aber schön wäre es schon, es in den Griff zu bekommen.
Hallo Frank,
Ich fand diese Seite hier mit nützlicher Information:
Zuusätzlich möchte ich davor warnen, RTC Module mit dem DS3231M zu bekommen. Man sollte nur die DS3231SN Module wählen. Ich bestellte letztes Jahr Module mit SN spezifiziert. Erhielt aber die M Versionen. Alle diese Module hatten grottenschlechte Genauigkeit und konnten auch mit dem AGO Register nicht kalibriert werden. Ich reklamierte und erhielt dann die gewünschten Module. Diese funktionierten aussergewöhnlich gut, mit AGO=0 Genauigkeit von 1s/m.
Also aufpassen
Normalerweise funktioniert die automatische Backup Umschaltung immer ohne Probleme.
Probier mal das dort gelistete Programm aus zum Vergleich ob das Problem dann auch dort auftritt.
Zuusätzlich möchte ich davor warnen, RTC Module mit dem DS3231M zu
bekommen. Man sollte nur die DS3231SN Module wählen. Ich bestellte
letztes Jahr Module mit SN spezifiziert. Erhielt aber die M Versionen.
Alle diese Module hatten grottenschlechte Genauigkeit und konnten auch
mit dem AGO Register nicht kalibriert werden. Ich reklamierte und
erhielt dann die gewünschten Module. Diese funktionierten
aussergewöhnlich gut, mit AGO=0 Genauigkeit von 1s/m.
Hallo Gerhard!
Schön von dir zu hören.
Zu deiner Mail: Da war ich sicher die falsche Person dafür. Hatte mich dort einmal eingeklinkt, aber hoffnungslos.
Das was du da gerade schriebst, das stelle ich hier gerade fest.
Die eine Uhr haut ab wie Schmitz Katze. Die nächste bummelt rum.
Aber auch die Atomuhr die ich mir auf dem Laptop anzeigen lies, lief zwar, war aber erst nach dem Aktualisieren der Seite wieder genau.
Man kann sich da schon einen Wolf dran basteln.
Ist wohl ein Tippfehler auf der Webseite. Im Text steht dort nämlich auch:
"DS3231M-Chip mit präziser Echtzeit- und Datumsbestimmung (höchstens +-0,432 sek. Abweichung pro Tag)"
Ich bekam mal N Versionen. Die waren auch sehr schlecht.
Da es im Datenblatt kein N gibt, gehe ich mal davon aus, dass das DS3231N(!) abgeschliffen und neu gelabelte Was-Auch-Immer sein (M oder N, nur ein Strich, kann nicht so ein grosser Unterschied sein)
Kleines Anekdoetchen:
Segor liefert diese dummen DS3231-Platinen fuer 6.50EUR, mit der Beschreibung "RTC DS3231+24C32 I2C 5V mit Akku! (LIR2032)". Willst Du den DS3231SN von Dallas haben, ruft Segor ganz entspannt 15.90EUR auf.
Das ist auch bei BerryBase das gleiche: China-Ware auch ca. 5EUR, DS3231 mit Herkunftsnachweis ca. 15 - 20EUR.
Ist halt leider das Risiko wenn man nicht beim Distributor kauft.
Naja. Bei Watterott, Sparkfun oder Adafruit und ähnlich renommierte Händlern, hätte ich keinerlei Bedenken. In der eBucht muß man aber aufpassen; da ist alles möglich und man hat keine Ahnung was da tatsächlich geliefert wird.
Vor vielen Jahren bestellte ich für meine Wetterstation in der Bucht DS3234 SPI RTCs Module. Die waren grottenschlecht und akkumulierten in zwei Wochen über 90s an Abweichung. Dann bestellte ich von Digikey. Dieser DS3234 lief seit 2009 mit nur 90s Abweichung und ist Temperaturen von -48 bis +50C ausgesetzt. Ich habe die RTC absichtlich seit der Installation in 2009 nie mehr gestellt, weil ich die Langzeit Performanz beobachten wollte, wenn reale Temperaturschwankungen im Spiel sind. Das AGO ist auf Null eingestellt.
Bisher habe ich immer nur Lochstreifenraster genommen. Bei den Preisen für die Platinen (hab das in einem Video von Edi's Techlab gesehen) ist es sicher wieder etwas, das man auch mal selbst machen kann.
Mit Heißluft und Lötpaste sollte MAX31328 aber kein Problem sein.
Btw: Die Uhr läuft seit heute Mittag sekundengenau.
Weiter oben steht das und da haben schon einige gemeint, dass aber im Text steht, dass das "M" ist.
Hatte noch direkt eine Nachricht hinterher geschickt.
Abwarten.
Bist jetzt lief (ich habe gerade noch die Temperatur rein gebaut) sekundengenau. Tut er wohl immer noch, aber bis das jetzt angezeigt wird, gehen 5 Sekunden verloren.
So allmählich und durch solche Übungen, komme ich wieder in die Programmierung rein.
Im Moment habe ich da eigentlich keinen Bock drauf, aber über kurz oder lang werde ich die interne RTC auch mal testen.
Warum die nicht gleich hinten auch noch einen Batteriehalter drauf gebaut haben? Kostet doch nur ein paar Cent.
Inspiriert durch deine Schaltung, wollte ich beim Uno R4 WiFi den AREF und Grnd, neben den I2C Anschlüssen nehmen.
Bei den anderen Arduinos waren die immer mit +5V verbunden. Hier nicht. Hier sitzt da noch ein 5,1K Widerstand drin und ein Ferrit.
Jedenfalls, wenn man den belastet, dann bleibt der Controller stehen.
Die sind jetzt angekommen.
Tatsächlich ist eins dabei, dass ein M hinten dran stehen hat.
Werde ich reklamieren.
Aber noch etwas zur laufenden Uhr. Ich hatte sie jetzt ein paar Tage nur über Batterie laufen und dann den Arduino angeschlossen.
Zunächst stimmte die Uhrzeit noch, aber irgendwann war es dann wieder das Jahr 2000.
Also sind diese Module nicht sehr zuverlässig. Auch wenn es zunächst ein Programmfehler war, sind die vorher festgestellten Unzuverlässigkeiten doch nicht nur auf mich zurückzuführen.
Die sind jetzt angekommen.
Tatsächlich ist eins dabei, dass ein M hinten dran stehen hat.
Werde ich reklamieren.
Jetzt koennte man sagen: ITYS (I told you so!)
Also sind diese Module nicht sehr zuverlässig. Auch wenn es zunächst ein
Programmfehler war, sind die vorher festgestellten Unzuverlässigkeiten
doch nicht nur auf mich zurückzuführen.
Das war auch mein Eindruck (aber ich hatte nur ein einziges Modul gekauft) und es waren die gleichen Fehler (lassen sich schlecht laden, zuruecksetzen bei Power up [und nein, meine SW hatte kein Default-Timestamp]).
Der Witz ist, wenn du nach dem Datenblatt zuerst VCC anlegst, soll das "Enable Oscillator Bit" auf Null gesetzt werden. Dann erst die Batterie einsetzen. Ich habe das bei mehreren Modulen ausprobiert. Funktioniert nicht.
Aber auch die Register schreiben, wenn der Code stimmt, den ich schon im Eingangspost eingefügt hatte, funktioniert nicht. Die Uhren laufen auf Batterie nicht weiter.
Alles sehr merkwürdig ...
Aber auch die Register schreiben, wenn der Code stimmt, den ich schon im
Eingangspost eingefügt hatte, funktioniert nicht. Die Uhren laufen auf
Batterie nicht weiter.
Alles sehr merkwürdig ...
Dann ist es mit hoher Wahrscheinlichkeit ein Softwareproblem.
War es vorher. Dass das Bit nicht geändert wird, was ja durch Anlegen der Spannung schon geschehen soll, das ist dann doch eher ein Hardwareproblem.
Für heute habe ich keine Lust mehr.
Aber über kurz oder lang werde ich das Schwein schon töten.
Wenn es ein normaler Ds3231 ist, muss das funktionieren.
Ich habe zig Platinen (mit EEprom) und auch einfach nur das IC (10 Stck. für 3€ bei Ali) benutzt und noch nie Probleme gehabt, ja sogar abweichungen bei Zimmertemperatur unter 10 Sekunden im Jahr. (Varta Industrie Knopfzellen)
Welche Library wird benutzt, auch mal einfach eine DS3231 Library Standard ausprobiert, ohne eigenen Code?
Die RTClib von Arduino.
Werde jetzt erstmal messen.
Warum das dann mit ein paar anderen Uhren geklappt hat, können im Datenblatt zum DS3231M stehen. Die reden da von einem Prellen beim Anschluss an den Strom.
Der DS3231 und der DS3231M sind 2 verschiedene ICs.
Der DS3231 hat einen Quarzoszillator, der DS3231M aber einen MEMS-Oszillator.
MEMS sind mechanisch unempfindlich.
MEMS benötigen eine PLL, um die gewünschte Frequenz zu erzeugen und haben daher einen höheren Jitter und Phasenrauschen.
Ab 2% Helium können MEMS Schaden nehmen.
Peter, vielen Dank! Wobei die schreiben, dass die im Wesentlichen gleich sind. Die, bei denen ich aktuell Probleme habe, sind die SN-Typen, die Gerhard empfohlen hatte.
Sodele!
Der Fehler lag zwischen den Kopfhörern.
Zuerst war die Batterie defekt. Die lagen auch schon ewig rum.
Dann war es wohl einfach zu spät. Man sollte nicht nur etwas auskommentieren, man sollte es dann auch auf den Controller übertragen. 😩
Zuerst war die Batterie defekt. Die lagen auch schon ewig rum.
Auch bei mir hat der LiR 2032 (Akku, LiIon, 45mAh) nach mehreren Tagen laden eine Zellspannung von 0.45V. Die lag sicherlich fuenf Jahre in der Schaltung, ohne Ladung. Tot.
Werde die "Lade-Elekronik" (eine Diode und ein ganzer Widerstand) stillegen und eine CR2032 einbauen. Genauso gut oder schlecht.
Zuerst war die Batterie defekt. Die lagen auch schon ewig rum.
Auch bei mir hat der LiR 2032 (Akku, LiIon, 45mAh) nach mehreren Tagen
laden eine Zellspannung von 0.45V. Die lag sicherlich fuenf Jahre in der
Schaltung, ohne Ladung. Tot.
bei mir 8 Jahre dauerhaft an +5V auch tot.
Ist ja auch klar, jeder Akku hat nur eine begrenzte Lebensdauer, ich merkte das erst nach einem 3-stündigen Stromausfall.
Meine Knopfzellen waren nicht gerade fachgerecht gelagert. Dadurch kann es schon zu eingen Entladungen gekommen sein und eine gewisse Selbstentfaltung ist ja auch da.
Die Köpfe lagen alle wild durcheinander und da können einige auch schon 》10 Jahre dabei sein.
Wenn die auch (wie die defekte Batterie) zunächst funktionieren, so können sie dann, wie in diesen Fall, relativ plötzlich zusammen brechen.
Werde die Tage mal alle ausgepackten Zellen unter Last messen und dann aussortieren.
Vielleicht sollte man sich überhaupt einmal einen Tester bauen.
Jetzt lief die Uhr schon eine Weile, da wollte ich das einem Kollegen auf der Arbeit zeigen.
Ich klemme das Arduinoboard an seinen Rechner und in dem Moment rutscht der Minus raus. Zack - Uhrzeit weg. Obwohl die Batterie in Ordnung ist.
Komischer Effekt.
Obwohl die Batterie in Ordnung ist.
Komischer Effekt.
Meine Nixie in der Werkstatt habe ich 2 Jahre jeden morgen in der Werkstatt angesteckt und Abends wieder ausgeschaltet.
dann sogar noch nen Jahr ganz aus gelassen und die Uhrzeit war noch da.
Das gleiche mit einer Küchenuhr als Timer, die kann ich heute noch nach 5 Jahren anstecken/benutzen und die Uhrzeit stimmt immernoch. (ist nur nen küchentimer mit akku der sich von selbst ausschaltet)
Nur so mal das es anscheinend an dem Drahtaufbau liegen könnte, vielleicht ein kurzschluss auf Masse der die Batterie kurzgeschlossen hat.
Nur so mal das es anscheinend an dem Drahtaufbau liegen könnte,
vielleicht ein kurzschluss auf Masse der die Batterie kurzgeschlossen
hat.
Bin noch nicht einmal sicher, ob ich schon mit USB verbunden war. Und sollte auch eigentlich egal sein, ob da Plus oder Minus weg war, denn sobald die Spannung unter die Grenze fällt, sollte die wieder auf Batterie umschalten.
Ich habe die wieder gestellt und versucht das zu simulieren. Hier Zuhause bleibt die Uhrzeit.
Ist natürlich voll blöd, wenn man das gerade vorführen will und das dann nicht klappt.
Nur so mal das es anscheinend an dem Drahtaufbau liegen könnte,
vielleicht ein kurzschluss auf Masse der die Batterie kurzgeschlossen
hat.
Bin noch nicht einmal sicher, ob ich schon mit USB verbunden war. Und
sollte auch eigentlich egal sein, ob da Plus oder Minus weg war, denn
sobald die Spannung unter die Grenze fällt, sollte die wieder auf
Batterie umschalten.
Ich habe die wieder gestellt und versucht das zu simulieren. Hier
Zuhause bleibt die Uhrzeit.
Ist natürlich voll blöd, wenn man das gerade vorführen will und das dann
nicht klappt.
Das nennt man schlicht den "Vorführeffekt". An diesen kann man seine Uhr stellen:-)
Ich habe schon viel mit RTCs gemacht. Dein beschriebenes Problem hatte ich noch nie. Vielleicht gab es einen Statikschlag oder eine schlechte Batterieverbindung, unbekannte Ursache eines Kurzschluss am kritischer Stelle.
Ja, so ist das wohl.
Meistens baue ich Sachen, die man nicht so sehen kann. Sie funktionieren einfach. Da habe ich dann mal etwas Sichtbares, bin voll stolz, dass ich das zeigen kamm und prompt klappt es nicht.
Das ist wohl tatsächlich Murphy. (lach)
Aber war eh nur eine Spielerei.
Falls es noch jemand interessiert.
Da ich eine unendliche Geduld bei bestimmten Sachen aufbringen kann, so habe ich natürlich in diesem Fall diese Uhr auch nicht mehr aus den Augen gelassen.
Das letzte Mal hatte ich sie am 30.07.2024 gestellt. Seit dem habe ich sie über USB, dann wieder über Batterie, mal kurzzeitig mal über Nacht, laufen lassen.
Der Arduino steckte neben mir im USB-Tischladegerät.
Gerade wurde wieder das Grunddatum angezeigt.
Und jetzt kommt der absolute Hit und mir völlig unbegreiflich, ich klemmte den Arduino nun an meinen Laptop, um die Uhr neu zu stellen und unbegreiflicher Weise zeigte der Arduino nun wieder die richtige Uhrzeit an.
Wie geht das denn?
Auch wenn es eine Spielerei bleibt und ich nicht wirklich ein Uhrzeit brauche (obwohl ich mich bei der Arbeit dran gewöhnt habe, dass ich das Datum und den Tag angezeigt bekomme), so interessiert mich dieses merkwürdige Verhalten nun aber doch.
Also wenn jemand eine Erklärung hat, ich habe keine mehr und noch viel weniger als vorher, wo nur die Uhrzeit verloren ging.
Da wird ein Fehler in der RTC-Lib vorliegen.
Ohne VCC werden ja SDA, SCL auf low gezogen. Nach dem Aufwachen ist also der I2C-Bus in einem undefinierten Zustand. Es sollte also nach einer Wartezeit zum Stabilisieren der VCC erstmal ein Dummy Zugriff erfolgen, um den I2C-Bus in einen definierten Zustand zu bringen.
Ohne klappt wohl das Auslesen mal und mal nicht.