- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: Digital-Uhr/Wecker

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199

    Digital-Uhr/Wecker

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Moin!!!
    Ich möchte gerne einen Digital-Uhr/Wecker bauen. Ich hab mir das so gedacht.

    1. Möglichkeit: Ein ATMega (welchen weiß ich noch nicht) und 6 BCD-To-7-Seg-Decoder. Hab da aber leider noch keinen passenden gefunden. Und das problem ist das ich dann 24 Ausgänge wegen BCD für sec, min. und std. brauche. Das kommt mir ein bisschen unlogisch vor. Es muss doch irgendwas besseres geben.

    2. Möglichkeit: Ganz ohne µC aber dann hab ich wieder extrem viel Arbeit mit dem Verdrahten bzw. Layout machen. Und ich bräuchte auch einen Tipp was ich da für ICs nehmen kann. (Hab nur das TTL-Taschenbuch Teil1 und finde mich darin irgendwie noch nicht so 100% zurecht )

    Bin dankbar für jeden Tipp.

    MfG Jan

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Ja, Du hast Recht, für 6 Anzeigen brauchst Du 6 x 4 = 24 Ausgänge.
    Eine andere Möglichkeit ist I²C oder serieller Datenfluß in 3 x 8 Bit Bausteine; dafür brauchst Du ein Takt und ein Datensignal.
    Nächste Möglichkeit: 6 x 8 Bit Schieberegister, Treiber (z.B. ULN2803) und ohne BCD zu 7SegmDekoder an die Anzeigen. Dann kannst Du zu den Zahlen auch einige Buchstaben anzeigen, also alles, was mit den 7 Segmenten möglich ist.
    Nächste Möglichkeit (die favorisiere ich): einen 8 Bit Bus aufbauen und 6 x 8 Bit Latchs anschließen, Treiber, Segment-Anzeige.
    An den Bus kannst Du noch andere Dinge anschließen: Eingangs-Buffer, LCD, DA-Wandler, ....
    Zu den 8 Datenbits brauchst Du natürlich noch 3...4 Adressleitungen für 8...16 Chip-Selekts, Read und Write.
    Es gibt noch mehr Möglichkeiten.
    Uhrenbausteine für LED-Anzeigen sollte es auch geben; ob die aber Sekunden-Anzeige haben ?
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Ich hab noch nie was mit Datenbussen gemacht außer EIB und einmal in der Berufsschule was mit Schieberegistern.
    Ich werde mich mal mit dem ganzen kram ein bisschen auseinander setzen, und dann wieder anfragen, wenn ich mehr von dem verstehe was du vorgeschlagen hast.

    MfG Jan

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.03.2005
    Beiträge
    386

    Re: Digital-Uhr/Wecker

    Zitat Zitat von Spongebob85
    ... und 6 BCD-To-7-Seg-Decoder... Und das problem ist das ich dann 24 Ausgänge wegen BCD für sec, min. und std. brauche.
    Ein BCD to 7-Segment-Decoder reicht. So brauchst du nur 4 Ausgänge ( A, B, C, D) für die Daten (BCD-Format) welche du jeweils abwechseld auf diesen Ausgang legst und 6 Ausgänge um diejenige 7-Segmentanzeige einzuschalten für welche die Daten jeweils gelten. Das ganze nennt sich Multiplex.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken multipl.gif  
    Gruss Robert

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.05.2006
    Ort
    @ Home
    Alter
    36
    Beiträge
    270
    tach!

    warum müssen es 7-segment anzeigen sein? gibt beim pollin z.b. nen 2x16 zeichen display mit hintergrundbeleuchtung für nur 5 euro... da spart man sich 1. jede menge programmierzeit und 2. hat jeder digitalwecker mehr oder weniger 7-segmentanzeigen... da käme sowas mit nem richtigen LCd schon besser... und man kann beleibigen text darstellen.

    MfG

    Schoko
    Warum bekommen Vegetarier immer eine Extrawurst?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Ich weiß nicht ob ich das mit dem Multiplex richtig verstanden hab.
    Läuft das so: z.B. bei der Anzeige 00:00:01 wird mittels BCD 0, dann 0, dann 0... und am ende 1 ausgegeben und die jeweilige Anzeige für die diese Zahl steht geht immer einmal kurz an? Dann braucht man ja ne ziemlich hohe frequenz, damit das nicht dunkler wirkt oder sogar flackert.

    Das mit dem Display werde ich auf jeden fall auch mal in betracht ziehen, hab sowas nur noch nie gemacht, aber ich glaube um Bussysteme und LCDs komm ich wohl sowieso nicht mehr lange drumrum.

    MfG Jan

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.05.2006
    Ort
    @ Home
    Alter
    36
    Beiträge
    270
    hallo Spongebob85!

    das mit dem multiplexen hast du schon richtig vestanden.

    und das mit der frequenz... gar kein thema... hab auch mal ne 7-segment uhr gebaut mit nem AT90S2313 @ 10MHz und 5 stellen. Hab damals ne wiederholfrequenz von rund 1KHz hinbekommen. softwaremäßig war das ding auch dimmbar und helligkeitsunterschiede zu ner dauerbeleuchtung hat man eigentlich nicht gesehen. nachteil war halt das layout.... waren doch einige pins und bahnen zu ziehen und von demher waren die vielen brücken (die man auch auffm bild sieht) unvermeidlich (damals waren meine ätzfähigkeiten noch nicht so gut, dass ich leiterbahnen zwischen zwei pads durchbekommen hab). aber funktioniert super!
    außerdem war das ne lösung ohne Decoder... die einzelnen anzeigen wurden mit transistoren über die gemeinsame kathode nacheinander ein und ausgeschaltet. sehr simpel alles

    ach ja: das Bild (vorsicht: 2288 x 1712 Pixel)

    und das mit LCD's:

    gar kein problem... der HD44780 controller ist so weit verbreitet da findet man libs für alle sprachen... und Bascom hat ja schon fertige, fast schon idiotensichere befehle.
    ich hab z.b. Dieses Display... ist zwar 3 euro teurer als sein standard schwarz-auf-grün-kollege und hat eine etwas längere reaktionszeit, sieht aber einfach nur geil aus (sorry für den ausdruck).


    MfG

    Schoko
    Warum bekommen Vegetarier immer eine Extrawurst?

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    Wenn dir die Mutiplex Version nicht zusagt, gibt es noch eine andere Variante, die statisch funktioniert. Du brauchst dazu BCD zu 7-Segment Dekoder mit Latch wie z.B. den CD4543. Alle BCD-Eingaänge werden zu einem Bus verbunden, macht also 4 Leitungen. Die Latches werden einzeln oder über einen Decoder angesteuert, macht maximal weitere 6 Leitungen. Die Information liegt dabei per Bus an allen 6 Digits an. Die Info wird jedoch nur bei dem Dekoder wirksam, dessen Latch (Zwischenspeicher) du gerade frei gegeben hast.

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Hallo, ich versuche gerade selbiges mit datum und Wochentaganzeige, will aber die ausgabe vorerst über RS232 machen, später über ein LCD anzeigen und auch über I2C/TWI an einen anderen Microcontroller senden.

    Habe mir dazu auch schon häftig was geschrieben, es wird mir auch über RS232 ausgegeben, aber das einstellen mit drei tastern (wofür etwa 3/4 des Codes zuständig ist) geht überhaupt nicht (keine reaktion) und nach einiger Zeit (6 Stunden, 52Minuten und nochmalwas sekunden) fängt er an, sich dauernd zu resetten.



    EDIT: Ich habe nochmal neu angefangen, und mich Abschnittsweise an mein Ziel rangetastet. Jetzt geht es, ich muss nur noch die Passende Wartezeit finden, damit ich auch nach nem Jahr nicht um mehrere Minuten daneben lieg... (supergenau musses nicht sein/brauch ich es nicht)

    Code:
    $regfile = "m8515.dat"
      $framesize = 50
      $swstack = 50
      $hwstack = 50
      $crystal = 8000000
    
      $baud = 9600
    
    
      'config LCD
    
                                               'LCD konfiguriert (optional)
    
    
      Config Pina.0 = Input
      Porta.0 = 1
      Setztaster Alias Pina.0
    
      Config Pina.1 = Input
      Porta.1 = 1
      Auftaster Alias Pina.1
    
      Config Porta.2 = Input
      Porta.2 = 1
      Abtaster Alias Pina.2
                                              'eingänge für die Taster zum stellen konfiguriert
    
    
    
    
      Declare Sub Einstellen(tag As Byte , Monat As Byte , Jahr As Word , Monatstage As Byte , Hjahr As Byte , Htagname As Integer )
      Declare Sub Uhrzeiteinstellen(sekunde As Integer , Minute As Integer , Stunde As Integer )
    
    
    
      Dim Sekunde As Integer
      Dim Minute As Integer
      Dim Stunde As Integer
      Dim Tag As Byte
      Dim Monat As Byte
      Dim Jahr As Word
      Dim Tagname As String * 2                                 'Hauptvariablen deklariert
    
      Dim Monatstage As Byte                                    'zur ermittlung der Tage des Monats (30.2.2008 wäre schlecht)
      Dim Hjahr As Byte                                         'zum zählen der Jahre um schaltjahre zu erkennen (das 2400 das Schaltjahr ausfällt, interessiert mich herzlich wenig)
      Dim Htagname As Integer                                   'zum durchzaehlen der Wochentage
    
                                                              'Hilfsvariablen deklariert
    
    
    
    
    
      Sekunde = 0
      Minute = 0
      Stunde = 0
      Tag = 1
      Monat = 1
      Jahr = 2007                                               '1.1.2007
    
      Hjahr = 3                                                 '2008 kommt wieder ein Schaltjahr
      Htagname = 1                                              'der 1.1.2007 war ein montag
                                                                'damit die Variablen schon zu anfang Werte haben
    
      Wait 1                                                    'wegen entprellter Taster mittels Kondensator zu GND
    
      Do
    
         Incr Sekunde                                           'Damit wird eine Sekunde weiter gezaehlt
    
         If Sekunde = 60 Then
            Sekunde = 0                                         '...nach 60 Sekunden ist ne minute rum..
            Incr Minute
         End If
    
         If Minute = 60 Then                                    '...nach 60 Minuten ne Stunde...
            Minute = 0
            Incr Stunde
         End If
    
    
         If Stunde = 24 Then                                    '...und nach 24 Stunden ein Tag...
            Stunde = 0
            Incr Tag
            Incr Htagname                                       '...der natuerlich dann nicht mehr dersselbe Wochentag ist
         End If
    
    
         Select Case Monat                                      ' erstmal muss ich wissen, wieviele Tage der Monat hat..
    
           Case 1 :
              Monatstage = 31
           Case 2 :
              If Hjahr = 4 Then
                 Monatstage = 29                                ' (beim Schaltjahr)
              Else
                 Monatstage = 28                                ' (sonst)
              End If
           Case 3 :
              Monatstage = 31
           Case 4 :
              Monatstage = 30
           Case 5 :
              Monatstage = 31
           Case 6 :
              Monatstage = 30
           Case 7 :
              Monatstage = 31
           Case 8 :
              Monatstage = 31
           Case 9 :
              Monatstage = 30
           Case 10 :
              Monatstage = 31
           Case 11 :
              Monatstage = 30
           Case 12 :
              Monatstage = 31
    
        End Select
    
    
    
        If Tag > Monatstage Then                                '...dann kann ich auch sagen, wann der Monat vorbei ist
           Incr Monat
           Tag = 1
        End If
    
        If Monat = 13 Then                                      'und nach 12 Monaten ist ein Jahr rum
           Monat = 1
           Incr Jahr
        End If
    
    
        Select Case Htagname                                    'dann guck ich noch, was fuern Wochentag ich hab...
    
           Case 1 : Tagname = "Mo"
           Case 2 : Tagname = "Di"
           Case 3 : Tagname = "Mi"
           Case 4 : Tagname = "Do"
           Case 5 : Tagname = "Fr"
           Case 6 : Tagname = "Sa"
           Case 7 : Tagname = "So"
        End Select
    
        If Htagname = 8 Then                                    'mehr als 7 verschiedene Wochentage gib es aber nicht
           Htagname = 1
        End If
    
    
    
    
    
    
        If Setztaster = 0 Then                                  'und wenn der Taster gedrueckt ist, will ich was einstellen
           Call Einstellen(tag , Monat , Jahr , Monatstage , Hjahr , Htagname )       'darum gehts jetzt in die Subs
    
           Call Uhrzeiteinstellen(sekunde , Minute , Stunde )   'ich hab zwei Subs weil ich sonst nen Rueffel vom Compiler bekomm, und ich besser Fehler finden kann
        End If
    
    
    
    
    
        Waitms 983                                              'n grober Schätzwert, dass ich die Loop-Schleife in einer Sekunde durchlaufe (dann kommt ja wieder "Incr Sekunde". Da kommt noch was genaueres hin. Irgendwann, vielleicht, unter Umstaenden
    
    
        Print Tagname ; " " ; Tag ; ". " ; Monat ; ". " ; Jahr ; "   " ; Stunde ; ":" ; Minute ; ":" ; Sekunde       'Und hier geb ich dann Wochentag, Datum und Uhrzeit aus
    
    
      Loop                                                      'der Loop zur ganzen Geschichte
    
    
    
    
    
    
    
    
      Sub Einstellen(tag As Byte , Monat As Byte , Jahr As Word , Tagname As String * 2 , Monatstage As Byte , Hjahr As Byte , Htagname As Integer )       'die Sub zum Einstellen des Datums (da noch Sekunde, Minute und Stunde dazu = Horror fuer den Compiler)
    
        Wait 1
    
        While Setztaster = 1                                    'soll laufen bis der Setztaster erneut betaetigt wird (ginge auch mit Do - Loop until)
    
        If Auftaster = 0 Then                                   'wenn man incrementieren will, dann..
           Incr Jahr                                            '...ein Jahr weiterzaehlen...
           Incr Hjahr                                           '...den Zaehler fuer Schaltjahre mit weiterzaehlen
           If Hjahr > 4 Then
              Hjahr = 0                                         ' (n Schaltjahr kommt eben alle 4 Jahre vor)
           End If
           If Hjahr = 4 Then
              Htagname = Htagname + 2                           ' (faengt ein Jahr mit "Mo" an, und das naechste ist ein Schaltjahr, so faengt dieses mit "Mi" an)
           Else
              Incr Htagname                                     ' (faengt ein Jahr mit nem "Mo" an, so faengt das naechste mit nem "Di" an)
           End If
        End If
    
        If Abtaster = 0 Then                                    'the same procedure as beim indrementieren, nur diesmal decrementieren
           Decr Jahr
           Decr Hjahr
           If Hjahr = 0 Then
              Htagname = Htagname - 2
           Else
              Incr Htagname
           End If
           If Hjahr < 1 Then
              Hjahr = 4
           End If
        End If
    
        If Htagname < 1 Then                                    'Htagname kann negativ werden ("mo" entspricht 1, -2 wird daraus -1. es ist aber 6, naemlich "Sa"
           Htagname = Htagname + 7
        Elseif Htagname > 7 Then
           Htagname = Htagname - 7                              'selbiges kann bei + passieren
        End If
    
    
        Print "Jahr: " ; Jahr                                   'und AUSGABE! (den Rest mit auszugeben wird zu problematisch)
    
        Waitms 200                                              'Warten, damit nicht zu schnell weiter-/zurueckgezaehlt wird (Reaktionstests und Geschicklichkeitsuebungen sind hier NICHT vorgesehen)
    
        Wend
    
    
        Wait 1
    
    
        While Setztaster = 1
    
           If Auftaster = 0 Then                                ' und das ganze fuern Monat
             If Monat = 12 Then                                 'nicht weiterzaehlen, ist sonst zu schwer
             Else                                               'sonst...
    
              Incr Monat
    
              Select Case Monat                                 'Jeh nach Monat beginnt der naeechste mit nem anderen Wochentag (pfffft, codecodecode)
    
             Case 1 :
                Htagname = Htagname + 3
             Case 2 :
               If Hjahr = 4 Then
                  Htagname = Htagname + 1
               Else
    
               End If
             Case 3 :
               Htagname = Htagname + 3
             Case 4 :
               Htagname = Htagname + 2
             Case 5 :
               Htagname = Htagname + 3
             Case 6 :
               Htagname = Htagname + 2
             Case 7 :
               Htagname = Htagname + 3
             Case 8 :
               Htagname = Htagname + 3
             Case 9 :
               Htagname = Htagname + 2
             Case 10 :
               Htagname = Htagname + 3
             Case 11 :
               Htagname = Htagname + 2
             Case 12 :
               Htagname = Htagname + 3
    
             End Select
    
             Waitms 200                                         'Wieder warten, damit wir nicht zu schnell sind
    
            End If
    
           End If
    
    
        If Abtaster = 0 Then
    
           If Monat = 1 Then                                    'nicht weiterzaehlen, sonst zu schwer
           Else                                                 'ansonsten...
            Decr Monat
    
    
            Select Case Monat
    
             Case 1 :
                Htagname = Htagname - 3
             Case 2 :
               If Hjahr = 4 Then
                  Htagname = Htagname - 1
               Else
    
               End If
             Case 3 :
               Htagname = Htagname - 3
             Case 4 :
               Htagname = Htagname - 2
             Case 5 :
               Htagname = Htagname - 3
             Case 6 :
               Htagname = Htagname - 2
             Case 7 :
               Htagname = Htagname - 3
             Case 8 :
               Htagname = Htagname - 3
             Case 9 :
               Htagname = Htagname - 2
             Case 10 :
               Htagname = Htagname - 3
             Case 11 :
               Htagname = Htagname - 2
             Case 12 :
               Htagname = Htagname - 3
    
            End Select
    
           End If
    
        End If
    
        If Htagname < 1 Then
           Htagname = Htagname + 7
        Elseif Htagname > 7 Then
           Htagname = Htagname - 7
        End If
    
        If Monat = 0 Then
           Monat = 12
        Elseif Monat = 13 Then
           Monat = 1
        End If
    
    
    
        Print "Monat: " ; Monat                                 'Ausgeben
    
        Waitms 200
    
        Wend
    
    
    
        Wait 1
    
    
    
        While Setztaster = 1                                    'Nun gehts noch an den Tag
    
    
          Select Case Monat                                     'brauch ich gleich
    
           Case 1 :
              Monatstage = 31
           Case 2 :
              If Hjahr = 4 Then
                 Monatstage = 29
              Else
                 Monatstage = 28
              End If
           Case 3 :
              Monatstage = 31
           Case 4 :
              Monatstage = 30
           Case 5 :
              Monatstage = 31
           Case 6 :
              Monatstage = 30
           Case 7 :
              Monatstage = 31
           Case 8 :
              Monatstage = 31
           Case 9 :
              Monatstage = 30
           Case 10 :
              Monatstage = 31
           Case 11 :
              Monatstage = 30
           Case 12 :
              Monatstage = 31
    
          End Select
    
    
          If Auftaster = 0 Then
             If Tag = Monatstage Then                           'nicht weiterzaehlen
             Else                                               'ansonsten..
              Incr Tag
              Incr Htagname                                     'der naechste Tag ist wohl auch der naechste Wochentag....
             End If
          End If
    
          If Abtaster = 0 Then
             If Tag = 1 Then                                    'nicht weiterzaehlen
             Else                                               'ansonsten
              Decr Tag
              Decr Htagname
             End If
          End If
    
    
    
    
    
          While Htagname < 1                                    'beidesmal While , wegen Dem "Htagname = Htagname + Monatstage" und dem "Htagname = Htagname - Monatstage"
            Htagname = Htagname + 7
          Wend
          While Htagname > 7
            Htagname = Htagname - 7
          Wend
    
    
          Print "Tag: " ; Tag                                   'und ausgeben
    
          Waitms 200
    
        Wend
    
    
    
    
      End Sub
    
    
    
    
      Sub Uhrzeiteinstellen(sekunde As Integer , Minute As Integer , Stunde As Integer )       'Die Sub fuer die Uhrzeit
    
        Wait 1
    
        While Setztaster = 1
    
           If Auftaster = 0 Then
              Incr Sekunde
           End If
    
           If Abtaster = 0 Then
              Decr Sekunde
           End If
    
           If Sekunde = 60 Then
              Sekunde = 0
           Elseif Sekunde < 0 Then
              Sekunde = 59
           End If
    
    
           Print Stunde ; ":" ; Minute ; ":" ; Sekunde
    
           Waitms 200
    
        Wend
    
    
        Wait 1
    
        While Setztaster = 1
    
           If Auftaster = 0 Then
              Incr Minute
           End If
    
           If Abtaster = 0 Then
              Decr Minute
           End If
    
           If Minute = 60 Then
              Minute = 0
           Elseif Minute < 0 Then
              Minute = 59
           End If
    
    
           Print Stunde ; ":" ; Minute ; ":" ; Sekunde
    
           Waitms 200
    
        Wend
    
    
        Wait 1
    
    
    
        While Setztaster = 1
    
           If Auftaster = 0 Then
              Incr Stunde
           End If
    
           If Abtaster = 0 Then
              Decr Stunde
           End If
    
           If Stunde = 24 Then
              Stunde = 0
           Elseif Stunde < 0 Then
              Stunde = 23
           End If
    
    
           Print Stunde ; ":" ; Minute ; ":" ; Sekunde
    
           Waitms 200
    
        Wend
    
      End Sub
    evtuelle bugs sind nicht ausgeschlossen...

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.09.2007
    Ort
    Südbaden
    Beiträge
    182
    Hi,
    Ich bevorzuge auch die Lösung mit µController und Multiplex-Ansteuerung. Aber ich denke es ist auf jeden Fall auch ohne Controller möglich. Du bräuchtest nur einen langsamen Taktgeber von einem Hertz (entweder NE555 oder Quarz mit Frequenzteiler) und einige Zählerbausteine und noch ein paar Digitalgatter. Ist bestimmt aufwändiger aber genausogut möglich.

    Gruß
    elayne

Berechtigungen

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

12V Akku bauen