Forum: Mikrocontroller und Digitale Elektronik Detailfrage RTC DS3231


von Martin S. (mmaddin)


Lesenswert?

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

von Christian M. (christian_m280)


Lesenswert?

Dieses Modul habe ich auch gerade auf dem Tisch liegen... Und ja, der 
Wochentag muss man manuell eingeben!

Gruss Chregu

von H. H. (Gast)


Lesenswert?

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.

von lambda (Gast)


Lesenswert?

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

von Martin S. (mmaddin)


Lesenswert?

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

von H. H. (Gast)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

Das RTC-Modul beinhaltet natürlich auch den Wochentag. Der muss noch in 
Klartext umgeschlüsselt werden, z.B. wie hier:

https://wolles-elektronikkiste.de/ds3231-echtzeituhr

von Martin S. (mmaddin)


Lesenswert?

H. H. schrieb:
> 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.

Es geht hier um den Wochentag nicht um das Schaltjahr.

von H. H. (Gast)


Lesenswert?

M. schrieb:
> Es geht hier um den Wochentag nicht um das Schaltjahr.

Lies einfach nochmal.

von Christian M. (christian_m280)


Lesenswert?

H. H. schrieb:
> M. schrieb:
>> Es geht hier um den Wochentag nicht um das Schaltjahr.
>
> Lies einfach nochmal.

Du!

Gruss Chregu

von J. T. (chaoskind)


Lesenswert?

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

von Martin S. (mmaddin)


Lesenswert?

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

von Martin S. (mmaddin)


Lesenswert?

J. T. schrieb:
> sondern
> auch ob Schaltjahr is

jup

von Martin S. (mmaddin)


Lesenswert?


: Bearbeitet durch User
von H. Eggert (Gast)


Lesenswert?

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.

von H. H. (Gast)


Lesenswert?

Christian M. schrieb:
> H. H. schrieb:
>> M. schrieb:
>>> Es geht hier um den Wochentag nicht um das Schaltjahr.
>>
>> Lies einfach nochmal.
>
> Du!

M. schrieb:
> Fände ich unlogisch, da das Modul ja auch Schaltjahre berücksichtigt...

von Martin S. (mmaddin)


Lesenswert?

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

von H. H. (Gast)


Lesenswert?

M. schrieb:
> eine Zeile Code...

Na also.

von H. Eggert (Gast)


Lesenswert?

Nachtrag:

Es bleibt jeden selber vorbehalten an welchem Wochentag der Zähler sich 
richten soll. Bei mir ist halt Montag, Wochentag Nr. 1.

von Peter* (Gast)


Lesenswert?

Hallo,

woher die Probleme, warum nicht übers kompilieren.

_DATE__ und __TIME_ (mit Doppelunterstrich), Software gibt es genug.

von H. H. (Gast)


Lesenswert?

H. Eggert schrieb:
> Bei mir ist halt Montag, Wochentag Nr. 1.

So ist das ja auch normativ geregelt, in den meisten Ländern der Welt.

von Christian M. (christian_m280)


Lesenswert?

Den musst Du ja wirklich nur ein einziges Mal eingeben, da lohnt sich 
ein Menupunkt nicht, auch für Zeit und Datum. Habe heute einen Parser 
geschrieben, der aus einem String der seriellen Schnittstelle die Uhr 
stellt...

Gruss Chregu

von H. Eggert (Gast)


Lesenswert?

Der DS3231 Wochentagzähler zählt übrigens von 1-7 und nicht von 0-6.

von Martin S. (mmaddin)


Lesenswert?

finde ich unlogisch dass das Ding das nicht macht. Das möchte ich aber.

Egal, nun ist es eingebaut, wird anscheinend richtig berechnet, habe 
zwei weitere Daten getestet, stimmt. Nun mal beobachten...

NERV

von Martin S. (mmaddin)


Lesenswert?

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

: Bearbeitet durch User
von H. Eggert (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.