-
        

Ergebnis 1 bis 10 von 10

Thema: Uhr als Soft oder DCF ?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.07.2004
    Beiträge
    43

    Uhr als Soft oder DCF ?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,
    nachdem mir ja bei meinem ersten Problem hier recht gut und schnell geholfen wurde, will ich euch gleich mit meinem nächsten Problem belästigen.

    Ich möchte eine einfache Uhr programmieren, die mir die Uhrzeit auf dem
    LCD ausgibt, sowie eine Ausgabe über die Ports.

    Nun mein Problem, wenn ich es richtig verstanden habe, muss ich beim
    ATMega 16 (32) an den Anschlüßen T OSC1 und TOSC2 einen Quarz
    mit 32768 Hz anschließen, damit der Timer anläuft.
    Sehe ich das so richtig ?

    Ich habe u.g. prgramm aus den Beispieldateien von Bascom
    übernommen, jedoch sehe ich hier nirgends, das der Timer konfiguriert wird.

    Was mache ich falsch ?

    Gruß und schon mal danke
    Angehängte Dateien Angehängte Dateien

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23
    Wenn ich Dir einen Tipp geben darf, lass es sein das Fahrrad neu zu erfinden und kauf Dir ein PCF8583 oä für 2 €. Ich habe auch schon viele Stunden damit verbracht die MCS Uhr zum laufen zu bringen. Ein einziger waitms Befehl wirft Deine Uhr um Lichtjahre (ms bis unendlich) zurück. Um das alles genau zu berechen brauch ich zumindest einige Stunden Tage oder Wochen, was mir für jede kleine Änderung im Programm zu Blöd war. Außerdem ist ein Stromausfall jetzt auch kein Problem mehr.
    Die bessere Variante ist eine Funkuhr leider aber auch etwas teurer (ca 10-15 €) und nicht unbedingt in allen ecken Deutschlands erreichbar.
    Gruß Sven

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    11.07.2004
    Beiträge
    43
    Jo, danke für den tip,
    was heißt die bessere Variante ?

    meinst du einen Chip der DCF dekodiert, oder die Softwaremäßige decodierung ?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23
    Wenn ich Dir einen Tipp geben darf, lass es sein das Fahrrad neu zu erfinden und kauf Dir ein PCF8583 oä für 2 €. Ich habe auch schon viele Stunden damit verbracht die MCS Uhr zum laufen zu bringen. Ein einziger waitms Befehl wirft Deine Uhr um Lichtjahre (ms bis unendlich) zurück. Um das alles genau zu berechen brauch ich zumindest einige Stunden Tage oder Wochen, was mir für jede kleine Änderung im Programm zu Blöd war. Außerdem ist ein Stromausfall jetzt auch kein Problem mehr.
    Die bessere Variante ist eine Funkuhr leider aber auch etwas teurer (ca 10-15 €) und nicht unbedingt in allen ecken Deutschlands erreichbar.
    Gruß Sven

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    11.07.2004
    Beiträge
    43
    hallo,
    jo das hattest du aber gerade schon mal geschrieben.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23
    Nein ich meinte die günstige Variante gegen die Luxusvariante um die ( in meinen Augen blödeste Idee ) auszutauschen. Der PCF (günstigste Variante) ist eine I2C Uhr die du einmal stellst und Batterie gepuffert über Jahre relativ genau läuft.
    Die Luxus Variante (DCF) ist mit dem Empfänger ca 10 € teurer genauer aber auch langsamer nach einem Stromausfall. Meine DCF hatte 2 Minuten bis 3 Stunden gebraucht um sich ein verwertbares Signal zu ergattern. Die Auswertung des DCF Signal kann auf dem µc gemacht werden, es sei denn er ist zeitlich voll ausgelastet.
    Gruß Sven

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    11.07.2004
    Beiträge
    43
    Ne, sonst muss der uC nicht viel machen, nur ein paar Port ansteuern.
    Gibts da irgendwo ne lauffähige Version ( vom DCF77).
    Denn alle beiträge im Forum enden irgendwo mitten in der Entwicklung
    und es gibt nichts endgültiges ( was läuft)

    Gruß

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2005
    Beiträge
    23

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Hi,

    also mein Tip: kein extra quarz, mach die uhr in software, und benutz nen timer, der mit ext clock gespeist ist. dann syncronisierst du die uhr einmal pro nacht mit dcf im hintergrund... über die eins zwei sekunden die deine uhr in 24h falsch geht kannst du dann getrost lachen...

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    oder ne RTC, hab mal n bissl an der SPI RTC-4553 getüftelt.
    hier der Code:
    Code:
    '----------------------------------------------------------
    ' Programm initialisieren
    '----------------------------------------------------------
    '
    ' ACHTUNG JTAG per Fuse abschalten !!!!
    '
    ' SPI RTC an MISO MOSI CS0 = PortC.7   CS1 = PortC.6  RW = PortC.5
    ' Habe noch SRF04 Ultraschallenfernungssensor an PortC.2 und PortC.3
    ' Ist nicht besonders elegant gecodet, aber kann ja je nach Bedarf
    ' eventbasierend individuell umgebaut werden.
    '
    ' Nur zur Verdeutlicheung der Grundfunktionen der RTC-4553 Uhrenfunktion
    
    $regfile = "m16def.dat"
    $crystal = 8000000
    
    $baud = 19200
    
    Declare Function Ultrasonic() As Integer                    ' Funktionen deklarieren
    Declare Function Spitransfer(byval Outbyte As Byte ) As Byte
    
    Dim A As Byte                                               ' variablen deklarieren
    Dim I As Byte
    Dim X As Byte
    Dim Temp As Word
    Dim Tempint As Integer
    Dim Tempstr As String * 16
    
    Enable Interrupts
    
    Config Pinc.2 = Output
    Config Pinc.3 = Input
    Config Portc.5 = Output
    Config Portc.6 = Output
    Config Portc.7 = Output
    
    ' Konstanten deklarieren
    Const Setyear = &B00001011
    Const Setmonth = &B00001001
    Const Setday = &B00000111
    Const Sethour = &B00000100
    Const Setminute = &B00000010
    
    Rtcwr Alias Portc.5
    Rtccs1 Alias Portc.6
    Rtccs0 Alias Portc.7
    Rtccs1 = 1
    Rtccs0 = 0
    
    ' SPI konfigurieren und initialisieren
    Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
    Spiinit
    
    ' RTC-4553 initialisieren
    Rtcwr = 0
    X = Spitransfer(&B00001111)                                 'c3 (Initialisierung)
    X = Spitransfer(&B00011101)                                 'c1 (Initialisierung)
    Rtcwr = 1
    
    Do
       Tempstr = ""
       For A = &B00001100 To 0 Step -1                          ' absteigende Reihenfolge
          X = Spitransfer(a)                                    ' sena Anfrage
          X = Spitransfer(0)                                    ' empfange Antwort
          X = X And &B11110000
          Shift X , Right , 4
          Tempstr = Tempstr + Str(x)                            ' Zahlenwert in String umwandeln und an String anreihen
       Next A
       I = Inkey()                                              ' UART abfragen
       Select Case I                                            ' Je nach Zeichen Funktion auslösen
         Case &H79:                                             ' wenn y
            Rtcwr = 0
            X = Spitransfer(setyear)
            Rtcwr = 1
         Case &H6D:                                             ' wenn m
            Rtcwr = 0
            X = Spitransfer(setmonth)
            Rtcwr = 1
         Case &H64:                                             ' wenn d
            Rtcwr = 0
            X = Spitransfer(setday)
            Rtcwr = 1
         Case &H68:                                             ' wenn h
            Rtcwr = 0
            X = Spitransfer(sethour)
            Rtcwr = 1
         Case &H69:                                             ' wenn i
            Rtcwr = 0
            X = Spitransfer(setminute)
            Rtcwr = 1
       End Select
       Waitms 200
       Print Tempstr ; "  ";                                    ' Ausgabe Datum und Uhrzeitstring
       Tempint = Ultrasonic()                                   ' Entfernung per SRF04 messen
       Tempint = Tempint * 10                                   ' in cm umrechnen
       Tempint = Tempint / 62
       Print Tempint                                            'Enfernung ausgeben
    Loop
    End
    
    
    Function Ultrasonic() As Integer
       Portc.2 = 0
       Pulseout Portc , 2 , 20
       Pulsein Ultrasonic , Pinc , 3 , 1
    End Function
    
    Function Spitransfer(byval Outbyte As Byte) As Byte
       Spdr = Outbyte                                           ' SPI-Ausgabe
       Do
       Loop Until Spsr.spif = 1                                 ' Warten bis Byte raus ist
       Spitransfer = Spdr                                       ' Rückgabewert auslesen
    End Function
    End
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

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