Hallo,
ich bin Bascom Anfänger und habe mich gerade an eine DCF77 Uhr gewagt.
Klappt nach einigen Versuchen auch ganz gut. Ich kann Wochentag, Zeit,
und Datum anzeigen. Naja eben soviel wie das Beispielprogramm bringt.
Gibt es da noch mehr Parameter wie "Dayofweek" etc. ? Wollte eigentlich
noch die Kalenderwoche und den Kalendertag (also der wievieltste Tag im
Jahr es ist) anzeigen nur kenne ich davon die Parameter nicht. In der
Bascom Hilfe steht auch nicht viel.
Grüße
Patrick
Dann informiere dich doch einmal was alles über DCF77 übertragen wird,
z.B. hier (https://de.wikipedia.org/wiki/DCF77). Kalenderwoche wird
nicht übertragen. Wenn überhaupt könntest du das selbst ausrechnen.
"Dayofweek" entspricht doch dem Wochentag, welchen du ja nach eigenen
Angaben bereits hast.
Ja den Wochentag also Montag, Dienstag usw. kann ich anzeigen aber nicht
wievielter Tag im Jahr es ist (Heut ist glaube ich der 163 Tag im Jahr)
und welche Kalenderwoche (Diese Woche ist es die 24.) es ist. Wenn die
Informationen nicht übertragen werden, dann kann ich diese doch bestimmt
aus den Datumsinforamtionen herausrechnen . Nur wie? Habe schon
gegoogelt aber keine Beispielcodes gefunden.
Patrick schrieb:> Ja den Wochentag also Montag, Dienstag usw. kann ich anzeigen aber nicht> wievielter Tag im Jahr es ist (Heut ist glaube ich der 163 Tag im Jahr)> und welche Kalenderwoche (Diese Woche ist es die 24.) es ist. Wenn die> Informationen nicht übertragen werden, dann kann ich diese doch bestimmt> aus den Datumsinforamtionen herausrechnen . Nur wie?
Eines nach dem anderen.
Kümmern wir uns erst mal um die Tagesnummer im Jahr.
Wenn DU höchstpersönlich das berechnen müsstest, wie würdest du das
machen?
> Habe schon> gegoogelt aber keine Beispielcodes gefunden.
Ist zwar ok, aber ein bischen nachdenken und selbst mit einer Strategie
hochkommen, ist jedem zuzumuten. So lernt man dann auch noch den einen
oder anderen BASCOM Befehl kennen und in welchen Fällen man ihn
einsetzen kann.
Naja also vorhin um den Kalendertag zu nennen habe ich das so
ausgerechnet, indem ich die Monate genommen habe (es ist Juni also sind
schon 5 volle Monate seit Jahresbeginn vergangen mit 3 x 31 tagen, 1 x
29 und 1 x 30. Ausgerechnet sind das 152 Tage. Heute ist der 11. Also
noch 11 dazuzählen und heute ist der 163. Tag im Jahr.
Jetzt müsste man das nur noch im Programm umsetzen. Aber wie gesagt ich
habe gerade erst mit Bascom begonnen. Ich weiß das Bascom rechnen kann
nur bräuchte ich jetzt erst einmal ein Beispiel
Patrick schrieb:> Nur wie? Habe schon> gegoogelt aber keine Beispielcodes gefunden.
Das ist weniger eine Frage von Beispielcodes, sondern von entsprechenden
Algorithmen im Allgemeinen. Und da wird es ein wenig problematisch,
unter anderem auch deswegen, weil es verschiedene Definitionen von
Kalenderwoche gibt. Da wirst du dich also ein wenig in die Materie der
Kalender einarbeiten müssen.
Patrick schrieb:> Naja also vorhin um den Kalendertag zu nennen habe ich das so> ausgerechnet, indem ich die Monate genommen habe (es ist Juni also sind> schon 5 volle Monate seit Jahresbeginn vergangen mit 3 x 31 tagen, 1 x> 29 und 1 x 30.
Und das ist deswegen "problematisch", weil es Schaltjahre gibt. Um den
"Kalendertag" zu bestimmen, musst du also zumindest ab dem 29. Februar
bzw. 1. März wissen, ob das aktuelle Jahr ein Schaltjahr ist. Keine
Ahnung, ob BASCOM da etwas anbietet, oder ob du das selbst bestimmen
musst.
Patrick schrieb:> Jetzt müsste man das nur noch im Programm umsetzen.
Das sind absolute Grundlagen, welche dir sicherlich in jedem (besseren)
Tutorial bzw. Buch beigebracht werden.
Patrick schrieb:> Naja also vorhin um den Kalendertag zu nennen habe ich das so> ausgerechnet, indem ich die Monate genommen habe (es ist Juni also sind> schon 5 volle Monate seit Jahresbeginn vergangen mit 3 x 31 tagen, 1 x> 29 und 1 x 30. Ausgerechnet sind das 152 Tage. Heute ist der 11. Also> noch 11 dazuzählen und heute ist der 163. Tag im Jahr.
Ist schon ganz nett, geht aber auch noch einfacher.
Angenommen, du hättest eine Tabelle, in der die Tage im Monat für alle
Monate aufgeschlüsselt sind (dann braucht dein Programm nämlich keine
Regeln enthalten, welche Monate wieviele Tage haben), wie geht es dann?
Das sei die Tabelle
31 28 31 30 31 30 31 31 30 31 30 31
und du musst wieder die Tagesnummer für den 11. 6. berechnen.
Dann brauchst du doch nur die Tage für die ersten 5(!) Monate addieren
und dann noch 11 dazu. Oder?
Allerdings: Die Summen für die einzelnen Monate ändern sich ja nicht
über die Jahre (mit Ausnahme von Schaltjahren). D.h. du kannst auch mit
dem Taschenrechner die jeweiligen Tagessummen für den ersten Tag jedes
Monat ausrechnen. Die Tabelle wird dann zu
0 31 59 90 120 151 181 212 242 273 303 334
(ich glaub ich hab mich da in der Tabelle irgendwo verhaut. Rechne
lieber nochmal nach)
Will ich also wissen, wieviele Tage bis zum 1. Februar vergangen sind,
dann sehe ich einfach in dieser Tabelle beim 2.ten Eintrag nach (weil
Februar der 2-te Monat ist)
Generell gesagt: Ich kann mir eine Tabelle herrichten, aus der ich eine
Tagesnummer erhalte mit der ich alle Tage bis zum Beginn des Monats
abdecken kann.
Kurzer Tipp:
Bis 2099 reicht für das Schaltjahr der Test ob durch 4 teilbar
(also Modulo(4) = 0 ).
Der 4 Januar liegt immer in der ersten KW ( Woche von Mo-So,
nach DIN).
Die Tabelle von Karl Heinz ist gut, aber besser direkt die
Tage der vorausgegengenen Monate eintragen, also
0,31,59,90,.... und dann +1 wenn Schaltjahr + Tag
AVR
Aber die Funktionen die das Assembler Programm hat, wären auch nicht
schlecht. Wenn das jemand mit guten Assembler und Bascom kenntnissen
übersetzen würde, dann wäre das genial. Wobei ich denke, dass das ein
wenig länger dauern kann...
Hi
Bei Bedarf habe ich auch noch eine neuere Version, die noch die
Feiertagsberechnung (Bundeslandspezifisch) und das Datum für die
Umstellung Sommer/Winterzeit enthält.
Aber abgesehen davon gibt es auch im Web Algorithmen für die
Wochentagsberechnung. Ich bin auch in einem Brockhaus von 1936 fündig
geworden.
MfG Spess
Karl Heinz Buchegger schrieb:> Schade.> Chance zum Lernen einer Basistechnik vertan.
Sorry, lag nicht in meiner Absicht. Die vielen fertigen
BASCOM/BASIC-Befehle sind Fluch und Segen zugleich. Wenn sich der TO
ernsthaft mit der Thematik beschäftigen möchte, wird er kaum drumherum
kommen, mal etwas in der Art von Hand zu machen.
Hi,
bin von Google hierher gekommen. Suche auch nach einer Möglichkeit die
Kalenderwoche zu berechnen.
Hat das jetzt nach der langen Zeit schon jemand mal hinbekommen?
Quarksl schrieb:> Hat das jetzt nach der langen Zeit schon jemand mal hinbekommen?
Nee, das ist eines der großen, ungelösten Mathematik Probleme unserer
Zeit.
Man hat gerade die JUQUEEN in Jülich darauf angesetzt, allerdings mit
einer Brute-force Methode ohne wirkliche Intelligenz.
@Thomas der Bastler: Ja sowas suche ich! Danke.
@Der Kalender: Solche Leute wie dich braucht die Welt einfach... Die die
einfach irgendwas dumm daherschmarrn und den Thread vollspammen aber in
keiner Weise helfen...
Quarksl schrieb:> @Thomas der Bastler: Ja sowas suche ich! Danke.>
Oha! Da wird sich der Thomas freuen.
> @Der Kalender: Solche Leute wie dich braucht die Welt einfach... Die die> einfach irgendwas dumm daherschmarrn und den Thread vollspammen aber in> keiner Weise helfen...
Gerade solche braucht dieses Forum weil sonst kommen einem manchmal die
Tränen.... vor Kummer. So kommen sie wenigstens ein bischen vom
Schmuzeln....
iaW: Ist es denn echt so schwer die paar Zeilen weiter oben zu lesen und
dann diese dämliche Berechnung nach eigenen Überlegungen durchzuführen?
Ist ja mehr oder weniger "nur" eine kluge Division durch 7 und dann
schauen was man mit dem Rest anfangen kann.....Das haben wir vor mehr
als 30 Jahren - weil uns fad war - in der Schule mit dem TI52 (oder
dieser kleine programmierbare Schultaschenrechner damals geheißen hat,
50 register oder so) bzw HP41C gemacht.... Und da gabs noch kein
Internet sondern "nur" einen dicken Papierschincken vom PPC-ROM in dem
uns das Wunder der JDN erklärt wurde....
Grüße
MiWi
Der Kalender schrieb:> Quarksl schrieb:>> Hat das jetzt nach der langen Zeit schon jemand mal hinbekommen?> Nee, das ist eines der großen, ungelösten Mathematik Probleme unserer> Zeit.> Man hat gerade die JUQUEEN in Jülich darauf angesetzt, allerdings mit> einer Brute-force Methode ohne wirkliche Intelligenz.
Lass gut sein.
Für manche ist das einfach höhere Mathematik auszurechnen der wievielte
Tag im Jahr ein bestimmtes Datum ist und mit dieser Information, der
Kentnis des Wochentags des 1.1. und der simplen Erkentnis, dass eine
Woche 7 Tage hat, die Kalenderwoche zu einem Datum auszurechnen. OK, Ich
geb zu, zum Jahreswechsel gibts da ein paar Regeln, die sind aber so
kompliziert auch wieder nicht.
Heutzutage muss man schon froh sein, wenn sie es schaffen die realen
Kosten eines Handies in 2 Jahren auszurechnen, wenn die Grundgebühr
nicht Grundgebühr sondern Basisentgelt heißt.
Zum Schaltjahr, dazu nutze ich: Jahr AND 3,( ohne 100 und 400 Regel, da
Jahr von 2000 bis 2099)
1
' Tag stellen es muss erst der Monat + Jahr bekannt sein, damit man weiß wieviele Tage im Monat sind
2
3
If _month = 2 Then ' Sonderbehandlung für Febuar
4
I = _year And 3 ' durch 4 teilbar ? letzten zwei Bit verraten es
5
I = I = 0 ' wenn I = 0 dann 1
6
Grenze = I + 28
7
Else
8
Grenze = _month > 7 ' ab August (8 Monat) verschiebt es sich um 1
9
' | 1 2 3 4 5 6 7 8 9 10 11 12
10
Zahl = _month + Grenze ' zu den Monaten addieren | 1 2 3 4 5 6 7 9 10 11 12 13
11
Zahl = Zahl And 1 ' prüfen ob ungerade Zahl | 1 X 1 0 1 0 1 1 0 1 0 1
12
Grenze = 30 + Zahl ' ergibt 30 oder 31 Tage
13
End If
14
echo "Die Anzahl der Tage im Monat "; _mounth ; " ist " ; Grenze
Zur KW: Es war etwas tricky,
Bascom teilt Zahlen über 255 nicht mehr durch 7
Die Ausnahmen wenn der 1.1. in die 52/53 Woche fällt oder
Wenn der 31.12. schon 1. KW ist
1
Dim Bday As Byte : Dim Bmonth As Byte : Dim Byear As Byte : Dim Kalenderwoche As Byte : Dim T1 As Integer : Dim T2 As Integer
avr schrieb:> Bis 2099 reicht für das Schaltjahr der Test ob durch 4 teilbar> (also Modulo(4) = 0 ).
Kann mir bitte jemand von euch erklären, warum das nur bis 2099 reicht?
Hi
>Kann mir bitte jemand von euch erklären, warum das nur bis 2099 reicht?
1.Ein Jahr ist ein Schaltjahr, wenn die Jahreszahl restlos durch 4
teilbar ist.
2.Ein Jahr ist kein Schaltjahr, wenn es durch 4 und 100 restlos teilbar
ist.
3.Ein Jahr ist ein Schaltjahr, wenn es sowohl durch 4, durch 100 und
durch 400 teilbar ist
Jetzt wende mal die Regeln für 2100 an.
MfG Spess
SamSon schrieb:> avr schrieb:>> Bis 2099 reicht für das Schaltjahr der Test ob durch 4 teilbar>> (also Modulo(4) = 0 ).>> Kann mir bitte jemand von euch erklären, warum das nur bis 2099 reicht?
Es scheint als seien noch doch noch nicht alle vom Julianischen auf den
Gregorianischen Kalender migriert. Und das nach so langer Zeit. Das wird
sicher nur noch von IPv6 getoppt.
cyblord ---- schrieb:> SamSon schrieb:>> avr schrieb:>>> Bis 2099 reicht für das Schaltjahr der Test ob durch 4 teilbar>>> (also Modulo(4) = 0 ).>>>> Kann mir bitte jemand von euch erklären, warum das nur bis 2099 reicht?>> Es scheint als seien noch doch noch nicht alle vom Julianischen auf den> Gregorianischen Kalender migriert. Und das nach so langer Zeit. Das wird> sicher nur noch von IPv6 getoppt.
Was, Wo Wie?? Was heisst hier neuer Kalender?
Aber nicht doch!
Wieso das denn?!
Da haben wir bei uns gerade erst mit den Hexenverbrennungen aufgehört
und dann schon wieder was neues. :-D
spess53 schrieb:> Jetzt wende mal die Regeln für 2100 an.>> MfG Spess
OK. Also dieses Wiki-Dings in diesem Inter-Teil hat mir gehilft. Oh
Gott, immer diese neumodernen Sachen. Teufelszeug! :-D
Nöö, echt jetzt. Danke für die Hinweise. ;-)
Die Kalenderfunktionen von Bascom Dayofyear() und Dayofweek()
funktionieren bis 2099, spätestens am 28.02.2100 auf dem 01.03.2100 gibt
es ein Problem, weil Bascom einen 29.02.2100 zwischen schiebt!
Im Jahr 2000 hatten wir ja Glück, durch 4 teilbar also Schaltjahr,
durch 100 teilbar, also fällt es aus,
durch 400 teilbar, also fällt es doch nicht aus ;-)
Die meisten Realtime-Clocks arbeiten immer noch mit zweistelligen
Jahren, 00-99 und dann wird eine 20 davor geklatscht
Bei DCF77 gibt es auch nur Jahr 00-99...
Und noch eine gute und schlechte Nachricht für alle die nur den Code
kopieren. Die schlechte zu erst:
Bei Marke7: wollte ich durch 7 teilen, es rechnet aber etwas falsch,
raus gekommen ist:
1
Kalenderwoche=(T1-1)/7+1
Die gute Nachricht, der Fehler wird korrigiert, so kommt das richtige
raus.
Das Problem ist:
1
Kalenderwoche=T1/7
geht nur bis 36.KW, da 256/7 der Microcontroller überläuft und immer 1
raus kommt.
Möglich wäre:
1
if Kalenderwoche > 200 then
2
T1=T1-140 Rem 140/7=20
3
Kalenderwoche=T1/7
4
Kalenderwoche=Kalenderwoche+20 Rem jetzt können wir bis zur 57. KW rechnen, es gibt aber nur 53
5
else
6
Kalenderwoche=T1/7
7
end if
oder ich probiere es mal mit einer For-Next Schleife....
Edit: der Code lässt sich sicher noch verbessern....
Der Zeit gibt es Probleme mit der Berechnung von 27.12. - 3.1. bei
meiner KW-Berechnung.
Wenn ich den Hasen gefunden habe, stell ich noch mal einen neue Code
ein...