- Labornetzteil AliExpress         
Seite 14 von 21 ErsteErste ... 41213141516 ... LetzteLetzte
Ergebnis 131 bis 140 von 204

Thema: Library für DCF77 Dekodierung

  1. #131
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi,

    also heute habe ich eine neue DCF Platine erhalten.
    Mit der geht es auch nicht, also scheint es da dran nicht zu liegen.

    Ich habe das Programmiert:
    Code:
     
      If Pind.2 = 1 Then
      Portb.0 = 1
      Else
      Portb.0 = 0
      End If
    jetzt flackert die LED.
    Für ne halbe Sekunde geht die LED aus, dann blinkt die wieder.

    Wo muß man an dem Conradteil den Ausgang anklemmen?
    Habe es an beiden schon probiert, nirgend geht es.
    Code:
    If Sekunde <> _sec Then
        'Cls
        Call Showtime()
        Sekunde = _sec
      End If
    Genügt das das die Uhr sich stellt?

    Könnte ich vielleicht von jemand die .lib bekommen? Vielleicht stimmt da ja was nicht.

  2. #132
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Trexis5,

    wenn's blinkt, dann funktioniert der Empfänger. Die kurze Pause müßte 1x pro Minute kommen und ist das Ende eines Minutentelegramms.
    Der sog. invertierte Ausgang des CONRAD-Empfängers ist Klemme 4.

    Hier noch die Lib, aber mit Pind.3 als Eingang.

    Code:
    copyright    = D. Ottensmeyer
    comment      = DCF77-Decoder und Softclock
    libversion   = 4.00
    date         = 25.11.2006
    statement    = ---------------------------------
    statement    = Komplette Paritätsprüfung
    statement    = Auswertung der DCF77-Bits 15..20
    statement    = NEU: DCF77-Bit 20 - Prüfung!
    statement    = NEU: Schaltsekunde decodiert!
    statement    = NEU: DCF77-Bits 0..14 erfasst!
    statement    = NEU: Plausibilitäts-Check!
    statement    = NEU: Validitäts-Zähler!
    statement    = ---------------------------------
    
    [Dcf77_soft]
    ;Eingang für DCF77-Empfänger-Anschluss:
    .equ PIND    = &H10    ;Pind
    .equ PIND3   = 3       ;3 = Pin 3
    
    ;Timer-Interruptfrequenz:
    .equ ISR_freq = 40     ;40 Hz
    
    ;Grenzwerte für Pausenzeit-Zähler (/ ISR_freq [s]):
    .equ LastBit0Max = 79  ;LastBit 0 obere Zeitgrenze + 1
    .equ LastBit_Mid = 75  ;LastBit-Grenze
    .equ LastBit1Min = 71  ;LastBit 1 untere Zeitgrenze
    .equ DataBit0Max = 39  ;Datenbit 0 obere Zeitgrenze + 1
    .equ DataBit_Mid = 35  ;Datenbit-Grenze
    .equ DataBit1Min = 31  ;Datenbit 1 untere Zeitgrenze
    .equ Spike_Limit =  3  ;Störimpulsgrenze
    
    ;Validitäts-Zähler Limit:
    .equ Val_Limit   =  1  ;Jedes Telegramm ist gültig
    
    .def Status   = r16
                   ;Bit0 = 15. Impuls erreicht 
                   ;Bit1 = Minutenparität OK
                   ;Bit2 = Stundenparität OK
                   ;Bit3 = Parität OK
                   ;Bit4 = 58 Impulse empfangen
                   ;Bit5 = Gültiges DCF77-Telegramm
                   ;Bit6 = Softclock nach DCF gestellt
                   ;Bit7 = DCF-Decoder EIN
    .def Counter  = r17
    .def Parity   = r18
    .def Impulse  = r19
    .def Shifter  = r20
    
    Dcf77_soft:
     *lds Status,{Dcfstatus}      ;Status laden
      rcall Softclock             ;Softclock bearbeiten  
      rjmp dcf77_start
    ;-------------------------------------------------------------------------------
    [Dcf77]
    $EXTERNAL Dcf77_soft
    
    Dcf77:
     *lds Status,{Dcfstatus}      ;Status laden
    dcf77_start:
     *lds Counter,{DCF77Counter}  ;Pausenzeit-Zähler laden
     *lds Parity,{DCF77Parity}    ;Fehler-Flag + 1-Zähler laden
      sbis PIND,PIND3             ;Input-Pin für DCF-Empfänger
      rjmp dcf77_5                ;low:  Bit auswerten!
      inc Counter                 ;high: Pausenzeit zählen!
      brne dcf77_3
    dcf77_1:
      sbr Parity,&B10000000       ;Fehler-Flag setzen
     *sts {DCF77Parity},Parity
      andi Status,&B11000000      ;Statusbits 0..5 löschen  
    dcf77_2:
      clr Counter                 ;Pausenzeit-Zähler zurücksetzen
    dcf77_3:
     *sts {DCF77Counter},Counter
     *sts {Dcfstatus},Status
    dcf77_4:
      ret
    
    dcf77_5:
      tst Counter                 ;Auswertung fertig?
      breq dcf77_4                ;ja: Ende!
     *lds Impulse,{DCF77Impulse}  ;nein: Auswerten!
     *lds Shifter,{DCF77Shifter}
     *lds ZL,{DCF77TAL}
     *lds ZH,{DCF77TAH}
      cpi Counter,LastBit0Max     ;LastBit 0 obere Zeitgrenze + 1
      brsh dcf77_1                ;überschritten: Fehler
      cpi Counter,LastBit_Mid     ;LastBit-Grenze
      brlo dcf77_6 
      rjmp dcf77_20               ;75..78 = LastBit0
    dcf77_6:
      cpi Counter,LastBit1Min     ;LastBit 1 untere Zeitgrenze
      brlo dcf77_7
      rjmp dcf77_19               ;71..74 = LastBit1
    dcf77_7:
      sbrc Parity,7               ;wenn Fehler aufgetreten, ...
      rjmp dcf77_2                ;... dann Abbruch!
    
      cpi Counter,Spike_Limit     ;Störimpulsgrenze
      brlo dcf77_2                ;Störimpuls wird ignoriert
      cpi Counter,DataBit0Max     ;Datenbit 0 obere Zeitgrenze + 1
      brsh dcf77_1                ;überschritten: Fehler
      cpi Counter,DataBit1Min     ;Datenbit 1 untere Zeitgrenze
      brlo dcf77_1                ;unterschritten: Fehler
     *sts {DCF77Databit},Counter  ;DataBit0/1-Pausenlänge für Debug
      cpi Counter,DataBit_Mid     ;Datenbit-Grenze
      brlo dcf77_8                ;Bit1!
    
      cpi Impulse,20              ;DataBit = 0 (35..38):
      breq dcf77_2                ;Bit 20 = 0: Abbruch!
      cpi Impulse,58              ;P3 (= 0) bei Schaltsekunde?
      breq dcf77_2                ;Abbruch: LastBit 59 (= 0) folgt!
      rjmp dcf77_10               ;andere 0-Bits: weiter
    
    dcf77_8:                      ;DataBit = 1 (31..34):
      cpi Impulse,21              ;DCF77-Bits 0..20 (= 1)?
      brlo dcf77_9                ;keine Parität!
      inc Parity                  ;sonst alle 1-Bits zählen
     *sts {DCF77Parity},Parity
      cpi Impulse,28
      breq dcf77_10               ;Minutenparitätsbit nicht addieren!
      cpi Impulse,35
      breq dcf77_10               ;Stundenparitätsbit nicht addieren!
      cpi Impulse,58              ;P3 (= 1) bei Schaltsekunde?
      breq dcf77_2                ;Abbruch: LastBit 59 (= 0) folgt!
    dcf77_9:
      ld Counter,Z                ;Counter = aktuelle DCF77Buffer Zelle
      add Counter,Shifter         ;addiere 1 an der aktuellen Bitposition
      st Z,Counter                ;zurückspeichern
    
    dcf77_10:
      lsl Shifter                 ;Shifter auf nächste Bitposition
     *sts {DCF77Shifter},Shifter
      cpi Impulse,7
      brlo dcf77_16               ;DCF77-Bits 0..7 Zyklus
      breq dcf77_15               ;letztes Bit 0..7 Zyklus
      cpi Impulse,14
      brlo dcf77_16               ;DCF77-Bits 8..14 Zyklus
      brne dcf77_11
      andi Status,&B11000111      ;Statusbits 3..5 löschen
      sbr Status,&B00000001       ;Status 15. Impuls erreicht setzen
      rjmp dcf77_15               ;letztes Bit 8..14 Zyklus
    dcf77_11:
      cpi Impulse,20
      brlo dcf77_16               ;DCF77-Bits 15..20 Zyklus
      breq dcf77_15               ;letztes Bit (DCF77-Bit 20)
      cpi Impulse,28
      brlo dcf77_16               ;Minuten-Zyklus 
      breq dcf77_17               ;Minutenparität
      cpi Impulse,35
      brlo dcf77_16               ;Stunden-Zyklus
      breq dcf77_17               ;Stundenparität
      cpi Impulse,41
      brlo dcf77_16
      breq dcf77_12               ;letztes Bit TAG
      cpi Impulse,44
      brlo dcf77_16
      breq dcf77_12               ;letztes Bit WOCHENTAG
      cpi Impulse,49
      brne dcf77_16               ;nicht letztes Bit MONAT
    dcf77_12:                     ;DCF77Buffer Zelle in DEZ wandeln:
      ld Counter,Z                ;Counter = aktuelle DCF77Buffer Zelle
      mov Shifter,Counter         ;Counter (BCD)
      andi Shifter,&H0F
    dcf77_13:
      subi Counter,&H10
      brcs dcf77_14
      subi Shifter,&HF6
      rjmp dcf77_13
    dcf77_14:                     ;-> Shifter (DEZ)
      st Z,Shifter                ;DEZ in Zelle zurückspeichern
    dcf77_15:                     ;aktuelle DCF77Buffer Zelle fertig:
      ldi Shifter,1               ;Bitposition zurücksetzen
      adiw ZL,1                   ;nächste DCF77Buffer Zelle
     *sts {DCF77Shifter},Shifter
     *sts {DCF77TAL},ZL           ;Adresse der nächsten Zelle speichern
     *sts {DCF77TAH},ZH
    dcf77_16:
      inc Impulse                 ;nächstes DCF77-Bit
     *sts {DCF77Impulse},Impulse
      rjmp dcf77_2									
    
    dcf77_17:                     ;Parität Min./Std. Auswertung:
      sbrc Parity,0
      rjmp dcf77_2                ;Parität Fehler: Abbruch!
      cpi Impulse,28              ;Minutenparität?
      brne dcf77_18               ;nein: Stundenparität (35)
      sbr Status,&B00000010       ;Status Minutenparität OK setzen
      rjmp dcf77_12
    dcf77_18:
      sbr Status,&B00000100       ;Status Stundenparität OK setzen
      rjmp dcf77_12               ;Parität Min./Std. OK
    
    dcf77_19:                     ;Telegramm Ende:
      inc Parity                  ;LastBit = 1
    dcf77_20:                     ;LastBit = 0
     *sts {DCF77Lastbit},Counter  ;LastBit0/1-Pausenlänge für Debug
      cpi Impulse,58              ;58 DCF77-Bits erfasst?
      brne dcf77_21               ;unvollständig: weiter
      sbr Status,&B00010000       ;ja: Status 58 Impulse empfangen setzen
    dcf77_21:
      andi Parity,&B10000001
      brne dcf77_22               ;Paritäts- oder sonst. Fehler aufgetreten?
      sbr Status,&B00001000       ;nein: Status Parität OK setzen
    dcf77_22:
      mov Counter,Status
      andi Counter,&B00011111     ;Status Bits 0..4?
      cpi Counter,&B00011111      ;alle 5 Bits = 1?
      breq dcf77_24
    dcf77_23:
      clr Shifter                 ;Validitäts-Zähler zurücksetzen
      rjmp dcf77_25               ;Fehler: Softclock NICHT stellen!
    
    dcf77_24:                     ;Plausibilitäts-Check:
      ld Counter,Z                ;Jahr (0..99)
      cpi Counter,100
      brsh dcf77_23               ;> 99: Nicht plausibel!
      ld Counter,-Z               ;Monat (1..12)
      tst Counter
      breq dcf77_23
      cpi Counter,13
      brsh dcf77_23
      ld Counter,-Z               ;Wochentag (1..7)
      tst Counter
      breq dcf77_23
      cpi Counter,8
      brsh dcf77_23
      ld Counter,-Z               ;Tag (1..31)
      tst Counter
      breq dcf77_23
      cpi Counter,32
      brsh dcf77_23
      ld Counter,-Z               ;Stunde (0..23)
      cpi Counter,24
      brsh dcf77_23
      ld Counter,-Z               ;Minute (0..59)
      cpi Counter,60
      brsh dcf77_23
      adiw ZL,5                   ;Pufferzeiger auf Jahr zurücksetzen
      sbr Status,&B00100000       ;Status Gültiges DCF77-Telegramm setzen
    
     *lds Shifter,{DCF77Val_cnt}  ;Validitäts-Zähler laden
      inc Shifter                 ;Zähler erhöhen
      cpi Shifter,Val_Limit       ;Stand Validitäts-Zähler?
      brlo dcf77_25               ;< Val_Limit: Softclock NICHT stellen!
      ldi Shifter,Val_Limit       ;Zähler wird nicht > Val_Limit!
    
      sbrs Status,7               ;Status DCF-Decoder EIN/AUS?
      rjmp dcf77_25               ;AUS: Softclock NICHT stellen!
    
      ;Softclock nach DCF stellen:
      loadadr _year,X             ;Zeiger auf Softclock-Variablen
      ld Counter,Z                ;Jahr = DCF77Buffer(9)
      st X,Counter                ;in _year sichern
      ld Counter,-Z               ;Monat = DCF77Buffer(8)
      st -X,Counter               ;in _month sichern
      ld Counter,-Z               ;Wochentag = DCF77Buffer(7)
     *sts {_dayofweek},Counter    ;in _dayofweek sichern
      ld Counter,-Z               ;Tag = DCF77Buffer(6)
      st -X,Counter               ;in _day sichern        
      ld Counter,-Z               ;Stunde = DCF77Buffer(5)
      st -X,Counter               ;in _hour sichern
      ld Counter,-Z               ;Minute = DCF77Buffer(4)
      st -X,Counter               ;in _min sichern
      clr Counter
      st -X,Counter               ;_sec zurücksetzen
     *sts {Dcf77hsec},Counter     ;Sek.-Bruchteile zurücksetzen
      ld Counter,-Z               ;DCF77-Bits 15..20 = DCF77Buffer(3)
     *sts {Dcfflags},Counter      ;in Dcfflags sichern
      ld Counter,-Z               ;DCF77-Bits 8..14 = DCF77Buffer(2)
     *sts {Dcf77bits8_14},Counter ;in Dcf77bits8_14 sichern
      ld Counter,-Z               ;DCF77-Bits 0..7 = DCF77Buffer(1)
     *sts {Dcf77bits0_7},Counter  ;in Dcf77bits0_7 sichern
      sbr Status,&B01000000       ;Status Softclock nach DCF gestellt setzen
    
    dcf77_25:
      andi Status,&B11111000      ;Statusbits 0..2 löschen
      rjmp dcf77_26
    
    ;-------------------------------------------------------------------------------
    [Dcf77_init]
    $EXTERNAL Dcf77_soft
    
    Dcf77_init:                   ;DCF77-Variablen Reset
      clr Shifter                 ;Validitätszähler zurücksetzen
      andi Status,&B11000000      ;Statusbits 0..5 löschen  
    dcf77_26:
     *sts {Dcfstatus},Status      ;Status speichern
     *sts {DCF77Val_cnt},Shifter  ;Validitäts-Zähler speichern
      loadadr DCF77Buffer,Z       ;Adresse DCF77Buffer
      mov Parity,ZL
      mov Impulse,ZH
      loadadr DCF77Counter,Z      ;Adresse DCF77Counter
      ldi Counter,12
      clr Shifter
    dcf77_27:                     ;DCF77Counter..DCF77Buffer = 0
      st Z+,Shifter
      dec Counter
      brne dcf77_27
      inc Counter
      st Z+,Counter               ;DCF77Shifter = 1
      st Z+,Parity                ;Adresse DCF77Buffer -> DCF77TAL/AH
      st Z,Impulse
      ret
    
    ;BASCOM-Variablen für die Dcf77.lib:
    ;DCF77counter:   Pausenzeit-Zähler
    ;DCF77parity:    Fehler-Flag (Bit 7) + 1-Bit-Zähler
    ;DCF77impulse:   Aktuelle DCF77-Bitnummer
    ;DCF77buffer(9): Zeit-Zwischenspeicher
    ;(Inhalt: DCF77-Bits 0..7, DCF77-Bits 8..14, DCF-Flags (= DCF77-Bits 15..20),
    ;         Minute, Stunde, Tag, Wochentag, Monat, Jahr)
    ;DCF77shifter:   Bitposition in der aktuellen DCF77Buffer Zelle
    ;DCF77tal:       Zeiger (low) auf die aktuelle DCF77Buffer Zelle
    ;DCF77tah:       Zeiger (high) auf die aktuelle DCF77Buffer Zelle
    ;Dcf77hsec:      Sekunden-Bruchteile
    ;Dcf77bits0_7:   DCF77-Bits 0..7
    ;Dcf77bits8_14:  DCF77-Bits 8..14
    ;Dcf77val_cnt:   Validitäts-Zähler
    ;Dcf77lastbit:   LastBit-Pausenlänge für Debug
    ;Dcf77databit:   DataBit-Pausenlänge für Debug
    
    ;-------------------------------------------------------------------------------
    Softclock:
     *lds Counter,{Dcf77hsec}
      inc Counter                 ;Sek.-Bruchteile erhöhen
      cpi Counter,ISR_freq        ;1000ms = 1s erreicht?
      breq Soft_10                ;ja: weiter
     *sts {Dcf77hsec},Counter
      ret                         ;sonst Ende
    Soft_10:
      clr Counter                 ;Sek.-Bruchteile löschen
     *sts {Dcf77hsec},Counter
     *lds Counter,{_sec}
      inc Counter                 ;Sekunde erhöhen
      cpi Counter,60              ;60 Sekunden erreicht?
      breq Soft_20                ;ja: weiter
     *sts {_sec},Counter
      ret
    Soft_20:
      clr Counter                 ;Sekunde löschen
     *sts {_sec},Counter
     *lds Counter,{_min}       
      inc Counter                 ;Minute erhöhen
      cpi Counter,60              ;60 Minuten erreicht?
      breq Soft_30                ;ja: weiter
     *sts {_min},Counter
      ret
    Soft_30:
      clr Counter                 ;Minute löschen
     *sts {_min},Counter
     *lds Counter,{_hour}
      inc Counter                 ;Stunde erhöhen
      cpi Counter,24              ;24 Stunden erreicht?
      breq Soft_40                ;ja: weiter
     *sts {_hour},Counter  
      ret
    Soft_40:
      clr Counter                 ;Stunde löschen
     *sts {_hour},Counter
     *lds Counter,{_dayofweek}
      inc Counter                 ;Wochentag erhöhen
      cpi Counter,8               ;letzter Wochentag erreicht?
      brne Soft_50                ;nein: weiter
      ldi Counter,1               ;Wochentag auf "1" (Montag)
    Soft_50:
     *sts {_dayofweek},Counter
     *lds Counter,{_day}          ;Tag holen
     *lds Shifter,{_month}        ;Monat holen
      ldi zl,low(Daysofmonth*2)
      ldi zh,high(Daysofmonth*2)  ;Anzahl Tage pro Monat holen
      add zl,Shifter              ;Zeiger auf aktuellen Monat
      lpm                         ;Anzahl Tage holen
      cp Counter,r0               ;Monatsende erreicht?
      brne Soft_90                ;nein: weiter
      cpi Shifter,2               ;Monatsende Februar (wg. Schaltjahr)?
      brne Soft_60                ;nein: weiter
      cbr Status,&B01000000       ;Status Softclock nach DCF gestellt löschen
    Soft_60:
      cpi Shifter,6               ;Monatsende Juni (wg. Schaltsekunde)?
      brne Soft_70                ;nein: weiter
      cbr Status,&B01000000       ;Status Softclock nach DCF gestellt löschen
    Soft_70:
      ldi Counter,1               ;Tag auf 1
      cpi Shifter,12              ;Jahresende (+ wg. Schaltsekunde)?
      brne Soft_100               ;nein: weiter
      cbr Status,&B01000000       ;Status Softclock nach DCF gestellt löschen
     *lds Shifter,{_year}         ;Jahr holen
      inc Shifter                 ;Jahr erhöhen
      cpi Shifter,100             ;Jahr 100 erreicht?
      brne Soft_80                ;nein: Ende
      clr Shifter                 ;Jahr 00 setzen
    Soft_80:
     *sts {_year},Shifter         ;speichern
      ldi Shifter,1               ;Monat auf 1
      rjmp Soft_110  
    Soft_90:
      inc Counter                 ;Tag erhöhen
      rjmp Soft_110                 
    Soft_100:
      inc Shifter                 ;Monat erhöhen
    Soft_110:
     *sts {_day},Counter          ;Datum speichern
     *sts {_month},Shifter    
      ret
    
    Daysofmonth:
    .db 00, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31  
    [end]
    Gruß Dirk

  3. #133
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    Hi,

    könntest du noch bitte die "dcf77_soft.bas" posten?
    Weil mit der lib geht es auch noch nicht.
    Ich bin noch am Verzweifeln.

    So sieht momentan meine Wetterstation aus. Alles geht, außer der blöden DCF77 Funktion.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken wetterstation_trexis5_1.jpg  

  4. #134
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Code:
    '###########################################################################
    'Programmname: DCF77_soft.BAS
    'Aufgabe:
    'Include-Programm für die dcf77.lib ab Version 4.00
    '
    'Hardware:
    'M32 mit 8 MHz
    'Es ist ein DCF-Empfänger (CONRAD 641138) an Portd.3 angeschlossen.
    
    '###########################################################################
    
    Config Date = Dmy , Separator = .                 'deutsches Datumsformat
    Config Clock = User                               'Softclock aktivieren
    
    $lib "dcf77_V400.lib"                             'LIB für DCF77
    $external Dcf77_init
    Declare Sub Dcf77_init
    $external Dcf77_soft
    Declare Sub Dcf77_soft
    
    Config Timer2 = Timer , Prescale = 1024           'Timer 40Hz
    Const Startwert = 61                              'Für 8MHz
    Timer2 = Startwert
    On Timer2 Tim2_isr                                'Überlauf 40x/s
    Enable Interrupts
    Enable Timer2
    
    '---------------------- Pin für DCF Eingang definieren ---------------------
    'Jeder Portpin kann benutzt werden.
    'Auch in der "dcf77.lib" entsprechend anpassen !!!
    
    Config Pind.3 = Input                             'DCF77 Eingang
    Set Portd.3                                       'Pullup ein
    
    '--------------------- Variablen der dcf77.lib -----------------------------
    
    Dim _dayofweek As Byte , Dcfstatus As Byte , Dcfflags As Byte
    '_dayofweek -> 1..7 (Mo..So)
    'Dcfstatus  -> Bit0: 15. Impuls erreicht  Bit4: 58 Impulse empfangen
    '              Bit1: Minutenparität OK    Bit5: Gültiges DCF77-Telegramm
    '              Bit2: Stundenparität OK    Bit6: Softclock nach DCF gestellt
    '              Bit3: Parität OK           Bit7: DCF-Decoder EIN
    '              ACHTUNG: Bits 0..5 NUR LESEN!!!
    'Dcfflags   -> Bit0 (R) : Rufbit für Alarmierung der PTB-Mitarbeiter
    '              Bit1 (A1): Ankündigung des Wechsels MEZ <-> MESZ
    '              Bit2 (Z1): \__ Z1/Z2: 10 = MESZ, 01 = MEZ
    '              Bit3 (Z2): /
    '              Bit4 (A2): Ankündigung einer Schaltsekunde
    '              Bit5 (S) : Startbit f. Zeitinformationen (immer 1)
    '_sec, _min, _hour, _day, _month, _year sind die Variablen der Softclock
    
    'Interne Variablen der dcf77.lib:
    Dim Dcf77counter As Byte
    Dim Dcf77parity As Byte
    Dim Dcf77impulse As Byte
    'Dcf77buffer(9): bits 0..7, bits 8..14, flags (= bits 15..20), min, hour,
    '                day, dayofweek, month, year
    Dim Dcf77buffer(9) As Byte
    Dim Dcf77shifter As Byte
    Dim Dcf77tal As Byte
    Dim Dcf77tah As Byte
    Dim Dcf77hsec As Byte
    Dim Dcf77bits0_7 As Byte                          'DCF77-Bits 0..7
    Dim Dcf77bits8_14 As Byte                         'DCF77-Bits 8..14
    Dim Dcf77val_cnt As Byte                          'Validitäts-Zähler
    Dim Dcf77lastbit As Byte                          'LastBit-Pausenlänge
    Dim Dcf77databit As Byte                          'DataBit-Pausenlänge
    
    '---------------------------------------------------------------------------
    
    Dcfstatus.7 = 0                                   'DCF-Decoder AUS
    Dcfstatus.6 = 0                                   'Softclock inaktuell
    Call Dcf77_init                                   'LIB initialisieren

  5. #135
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    Hi,

    also geht immer noch nicht.
    Der Sender liegt 30cm vom Atmel weg in einem Geschirmten Kabel.
    Die LED blinkt so im sekundentakt.

    Wie kann ich was auslesen ob überhaupt was ankommt?
    Irgendwelche Bits oder akommende Daten.

    Wie muß ich die lib ändern wenn ich (OC0/AIN1) PB3 verwenden will anstatt dem (INT0) PD2 ?

    Das kann doch nicht möglich sein.


    In den Hauptprogramm sind einige Zeilen Auskommentiert - warum? Hat das mit dem Stellen zu tun?

  6. #136
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    Hi,

    also ich bin voll am verzweifeln.
    Es geht einfach nix. Ich sitze schon fast 2 Wochen an der blöden Uhr ohne das die einen Zucker macht.
    Ich hänge nochmal alles an was ich habe.
    Also Hauptprogramm, dcf77.bas und die libs.

    Ich habe alle aus dem Forum probiert, aber dann bekomme ich immer auch Fehlermeldungen das einige sub's nicht definiert wären usw.

    Wäre echt super nett wenn sich einer das mal ansehen würde. Ich habe das Programm auch komplett gekürzt, das man das DCF-Zeugs besser sieht.

    Der Empfänger ist an PD.2 angeklemmt und mein M32 hat einen 16MHZ Quarz.
    Benötigen tue ich die Softuhr vom Atmel.
    Angehängte Dateien Angehängte Dateien

  7. #137
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Trexis5,

    so, habe alles gesichtet:

    1. Dcf77_soft.lib:
    Scheint alles ok, PD2 als Eingang eingetragen.

    2. Dcf77_2_soft.bas:
    Die Zeile:
    "Disable Timer1 'zunächst ausschalten" ... löschen!
    Dafür:
    "Enable Interrupts
    Enable Timer1" ... einfügen!

    3. M32.bas:
    Zeigt ja aktuell nichts außer deiner LED an PB0 an, weil die Sub Showtime in der DO-LOOP gar nicht aufgerufen wird.
    Ich würde nur ...
    Code:
    If Sekunde <> _sec Then 
        Cls 
        Locate 1 , 1                                              'Zeile 1:
        Lcd Time$ ; "     "                                       'Uhrzeit
        Sekunde = _sec 
      End If
    ... in die DO-LOOP packen bis alles läuft.

    Der Teil ...
    Code:
      'Wenn Uhr oder Datum inaktuell, dann nach DCF stellen:
      'Timer0 ist nur aktiv, solange DCF-Empfang läuft!!!
      If Dcfstatus.5 = 0 Or Dcfstatus.6 = 0 Then
        Dcfstatus.7 = 1
        Enable Timer0
      Else
        Dcfstatus.7 = 0
        Disable Timer0
      End If
    ... muss ganz raus, weil der Timer nicht abgeschaltet werden kann (sowieso nicht Timer0!)

    Mehr fällt mir spontan nicht auf!
    Zumindest müßte die Uhrzeit jetzt weiter laufen (ohne DCF-Synchronisierung).
    Schreib doch 'mal, wie's klappt.

    Wenn's nicht klappt:
    1. Timer1 noch für andere Zwecke benutzt?
    2. Andere Interrupt-lastige oder Timer-basierte Dinge im Rest deiner Software?
    3. Wirklich externe 16 MHz oder interner Teiler? Fusebits korrekt?
    4. DCF-Empfänger arbeitet störungsfrei?

    Gruß Dirk

  8. #138
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    1. Nein Timer1 nicht benutzt, nur Timer0. Ich brauche nur einen 1sec. Takt.
    2. Weiß nicht. Ich habe das Pollin Funkmodul dran,sonst nix.
    3. Ja 16Mhz und Fuses sind auf 111111 richtig gestellt.
    4. Ja die LED blinkt sauber im Sekundentakt.
    5. Die Zeit schicke ich über Seriell zum M644 und zeige es dort an. Die Uhrzeit ändert sich auf dem Display sauber, aber es ändert sich nicht die Zeit auf die aktuelle.
    Angehängte Dateien Angehängte Dateien

  9. #139
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... teste erst das einfache DCF77-Prog, zu dem ich die Änderungen gepostet habe!

    Was klappt da jetzt? Was nicht?

    Poste ggf., wie du genau die 3 Teile geändert hast.
    Erst dann macht es Sinn, in deinem größeren Prog etwas anzupassen.

    Gruß Dirk

    P.S.: Testest du wirklich mit der genannten Hardware oder ist das eher eine "Trockenübung"?
    (Das kann dann schwierig werden!)

  10. #140
    Benutzer Stammmitglied
    Registriert seit
    27.02.2005
    Beiträge
    58
    Das was ich ein Post vorher angehängt habe, mit dem Teste ich.

    Ich habe ja an dem M32 kein Display, desswegen muss ich ja die Zeit senden.

    Ansonsten habe ich alles übernommen was du gepostet hast.
    Anbei der Schaltplan meines Aufbaus.
    Ganz rechts am M32 hängt der DCF77 Empfänger.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken wetterstation-1v2-schaltung.jpg  

Seite 14 von 21 ErsteErste ... 41213141516 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress