PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DCF77 lib ohne Softclock verwenden



elcomportal
17.06.2012, 12:16
Hallo,
ich habe folgendes vor.
Einen ATMEGA32 verbinde ich über I2C mit einem DS1307. Dann frage ich diesen zyklisch ab (etwa 10 mal/Sekunde). Wenn sich was ändert, wird die Zeit angezeigt. Ich möchte die Softclock nicht verwenden. Nun möchte ich einmal pro Stunde das DCF-Signal auswerten und die DS1307 evtl. nachstellen. Wenn ich den Befehl "Config Dcf77 = PINB.2..." eingebe wird ja die Bibliothek eingebunden. Aber wie muss ich das konfigurieren? Ich brauche ja auch noch einen 2. Timer der 10mal pro Sekunde meinen Interrupt aufruft.
Mfg
Torsten

Dirk
17.06.2012, 19:40
Hallo Torsten,

die DCF77-Funktion kannst du doch ruhig einbinden.
Mit dem Parameter UPDATE (1) kannst du einmal pro Stunde die Zeit nach DCF stellen.

elcomportal
17.06.2012, 20:55
Aber in welchen Variablen wird denn die Zeit beim Update gespeichert? wie muß der config Befehl aussehen (Timerr usw...)? Dieses Gosub, wird das durch den Timer aufgerufen oder geht das nur mit 32khz Quarz. Dann könnte ich doch in der SecTic Routine einfach den 1307 abfragen...
VG
Torsten

Dirk
17.06.2012, 21:46
Die Config kann so aussehen, wie im Beispiel test_dcf77.bas in den SAMPLES unter DATETIME.
Du müßtest nur UPDATE=1 setzen, damit einmal pro Stunde das Update erfolgt.
An den Sectic: Label kannst du deine Abfrage der RTC reinsetzen (aber nur KURZ, keine langen I2C-Befehle!).

mat-sche
19.06.2012, 06:40
Guten Morgen,

ich nutze in meiner Homesteuerung ebenfalls einen DCF77 Empfänger in Verbindung mit einem DS1307.
die Initialisierung sieht so aus:


Config Dcf77 = Pinb.6 , Timer = 1 , Inverted = 0 , Timer1sec = 1 , Update = 0 , Updatetime = 0 , Check = 1 , Debug = 0 , Gosub = Sectic 'Switchpower = 1 , Powerlevel = 1 , Powerpin = Pina.2
Config Date = Dmy , Separator = . 'deutsches Datumsformat
Dim Dcf_buff(7) As Byte
Dim Zeit_flag_set As Bit , Zeit_flag_get As Bit , Dcf77_set As Bit , Dcf_sig As Bit 'Variablen zum stellen der DS1307 Uhr und Systemuhr
Dcf_sig = 0
Dim Ds1307_w_d(5) As Byte 'Schreibadresse &B11010000 Ds1307w = &HD0
Dim Ds1307_w_t(4) As Byte 'Schreibadresse &B11010001 Ds1307w = &HD1
Dim _day1 As Byte , _month1 As Byte , _year1 As Byte , _sec1 As Byte , _min1 As Byte , _hour1 As Byte 'Zeit-Variablen für die DS1307 Uhr


nun Du brauchst nicht jede Stunde den DS1307 neu zu stellen, da dieser sehr genau läuft, vorausgesetzt ist natürlich ein guter 32kHz Quarz am DS. Ich nutze dafür den DS32KHZ, diesen habe ich mir als Sample von Maxim schicken lassen, da ich ihn nicht in einem gängigen Shop gefunden habe.
Ich stelle die interne Uhr vom DS einmal am Tag nach DCF. Dazu wähle ich mir eine Uhrzeit aus und filtere mir über das "Dcf_status.2 = 1" Bit, ob das empfangene Datenpaket in Ordnung ist und stelle dann die Uhr. (siehe Bascom-Hife)
Du kannst auch ,wie schon von Dir erkannt, die Setic Unterroutine benutzen. diese wird mit:

Sectic:
Incr Timecount1
Incr Displaytime
Incr Tag_byte
Return

aufgerufen. Dort kannst Du eine Variable hochsetzen lassen, die dann im Hauptprogramm abgefragt werden kann.


Grüße Matthias

elcomportal
19.06.2012, 17:40
Hallo,
danke erstmal für Eure Antworten.
Jetzt wird das erstmal eine Schaltuhr für meine Heizung. Die (ungenaue) Quarzuhr hat den Geist aufgegeben und eine neue soll 230 Euros kosten. Hallo!?!? Nee, da baue ich mir selbst eine und dann isses billiger und gleich Funkuhr. Wenn die dann funktioniert, wird meine Home-Steuerung auch umgebaut. Da habe ich damals (vor 11 Jahren) auch nur ne Quarzuhr eingebaut, da wirds auch Zeit für Funk... ;-)
Ja, nun muss ich noch auf mein Material warten und dann probier ich das mal aus.
VG
Torsten

mat-sche
19.06.2012, 18:19
Hallo Torsten,

achte aber dabei darauf, dass Du dem DCF77 Empfänger auch die Möglichkeit zum empfangen gibst. Teste ersteinmal ob am Einsatzort es ein Funksignal zu empfangen ist! :)

MFG MAT

elcomportal
19.06.2012, 20:14
Ich stelle nachher mal meinen Wecker hin und laß den neu synchronisieren. ;)

VG
Torsten