- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: das ewige Thema. Funk Uhr. Dies mal "einfache Variante&

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82

    das ewige Thema. Funk Uhr. Dies mal "einfache Variante&

    Anzeige

    Powerstation Test
    hallo!
    ich habe viele Beispielprogramme gesehen, wo ein DCF77 mit dem AVR ausgewertet wird.
    Ich möchte das auch mal nachbauen.
    aber alles was ich gesehen habe passt nicht ganz zu mir.
    Ich brauche noch kein Wecker zusätzlich, und ich habe kein LCD von pollin mit 27x4 Zeichen...
    ich habe ein gewöhnliches 16x2 LCD.
    Es soll nur Zeit, Wochentag und Datum (Nach Möglichkeit) anzeigen.
    Die Quellcodes, die ich gesehen habe, habe ich auch versucht zu kürzen, anpassen.. ich aber leider nicht herausgekommen.
    Also eine Frage an alle:
    wenn mal jemand ein einfaches Code "rumliegen" hat, würde ich mich sehr darüber freuen.
    Habe AtTiny und AtMega8 zur Verfügung
    Ich danke euch sehr!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ich brauche noch kein Wecker zusätzlich, und ich habe kein LCD von pollin mit 27x4 Zeichen...
    ich habe ein gewöhnliches 16x2 LCD.
    Hier im Forum gibt es mehrere Versionen von DCF77-Decodern. Dabei ist es völlig egal, wieviele Zeichen oder Zeilen das LCD hat. Du brauchst ja nur die Zeilen 3 und 4 weglassen, wenn du kein 4-zeiliges LCD hast. Einen "DCF77-Wecker" habe ich hier noch gar nicht gesehen, aber das wäre ja auch ziemlich egal.

    Wenn es bei dir nicht funktioniert, hat das andere Gründe, als das LCD oder die Weckerfunktion.

    Wenn du Hilfe brauchst:
    1. Welche Hardware hast du genau, z.B. welcher DCF-Empfänger?
    2. Poste deine Software

    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    Ich habe einen Atmega8 und AtTiny2313. eins von beiden möchte ich verwenden.
    und einen LCD 16X2. Am portB.
    am PortA.0 ist der DCF77 modul.
    es gibt viele Codes, zum Beispiel dieser hier...
    da blicke ich gar nicht durch. kann vielleicht einer helfen?




    '---------------------------------------------------------------------------------------------------------
    ' (c) 2001 Roman Foltyn 29.12.2001
    '---------------------------------------------------------------------------------------------------------
    ' DCF1.BAS Version 1.01
    ' DCF-77 Signal auf INT1 Pin 13 (P3.3) Impulse Low Activ [Conrad Empfänger + Inverter]
    ' Port 3.7 Low => Piepser ein (Volle stunde Pipser) 5 pipse letzte bei 00:00 lang 0.3 sek
    '---------------------------------------------------------------------------------------------------------
    '
    ' V1.01 3.01.2002 10ms Zähler koriegiert 0.99 sek zum 1s ,softwate uhr variable initialisiert
    ' Bei keine DCF signall nach 2,5 sek XTL meldung Beide DCF Zähler begrenz bis 250
    ' Wenn keine DCF empfang parity war auch OK jetz wen kalender werte=0 dan auch keine synchro
    ' Fehler bei KW1 (negative Temp2) Beseitigt.
    '---------------------------------------------------------------------------------------------------------
    $crystal = 11059200
    $large
    Config Lcd = 16 * 2 'configure lcd display
    Cursor Off

    '---- Software Uhr Variablen -----------------------------------------------------------------------------
    Dim Shsek As Byte , Ssek As Byte , Smin As Byte , Sstd As Byte , Etag As Byte
    Dim Stag As Byte , Swta As Byte , Smon As Byte , Sjah As Byte

    '---- DCF77 Dekoder Variablen ----------------------------------------------------------------------------
    Dim Pointer As Byte , Dmin As Byte , Dstd As Byte, 'DCF Variable
    Dim Dtag As Byte , Dwta As Byte , Dmon As Byte , Djah As Byte

    Dim Dcf(60) As Byte 'array für dcf empfangene impulse
    Dim Dcfs As Byte 'Variable für zeit zwischen zwei impulse von DCF empfänger
    Dim Dcfl As Byte 'Variable für DCF impuls dauer in 10ms schritten

    Dim Dcferm As Byte 'Parity error minuten
    Dim Dcfers As Byte 'Parity error stunden
    Dim Dcferd As Byte 'Parity errordatum
    Dim Dcferr As Byte 'Parity error Globall

    Dim I As Byte 'diverse temporare variablen
    Dim Temp1 As Byte
    Dim Wert As Byte
    Dim Par As Byte

    '--- Speicher NUR FÜR Piepstone - ---------------------------------------------------------------------
    Dim Pipsen As Byte 'merker für erzeugte pipston - eliminiert doppel ton bei DCF synchronisation

    '--- Speicher NUR FÜR KW und Jahrestag BERECHNUNG --------------------------------------------------------
    Dim Jtag As Integer , Schalt As Byte
    Dim Temp2 As Integer
    Dim Temp3 As Integer
    Dim Temp4 As Byte
    Dim Kw As Byte
    '---------------------------------------------------------------------------------------------------------
    '---------------------------------------------------------------------------------------------------------

    Dcf(0) = 1 'Variablen initialisierung
    Dcf(10) = 0
    Dcf(20) = 1
    Pointer = 0
    Dcferr = 1
    Shsek = 0
    Ssek = 0
    Smin = 0
    Sstd = 0
    Swta = 0
    Stag = 0
    Smon = 0
    Sjah = 0

    'Interrupt Configuration ---------------------------------------------------------------------------------

    Config Timer2 = Timer , Gate = Internal , Mode = 0 'Reload 16 Bit Modus
    On Int1 Int1_int
    Set Tcon.2 'flanken steuerung
    On Timer2 Timer_2_int
    Load Timer2 , 9216 '9216 für 11.0592MHz 10 mS takt (Xtal/12/9216=>10ms)
    Enable Interrupts 'enable interrupt
    Enable Int1 'enable int1
    Enable Timer2 'enable timer2
    Priority Set Timer2 'highest priority
    Start Timer2 'Timer starten



    '################################################# ################################################## ######
    '--- Programm Anfang -------------------------------------------------------------------------------------
    '################################################# ################################################## ######

    Cls
    Upperline
    Lcd "DCF-77 UHR V1.01"
    Lowerline
    Lcd "(c) Roman Foltyn"
    Wait 2

    '____ Hauptprogramm __________________________________________________ ____________________________________

    Do
    If Shsek = 0 Then Gosub Displayuhr 'einmall pro sekunde ausgabe auf display
    Loop

    End


    '################################################# ################################################## ######
    'Unterprogramme _-----------------------------------------------------------------------------------------
    'Timer 2 Interrupt Routine (10ms) ------------------------------------------------------------------------
    'bearbeitubgs zeit bei volle minute 1,13ms bei jede aufruf 140µs
    '---------------------------------------------------------------------------------------------------------

    Timer_2_int:

    Incr Dcfs
    If Dcfs > 250 Then Dcfs = 250 'Zähler begrenzen bis 250
    If P3.3 = 0 Then Incr Dcfl 'Dcfl impuls Länge zahler in 10ms step
    If Dcfl > 250 Then Dcfl = 250 'Zähler begrenzen bis 250

    '---- Software Uhr ---------------------------------------------------------------------------------------

    Incr Shsek '10 ms addieren

    If Shsek = 100 Then 'und bei 1 sekunde ssek addieren
    Shsek = 0
    Incr Ssek
    End If

    If Ssek = 60 Then
    Ssek = 0
    Incr Smin
    End If

    If Smin = 60 Then
    Smin = 0
    Incr Sstd
    End If

    If Sstd = 24 Then
    Sstd = 0
    Incr Stag
    Incr Swta
    End If

    Etag = 32 'berechnung monat ende für softuhr
    Schalt = Sjah Mod 4

    If Smon = 2 Then 'Februar bei schaltjahr berechnen
    If Schalt = 0 Then
    Etag = 30
    Else
    Etag = 29
    End If
    End If

    If Smon = 2 Then Etag = 29
    If Smon = 4 Then Etag = 31
    If Smon = 6 Then Etag = 31
    If Smon = 9 Then Etag = 31
    If Smon = 11 Then Etag = 31

    If Stag = Etag Then
    Stag = 1
    Incr Smon
    End If

    If Smon = 13 Then
    Smon = 1
    Incr Sjah
    End If

    '-- ACHTUNG NECHSTE ROUTINEN (JAHRESTAG-, KW-, UND PIEPSTONE ROUTINEN) KÖNNEN ENTFÄLEN ! ---------------

    '-------------------------------------------------------------------------------------------------------
    '---- Berechnung jahrestages und KW (bei keine synchronisation Jtag=0)----------------------------------
    '-------------------------------------------------------------------------------------------------------

    If Ssek = 0 Then
    If Schalt = 0 Then '31.29.31.30.31.30.31.31.30.31.30.31

    If Smon = 1 Then Jtag = Stag '0
    If Smon = 2 Then Jtag = 31 + Stag '31
    If Smon = 3 Then Jtag = 60 + Stag '31.29.
    If Smon = 4 Then Jtag = 91 + Stag '31.29.31.
    If Smon = 5 Then Jtag = 121 + Stag '31.29.31.30.
    If Smon = 6 Then Jtag = 152 + Stag '31.29.31.30.31.
    If Smon = 7 Then Jtag = 182 + Stag '31.29.31.30.31.30.
    If Smon = 8 Then Jtag = 213 + Stag '31.29.31.30.31.30.31.
    If Smon = 9 Then Jtag = 244 + Stag '31.29.31.30.31.30.31.31
    If Smon = 10 Then Jtag = 274 + Stag '31.29.31.30.31.30.31.31.30.
    If Smon = 11 Then Jtag = 305 + Stag '31.29.31.30.31.30.31.31.30.31.
    If Smon = 12 Then Jtag = 335 + Stag '31.29.31.30.31.30.31.31.30.31.30.

    Else

    If Smon = 1 Then Jtag = Stag '0
    If Smon = 2 Then Jtag = 31 + Stag '31
    If Smon = 3 Then Jtag = 59 + Stag '31.28.
    If Smon = 4 Then Jtag = 90 + Stag '31.28.31.
    If Smon = 5 Then Jtag = 120 + Stag '31.28.31.30.
    If Smon = 6 Then Jtag = 151 + Stag '31.28.31.30.31.
    If Smon = 7 Then Jtag = 181 + Stag '31.28.31.30.31.30.
    If Smon = 8 Then Jtag = 212 + Stag '31.28.31.30.31.30.31.
    If Smon = 9 Then Jtag = 243 + Stag '31.28.31.30.31.30.31.31
    If Smon = 10 Then Jtag = 273 + Stag '31.28.31.30.31.30.31.31.30.
    If Smon = 11 Then Jtag = 304 + Stag '31.28.31.30.31.30.31.31.30.31.
    If Smon = 12 Then Jtag = 334 + Stag '31.28.31.30.31.30.31.31.30.31.30.

    End If

    Temp2 = Jtag - Swta
    If Temp2 < 0 Then Temp2 = 0 'Bei negativen werten problemm
    Temp3 = Temp2 / 7 'Volle wochen seit jahres anfang
    Kw = Temp3
    Temp3 = Temp3 * 7 'genaue tagesanzahl für volle wochen
    Temp4 = Temp2 - Temp3 'Tage in erste KW neues jahr (>4) oder letzte KW altes jahr (<5)

    If Temp4 > 4 Then 'wenn tages in jahresanfangswoche >4 dann erste KW in neue Jahr
    Kw = Kw + 2 'addieren erste woche und aktuelle woche
    End If

    If Temp4 < 5 Then 'wenn Tages in jahresanfangswoche <5 dann alle diese tage in letzte KW altes Jahr
    Kw = Kw + 1
    End If

    If Schalt = 0 Then
    Temp2 = Jtag - Swta 'wenn in altes jahr letzte woche noch bis mittwoch dann 1 KW
    If Temp2 > 362 Then Kw = 1
    Else
    Temp2 = Jtag - Swta 'wenn in altes jahr letzte woche noch bis mittwoch dann 1 KW
    If Temp2 > 361 Then Kw = 1 'letzte Jahres tage können auch in neue Jahr 1 woche eintretten
    End If
    End If

    'Jtag => Jahrestag ab Jahresanfang
    'Kw => Berechnete KW (Kalender Woche)

    '---------------------------------------------------------------------------------------------------------
    '--- PIPSTONE BEI VOLLE STUNDE 56 bis 59 Kurz und bei 00 Lang -------------------------------------------
    '---------------------------------------------------------------------------------------------------------

    If Ssek > 55 And Ssek < 60 Or Ssek = 0 Then
    If Ssek = 0 Then
    If Smin = 0 Then
    If Shsek > 0 And Shsek < 30 Then
    If Pipsen = 0 Then
    P3.7 = 0
    Pipsen = 1 'blokiert null sekunden piepsen (Bei DCF übernahme)
    End If
    Else
    P3.7 = 1
    End If
    End If
    Else
    If Smin = 59 Then
    If Shsek > 0 And Shsek < 10 Then
    P3.7 = 0
    Pipsen = 0 'schaltet null skunden piepsen wieder an
    Else
    P3.7 = 1
    End If
    End If
    End If
    Else
    P3.7 = 1 'Bei andere falle Piepston abschalten
    End If

    '---------------------------------------------------------------------------------------------------------

    Return

    '---------------------------------------------------------------------------------------------------------
    '---- Interrupt1 Routine (DCF77 Empfanger INPUT LOW=>125 bis131ms INPUT HIGH=>227 bis 229ms --------------
    '---- Interrupt Dauer 51 µs und bei DCF Decodieren (Volle minute) 8,5ms ----------------------------------
    '---------------------------------------------------------------------------------------------------------

    Int1_int:

    If Dcfs < 202 And Dcfs > 196 Then 'Minutensprung finden und DCF Dekodieren
    'ACHTUNG bei andere empfänger eventuell anpassen
    If Dcfl > 17 Then 'Signall low oder high in DCF Array speichern
    Dcf(60) = 1 'wert von parity Date "58"bit noch speichern
    Else
    Dcf(60) = 0
    End If
    Shsek = 0
    Ssek = 0
    Gosub Dcfdecode 'DCF signall decodieren
    Pointer = 0
    End If

    Incr Pointer

    'Kleiner 170ms => LOW Grösser 170ms => High
    If Dcfl > 17 Then 'Signall low oder high in DCF Array speichern
    Dcf(pointer) = 1
    Else
    Dcf(pointer) = 0
    End If

    Dcfs = 0
    Dcfl = 0

    Return

    '---------------------------------------------------------------------------------------------------------
    '--- DCF77 DEKODIER SOFTWARE ----------------------------------------------------------------------------
    '---------------------------------------------------------------------------------------------------------

    Dcfdecode:

    Dmin = 0 'DCF minuten info
    Dstd = 0 'DCF Stunden info
    Dtag = 0 'DCF Tag info
    Dwta = 0 'DCF Wochen Tag info
    Dmon = 0 'DCF Monat info
    Djah = 0 'DCF Jahr info

    Dcferm = 0 'Minuten Patity error löschen
    Dcfers = 0 'Stunden Patity error löschen
    Dcferd = 0 'Datum Patity error löschen

    Par = 0 'Parity=0
    For I = 1 To 8 'scann Array für minuten
    Pointer = I + 22
    If Dcf(pointer) = 1 Then

    If I = 1 Then
    Dmin = Dmin + 1
    Par = Par + 1
    End If

    If I = 2 Then
    Dmin = Dmin + 2
    Par = Par + 1
    End If

    If I = 3 Then
    Dmin = Dmin + 4
    Par = Par + 1
    End If

    If I = 4 Then
    Dmin = Dmin + 8
    Par = Par + 1
    End If

    If I = 5 Then
    Dmin = Dmin + 10
    Par = Par + 1
    End If

    If I = 6 Then
    Dmin = Dmin + 20
    Par = Par + 1
    End If

    If I = 7 Then
    Dmin = Dmin + 40
    Par = Par + 1
    End If

    If I = 8 Then
    Par = Par + 1
    End If

    End If

    Dcferm = Par Mod 2 'parity minuten test

    Next I

    Par = 0
    For I = 1 To 7 'scann Array für Stunden
    Pointer = I + 30
    If Dcf(pointer) = 1 Then

    If I = 1 Then
    Dstd = Dstd + 1
    Par = Par + 1
    End If

    If I = 2 Then
    Dstd = Dstd + 2
    Par = Par + 1
    End If

    If I = 3 Then
    Dstd = Dstd + 4
    Par = Par + 1
    End If

    If I = 4 Then
    Dstd = Dstd + 8
    Par = Par + 1
    End If

    If I = 5 Then
    Dstd = Dstd + 10
    Par = Par + 1
    End If

    If I = 6 Then
    Dstd = Dstd + 20
    Par = Par + 1
    End If

    If I = 7 Then
    Par = Par + 1
    End If

    End If

    Dcfers = Par Mod 2 'parity stunden test

    Next I

    Par = 0
    For I = 1 To 23 'scann Array für Tag bis Jahr
    Pointer = I + 37
    If Dcf(pointer) = 1 Then

    If I = 1 Then
    Dtag = Dtag + 1
    Par = Par + 1
    End If

    If I = 2 Then
    Dtag = Dtag + 2
    Par = Par + 1
    End If

    If I = 3 Then
    Dtag = Dtag + 4
    Par = Par + 1
    End If

    If I = 4 Then
    Dtag = Dtag + 8
    Par = Par + 1
    End If

    If I = 5 Then
    Dtag = Dtag + 10
    Par = Par + 1
    End If

    If I = 6 Then
    Dtag = Dtag + 20
    Par = Par + 1
    End If

    If I = 7 Then
    Dwta = Dwta + 1
    Par = Par + 1
    End If

    If I = 8 Then
    Dwta = Dwta + 2
    Par = Par + 1
    End If

    If I = 9 Then
    Dwta = Dwta + 4
    Par = Par + 1
    End If

    If I = 10 Then
    Dmon = Dmon + 1
    Par = Par + 1
    End If

    If I = 11 Then
    Dmon = Dmon + 2
    Par = Par + 1
    End If

    If I = 12 Then
    Dmon = Dmon + 4
    Par = Par + 1
    End If

    If I = 13 Then
    Dmon = Dmon + 8
    Par = Par + 1
    End If

    If I = 14 Then
    Dmon = Dmon + 10
    Par = Par + 1
    End If

    If I = 15 Then
    Djah = Djah + 1
    Par = Par + 1
    End If

    If I = 16 Then
    Djah = Djah + 2
    Par = Par + 1
    End If

    If I = 17 Then
    Djah = Djah + 4
    Par = Par + 1
    End If

    If I = 18 Then
    Djah = Djah + 8
    Par = Par + 1
    End If

    If I = 19 Then
    Djah = Djah + 10
    Par = Par + 1
    End If

    If I = 20 Then
    Djah = Djah + 20
    Par = Par + 1
    End If

    If I = 21 Then
    Djah = Djah + 40
    Par = Par + 1
    End If

    If I = 22 Then
    Djah = Djah + 80
    Par = Par + 1
    End If

    If I = 23 Then
    Par = Par + 1
    End If

    End If

    Dcferd = Par Mod 2 'parity test für letzte daten block

    Next I
    Dcferr = Dcferm + Dcfers 'Globale Parity error erzeugen
    Dcferr = Dcferr + Dcferd

    If Djah = 0 Then Return 'bei keine empfang parity ist auch OK aber
    If Dwta = 0 Then Return 'DCF signall ist auch faisch
    If Dmon = 0 Then Return
    If Dtag = 0 Then Return

    If Dcferr = 0 Then 'wenn daten ok dann softuhr setzen
    Shsek = 0 '0.01s und sekunden synchronisieren
    Ssek = 0
    Smin = Dmin 'Alle DCF dekodierte werte in softuhr übernemen
    Sstd = Dstd
    Stag = Dtag
    Swta = Dwta
    Smon = Dmon
    Sjah = Djah

    End If
    Return



    '---------------------------------------------------------------------------------------------------------
    '--- LCD DISPLAY ANZEIGE ROUTINE --- KANN DURCH USER BELIEBIG GEENDERT WERDEN ----------------------------
    '---------------------------------------------------------------------------------------------------------

    Displayuhr: 'softuhr anzeigen

    If Dcfs > 240 Then Dcferr = 1 'wenn keine impulse von DCF empfanger auch Parity error setzen

    Upperline 'uhr zeit zeigen
    If Sstd < 10 Then
    Lcd "0" ; Sstd ; ":" ;
    Else
    Lcd Sstd ; ":" ;
    End If

    If Smin < 10 Then
    Lcd "0" ; Smin ; ":" ;
    Else
    Lcd Smin ; ":" ;
    End If

    If Ssek < 10 Then
    Lcd "0" ; Ssek ;
    Else
    Lcd Ssek ;
    End If
    'Wochentag decodieren
    If Swta = 0 Then 'wenn noch keine daten dann Synchro
    Lcd " SYNCHRO";
    End If

    If Swta = 1 Then
    Lcd " MO";
    End If

    If Swta = 2 Then
    Lcd " DI";
    End If

    If Swta = 3 Then
    Lcd " MI";
    End If

    If Swta = 4 Then
    Lcd " DO";
    End If

    If Swta = 5 Then
    Lcd " FR";
    End If

    If Swta = 6 Then
    Lcd " SA";
    End If

    If Swta = 7 Then
    Lcd " SO";
    End If

    If Dcferr = 0 Then
    Lcd " DCF "; 'DCF OK
    Else
    Lcd " XTL "; 'Wenn keine DCF synchro dann Quarz UHR Modus
    End If

    Lowerline

    If Stag < 10 Then
    Lcd "0" ; Stag ; "." ;
    Else
    Lcd Stag ; "." ;
    End If

    If Smon < 10 Then
    Lcd "0" ; Smon ; "." ;
    Else
    Lcd Smon ; "." ;
    End If

    If Sjah < 10 Then
    Lcd "200" ; Sjah ;
    Else
    Lcd "20" ; Sjah ;
    End If

    If Jtag > 0 Then
    If Kw > 9 Then
    Lcd " KW" ; Kw ;
    Else
    Lcd " KW0" ; Kw ;
    End If
    Else
    Lcd " QUARZ"
    End If

    Return

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

    wenn du Bascom ab 1.11.8.7 aufwärts hast, kannst du die eingebaute DCF-Funktion (CONFIG DCF77 ...) benutzen. Sieh dir die Hilfe an.

    Vor dieser Version: Evtl. hilft der Decoder aus der Wiki.

    Gruß Dirk

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    Hallo Dirk,
    danke für den hinweis.

    habe jetzt das beispielprogramm angeguckt und etwas gearbeitet.
    ist das so richtig?


    $regfile = "M8def.dat"
    $crystal = 8000000
    $swstack = 128
    $framesize = 128
    $baud = 19200


    Config Dcf77 = Pind.2 , Timer = 1 , Timer1sec = 1 , Debug = 1

    Enable Interrupts

    Config Date = Dmy , Separator = .

    Dim I As Integer

    Dim Sec_old As Byte , Dcfsec_old As Byte

    Sec_old = 99 : Dcfsec_old = 99


    Print "Test DCF77 Version 1.00"

    Do

    For I = 1 To 78

    Waitms 10

    If Sec_old <> _sec Then

    Exit For

    End If

    If Dcfsec_old <> Dcf_sec Then

    Exit For

    End If

    Next

    Waitms 220

    Sec_old = _sec

    Dcfsec_old = Dcf_sec

    Print Time$ ; " " ; Date$ ; " " ; Time(dcf_sec) ; " " ; Date(dcf_day) ; " " ; Bin(dcf_status) ; " " ; Bin(dcf_bits) ; " " ; Bdcf_impuls ; " " ; Bdcf_pause

    Loop

    End

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... habe jetzt das beispielprogramm angeguckt und etwas gearbeitet. ist das so richtig?
    Wenn's funktioniert, ist es richtig!

    (Warum du 2x _sec mit einer alten Sekunde vergleichst, und dann aus dem for-Konstrukt (1..78 ???) 2x herausspringst, habe ich nicht verstanden.)

    Gruß Dirk

    P.S.: Wenn du hier Code postest, stell ihn doch in die Code Tags (siehe oben unter "Code"!) Das ist übersichtlicher.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    also die Uhr selbst funktioniert.
    aber ich habe am Pd2 immer 4V.
    wenn ich den DCF77 vom uC trenne, kann ich auf dem Oszi die Signale von dem Empfänder sehen.
    ich gaube also, dass der interne pull-up zu klein ist.
    kann des sein?
    Wie kann ich im Code den Int. pull-ub abschalten?

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    wenn ich den DCF77 vom uC trenne, kann ich auf dem Oszi die Signale von dem Empfänder sehen.
    Welches DCF-Modul hast du?
    Wenn es das von Reichelt ist, brauchst du eine Treiberstufe am Empfängerausgang.

    Gruß Dirk

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    ich habe ihn aus einem Funk-Wecker ausgebaut.
    er hat 4 Anschlüsse:
    VCC, GND, TOC und PON.
    PON muss ich mit GND verbinden, damit er läuft.
    es sieht so aus, dass es kein open-collector ist, weil er impulse mit einer Spannung von 2,7V rausgibt (gegen Masse gemessen).
    Was für eine Treiberstufe ist das, und wie baut man sowas auf?

    danke

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... es sieht so aus, dass es kein open-collector ist, weil er impulse mit einer Spannung von 2,7V rausgibt (gegen Masse gemessen).
    Was für eine Treiberstufe ist das, und wie baut man sowas auf?
    Was das für ein Ausgang ist, kann ich nicht sagen. Evtl. push-pull.

    Probier mal, einen Transistor BC546B in Emitterschaltung an den Ausgang zu hängen. Basiswiderstand: 22kOhm (Probierwert).
    Den uC-Pullup würde ich eingeschaltet lassen, oder dem Transistor noch einen 10k Pullup am Kollektor (PD2) spendieren.

    Gruß Dirk

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen