- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Bascom Demo und DCF77

  1. #11
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Anzeige

    E-Bike
    ? was muss ic in der lib ändern wenn ich den Portb.5 verwende
    Code:
    Dcf77:
    .equ DCF_Port = $19    ;$19 = Pina
    .equ DCF_Pin = 7       ;7 = Pin 7
    
    ändern in:
    Dcf77:
    .equ DCF_Port = $16    ;$16 = Pinb
    .equ DCF_Pin = 5       ;5 = Pin 5
    und dann in Bscom "Tools" und "LIB Manager", dort die dcf77.lib auswählen und auf "Compile".

    Den DCF-Ausgang( nicht invertiert) habe ich an Portb.5 angelegt.
    du musst den invertierten Ausgang vom DCF Modul nehmen.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    ich habe nun den invertierenden AUsgang des DCF77-Moduls an PINB.5 angeschlossen und in der LIB die Codezeilen wie folgt geändert

    '.equ Dcf_port = $19 ; $19 = Pina
    '.equ Dcf_pin = 7 ; 7 = Pin 7

    .equ Dcf_port = $19 ; $19 = Pinb
    .equ Dcf_pin = 7 ; 7 = Pin 5

    Und nun, wie du geschrieben hast in Bascom unter Tools den LIB-Manager geöffnet und die lib DCF77.lib geöffnet und compiliert. Es erschien kurz die Meldung ... in LBX object File.

    War das alles richtig so? Oder mache ich och einen Fehler, da die Urzeit noch nicht angezeigt wird.

  3. #13
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    ich habe nun den invertierenden AUsgang des DCF77-Moduls an PINB.5 angeschlossen und in der LIB die Codezeilen wie folgt geändert

    '.equ Dcf_port = $19 ; $19 = Pina
    '.equ Dcf_pin = 7 ; 7 = Pin 7

    .equ Dcf_port = $19 ; $19 = Pinb
    .equ Dcf_pin = 7 ; 7 = Pin 5
    du solltest schon etwas aufmerksamer lesen, sonst wird das nie etwas.
    Was du geändert hast ist nur der Kommentar der Codezeilen.

    .equ DCF_Port = $16 ;$16 = Pinb
    .equ DCF_Pin = 5 ;5 = Pin 5

    Wichtig ist, was vor dem Semikolon steht.

    nach dem Kompilieren der Lib, musst du natürlich den Bascomcode auch neu kompilieren, da dort die geänderte Lib eingebunden werden muss.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Guten Morgen!

    Danke für die Mühe die du/ dir Ihr euch mit mir nehmt. Jedoch komme ich nicht weiter.

    - Die Zeit mit Timer0 läuft soweit
    - Die Zeit mit DCF-77 geht nicht

    ALso was habe ich gemacht. Den im Code eingebauten Debugger bemüht. Nur in der Zeile

    Debounce Pinb.5 , 0 , Uhrzeit ' , Sub

    kommt eine Fehlermeldung beim compilieren (Label not found [Uhrzeit].
    Dieser Label kann auch nicht gefunden werden, so meine ich den gibt es ja nicht im Programm. Aber was muss da stehen damit es geht.

    Wenn ich diese ganze Zeile (Debounce....) lösche dann geht das compilieren und linken. Nur die im Display angezeigte Pausenlänge, Impulszahl und die Pari ist gleich Null.

    in der dcf.lib habe ich

    .equ Dcf_port = $ 16; $16 = Pinb
    .equ Dcf_pin = 5; 5 = Pin 5

    angepasst.

    Sowohl die Lib als auch das Hauptprogramm habe ich neu compiliert und dann gebrannt.

    Ich komme da nicht weiter. Auch wenn es wie so oft am richtigen lesen bei mir hängen mag.

    Martin






    Code:
    '*******************************************************************************
    '*                            DEMO für DCF77 Library                           *
    '*                                                                             *
    '*                     Funktion der Library im "Readme.txt"                    *
    '*******************************************************************************
    $regfile = "m8def.dat"
    $crystal = 3686400
    
    $lib "dcf77.lib"
    $external Dcf77
    Declare Sub Dcf77
    
    Config Timer0 = Timer , Prescale = 1024       'Timer für 40Hz (25ms)
    Const Startwert = 170
    Timer0 = Startwert
    On Timer0 Tim0_isr                 'Überlauf alle 25ms
    Enable Interrupts
    Enable Timer0
    
     'Lcd ansteuerung
    Config Lcd = 16 * 4
    Config Portd = Output
    Config Lcdpin = Pin , Rs = Portd.2 , E = Portd.3 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
    Config Lcdbus = 4
    Config Lcdmode = Port
    
    '------------------------ Pin für DCF Eingang definieren -----------------------
    Config Pinb.5 = Input              'DCF 77 Eingang
    Set Portb.5                        '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 ********************************************
    
    'Cls
    'Cursor Off
    'Do
    '
    'Locate 1 , 7
    'If Stunde < 10 Then Lcd "0" ; Stunde ; ":" Else Lcd Stunde ; ":"
    'If Minute < 10 Then Lcd "0" ; Minute ; ":" Else Lcd Minute ; ":"
    'If Sekunde < 10 Then Lcd "0" ; Sekunde Else Lcd Sekunde
    '
    'If H_sek > 20 Then                 'Doppelpunkt blinken lassen
    '   Locate 1 , 12
    '   Lcd " "
    'End If
    '
    'Locate 2 , 1
    'If Status.3 = 1 And Status.4 = 1 Then
    '   Lcd Lookupstr(wotag , Wochentag) ; ", "
    '   If Tag < 10 Then Lcd " " ; Tag ; "." Else Lcd Tag ; "."
    '   If Monat < 10 Then Lcd " " ; Monat ; "." Else Lcd Monat ; "."
    '   Lcd "20"
    '   If Jahr < 10 Then Lcd "0" ; Jahr Else Lcd Jahr
    'End If
    '
    'Loop
    
    '---------------------- nur für DEBUG nötig ------------------------------------
    
    Cls
    
    Do
    Debounce Pinb.5 , 0 , Uhrzeit      ' , Sub
    
    If Imp > 0 Then
       Locate 1 , 1
       Lcd "Impulslaenge: " ; Imp
       If Imp < 6 Then Lcd " = 0" Else Lcd " = 1"
    End If
    
    Locate 1 , 1
    Lcd "Pausenlaenge: "
    If Pau < 10 Then Lcd "0" ; Pau Else Lcd Pau
    Locate 2 , 1
    Lcd "ImpZ: "
    If Impuls < 10 Then Lcd "0" ; Impuls Else Lcd Impuls
    
    Locate 2 , 10
    Lcd "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
    Call Dcf77
    Return
    
    '------------------------ Daten für Wochentag ----------------------------------
    Wochentag:
    Data "  " , "Mo" , "Di" , "Mi" , "Do" , "Fr" , "Sa" , "So"

  5. #15
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Debounce Pinb.1 , 0 , Uhrzeit , Sub
    Sorry, gehört da eigendlich nicht rein, war noch von meinen Tests.
    kannst du einfach weglassen.

    Config Timer0 = Timer , Prescale = 1024 'Timer für 40Hz (25ms)
    Const Startwert = 170
    das war für einen 4 MHz Quarz ausgerechnet.
    Bei dir muss der Startwert 166 betragen.

    Nur die im Display angezeigte Pausenlänge, Impulszahl und die Pari ist gleich Null.
    dann liegen bei dir an Portb.5 keine DCF Impulse an.
    Prüfe das mal mit einem Meßinstrument an Portb.5 (gegen GND messen).
    Es müssen im Sekundentakt 5V Impulse zu sehen sein.

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Danke für die Hilfe! Du hast recht, am DCF-77 Ausgang passiert nichts. ENtweder ist erdahin oder irgendwas abderes ist mit dem Teil. Wobei eigentlich nichts anderes als "dahin" sein kann.

    Noch ein Punkt zu deinem Code. Da ich den Timer mal länger laufen ließ, ist folgendes aufgetreten. Die Sekunden zählten hoch. nach 60 Sek erfolgte die Anzeige ((00:01:00) wie zu erwarten war. Doch wenn der Timer länger läuft, dann schaut die Anzeige so aus:

    00:12:520

    Die Sekunden zählen hoch aber die "0" als letzte Stelle die da eigentlich nicht hinsoll bleibt da stehen.

    Martin

  7. #17
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Wobei eigentlich nichts anderes als "dahin" sein kann.
    das muß nicht sein.
    In der Nähe von TV, Monitor, Computer, Funktelefon, etc. hat man meistens sowieso keinen Empfang.

    Die Sekunden zählen hoch aber die "0" als letzte Stelle die da eigentlich nicht hinsoll bleibt da stehen.
    das passiert schon mal ...
    Mache einfach nach den Sekunden noch ein Leerzeichen rein, dann passiert es nicht mehr.

    If Sekunde < 10 Then Lcd "0" ; Sekunde ;" " Else Lcd Sekunde;" "

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    44
    Beiträge
    689
    Zitat Zitat von albundy
    das muß nicht sein.
    In der Nähe von TV, Monitor, Computer, Funktelefon, etc. hat man meistens sowieso keinen Empfang.
    Kann ich nur bestätigen. Ging bei mir auch nichts bis ich rausbekommen hab das mein CRT alles im Umkreis von 5m lahmlegt.

    MfG

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests