Funktionen:
init()
setcontrolreg()
getcontrolreg()
Uhr-Funktionen:
setTime()
setDate()
setDST()
getTime()
getDate()
getDST()
syncpcf()
synccc2()
Watchdog-Funktionen:
Hostmode()
resetWD()
setWDtimeout()
RAM-Funktionen:
writebyte()
writeint()
writearray()
readbyte()
readint()
readarray()
Threads:
sync()
watchdog()
Beschreibung Nach oben
Das Modul pcf8583.c2 ist ein Treiber für den Uhrenbaustein
PCF8583 und
für die CCTools
Bausteine PCF-UHR-WD, PCF-RTC-EEProm und dem
Uhrenbaustein auf dem CC2-ReglerBoard.
Das Modul unterstützt die Watchdogfunktionalität des PCF-UHR-WD und
des CC2-ReglerBoards
Einfügen als System-Modul
Nach oben
Die Datei pcf8583.c2 in das Verzeichnis .\CControl2\Lib
kopieren und in der Datei modules.txt
die Zeile pcf8583.c2 unterhalb von i2c.c2 einfügen.
Ein zusätzliches Ausrufezeichen unmittelbar nach einem Modulnamen in modules.txt
bestimmt,
daß das Modul in jedem neuen Projekt von anfang an aktiviert wird.
Funktionen:
init() Nach oben
function init(byte A0, byte setCC2clock, byte autosync,
byte watchdog,
byte enableHostKey) returns int
Die Funktion init() initialisiert den Uhrenbaustein.
Es wird 0xFF(True) zurückgegeben, wenn der Uhrenbaustein unter der angegebenen
Adresse gefunden wurde, 0x80 wenn der Watchdog zuvor einen Reset ausgelöst
hatte
und 0x00(False), wenn sich an der angegebenen Adresse kein Uhrenbaustein
befindet.
A0 | Adresse des Bausteins: 0 oder 1 ,(1 bei PCF-UHR-WD und CC2-ReglerBoard) |
setCC2clock | Setzen der CC2-Uhr mit PCF8583-Zeit wenn ungleich 0 |
autosync | Automatisches stellen der PCF8583-Uhr mit der DCF77-Zeit (starten des Threads sync(), wenn ungleich 0 |
watchdog | 0 bis 99 - Watchdogtimeout in sec. Bei Werten gtrößer 0 wird der Watchdogthread automatisch gestartet. Soll der Watchdog nicht durch diesen Thread, sondern "manuell" mit resetWD() zurückgesetzt werden, so muß als Wert 0 übergeben werden und nach dem Init das Watchdogtimeout mit setWDtimeout() gesetzt werden. |
enableHostKey | Bei True (ungleich 0) wird, wenn der Thread
"watchdog" läuft, beim Drücken der Hosttaste der Watchdog deaktiviert und der Hostmode eingeleitet. (vgl. Funktion Hostmode() ) |
setcontrolreg() Nach oben
function setcontrolreg(byte register, byte setmask) returns int
Mit setcontrolreg() kann das control-Register gesetzt werden.
Es kann dabei eine Maske angegeben werden, damit nur gezielt bestimmte
Bytes geändert werden können.
register | Bitmuster für Register |
setmask | Bitmuster für Bits, die geädert werdendürfen. |
getcontrolreg() Nach oben
function getcontrolreg() returns byte
Die Funktion getcontrolreg() liest das Control-Register aus und
gibt dieses
als Bytewert zurück.
Uhr-Funktionen:
setTime() Nach oben
function setTime(system.TIME time) returns int
Mit der Funktion setTime() wird die Zeit des
Uhrenbausteins entsprechend
der Zeit in time gestellt.
time | Variable mit Zeitinformationen (siehe
system.c2) time.hour = Stunde time.minute = Minuten time.second = Sekunden |
setDate()
Nach oben
function setDate(int year, byte month, byte day, byte dayofweek) returns int
Mit der Funktion setDate() wird das Datum des
Uhrenbausteins entsprechend
der übergebenen Variablen gestellt.
Die Jahreszahl wird dabei zusätzlich in einem Byte des RAMs in den
in der Konstante ramyearaddr angegebenen Speicherbereich geschrieben.
So kann zuverlässig die Jahreszahl und ein Jahreswechsel erkannt werden.
year | Jahr (2000 - 2199) |
month | Monat (1 - 12) |
day | Tag (1 - 31) |
dayofweek | Wochentag (0 - 6, 0= Sonntag) |
setDST() Nach oben
function setDST(byte state) returns int
Mit der Funktion setDST() wird der Speicherbereich für
das DST-Flag (Sommerzeitflag)
im im Uhrenbaustein entsprechend der übergebenen Variablen gestetzt.
DST | 0= Winterzeit, ungleich 0=Sommerzeit |
getTime() Nach oben
function getTime(system.TIME time) returns int
Mit der Funktion getTime() wird die aktuelle Zeit des
Uhrenbausteins ausgelesen und
in die angegebene Variable des Datentyps system.TIME gespeichert.
time | Variable mit Zeitinformationen (siehe
system.c2) time.hour = Stunde time.minute = Minuten time.second = Sekunden |
getDate()
Nach oben
function getDate(int date[]) returns int
Mit der Funktion getdate() wird das aktuelle Datum des
Uhrenbausteins ausgelesen und
in einen Bytepuffer mit mindestens 4 Elementen gespeichert.
date[] | date[0] = Tag (1 - 31) date[1] = Monat (1 - 12) date[2] = Jahr (2000 - 2199) date[3] = Wochentag (0 - 6) |
getDST() Nach oben
function getDST() returns int
Mit der Funktion getDST() wird der Zustand des im
Uhrenbaustein gespeicherten
DST-Flags zurückgegeben. 0 für Winterzeit, -1 für Sommerzeit.
syncpcf() Nach oben
function syncpcf()
Die Funktion syncpcf() syncronisiert den Uhrenbaustein mit
der Zeit der CC2.
es wird dabei auf den Sekundenwechsel gewartet.
synccc2()
Nach oben
function synccc2() returns int
Die Funktion synccc2() syncronisiert die Uhr der CC2 mit
der aktuellen Zeit des
Uhrenbaustein. Es wird dabei auf den Sekundenwechsel beim PCF8583 gewartet.
Die Funktion gibt bei erfolgreichen Syncronisieren -1(True) zurück. Andernfalls
0(False).
Watchdog-Funktionen:
Hostmode() Nach oben
function Hostmode(byte index)
Die Funktion Hostmode() deaktiviert den Watchdog und versetzt die
C-Control II
in den Hostmode. Dabei muß der Parameter für Quit angegeben werden.
index | 1-255 : Programm in den Hostmode beenden >255: Programm in den Hostmode beenden, jedoch Schnittstellen beibehalten. (Datenformat, Geschwindigkeit und Puffereinstellungen). Für Parameter größer 255 ist OSOPT V3.1 oder höher notwendig! |
resetWD()
Nach oben
function resetWD()
Die Funktion resetWD() setzt den Watchdog zurück.
setWDtimeoutt() Nach oben
function setWDtimeout(byte watchdogtimeout)
Mit der Funktion setWDtimeout() wird die Zeit in Sekunden
eingestellt,
nach der der Watchdog spätestens reagieren soll.
watchdogtimeout | Timeout in sec. (0-99) |
RAM-Funktionen:
Allgemeine
Hinweise zur RAM-Nutzung:
Achtung! Die Adressen 0x00 bis 0x0F werden von der Uhr verwendet !
0x10 und 0x11 werden zur Speicherung von Jahreszahl und Sommerzeitflag benutzt,
können aber im Modul über die Konstanten ramyearaddr und ramDSTaddr frei
angepasst werden.
writebyte()
Nach oben
function writebyte(byte addr, byte data)
Dier Funktion writebyte() schreibt einen Bytewert in das RAM des Uhrenbausteins.
addr | Adresse im RAM 0x00 bis 0xFF Hinweise zur RAM-Nutzung beachten ! |
data | Datenbyte 0x00 bis 0xFF |
writeint() Nach oben
function writeint(byte addr, int data)
Dier Funktion writebyte() schreibt einen Integerwert in das RAM des Uhrenbausteins.
addr | Adresse im RAM 0x00 bis 0xFF Hinweise zur RAM-Nutzung beachten ! |
data | Dateninteger 0x00 bis 0xFFFF |
writearray() Nach oben
function writearray(byte addr, byte data[], byte len)
Die Funktion writearray() schreibt einen Bytearray in das RAM des Uhrenbausteins.
addr | Adresse im RAM 0x00 bis 0xFF Hinweise zur RAM-Nutzung beachten ! |
data[] | Bytepuffervariable mit Daten |
len | Anzahl der zu schreibenden Bytes 1 bis 255 |
readbyte() Nach oben
function readbyte(byte addr) returns byte
Dier Funktion writebyte() liest ein Byte aus dem RAM des Uhrenbausteins.
addr | Adresse im RAM 0x00 bis 0xFF Hinweise zur RAM-Nutzung beachten ! |
readint() Nach oben
function writeint(byte addr) returns int
Dier Funktion readint() liest ein Integer aus dem RAM des Uhrenbausteins.
addr | Adresse im RAM 0x00 bis 0xFF Hinweise zur RAM-Nutzung beachten ! |
readarray() Nach oben
function readarray(byte addr, byte data[], byte len)
Mit der Funktion readarray() wird eine angegenbene Anzahl von
Bytes
aus dem RAM des Uhrenbausteins ausgelesen.
addr | Adresse im RAM 0x00 bis 0xFF Hinweise zur RAM-Nutzung beachten ! |
data[] | Bytepuffervariable für die Daten |
len | Anzahl der zu lesenden Bytes 1 bis 255 |
Threads:
sync() Nach oben
thread sync{}
Dieser Thread syncronisiert stündlich den Uhrenbaustein mit der DCF77-Zeit,
sobald und solange ein gültiges Zeitsignal empfangen wird.(OSOPT_V2 oder höher
erforderlich)
Liegt kein DCF77-Signal an, so wird der Uhrenbaustein ebenfalls stündlich
syncronisiert. Jedoch frühestens eine Stunde nach dem Starten des Threads.
Dieser Thread kann über die Funktion init()
durch den Parameter autosync gestartet werden.
watchdog() Nach oben
thread watchdog{}
Dieser Thread stellt im Intervall timeout/2 den Watchdog zurück.
Dieser Thread kann über die Funktion init()
gestartet werden.
Wird dieser Thread nicht benutzt muß der Watchdog "manuell" über
die Funktion resetWD() regelmäßig zurückgesetzt
werden, damit kein
Reset augelöst wird
Autor: André Helbig
Erstellt: 11.02.2007 ©www.CC2Net.de