- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: DCF-77 läßt sich nicht auswerten

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Anzeige

    Powerstation Test
    Einen guten Morgen "albundy"

    Leider bin ich erst jetzt dazugekommen nachzuschauen was mit den Impulsen ist.

    Impulslänge: Schwankt zwischen 1 und 4
    Pausenlänge: recht stabil auf 72
    Impulszähler: Zählt von hoch kommt aber meist nur bis ca. 10 ab und an bis knapp über 50
    Parität: Ist entsprechen Impulszähler > 36 = 1

    D.h. für mich es gibt irgendwo Störungen oder die Ferritantenne ist schlecht ausgerichtet.


    Danke nochmal für deine guten und auch immer freundliche Hilfe
    Martin

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    So wie es aussieht, hat ein Bildschirm in der Nähe das Signal gestört.
    Im Debugmodus laufen alle Zähler so hoch, wie du es geschrieben hast.

    Nun teste ich mal die "Zeitanzeige". Und siehe da, alles bestens.

    Nochmals Danke für deine Gedult.

    Gruß
    Martin

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2005
    Ort
    53562 Sankt Katharinen
    Alter
    72
    Beiträge
    9
    @Dirk

    Hallo Dirk,

    habe alles genau wie im Wiki beschrieben, in die einzelnen Dateien gespeichert, wenn ich die Decodertest.bas compilieren will bekomme ich
    folgende Fehlermeldung:

    Error: 261 Line: 0 Array expected [DCF77BUFFER], in File:

    Benutze die Bascom Version 1.11.8.3 Build 010 als Vollversion
    IDE Version 1.11.8.4

    Was mache ich da falsch??

    Gruß
    kwalter

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    10.06.2006
    Ort
    Duisburg-Rheinhausen
    Alter
    78
    Beiträge
    80

    DCF-myAVR

    Hier mal meine Code mit Pinb.1 für myAVR Board
    Code:
    $regfile = "m8def.dat"                                      'ATmega 32
    $crystal =  3686400                                           'Quarz: 8 MHz
    $baud = 9600
    $hwstack = 32                                               'hardware stack
    $swstack = 8                                                'software stack
    $framesize = 24                                             'frame space
    
    Config Date = Dmy , Separator = .                           'deutsches Format für Datum
    Config Clock = Soft
    Disable Timer2                                              'ausgeschaltet lassen
    
    $lib "K_DCF.lib"                                            'LIB für DCF77
    $external Dcf77
    Declare Sub Dcf77
    
    '###########################################################################
    
    'Hauptprogramm:
    
    'LCD konfigurieren:
    Wait 1
    'Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
    
    Config Lcd = 20 * 2                                         'LCD 164A
    
    'Startmeldung:
    Cls
    Lcd "*  RNBFRA V1.22  * "
    Wait 5
    Cls
    
    Config Timer0 = Timer , Prescale = 1024                     'Timer 40Hz
    Const Startwert = 166'61                                        'Für 8MHz
    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_soft.lib" entsprechend anpassen !!!
    
    Config Pinb.1 = Input                                       'DCF 77 Eingang ***Alt Pind.3 **
    Set Portb.1                                                 'Pullup ein  Alt***Portd.3****
    
    Declare Sub Showstatus()
    Declare Sub Showtime()
    
    '------------------- Variablen für DCF Routine -----------------------------
    
    Dim Status As Byte , Zaehler As Byte , Buffer As Byte , Impuls As Byte
    Dim H_sek As Byte , T_min As Byte , T_std As Byte , Wotag As Byte
    Dim Pari As Byte , Pau As Byte , Imp As Byte
    
    Dim I As Byte
    
    '---------------------------------------------------------------------------
    
    'Hauptprogramm:
    Cls
    Cursor Off
    
    Date$ = "01.01.00"
    Time$ = "00:00:00"
    
    Status.7 = 0                                                'Uhr nach DCF stellen: AUS
    Status.5 = 0                                                'Uhr wurde nicht gestellt
    I = 0
    '****************** HAUPTPROGRAMMSCHLEIFE **********************************
     Cls
    Do
      'Cls
      Call Showtime()
      Call Showstatus()
      If _min = 58 And Status.7 = 0 Then Status.5 = 0           '1x pro Stunde nach DCF stellen
      If Status.5 = 0 Then Status.7 = 1 Else Status.7 = 0       'Zeit nicht aktuell: Stellen!
      Wait 1
    Loop
    
    End
    
    '************* ENDE HAUPTPROGRAMM ******************************************
    
    Sub Showstatus()                                            'Status anzeigen
    
      If I = 0 Then I = 1 Else I = 0
      Locate 1 , 1
      If Status.5 = 1 Then
        Lcd " **DCF-Soft Clock** "
      Else
        Lcd " ***Soft Clock***  *"
      End If
    
      Locate 2 , 21
      If Status.7 = 1 Then
        Lcd "DCF:On "
      Else
        Lcd "DCF:Off"
      End If
    
      Locate 2 , 29
      If Status.4 = 1 And I = 0 Then
        Lcd "  Signal"
      Else
        Lcd "        "
      End If
    
    End Sub
    '---------------------------------------------------------------------------
    
    Sub Showtime()
    
      Locate 2 , 5
      Lcd Time$
      If Status.5 = 1 Then
        Locate 1 , 23
        Wotag = Dayofweek()
        Lcd Lookupstr(wotag , Wochentag) ; ". "
        Lcd Date$
      End If
    
    End Sub
    '---------------------- Interrupt Routine DCF77 ----------------------------
    
    Tim0_isr:
      Timer0 = Startwert
      Call Dcf77
    Return
    
    '###########################################################################
    'Programm Ende:
    
    End
    
    '---------------------- Daten für Wochentag --------------------------------
    Wochentag:
    Data "Mo" , "Di" , "Mi" , "Do" , "Fr" , "Sa" , "So"
    
    '###########################################################################
    Code:
    copyright    = W.Krueger
    comment      = DCF 77 Decoder 
    libversion   = 2.00 (D. Ottensmeyer) 
    date         = 09.04.2006 
    statement    = ---------------------------------- 
    statement    = muss alle 25ms ausgeführt werden ! 
    statement    = ---------------------------------- 
    
    [Dcf77]
    Dcf77:
    .equ DCF_Port = $16    ;$16 = Pinb
    .equ DCF_Pin = 1       ;1 = Pin 1
    
    .equ Imp0min = 70      ;minimale Länge des Minutenimpulses 
    .equ Imp1min = 6       ;minimale Länge des "1" Impulses
                           ;alles darunter wird als "0" Impuls gewertet 
    .def Temp1   = r16 
    .def Temp2   = r17 
    .def Temp3   = r18 
    .def Minute  = r19 
    .def Stunde  = r20 
    .def Status  = r21 
                  ;Bit0 = aktueller DCF Status 
                  ;Bit1 = vorheriger DCF Status 
                  ;Bit2 = Uhr synchronisieren 
                  ;Bit3 = 59 Impulse empfangen 
                  ;Bit4 = Parität OK 
                  ;Bit5 = Uhr wurde 1x gestellt 
                  ;Bit7 = Uhr nach DCF stellen 
    .def Impuls  = r22 
    .def Zaehler = r23 
    .def Buffer  = r24 
    .def Pari    = r25 
    ;------------------------------------ 
     *lds Status,{Status}         ;Status laden 
      rcall Softuhr               ;Softuhr bearbeiten 
      bst Status,7                ;Status Uhr nach DCF stellen ? 
      brts Puls0                  ;ja -> weiter 
     *sts {Status},Status 
      ret 
    Puls0: 
     *lds Impuls,{Impuls}         ;Variablen laden 
     *lds Zaehler,{Zaehler} 
     *lds Buffer,{Buffer} 
     *lds Pari,{Pari}    
      in temp1,Dcf_Port           ;DCF Port lesen 
      bst temp1,Dcf_Pin           ;Status holen 
      bld Status,0                ;aktuellen Status speichern 
      inc Zaehler                 ;Impulslänge erhöhen 
      bst Status,0                ;akuellen Status prüfen 
      brts Puls20                 ;Status Low -> weiter 
      bst Status,1                ;vorherigen Status prüfen 
      brtc Puls40                 ;vorheriger Status Low -> Ende 
      ldi temp1,Imp0min           ;Minutenimpuls Minimalwert laden 
      cp Zaehler,temp1            ;Impulslänge Minimalwert überschritten 
      brcs Puls10                 ;nein -> weiter 
     *sts {Pau},Zaehler           ;--------> Minutenimpulslänge speichern für Debug 
      clr Buffer                  ;Empfangspuffer löschen 
      clr Impuls                  ;Impulszähler löschen 
      bst Status,4                ;Parität OK ? 
      brtc Puls5                  ;Nein -> weiter 
      bst Status,3                ;59 Impulse empfangen ? 
      brtc Puls5                  ;Nein -> weiter 
      set 
      bld Status,2                ;Status Uhr synchronisieren setzen 
    Puls5: 
      clt 
      bld Status,3                ;Status 59 Impulse löschen 
      bld Status,4                ;Status Parität OK löschen 
    Puls10: 
      clr Zaehler                 ;Impulslänge löschen 
      rjmp Puls40                 ;Ende 
    Puls20: 
      bst Status,1                ;vorherigen Status prüfen 
      brts Puls40                 ;vorheriger Status Low -> Ende 
      ldi temp1,Imp1min           ;Minimalwert für "1" Impuls laden 
      cp Zaehler,temp1            ;Minimalwert unterschritten ? 
      brcs Puls30                 ;ja -> weiter 
     *sts {imp},Zaehler           ;--------> Impulslänge Height speichern für Debug 
      cpi Impuls,28               ;beim Paritätsbit Min keine Negation 
      breq Puls25 
      cpi Impuls,35               ;beim Paritätsbit Std keine Negation 
      breq Puls25 
      ldi Temp1,1 
      eor Pari,Temp1              ;Paritätsbit Negation 
    Puls25: 
      sec                         ;Carry setzen ( "1" empfangen ) 
      ror Buffer                  ;Carry in Empfangspuffer 
      inc Impuls                  ;Impulszähler erhöhen 
      rcall Auswerten             ;Impulse auswerten 
      rjmp Puls40                 ;Ende 
    Puls30: 
     *sts {imp},Zaehler           ;--------> Impulslänge Low speichern für Debug 
      clc                         ;Carry löschen ( "0" empfangen ) 
      ror Buffer                  ;Carry in Empfangspuffer 
      inc Impuls                  ;Impulszähler erhöhen 
      rcall Auswerten             ;Impulse auswerten 
    Puls40: 
      bst Status,0                ;aktuellen Status holen 
      bld Status,1                ;Status speichern 
     *sts {Status},Status         ;Variablen wieder speichern 
     *sts {Impuls},Impuls 
     *sts {Zaehler},Zaehler 
     *sts {Buffer},Buffer 
     *sts {Pari},Pari 
      ret 
    ;------------------------------------------------------------------------------- 
    Softuhr: 
     *lds Temp1,{H_Sek} 
     *lds Temp2,{_sec} 
     *lds Minute,{_min}        
     *lds Stunde,{_hour} 
      bst Status,2                ;Status Uhr synchronisieren ? 
      brtc Soft10                 ;nein -> weiter Softuhr 
      clt 
      bld Status,2                ;Status Synchron löschen 
      bst Status,7                ;Status Uhr nach DCF stellen ? 
      brtc Soft10                 ;nein -> nicht neu stellen 
      set 
      bld Status,5                ;Status Uhr 1x gestellt setzen 
      clr Temp1                   ;Hundertstel löschen 
      clr Temp2                   ;Sekunde löschen 
     *lds Minute,{T_Min}          ;Minute auf empfangene Minute 
     *lds Stunde,{T_Std}          ;Stunde auf empfangene Stunde 
      rjmp Soft20                 ;empfangene Zeit übernehmen 
    Soft10: 
      inc Temp1                   ;Hundertstel Sek erhöhen 
      cpi Temp1,40                ;1000ms erreicht ? 
      brne Soft20                 ;nein -> Ende 
      clr Temp1                   ;Hundertstel Sek löschen 
      inc Temp2                   ;Sekunde erhöhen 
      cpi Temp2,60                ;60 Sekunden erreicht ? 
      brne Soft20                 ;nein -> Ende 
      clr Temp2                   ;Sekunde löschen 
      inc Minute                  ;Minute erhöhen 
      cpi Minute,60               ;60 Minuten erreicht ? 
      brne Soft20                 ;nein -> Ende 
      clr Minute                  ;Minute löschen 
      inc Stunde                  ;Stunde erhöhen 
      cpi Stunde,24               ;24 Stunden erreicht ? 
      brne Soft20                 ;nein -> Ende 
      clr Stunde                  ;Stunde löschen 
     *lds Temp3,{_day} 
      inc Temp3                   ;Tag erhöhen 
      cpi Temp3,29                ;Tag 29 erreicht ? 
      brlo Soft19                 ;bis 28 -> Ende 
      clt                         ;ab 29  -> Hat Monat 29,30,31 Tage ? 
      bld Status,5                ;Status Uhr 1x gestellt löschen 
    ;  set                         ;Datum nach DCF stellen ! 
    ;  bld Status,7                ;Status Uhr nach DCF stellen setzen 
      cpi Temp3,32                ;Tag 32 erreicht ? 
      brne Soft19                 ;nein -> Ende 
      ldi Temp3,1                 ;Tag 1 setzen 
     *sts {_day},Temp3 
     *lds Temp3,{_month} 
      inc Temp3                   ;Monat erhöhen 
      cpi Temp3,13                ;Monat 13 erreicht ? 
      brne Soft18                 ;nein -> Ende 
      ldi Temp3,1                 ;Monat 1 setzen 
     *sts {_month},Temp3 
     *lds Temp3,{_year} 
      inc Temp3                   ;Jahr erhöhen 
      cpi Temp3,100               ;Jahr 100 erreicht ? 
      brne Soft17                 ;nein -> Ende 
      clr Temp3                   ;Jahr 00 setzen 
    Soft17: 
     *sts {_year},Temp3 
      rjmp Soft20 
    Soft18: 
     *sts {_month},Temp3 
      rjmp Soft20 
    Soft19: 
     *sts {_day},Temp3 
    Soft20: 
     *sts {H_Sek},Temp1 
     *sts {_sec},Temp2 
     *sts {_min},Minute 
     *sts {_hour},Stunde  
      ret 
    ;------------------------------------------------------------------------------- 
    Auswerten: 
      cpi Impuls, 21              ;21. Impuls 
      brne Aus10                  ;nein -> weiter 
      clr Buffer 
      clr Pari          
    Aus10:          
      cpi Impuls, 28             ;28. Impuls 
      brne Aus15                 ;nein -> weiter 
      lsr Buffer                 ;Buffer 1x schieben, da Minute nur 7 Bit 
      rcall Bcd2dez              ;in Dezimal wandeln 
     *sts {T_Min},Buffer         ;Temp Minute schreiben 
      clr Buffer    
    Aus15: 
      cpi Impuls, 29             ;Minuten Parität 
      brne Aus20 
      clr Temp3 
      bst Buffer,7               ;Paritätsbit selektieren 
      bld Temp3,0                ;Paritätsbit in Temp3 Bit0 kopieren 
      cp Temp3,Pari              ;Parität überprüfen 
      brne Aus26                 ;Fehler -> Ende 
      clr Pari 
      clr Buffer 
    Aus20:  
      cpi Impuls, 35             ;35. Impuls 
      brne Aus25                 ;nein -> weiter 
      lsr Buffer                 ;Buffer 2x schieben, da Stunde nur 6 Bit 
      lsr Buffer 
      rcall Bcd2dez              ;in Dezimal wandeln 
     *sts {T_Std},Buffer         ;Temp Stunde schreiben 
      clr Buffer 
    Aus25: 
      cpi Impuls, 36             ;Stunden Parität 
      brne Aus30 
      clr Temp3 
      bst Buffer,7               ;Paritätsbit selektieren 
      bld Temp3,0                ;Paritätsbit in Temp3 Bit0 kopieren 
      cp Temp3,Pari              ;Parität überprüfen 
      breq Aus27                 ;Pari OK -> weiter 
    Aus26: 
      ret                        ;Fehler -> Ende 
    Aus27: 
      set                        ;T-Bit setzen 
      bld Status,4               ;Bit4 Status setzen (Parität) 
      clr Buffer  
    Aus30:                
      cpi Impuls,42              ;42. Impuls 
      brne Aus40          
      lsr Buffer                 ;Buffer 2x schieben, da Tag nur 6 Bit 
      lsr Buffer          
      rcall Bcd2dez              ;in Dezimal wandeln 
     *sts {_day},Buffer          ;Tag schreiben 
      clr Buffer      
    Aus40:        
      cpi Impuls,45              ;45. Impuls 
      brne Aus50 
      lsr Buffer                 ;Buffer 5x schieben, da Wochentag nur 3 Bit 
      lsr Buffer            
      lsr Buffer            
      lsr Buffer                
      lsr Buffer          
      rcall Bcd2dez             ;in Dezimal wandeln 
     *sts {WoTag},Buffer        ;Wochentag schreiben 
      clr Buffer    
    Aus50: 
      cpi Impuls,50             ;50. Impuls 
      brne Aus60            
      lsr Buffer                ;Buffer 3x schieben, da Monat nur 5 Bit 
      lsr Buffer          
      lsr Buffer          
      rcall Bcd2dez             ;in Dezimal wandeln 
     *sts {_month},Buffer       ;Monat schreiben 
      clr Buffer          
    Aus60:            
      cpi Impuls,58             ;58. Impuls 
      brne Aus70          
      rcall Bcd2dez             ;in Dezimal wandeln 
     *sts {_year},Buffer        ;Jahr schreiben 
      clr Buffer      
    Aus70: 
      cpi Impuls,59             ;59. Impuls 
      brne Aus80          
      set                       ;T-Bit setzen 
      bld Status,3              ;Bit3 Status setzen (59 Impulse) 
    Aus80: 
      cpi Impuls,60             ;bei mehr als 59 Impulsen (Störimpulse) 
      brne Aus90          
      clt                       ;T-Bit löschen 
      bld Status,3              ;Bit3 Status löschen (59 Impulse) 
      bld Status,4              ;Bit4 Status löschen (Parität)  
    Aus90: 
      ret 
    ;------------------------------------------------------------------------------- 
    Bcd2dez: 
      mov Temp1,Buffer 
      andi Temp1,$0F 
    Bcd10: 
      subi Buffer,$10 
      brcs Bcd20 
      subi Temp1,$F6 
      rjmp Bcd10 
    Bcd20: 
      mov Buffer,Temp1 
      ret 
    [end]
    Das DCF-Modul Klemme 1=Gnd, 2=5V, 3=Frei, 4= pinb.1
    Kein wiederstand !
    brauch auch keinen Uhrenquarz
    hast Du auch mit myAVRquikProg das Fusebit verstellt.
    Guß raggy

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    16.03.2007
    Beiträge
    27
    Hallo,

    ich habe das gleiche Problem. Die Meldung:

    Error: 261 Line: 0 Array expected [DCF77BUFFER], in File:

    Woran könnte das bitte liegen? Hat es jemand von Euch herausbekommen?

    Gruß

    Richard


    Zitat Zitat von kwalter
    @Dirk

    Hallo Dirk,

    habe alles genau wie im Wiki beschrieben, in die einzelnen Dateien gespeichert, wenn ich die Decodertest.bas compilieren will bekomme ich
    folgende Fehlermeldung:

    Error: 261 Line: 0 Array expected [DCF77BUFFER], in File:

    Benutze die Bascom Version 1.11.8.3 Build 010 als Vollversion
    IDE Version 1.11.8.4

    Was mache ich da falsch??

    Gruß
    kwalter

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Array

    Hallo Leute,

    Error: 261 Line: 0 Array expected [DCF77BUFFER], in File:
    Diese Fehlermeldung hat mich auch genervt. Ihre Ursache konnte ich nicht herausfinden, weil das Array ordnungsgemäß definiert ist.

    Auf jeden Fall wird alles korrekt kompiliert und läuft.

    Gruß Dirk

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    17.09.2006
    Beiträge
    11
    Hier mal meine Funkuhr mit dem Conrad Modul + Thermometer DS1820.


    Bild hier  

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    16.03.2007
    Beiträge
    27
    Hallo,

    verwendest Du die Library 4.0 ?

    Könntest Du mir eventuell die Codes senden?

    auf

    flexoprint@gmx.net


    Gruß

    Richard

    [quote="matlen"]Hier mal meine Funkuhr mit dem Conrad Modul + Thermometer DS1820.

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    16.03.2007
    Beiträge
    27
    Hallo,

    Die 4-er Version geht bs auf die blöde Meldung des Compilers einwandfrei. Die muss man einfach ignorieren.

    Viele Grüße

    Rici

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Zitat Zitat von albundy
    Hallo Martin,

    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
    Angehängte Dateien Angehängte Dateien

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test