Hallo!
Im Rahmen eines größeren Bastelprojekts (Langzeitbetrieb einer Kamera mit PC über Jahre) habe ich ständig Probleme mit der (eingebauten) Wochenzeitschaltuhr.
Diese ist ja leider nicht mit DCF77 ausgerüstet (hab ich noch nie gesehen) und darum muß ich ständig auf der Lauer sein.
Jeden Monat einmal die Zeit korrigieren und jedes Halbjahr die Umstellung Sommer/Winterzeit. Und bei Stromausfall korrigieren.
Das wurde mir jetzt zuviel und deshalb muß jetzt eine "richtige" Uhr her.
Das Programm für die Uhr selbst ist schon fertig und läuft tadellos. Ich habe sie - als Anfänger - aus verschiedenen Codeschnipseln
und etwas eigenem dazu zusammengesetzt. Ein I2C-RTC-Modul steuert die BASCOM-Softclock und wird von einem ELV-DFC77-Modul
genau gehalten.
Ohne Schaltausgang nützt sie mir allerdings garnichts, denn die Uhr soll ja täglich einmal den PC aufwecken, nach 5 Minuten ein
Programm starten und den PC wieder schlafen legen.
Also hab ich versucht, das mal selbst zu entwickeln. Der jetzige Stand ist:
Die Umschaltung Stellen - Alarm EIN funktioniert.
Beim Stellen kann ich auch Stunde und Minute erhöhen.
Beim Zurückschalten auf Alarm Ein geht aber die Anzeige wieder auf Null.
Das sagt mir: die Zahlen im LCD bleiben nicht erhalten. Warum? Keine Ahnung...
Hier noch der Code:
Code:
Locate 4 , 1 : Lcd "Alarm"

'--------------- Taster - Schleife --------------------------------
Do
      If Ta_stellen = 0 Then
         Waitms 10
         While Ta_stellen = 0
            NOP                                             ' Debouncing
            Nop
         Wend
   Goto Set_alarm
      End If
Locate 4 , 13 : Lcd " Ein     "
Loop

'-------------- Stellen - Schleife ------------------------------------------
Set_alarm:
Do
         If Ta_min = 0 Then
          Al_min = Al_min + 1                               'Minute stellen
            If Al_min = 60 Then Al_min = 0
               Waitms 200
         End If
         If Ta_std = 0 Then
          Al_std = Al_std + 1                               'Stunde stellen
            If Al_std = 24 Then Al_std = 0
               Waitms 200
         End If
'-----------------------------------------------------------------------------------------
If Ta_stellen = 0 Then Exit Do
'-----------------------------------------------------------------------------------------
Locate 4 , 13 : Lcd "Stellen"
Locate 4 , 7 : Lcd Al_std ; ":" ; Al_min
Loop

Return

End
Wie schon ober geschrieben, ist das nur ein Teil einer ganzen Uhrsteuerung.
Es sollte möglichst keinen Timer oder Interrupt brauchen.
Das muß doch gehen!
Den Rest, also den Uhrzeit-Vergleich und den Ausgang zum Pc kann ich wieder selbst.

Vielleicht ist es nur eine Kleinigkeit, die ich mangels Erfahrung übersehe.
Joachim