magic33
30.03.2009, 18: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
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
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