DCF77

Ik wil een DCF77 gaan decoderen in mijn AVR, maar ik heb enkele moeilijkheden.

Op welke bits kan ik synchroniseren? Dat zijn de M, S, P1,P2,P3. Zijn deze allemaal hoog? Zo ja, hoe kan ik zorgen dat de AVR zich hieroip insteld?
En wat staat er in de 1e t/m de 14e seconde van het signaal?
En zijn er toevallig mensen met BASCOM-AVR (voorbeeld) programma's om de klok uit lezen?

PS ik heb al op het forum gezocht en gegoogled ;)
[EDIT] Hoe wordt het jaar verzonder? Wordt bijvoorbeeld, 2006 verzonden al 26?

Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare
Turbokeu

Golden Member

Je synchroniseert op de afwezigheid van het 59e bit.
Het eerstvolgende bit is bit0 (seconde 00).
Dan tel je tot je het 20e bit (startbit) tegenkomt.
Dit moet "1" zijn (anders error).
Dan begin je alle bits (21 tot en met 58) binnen te lezen en te decoderen en te controleren, rekening houdend met de pariteitsbits P1, P2 en P3.
Indien alles correct is kan je de klok synchroniseren bij de volgende bit0.

Bit 1 tot 19 bevatten o.a. welke antenne de DCF zender gebruikt (main of reserve), of het winter of zomertijd is, ... (zie DCF77 tijdsdiagram op www.picbasic.nl)

Alle tijd/datumcodes worden in packed BCD formaat verzonden (zie weeral DCF77 tijdsdiagram op www.picbasic.nl), dus 2006 wordt uitgezonden als BCD "0" en "6".

Ik heb een maand of 6 gezwoegd en ge-debugged om perfect werkende DCF77 routines in PIC assembler te schrijven maar ik kan je spijtig genoeg niet helpen op AVR, en nog minder in Basic...

CD :)

I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"

Dus tussen bit 58 en bit0 is er een stilte van 1000 msec?
En worden dan de volgende gegevens zo uitgezonden:

1 2 4 8 10 20 40 80
Minuut(43) 1 1 0 0 0 0 1 X
Uur(13) 1 1 0 0 1 0 X X
Kal. dag(23) 1 1 0 0 0 1 X X
Weekdag(4 of 5?) 0/1 0 1 X X X X X
Kalender maand(2)0 1 0 0 0 X X X
Jaar(2006) 0 1 1 0 0 0 0 0

Of zit ik helemaal fout?

Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Turbokeu

Golden Member

[message=375912quote]Op 23 februari 2006 13:46:59 schreef Sandertje[/message]:
Dus tussen bit 58 en bit0 is er een stilte van 1000 msec?
En worden dan de volgende gegevens zo uitgezonden:
Of zit ik helemaal fout?

code:


                 80  40  20  10 / 8   4   2   1
Minuut(43)            1   0   0 / 0   0   1   1
Uur(13)                   0   1 / 0   0   1   1
Kal. dag(23)              1   0 / 0   0   1   1
Weekdag(4)                            1   0   0    
Kalender maand(2)             0 / 0   0   1   0
Jaar(2006)        0   0   0   0 / 0   1   1   0

LSB is rechts, bits worden van rechts naar links uitgezonden, / geeft de scheiding tussen de BCD codes aan.

CD :)

Edit: 'k Had een foutje in de tabel gemaakt...

En er is inderdaad een "stilte" van 1sec tussen sec 58 en 60.

I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"

Verder klopt de code? Tabel

[Bericht gewijzigd door Sandertje op donderdag 23 februari 2006 16:06:57

Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare

Kijk op www.picbasic.nl/index_info_nl
Klik op De werking van het DCF77 signaal

Onderaan staat de door Turbokeu genoemde tijdsdiagram.

Ohm sweet Ohm | www.picbasic.nl

Dat schema heb ik wel, maar sync. bits vinden was het probleem. Ik heb DCF aan mijn scoop gehangen en volgens mij is de 59 een 0. Want ik had op een gegeven moment een langere nul dan normaal.
Ik denk dat ik die gebruik. En daarna de 2 volgende startbits...

[EDIT] Ik zag je edit niet en heb toen maar gemeten.... ;)

[Bericht gewijzigd door Sandertje op donderdag 23 februari 2006 22:06:53

Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare
Turbokeu

Golden Member

Op 23 februari 2006 22:06:02 schreef Sandertje:
Dat schema heb ik wel, maar sync. bits vinden was het probleem. Ik heb DCF aan mijn scoop gehangen en volgens mij is de 59 een 0. Want ik had op een gegeven moment een langere nul dan normaal.

Een "0" DCF bit is een 100msec lange puls, een "1" is 200msec lang.
In de 59e seconde is er noch een 0, noch een 1, dus totaal geen bit...

CD :)

I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"

Op 23 februari 2006 23:45:05 schreef Turbokeu:
[...]
Een "0" DCF bit is een 100msec lange puls, een "1" is 200msec lang.
In de 59e seconde is er noch een 0, noch een 1, dus totaal geen bit...

CD :)

Maar als ik een pulldown van 10K gebruik, zou het signaal op bit 59 0 zijn? Zo ja, dan kan ik deze gebruiken voor synchronisatie.

Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare
Turbokeu

Golden Member

Op 23 februari 2006 23:52:54 schreef Sandertje:
[...]
Maar als ik een pulldown van 10K gebruik, zou het signaal op bit 59 0 zijn? Zo ja, dan kan ik deze gebruiken voor synchronisatie.

Het uitgangssignaal van de DCF module is altijd '0', behalve op het moment dat er een 100msec (korte '1' ) of 200msec (lange '1') puls ontvangen wordt (dit voor zover dat je de niet geïnverteerde DCF uitgang gebruikt).

Elke keer dat er een DCF puls ontvangen wordt moet je een teller starten die overloopt bij meer dan 1 sec (ik gebruik 1024 msec) en deze testen.
Tussen de 0e en de 58e sec wordt de teller dus telkens gereset.
Bij de 59e sec gaat de teller dan overlopen vermits je geen puls ontvangt, dus weet je dat je in de 59e sec bent, én dat de volgende puls bit "0" (sec0) van het DCF77 frame is.

BTW, ik ken geen DCF ontvangers waar je een pulldown weerstand kan gebruiken (altijd pullup).

CD :)

I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"

Ik had die pulldown zelf verzonnen ;)
Maar dat betkent dus dat ik met een timer moet gaan werken.
Dat moet ik nog even uitzoeken. Zal ik binnenkort eens doen. Idee is goed! :)

Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare
Turbokeu

Golden Member

Op 24 februari 2006 09:57:42 schreef Sandertje:
Ik had die pulldown zelf verzonnen ;)
Maar dat betkent dus dat ik met een timer moet gaan werken.
Dat moet ik nog even uitzoeken. Zal ik binnenkort eens doen. Idee is goed! :)

Tja, in assembler is het allemaal heel makkelijk...
Mijn interrupt routine wordt om de 4msec aangeroepen (Timer0 overflow).
Vanuit de interrupt routine decodeer ik de DCF77 pulsen en verhoog ik de besproken teller.
Bij elke DCF puls (om de sec) geraakt de teller maar tot 250 (250x4msec=1000msec).
Bij de 59e sec zal de teller overflowen bij 255 (1024msec) zodat ik weet dat ik in de 59e sec ben.

CD :)

I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"
Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare

Da's toch niet zo relevant? Zeker niet als het in basic is...

Zorg dat je NOOIT, NOOIT, NOOIT wat met Versatel Tele2 te maken krijgt!

Op 24 februari 2006 21:27:35 schreef Marco69:
Da's toch niet zo relevant? Zeker niet als het in basic is...

??
Bedoel je het programma? Dat is, als hij draait op mijn AVR, precies goed. Althans, ik heb hem nog niet uitvoerig bekeken maar ik bedoel de taal. Die klopt!

Zo niet, dan toch!....GeoCaching can be a way of life....Why not? >> GeoCaching: Team SupeRare