PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dcf77 encoding ZUFUSS!



magic33
30.03.2009, 17:35
servus nachdem ich mich mit der lib nun im Kriegszustand befinde
hab ich mir das signal auf konvenzionelle weise decodiert und siehe da auch mit dem internen quarz 4mhz des M32 funzt es
ABER warumm will trotz tagelannger versuche und klasklarem Signal mitlerweile kann ich das datum auch schon mit blossem auge auf dem oszie sehen der µC das signal nicht decodieren mit der standart in 1.11.0.9 beispieldatei ausspucken


$regfile = "m32def.dat"
$crystal = 4000000
$hwstack = 256
$swstack = 256
$framesize = 256
$baud = 19200
Config Lcd = 16 * 4 'LCD Display
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2

'Config Dcf77 = Pind.2 , Debug = 1 , Inverted = 0 , Check = 2 , Update = 0 , Updatetime = 30 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1
Config Timer1 = Timer , Prescale = 256
Config Pind.2 = Input
Initlcd
Dim Sig(65)as Byte
Dim S As Bit
Dim Zahl As Word
Dim Lauf As Byte
Dim Ti As Word
Dim Minut As Byte
Dim Stund As Byte
Dim Tag As Byte
Dim Monat As Byte
Dim Jahr As Byte
Dim Wochentag As Byte
Dim Dcf_ok As Bit
Dcf_ok = 0
Lauf = 0
S = 0
Zahl = 0
Wait 2
Anfang:
Cls
Lcd "Sync DCF =" ; Dcf_ok

If Dcf_ok = 0 Then
Locate 2 , 1 : Lcd "Signal Aufbau"
While Pind.2 = 1
Wait 1
Locate 3 , 1 : Lcd Zahl
Incr Zahl
Wend
End If
Locate 2 , 1 : Lcd "Suche Sig Anfang"
Bitwait Pind.2 , Set

An1:
Incr Lauf
Locate 3 , 1 : Lcd Lauf ; " "
S = 0
Timer1 = 0
Bitwait Pind.2 , Reset
Start Timer1
Bitwait Pind.2 , Set
Stop Timer1
Ti = Timer1
' pause gefunden wenn ti grösser 25000
If Ti > 25000 Then Goto Dcf_sig_anfang
'Locate 2 , 1 : Lcd Ti
Goto An1
Dcf_sig_anfang:
Locate 1 , 1 : Lcd "sync gefunden"
Locate 2 , 1 : Lcd "lese 59 Bit"

Lauf = 1
Bitwait Pind.2 , Reset
Sig(lauf) = 0
Dcf_sig_in:
Incr Lauf
Timer1 = 0
Bitwait Pind.2 , Set
Start Timer1
Bitwait Pind.2 , Reset
Stop Timer1
Ti = Timer1
'Locate 2 , 1 : Lcd Ti

If Ti < 2000 Then S = 0 ' sig 1
If Ti > 2000 Then S = 1 ' sig 0
Sig(lauf) = S
Locate 3 , 1 : Lcd Lauf ; " "
Locate 4 , 1
If S = 0 Then Lcd "kurz"
If S = 1 Then Lcd "lang"
If Lauf < 60 Then Goto Dcf_sig_in



For Zahl = 1 To 61
Print Sig(zahl);
Next Zahl
Lauf = 0
Zahl = 0
Print
Cls
Minut = 0
If Sig(22) = 1 Then Minut = Minut + 1
If Sig(23) = 1 Then Minut = Minut + 2
If Sig(24) = 1 Then Minut = Minut + 4
If Sig(25) = 1 Then Minut = Minut + 8
If Sig(26) = 1 Then Minut = Minut + 10
If Sig(27) = 1 Then Minut = Minut + 20
If Sig(28) = 1 Then Minut = Minut + 40
Print "Minute " ; Minut
Stund = 0
If Sig(30) = 1 Then Stund = Stund + 1
If Sig(31) = 1 Then Stund = Stund + 2
If Sig(32) = 1 Then Stund = Stund + 4
If Sig(33) = 1 Then Stund = Stund + 8
If Sig(34) = 1 Then Stund = Stund + 10
If Sig(35) = 1 Then Stund = Stund + 20

Print "Stunde " ; Stund
Tag = 0
If Sig(37) = 1 Then Tag = Tag + 1
If Sig(38) = 1 Then Tag = Tag + 2
If Sig(39) = 1 Then Tag = Tag + 4
If Sig(40) = 1 Then Tag = Tag + 8
If Sig(41) = 1 Then Tag = Tag + 10
If Sig(42) = 1 Then Tag = Tag + 20
Monat = 0
If Sig(46) = 1 Then Monat = Monat + 1
If Sig(47) = 1 Then Monat = Monat + 2
If Sig(48) = 1 Then Monat = Monat + 4
If Sig(49) = 1 Then Monat = Monat + 8
If Sig(50) = 1 Then Monat = Monat + 10
Jahr = 0
If Sig(51) = 1 Then Jahr = Jahr + 1
If Sig(52) = 1 Then Jahr = Jahr + 2
If Sig(53) = 1 Then Jahr = Jahr + 4
If Sig(54) = 1 Then Jahr = Jahr + 8
If Sig(55) = 1 Then Jahr = Jahr + 10
If Sig(56) = 1 Then Jahr = Jahr + 20
If Sig(57) = 1 Then Jahr = Jahr + 40
If Sig(58) = 1 Then Jahr = Jahr + 80
Print "Datum " ; Tag ; ":" ; Monat ; ":" ; Jahr
Wochentag = 0
If Sig(43) = 1 Then Wochentag = Wochentag + 1
If Sig(44) = 1 Then Wochentag = Wochentag + 2
If Sig(45) = 1 Then Wochentag = Wochentag + 4
Select Case Wochentag
Case 1 : Print "Montag"
Case 2 : Print "Dienstag"
Case 3 : Print "Mittwoch"
Case 4 : Print "Donnerstag"
Case 5 : Print "Freitag"
Case 6 : Print "Samstag"
Case 7 : Print "Sonntag"
End Select

Waitms 200
If Jahr < 9 Then Goto Anfang
If Jahr > 11 Then Goto Anfang

Cls
Select Case Wochentag
Case 1 : Lcd "Montag"
Case 2 : Lcd "Dienstag"
Case 3 : Lcd "Mittwoch"
Case 4 : Lcd "Donnerstag"
Case 5 : Lcd "Freitag"
Case 6 : Lcd "Samstag"
Case 7 : Lcd "Sonntag"
End Select
Locate 2 , 1 : Lcd Tag ; ":" ; Monat ; ":" ; Jahr
Locate 3 , 1 : Lcd Stund ; ":" ; Minut ; ":00"
Locate 4 , 1
'mez Mesz
If Sig(18) = 1 Then
Print "MESZ"
Lcd "MESZ"
End If

If Sig(19) = 1 Then
Print "MEZ"
Lcd "MEZ"
End If
For Zahl = 0 To 20
Wait 1
Next Zahl
Dcf_ok = 1
Goto Anfang


End
'end program

MelMan
31.03.2009, 09:49
ABER warumm will trotz tagelannger versuche und klasklarem Signal mitlerweile kann ich das datum auch schon mit blossem auge auf dem oszie sehen der µC das signal nicht decodieren mit der standart in 1.11.0.9 beispieldatei ausspucken


Was willst du jetzt genau wissen? Kann aus dem "Deutsch" keine klare Frage erkennen sry.

thewulf00
31.03.2009, 10:55
Hallo Magic.
Ich verstehe Deine Fragen nicht.

Lies Dir die Sätze vor dem Absenden nochmals durch und setze bitte Punkte am Satzende. Ein Großschreibung würde uns helfen, Deine Beiträge zu lesen.

magic33
31.03.2009, 18:36
ok Danke an den Marc aus US

das problem war der interne Pullup!

nun da nach DCF77 config ich die Pullups deaktiviert habe
gehts auch mit der lib !