Detailfrage RTC DS3231

OP #7305758

Hi,

kleine Frage, betreibe hier gerade das o.g. Uhrenmodul. Läuft alles, nun bin ich beim Wochentag, wollte ich doch noch mit rein nehmen in die Ausgabe.

Der steht aber auf 1, egal welches Datum ich dort eingebe. Wir der nicht von dem Modul berechnet und nur hoch gezählt?

Fände ich unlogisch, da das Modul ja auch Schaltjahre berücksichtigt... die RTC soll doch genau diese Arbeit abnehmen...oder? Dazu gehört für mich auch die automatische Berechnung des Wochentages...

Danke.

MFG

Gast

M. schrieb:

Der steht aber auf 1, egal welches Datum ich dort eingebe. Wir der nicht von dem Modul berechnet und nur hoch gezählt?

Nur hochgezählt.

Fände ich unlogisch, da das Modul ja auch Schaltjahre berücksichtigt... die RTC soll doch genau diese Arbeit abnehmen...oder?

Ist ja auch mit ein paar wenigen Gattern erledigt.

Dazu gehört für mich auch die automatische Berechnung des Wochentages...

Darfst du ja machen, in dem angeschlossenen µC.

Gast

Steht auch im Datenblatt auf Seite 12: "The day-of-week register increments at midnight. Values that correspond to the day of week are user-defined but must be sequential (i.e., if 1 equals Sunday, then 2 equals Monday, and so on)."

OP

danke, na dann muss ich wohl mein Menü noch etwas erweitern, tja. Seltsam, wie ich finde.

H. H. schrieb:

Ist ja auch mit ein paar wenigen Gattern erledigt.

Ist das so? Gibt ja diverse "Formeln" usw...

Aber den "Trick" mit ein "paar" Gattern würde ich natürlich gern kennen.

Dann implementiere ich das noch eben und kann mir den Menüpunkt zum Einstellen sparen...

Danke.

VG

Gast

M. schrieb:

Aber den "Trick" mit ein "paar" Gattern würde ich natürlich gern kennen.

Ist doch kein Problem zu prüfen ob eine Zahl durch vier teilbar ist.

Und selbst die im DS3231 nicht implementierten Regeln alle 100 bzw 400 Jahre wären ganz einfach.

Christian M. schrieb:

H. H. schrieb:

M. schrieb:

Es geht hier um den Wochentag nicht um das Schaltjahr.

Lies einfach nochmal.

Du!

Um zu wissen, ob bspw der 70te Tag des Jahres ein Montag ist, musst du nicht nur wissen welcher Wochentag der erste des Jahres war, sondern auch ob Schaltjahr ist, damit der Montag dann entweder der 5.3 oder nur der 4.3 ist. (Daten nur grob geraten, bin grad zu kränklich zum rechnen, aber am Prinzip ändert sich nichts).

OP

H. H. schrieb:

Lies einfach nochmal.

Wie gesagt, es geht um den Wochentag, das SJ macht das Modul, steht dort ja auch geschrieben.

Wie dem auch sei.

Die Wochentagsberechnung habe ich schon mal selbst in c geschrieben, heute kann man das aber sicher an jeder Ecke runterladen... dann gehe ich mal suchen...

Gast

Ich bin der Meinung, daß der RTC-Wochentagszähler nur regelmäßig blind von 1-7 zählen muß. Da spielen Schaltjahre und das Datum keine Rolle. Montag folgt Sonntag, das ändert sich nie. Also kann der RTC-Wochentagszähler lustig ohne sich um Anderen zu kümmern, immer brav vor sich hinzählen.

OP

H. Eggert schrieb:

RTC-Wochentagszähler lustig ohne sich um Anderen zu kümmern, immer brav vor sich hinzählen.

Ich stehe vor der Wahl ob ich einen Menüpunkt öffne um ihn stellen zu können oder ob er berechnet wird.

Momentan scheint mir die Berechnung einfacher:

int dayofweek(uint8_t day, uint8_t month, uint16_t year) { /** Zeller's congruence for the Gregorian calendar. / / With 0=Monday, ... 5=Saturday, 6=Sunday **/ if (month < 3) { month += 12; year--; } return ((13*month+3)/5 + day + year + year/4 - year/100 + year/400) % 7; }

fertig, eine Zeile Code...

OP

verunsichert mich ganz leicht dass der Rückgabewert des DOW Algorithmus oben ein int ist...

Negative Wochentage? hmmm... naja, wird schon passen, habe da ein uint8_t draus gemacht...

ach ja, und am ende eins drauf gerechnet damit es für die dumme RTC auch passt...

Nun gibt man das Datum nach wie vor ein, der uc berechnet den DOW und schiebt ihn nach in die RTC...läuft

Bei Modulo 7 +1 kommt auf jeden Fall immer was zwischen 1 und 7 raus, kann man sich die Zeilen zum prüfen auch sparen...praktisch

Gast

Bei mir stelle ich den Wochentag einmal beim Stellen ein. Mit Terminal sende ich das Stellkommando: @hhmmssyymmddw<CRLF> , z.B. @2327302301043<CRLF>, "3" ist für Mittwoch Nach dem ersten Mal stellen kann man z.B. die Zeit mit einem Teilkommando stellen: @hhmmss<CRLF>, das Datum und Wochentag wird dann nicht beeinflußt. Man braucht nur so weit eingeben wie man will.

Funktioniert gut genug für mich und erspart die Berechnungen. Solange die RTC BU Zelle nicht kaputt geht, läuft DOW für immer richtig. Mache das schon seit Jahrzehnten so. DOW ist ohnehin für mich nicht wichtig.

Abgesehen davon, ist mir das UNIX Datetime Konzept lieber. Beim STM32F103 z.B. ist die RTC ohnehin ein 32-bit Zähler; finde ich viel bequemer.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.