ECHTZEITUHR 1.bas
Quelle: www.C-Control-Support.net
Weitere Infos im C-Control-Forum / C-Control I Info
Download Download

'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'III    BASIC++  DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0       IIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'--------------------------------------------------------------------
' Beispiel zum BASIC-COMPUTER    mit dem Programmer/Application-Board
'--------------------------------------------------------------------
' ANWENDUNG: ECHTZEITUHR mit DCF77 SYNCHRONISIERUNG
'            SYNC BIT IM CONFIG REGISTER
'--------------------------------------------------------------------
' Dieses Beispiel zeigt die Vorgehensweise um die SYSTEMUHR zu stellen
' bzw. abzufragen.
'
' Beschreibung:
' Das Betriebssystem stellt alle für eine Zeitsteuerung (inklusive
' des Datums)notwendigen Variablen als SYSTEMVARIABLEN zur Verfügung.
' Die Variablen können für die Einstellung der Uhr natürlich auch
' beschrieben werden
' Für eine automatische Einstellung ist an FREQ1 der Anschluss eines
' DCF77 Empfangsmoduls vorgesehen.
' Die interne Echtzeituhr läuft ohne DCF77 Synchronisierung mit einer
' für Quarzuhren typischen Ungenauigkeit.
' Das Beispiel setzt voraus, dass ein DCF77 EMPFANGSMODUL angeschlossen
' ist.
' Das Programm zeigt in einer Schleife Uhrzeit und die Minute der letzten
' Synchronisation an.
' Für diesen Zweck gibt es im KONFIGURATIONS REGISTER ein Bit (Bit5), das
' vom Betriebssystem gesetzt wird, wenn eine empfangene Zeitinformation
' auf die ECHTZEITUHR übertragen wurde (die interne Uhr also streng synchron
' läuft)
' Dieses Bit wird  überprüft. Ist es gesetzt, leuchtet eine LED an Port
' 8 kurz auf, die aktuelle Minute wird in Zeile 2 des LCD geschrieben.
' danach wird das Bit wieder gelöscht, um die nächste Synchronisation
' erkennen zu können.
' Das LCD zeigt also in der zweiten Zeile die Minute der letzten 
' Synchronisation.
'--------------------------------------------------------------------
' Das Konfigurations-Register bietet folgende Optionen.
'
' Bit 0       Schaltet beide PWM-DACs in den SERVO-Mode
' Bit 1       Schaltet den Frequenzzähler 1 in den EREIGNISZÄHLER Mode
' Bit 2       Schaltet den Frequenzzähler 2 in den EREIGNISZÄHLER Mode
' Bit 3       Aktiviert die PULLUP-Widerstände an PORT 1 bis 8
' Bit 4       Aktiviert die PULLUP-Widerstände an PORT 9 bis 15
' Bit 5       Zeigt an wenn die interne Uhr mit DCF77 synchronisiert wurde
' Bit 6       Signalisiert einen Fehler bei der IIC-Kommunikation
' Bit 7       Zustand der Start-Taste
'---------------------------------------------------------------------
'
' ANMERKUNG:
' Um eine möglichst grosse Sicherheit bei der Decodierung zu erreichen,
' benötigt der Decoder bei der ersten Synchronisaton mindestens 3
' komplette Datenrahmen. Ist ein kontinuierlicher Empfang des Zeitsignals
' gewährleistet, so findet alle zwei Minuten eine Synchronissation statt.
' Ausnahme ist eine Synchronisation zur vollen Stunde, da der DCF77 Decoder
' im Betriebsystem jeweils zwei Datenrahmen vergleicht, den Unterschied in
' der Minute berücksichtigt, aber den Wechsel in der Stunde
' unberücksichtigt lässt und zunächst als falsch interpretiert.
'
' Wenn zwei Datenrahmen vollständug decodiert sind, wartet das Betriebssystem
' auf die erste Sekunde der neuen Minute und stellt die Interne Uhr auf die DCF
' Zeit ein. Wenn während dieser Zeit "falsche" Sekundenimpulse vom Empfänger
' erzeugt werden (z.B. durch Störungen)kann es dazu führen, dass der Anfang der
' neuen Minute ncht richtig erkannt wird und die Uhr um bis zu zwei Sekunden
' falsch gestellt wird.
'

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

'--------------------------
'------ I/O PORTS ---------
'--------------------------
define BACKLIGHT    port[16]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------

'-------------------------------------------------
'--         CHECK SYNC BIT SUBROUTINE            -
'-------------------------------------------------
FUNCTION CHECK_DCF()
define STATUS as byte
define LSYNC as byte
CONFIG.INIT
CONFIG.GET STATUS
'-------- SYNCHRON BIT ABFRAGEN  ------------ ----
if (STATUS and 00100000b) <>0 then LSYNC=MINUTE
'-------------- SYNCHRON BIT LÖSCHEN -------------
CONFIG.PUT (STATUS and 11011111b)
CONFIG.OFF
RETURN LSYNC
END FUNCTION

'-------------------------------------------------
'--     SHOW TIME AND MINUTE OF SYNC             -
'-------------------------------------------------
#MAIN
define LSYNC as byte
LCD.INIT
LCD.OFF
BACKLIGHT=off
#LOOP
LSYNC=CHECK_DCF()
LCD.INIT switchonly
'------- ZEIT AUF LCD AUSGEBEN -------------------               
LCD.POS 1,5
if HOUR<10 then LCD.PRINT "0"    'FÜHRENDE NULL SCHREIBEN
LCD.PRINT HOUR & ":"             'STUNDEN AUSGEBEN
if MINUTE<10 then LCD.PRINT "0"  'FÜHRENDE NULL SCHREIBEN
LCD.PRINT MINUTE & ":"
if SECOND<10 then LCD.PRINT "0"  'FÜHRENDE NULL SCHREIBEN
LCD.PRINT SECOND
LCD.PRINT "   "
'-- MINUTE DER LETZTEN SYNCHRONISATION AUSGEBEN --
LCD.POS 2,1
LCD.PRINT "SYNC: "& LSYNC & "    "
LCD.OFF
goto LOOP








Powered by C-Control I Info