Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von albundy
Hallo Martin,
Zitat:
Ein teil funktioniert! Im Debuggermodus werden Zeiten angezeigt.
'---> Die Impulslänge sollte zwischen 2 und 8 liegen
'---> Die Pausenlänge sollte zwischen 70 und 90 liegen
'---> Der Impulszähler sollte gleichmässig im Sekundentakt bis 59 hochzählen
'---> Die Parität sollte ab dem 36.Impuls auf "1" gehen
was genau stimmt davon, und was nicht ?
Hallo AlBundy
Ich habe ein Modul von Reichelt. Mit deiner Lib komme ich gut klar. Die Zeit wird aber nicht synchr.
Folgende Debug Ausgaben:
Impulslänge: immer 1
Pausenlänge zwishcen 72 und 74
Impulszähler: zählt schön bis 59 und setzt sich bei Minutendurchgang auf Null
Pari: geht nie auf 1
Imp_OK: geht nie auf 1
Was kann ich noch tun?
Die Soft Uhr läuft schön hoch. War schon bei ein paar Stunden.
In der Anlage das Datenblatt und das Listing. Der Empfänger hat schon mit dem Programm von Wastl (decodiert nicht mit Timer, sondern auf Anforderung mit Taster in einem Sub) funktioniert. Nur leider ist der MC dann für mind. 1 Minute blockiert.
Code:
'*******************************************************************************
'* DEMO für DCF77 Library *
'* *
'* Funktion der Library im "Readme.txt" *
'*******************************************************************************
$regfile = "m32def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
$baud = 19200
'-------------------------------------------------------------------------------
Config Pind.6 = Output
'----- GLCD --------------------------------------------------------------------
'Config GLCD Backlight
Config Pind.5 = Output 'Pin for PWM Signal
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
Dim Dimmen As Byte
'Config GLCD KS0108
'First we define that we use a graphic GLCD
'The dataport is the portname that is connected to the data lines of the LCD
'The controlport is the portname which pins are used to control the lcd
'CE =CS1 Chip select first chip
'CE2=CS2 Chip select second chip
'CD=Data/instruction
'RD=Read
'RESET = reset
'ENABLE= Chip Enable
$lib "glcdKS108.lib"
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = 1 , Ce2 = 0 , Cd = 5 , Rd = 4 , Reset = 2 , Enable = 3
'-------------------------------------------------------------------------------
'GLCD Initialisieren und Licht an
Dimmen = 128 ' Wert für die Helligkeit der LED Beleuchtung
'Compare1a = Dimmen 'PWM Signal
Setfont Font6x8 'Schrifgröße setzen
Cls 'LCD löschen
'-------------------------------------------------------------------------------
$lib "dcf77.lib"
$external Dcf77
Declare Sub Dcf77
Config Timer0 = Timer , Prescale = 1024 'Timer für 40Hz (25ms)
Const Startwert = 56
Timer0 = Startwert
On Timer0 Tim0_isr 'Überlauf alle 25ms
Enable Interrupts
Enable Timer0
'------------------------ Pin für DCF Eingang definieren -----------------------
' jeder Portpin kann benutzt werden.
' Auch in der "Dcf77.lib" entsprechend anpassen !!!
Config Pind.3 = Input 'DCF 77 Eingang
'Set Porta.7 'Pullup einschalten
'--------------------- Variablen für DCF Routine -------------------------------
Dim Status As Byte , Zaehler As Byte , Buffer As Byte , Impuls As Byte
Dim H_sek As Byte , Sekunde As Byte , T_min As Byte , T_std As Byte
Dim Minute As Byte , Stunde As Byte , Wotag As Byte , Tag As Byte
Dim Monat As Byte , Jahr As Byte , Pari As Byte , Pau As Byte , Imp As Byte
'-------------------------------------------------------------------------------
'------------ Wichtig bei internem RC Oszillator !!! ---------------------------
'Osccal = 184 'int. Oszillator kallibrieren
'-------------------------------------------------------------------------------
'******************** HAUPTPROGRAMM ********************************************
Do
If Stunde < 10 Then Lcdat 1 , 1 , "0" ; Stunde ; ":" Else Lcdat 1 , 1 , ; Stunde ; ":"
If Minute < 10 Then Lcdat 1 , 19 , "0" ; Minute ; ":" Else Lcdat 1 , 19 , ; Minute ; ":"
If Sekunde < 10 Then Lcdat 1 , 37 , "0" ; Sekunde ; Else Lcdat 1 , 37 , ; Sekunde
'If H_sek > 20 Then 'Doppelpunkt blinken lassen
' Locate 1 , 12
' Lcd " "
'End If
If Status.3 = 1 And Status.4 = 1 Then
' Lcdat 2 , 1 , ; Lookupstr(wotag , Wochentag) ; ", "
If Tag < 10 Then Lcdat 2 , 19 , " " ; Tag ; "." Else Lcdat 2 , 19 , ; Tag ; "."
If Monat < 10 Then Lcdat 2 , 37 , " " ; Monat ; "." Else Lcdat 2 , 37 , ; Monat ; "."
Lcdat 2 , 55 , "20"
If Jahr < 10 Then Lcdat 2 , 67 , "0" ; Jahr Else Lcdat 2 , 67 , ; Jahr
End If
'Loop
'---------------------- nur für DEBUG nötig ------------------------------------
'Cls
'Do
'Debounce Pinb.1 , 0 , Uhrzeit , Sub
If Imp > 0 Then
Lcdat 4 , 1 , "Impulslaenge: " ; Imp
If Imp < 6 Then Lcdat 4 , 85 , " = 0" Else Lcdat 4 , 85 , " = 1"
End If
Lcdat 5 , 1 , "Pausenlaenge: "
If Pau < 10 Then Lcdat 5 , 85 , "0" ; Pau ; Else Lcdat 5 , 85 , ; Pau
Lcdat 6 , 1 , "Impulszaehler: "
If Impuls < 10 Then Lcdat 6 , 91 , "0" ; Impuls Else Lcdat 6 , 91 , ; Impuls
Lcdat 7 , 1 , "Pari=" ; Status.4 ; " Imp_OK=" ; Status.3
Loop
'---> Die Impulslänge sollte zwischen 2 und 8 liegen
'---> Die Pausenlänge sollte zwischen 70 und 90 liegen
'---> Der Impulszähler sollte gleichmässig im Sekundentakt bis 59 hochzählen
'---> Die Parität sollte ab dem 36.Impuls auf "1" gehen
End
'*************** ENDE HAUPTPROGRAMM ********************************************
'------------------------ Interrupt Routine ------------------------------------
Tim0_isr:
Timer0 = Startwert
If Pind.3 = 0 Then
Reset Portd.6
Else
Set Portd.6
End If
Call Dcf77
Return
'------------------------ Daten für Wochentag ----------------------------------
Wochentag:
Data " " , "Mo" , "Di" , "Mi" , "Do" , "Fr" , "Sa" , "So"
$include "font6x8.font"
Bei der lib ist nur der Port angepasst.
Grüße Eisbaeeer