- 3D-Druck Einstieg und Tipps         
Seite 6 von 6 ErsteErste ... 456
Ergebnis 51 bis 55 von 55

Thema: dcf77-empfang mit bascom...?

  1. #51
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.12.2006
    Alter
    58
    Beiträge
    117
    Anzeige

    Praxistest und DIY Projekte
    danke für die info,dirk.
    wenn ich einmal nach links shifte, 4 mal.
    ausgang so &B01011001 shiften &B10010000
    und wieder nach rechts ist der bin code doch &B00001001
    oder nicht.
    ich muss mir mal ein nullmodem-kabel zulegen und die bin werte mir
    auf dem terminal anschauen,habe den verdacht das die cd4094 nicht i.o. sind.wiederum habe ich ein prog geschrieben um mir die zahlen 1-9 und alles andere anzeigen zu lassen,das funktioniert auch.wenn du den letzten abschnitt meines prog anschaust wirst du sehen das ich die zahlen die durch makedec herauskommen, in der read-data schleife umwandle in meine binär version für die cd4094.nur kommt da auf dem display nur mist raus.ich weis auch nicht ob die umwandlung richtig erfolgt,es fehlt ja wie gesagt noch der terminal anschluss.

    gruß mike

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

    ich habe mir dein Prog im groben angesehen, ohne die Gesamtfunktion testen zu können. Dazu eine Frage:

    Wenn du in diesem Teil ...
    Code:
    Sek1:
    Shift Wert , Left , 4
     Shift Wert , Right , 4
    Dual1 = Makedec(wert)
      Gosub Zahlendaten
    Shiftout Pinb.0 , Pinb.1 , B1 , 2 , 8 , 1
    Return
    ... die Einzelziffern der Sekunde ausgeben willst (passiert ja dann letztlich über die Bytevariable B1), dann must du ja wohl über B1 die Zehner und Einer der Sekunde nacheinander (abhängig von deiner Hardware) ausgeben, oder?

    Dann brauchst du ja auch einen 2-fachen Aufruf von Shiftout ...:
    Code:
    Sek1:
    Dual2 = Makedec(wert)
    Dual1 = Dual2
    Shift Dual1 , RIGHT , 4 ' Zehner ausgeben
      Gosub Zahlendaten
    Shiftout Pinb.0 , Pinb.1 , B1 , 2 , 8 , 1
    Dual1 = Dual2 And &b00001111 ' Einer ausgeben
      Gosub Zahlendaten
    Shiftout Pinb.0 , Pinb.1 , B1 , 2 , 8 , 1
    Return
    ... oder erst Einer, dann Zehner je nach deiner Hardware-Verschaltung, d.h. davon, ob erst Einer oder Zehner hineingeschoben werden müssen.

    Oder habe ich dein Prob ganz falsch verstanden???

    Gruß Dirk

  3. #53
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.12.2006
    Alter
    58
    Beiträge
    117
    hallo dirk,
    das ist richtig,deine vermutung.habe dies auch 4 mal vorgesehen,aber zur zeit weggelassen um den code übersichtlich zu machen.es sollten in dem falle erstmal nur die sekunden einer angezeigt werden,was aber leider fehl schlägt.ich denke das ich auf dem richtigem weg bin nur macht die anzeige nicht was sie soll.jeder cd4094 ist für eine anzeige zuständig,die 8 register sollten mit meinem bin-code geladen werden und dann ausgeben.poblem ist,ich weiss nicht wie der bin-code der bei shiftout heraus kommt aus sieht.denke das da der hase im pfeffer liegt. mit einem anderen testprog läuft die anzeige einwandfrei. siehe anhang.
    es werden die einzelnen zahlen richtig ausgegeben.
    Code:
    '*******************************************************************************
    '* demo für 7 segment platine mit CD4094"
    '* anschluss des steckers: 1=plus ,2=minus ,3=output enable=plus
    '*                         4=stobe ,5=clock ,6=date´n
    '*                         4 und 5 können auf einen pin gelegt werden
    '* steckeranschluss 1 ist unten ,neben dem kondensator
    '*******************************************************************************
    
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    Config Portb = Output
    Clock Alias Portb.1                                         ' anschluss 4 und 5
    Outpin Alias Portb.0                                        ' anschluss 6
    
    
    '**** variablen für die Zahle 1-9 und den punkt sowie alles aus ***
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Byte
    Dim F As Byte
    Dim G As Byte
    Dim H As Byte
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    Dim L As Byte
    
    Dim M As Byte
    
    A = &B00111111                                              '1
    B = &B10101000                                              '2
    C = &B00111000                                              '3
    D = &B00011101                                              '4
    E = &B01011000                                              '5
    F = &B01001000                                              '6
    G = &B00111110                                              '7
    H = &B00001000                                              '8
    I = &B00011000                                              '9
    J = &B00001010                                              '0
    K = &B11110111                                              'punkt
    L = &B11111111                                              'alles aus
    
    
    '**** start der anzeige mit nullen ****
    
     For M = 1 To 4
      Shiftout Outpin , Clock , J , 0 , 8 , 100
     Next
     Wait 1
    
    '**** jetzt die zahlen und den punkt sowie alles aus
    '**** nacheinander darstellen
    
     Main1:
    
     Shiftout Outpin , Clock , A , 1 , 8 , 100
     Shiftout Outpin , Clock , B , 1 , 8 , 100
     Shiftout Outpin , Clock , C , 1 , 8 , 100
     Shiftout Outpin , Clock , D , 1 , 8 , 100
    
      Wait 2
    
     Shiftout Outpin , Clock , E , 1 , 8 , 100
     Shiftout Outpin , Clock , F , 1 , 8 , 100
     Shiftout Outpin , Clock , G , 1 , 8 , 100
     Shiftout Outpin , Clock , H , 1 , 8 , 100
    
      Wait 2
    
     Shiftout Outpin , Clock , I , 1 , 8 , 100
     Shiftout Outpin , Clock , J , 1 , 8 , 100
     Shiftout Outpin , Clock , K , 1 , 8 , 100
     Shiftout Outpin , Clock , L , 1 , 8 , 100
    
      Wait 2
    
      Goto Main1                                                ' zurück an den start
      End

  4. #54
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.12.2006
    Alter
    58
    Beiträge
    117
    Hallo Dirk,

    Habe die Uhr zu laufen gebracht,derzeit sind nur die Minuten und Stunden erfasst.Der Rest kommt später dran.Das ganze Probelm lag am ATtiny2313,der hat zu wenig Speicher für die Variablen,denke ich.Habe jetzt einen Mega8 benutzt und Funtioniert.Der momentane laufende Code
    ist im Anhang zu sehen,wer möchte,soll ihn Erweitern und mir den Code mal zukommen lassen, Danke.

    Mike
    P.S. Dauertest ist noch am laufen,Code ist eventuell noch nicht fehlerfrei

    Code:
    '*******************************************************************************
    '* DCF77 - 7 Segment Uhr mit Anzeige-Platine CD 4094, dadurch das die
    '* 8 register des CD 4094 nicht mit Register 1 mit Segment A und Reg 2
    '* mit Segment b usw verbunden sind, muss mit der Code angepaast werden
    '*
    '* Die Steckerbelegung ist wie folgt
    '* Pin1=Plus, Pin2=Minus, Pin3=Enabel Output, Pin4=Strobe, Pin5=Takt, Pin6=Daten
    '*
    '* Erstellt am 17.02.2008 durch Mike Köppl
    '* Bascom: 1.11.9.0.
    '*******************************************************************************
    
    
    $crystal = 4000000
    $regfile = "m8def.dat"
    $framesize = 128
    
    Config Pind.2 = Input
    Config Pind.5 = Output
    
    Set Portd.2
    Set Portd.5
    
    Config Timer0 = Timer , Prescale = 256                      '4000000 / 256 = 15625 Hz
    Const Startwert = 100                                       'Überlauf 256 - Startwert 100 = 156  ( 15625 Hz / 156 = 100,1 Hz ) => 10ms
    Load Timer0 , Startwert
    
    Dim Zahl As Byte
    Dim Minute1 As Byte
    Dim B1 As Byte
    Dim A As Word
    Dim B As Word
    Dim C As Word
    Dim Count As Byte
    
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    
    Dim Impuls As Byte
    Dim Pause As Integer
    Dim Sekunde As Byte
    Dim Wert As Byte
    Dim Paritaet As Byte
    Dim Checker As Byte
    Dim Wochentag As String * 14
    Dim Temp As String * 2
    
    Wochentag = "MoDiMiDoFrSaSo"                                ' String mit Kuerzel der Wochentage
    
    Dim Werte_bit(6) As Byte
    Dim Werte_start(6) As Byte
    Dim Minute(42) As Byte                                      ' Enthaelt die Sekunden-Impulse 0 und 1
    
    '**** Arrays für Startposition und Länge der Daten im Array Minute() **********
    Werte_start(1) = 4                                          'Minuten
    Werte_bit(1) = 6
    Werte_start(2) = 12                                         'Stunden
    Werte_bit(2) = 5
    Werte_start(3) = 19                                         'Tag
    Werte_bit(3) = 5
    Werte_start(4) = 25                                         'Wochentag
    Werte_bit(4) = 2
    Werte_start(5) = 28                                         'Monat
    Werte_bit(5) = 4
    Werte_start(6) = 33                                         'Jahr
    Werte_bit(6) = 7
    
    Impuls = 0
    Pause = 0
    Sekunde = 0
    Checker = 0
    Config Int0 = Rising
    
    Enable Interrupts
    Enable Int0
    Enable Timer0                                               'enable the interrupt
    On Int0 Zaehle Nosave
    On Ovf0 Tim0_isr
    '*******************************************************************************
    Do
      nop
    Loop
    End
    
    '*******************************************************************************
    '***** Routine zählt Sekunden und wertet Impuls- und Pausenzeit aus ***********
    Zaehle:
    Disable Interrupts
    Stop Timer0
    
    
    If Pind.2 = 1 Then                                          ' Pruefen, ob Signal 0 oder 1. 0=aktiv
       Set Portd.5
       Incr Sekunde
       If Sekunde > 18 Then
             K = Sekunde - 18
             If Impuls > 10 Then
                Minute(k) = 1
             Else
                Minute(k) = 0
             End If
       End If
       Config Int0 = Falling                                    ' Interrupt regiert auf fallende Flanke
    Else
    
         Wert = Makebcd(sekunde)                                ' Umweg ueber BCD, dann fuehrende 0
    
       Reset Portd.5
       If Pause > 100 Then                                      ' Wenn die Pause groesser 100 war, dann wars der Minutentrenner
         If Checker = 0 Then                                    ' Checker-Flag setzen
             Checker = 1
          Else
             Checker = 2
             Gosub Check_parity
          End If
          Sekunde = 0                                           ' Sekunde 0 setzen
       End If
       Config Int0 = Rising
    
       If Checker = 2 Then                                      ' wenn Daten korrekt scheinen, dann Dekodieren und Anzeigen
          Gosub Dekoder
          Checker = 1
       End If
    End If
    Start Timer0
    Enable Interrupts
       Impuls = 0
       Pause = 0
    Return
    
    '*******************************************************************************
    Tim0_isr:                                                   ' Timer incrementiert die Zaehler
       Incr Impuls
       Incr Pause
    Return
    '*******************************************************************************
    Check_parity:                                               ' Ueberprufung der empfangenen Daten
    
    If Sekunde <> 59 Then                                       ' Stimmt die Zahl der Sekunden?
       Checker = 1
    End If
    
    Paritaet = 0                                                'pruefe Minutenparitaet
    For I = 4 To 10
       Paritaet = Paritaet + Minute(i)
    Next I
    Paritaet = Paritaet And 1
    If Paritaet <> Minute(11) Then
       Checker = 1
    End If
    Paritaet = 0
    
    For I = 12 To 17                                            'pruefe Stundenparitaet
       Paritaet = Paritaet + Minute(i)
    Next I
    Paritaet = Paritaet And 1
    If Paritaet <> Minute(18) Then
       Checker = 1
    End If
    Paritaet = 0
    
    For I = 19 To 40                                            'pruefe Rest
       Paritaet = Paritaet + Minute(i)
    Next I
    
    Paritaet = Paritaet And 1
    If Paritaet <> Minute(41) Then
       Checker = 1
    End If
    
    Return
    
    '*******************************************************************************
    Dekoder:                                                    ' Daten im Minuten-Array dekodieren und ausgeben.
    
    For K = 1 To 6                                              ' Schleife, weil kompakter
       Wert = 0
       J = Werte_start(k) + Werte_bit(k)
       For I = J To Werte_start(k) Step -1
          Shift Wert , Left
          Wert = Wert + Minute(i)
       Next I
       J = Werte_start(k)
       Minute(j) = Wert
    Next K
    
    K = Minute(25) * 2                                          ' Wochentag aus String schneiden.
    K = K - 1
    Temp = Mid(wochentag , K , 2)
    
    '*******************************************************************************
    '********* Minutenauswertung und Umwandlung ************************************
    
    Minute1 = Bcd(minute(4))
    Minute1 = Makedec(minute(4))
     A = Minute1 / 10
     B = A * 10
     C = Minute1 - B
    Zahl = C
      Gosub Zahlendaten
    Shiftout Portb.0 , Portb.1 , B1 , 1 , 8 , 1
    Zahl = A
      Gosub Zahlendaten
    Shiftout Portb.0 , Portb.1 , B1 , 1 , 8 , 1
    
    '*******************************************************************************
    '******* Stundenauswertung und Umwandlung ***************************************
    
    Minute1 = Bcd(minute(12))
    Minute1 = Makedec(minute(12))
     A = Minute1 / 10
     B = A * 10
     C = Minute1 - B
    Zahl = C
      Gosub Zahlendaten
    Shiftout Portb.0 , Portb.1 , B1 , 1 , 8 , 1
    Zahl = A
      Gosub Zahlendaten
    Shiftout Portb.0 , Portb.1 , B1 , 1 , 8 , 1
    
    Reset Portb.2
    Waitms 10
    Set Portb.2
    
    Return
    
    '*******************************************************************************
    '**** Daten der Zahlendarstellung Zahlen aussuchen *****************************
    Zahlendaten:
    
    Restore Dta1
     For Count = 0 To Zahl
       Read B1
     Next
    Return
    
    '*****  Zahlen Darstellungsdaten ***********************************************
    Dta1:
    Data &B00001010 , &B00111111 , &B10101000 , &B00111000 , &B00011101 , &B01011000 ,       '0,1,2,3,4,5
    Data &B01001000 , &B00111110 , &B00001000 , &B00011000 , &B11111111 , &B11110111 , 0,       '6,7,8,9,alles-aus,d-punkt

  5. #55
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.12.2006
    Alter
    58
    Beiträge
    117
    Nachtrag:
    das Programm läuft auch auf dem tiny 2313,mein Problem war das Steckbrett.Es hatte Kontaktschwierigkeiten,jetzt ist es behoben und siehe da es läuft auf dem Tiny2313.Habe aber mit diesem Programm wieder viel gelern. Danke noch mal an alle.

    mfg Mike

    P.S.7 Segment LED Anzeige LEDTECH 1.06 LA1571-21 T [ROT] bei eBay.de: Bauteile (endet 24.02.08 17:02:16 MEZ) (300195658940)

    das sind die Anzeigen die ich benutzte,prima Teile. Laufen schon mit 5 Volt und sind bei 8 - 12 Volt schön hell.

Seite 6 von 6 ErsteErste ... 456

Berechtigungen

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

12V Akku bauen