TWBS.C2 - Hilfe


Beschreibung

Einfügen als System-Modul

Theorie:

Technische Voraussetzungen

Funktionen:

Allgemeine Funktionen (für alle Sensoren):
rw_frame()
ssa()
ssg()

Funktion für T-23-100, ADC-10, PIO-4 und PPIO-4:
rwport()

Funktion für T-23-100:
stemp()

Funktion für LCD-2x8:
wlcd()

Funktionen übernommen und adaptiert aus "twbus.c2" von Conrad:

Funktion für ADC-10:
get_volts()

Funktionen für IR-RMT:
rc5_mode()
rec80_mode()
get_ir_data()
send_ir_data()

Funktionen für F/E-CNT:
get_freq()
get_events()

Funktionen für T-23-100, ADC 10, und PIO 4:
PIO_init()
PIO_on()
PIO_off()
PIO_in()


Beschreibung   Nach oben

Das Modul twbs.c2 ist ein Treiber für alle Sensoren am 2W - Bus

Einfügen als System-
Modul
   Nach oben

Die Datei twbs.c2 in das Verzeichnis .\CControl2\Lib kopieren und in der Datei modules.txt
die Zeile twbs.c2 unterhalb von mem.c2, str.c2 und twb.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.


Technische Voraussetzungen:    Nach oben

*) Jeder Sensor hat am Bus seine eigene Adresse, die nur einmal vergeben werden darf.

*) Die Adresse 32 (hex 0x20) ist in "twbs.c2" für das 2WB-Modem reserviert,
   natürlich darf deshalb kein Sensor mit dieser Adresse versehen werden.

*) Die Adresse 85 (hex 0x55) ist für Sensoren mit gestecktem Jumper vorgesehen,
   kann also nicht eingesetzt werden, wenn mehr als ein Sensor am Bus benutzt wird.

*) Zur Adress-Programmierung eines Sensors muss an diesem der Jumper gesetzt werden,
   einmal die Funktion "twbs.ssa(adr)" mit der gewünschten Sensoradresse aufgerufen werden,
   dann wird der Jumper entfernt.
   Und dann wird (OHNE JUMPER) derselbe Aufruf von "twbs.ssa(adr)" nochmals wiederholt,
   denn erst danach behält der Sensor seine Adresse.
   Ein Entfernen des Sensors vom Bus ist bei dieser Vorgehensweise nicht nötig !

*) Hat man mehrere Sensoren am Bus zu programmieren, steckt man auf ALLE den Jumper,
   entfernt ihn aber NUR AUF DEM, der die gesendete Adresse kriegen soll.
   Dann wird der Aufruf ein zweites mal wiederholt, wie oben beschrieben.
   Danach kann der nächste Sensor programmiert werden, usw., bis alle fertig sind.

*) Ein Kommando an einen Sensor wird im Treiber nicht direkt auf Gültigkeit geprüft,
   dies muss innerhalb des Programmes geschehen.
   Dazu dient der Aufruf der Funktion "twbs.ssg(adr)", um die Sensorgruppe zu ermitteln.
   Jede Sensorgruppe hat auch spezielle Kommandos, die andere nicht haben.
   Es gibt aber auch gemeinsame Kommandos wie zum Beispiel "Send Sensor Group" oder
   "Set Sensor Adress".
   Ein Aufruf eines falschen Kommandos führt zu unvorhersehbaren Ergebnissen.
   Ein PIO-4-Sensor kann zB. keine Temperatur zurückmelden...

*) Fehler am 2W-Bus melden die Treiberfunktionen mit Rückgabewerten oberhalb von 2000:
   2001 ... Timeout (wahrscheinlich kein Sensor mit der Adresse vorhanden)
   2002 ... Fehlerhafter Antwortstring
   2003 ... falsche Modemadresse
   2004 ... falsche Sensoradresse
   2005 ... falsche Prüfsumme

*) Fehler kommen immer wieder vor, sie bedeuten aber nicht unbedingt, dass ein Defekt
   vorliegt. Besonders bei längeren Leitungen kann es immer wieder zu Einstreuungen
   kommen. Wenn zB. eine Neonleuchte in der Nähe eingeschaltet wird, oder andere
   Verbraucher, die an der gleichen Stromversorgung wie die CC2 hängen.
   Ein gutes Programm handelt diese Fehler korrekt ab, und liest den Sensor später
   eben nochmals aus.


Funktionen:

rw_frame    Nach oben

    function rw_frame(byte ID, byte ADR, byte D2, byte D1, byte D0) returns int

Die Funktion rw_frame() sendet ein Datenframe, empfängt die Antwort und prüft auf Fehler.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.
Alle anderen Funktionen rufen diese zur eigentlichen Kommunikation auf.

ID Kommando an den Sensor
ADR Adresse des Sensors
D2 Datenbyte 2
D1 Datenbyte 1
D0 Datenbyte 0


ssa()    Nach oben

    function ssa(byte ADR) returns int

Mit Set Sensor Adresse ssa() wird dem Sensor mit dem Jumper eine neue Adresse zugewiesen.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.

ADR Adresse des Sensors


ssg()    Nach oben

    function ssg(byte ADR) returns int

Die Funktion Send Sensor Group ssg() liest die Sensor-Gruppe und gibt diese zurück.
Der Antwortwert bei Fehlern ist ein Wert über 2000.

ADR Adresse des Sensors


rwport()    Nach oben

    function rwport(byte ADR, bate MASK, byte DATA) returns int

Die Funktion Read Write Port rwport() liest und schreibt die Digitalports der Sensoren.
Die Antwort ist der Eingangswert, bei Fehlern aber ein Wert über 2000.

ADR Adresse des Sensors
MASK Bitmaske, 0 = Eingang, 1 = Ausgang
(Bei PPIO muss dieser Wert immer 0x0F sein !)
DATA Ausgangswert, 0 = Low, 1 = High


stemp()
   Nach oben

    function stemp(byte ADR) returns int

Die Funktion Send Temp Data stemp() liest Die Temperatur in Zehntelgraden aus.
Die Antwort ist die Temperatur, bei Fehlern aber ein Wert über 2000.

ADR Adresse des Sensors


wlcd()
   Nach oben

    function wlcd(byte ADR, byte D2, byte D1, byte D0) returns int

Die Funktion Write LCD wlcd() überträgt bis zu zwei Zeichen ins LCD des 2W-Displays.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.

ADR Adresse des 2W-Displays
D2 Subcommand
(Details siehe ab Seite 11 der Beschreibung des 2W-Displays)
D1 Datenbyte 1
D0 Datenbyte 0


get_volts()
   Nach oben

    function get_volts(byte ADR) returns int

Die Funktion get_volts() liest den Spannungswert des Sensors aus.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.
Die Übergabe des Spannungswertes erfolgt in der globalen Variable twbs.value !

ADR Adresse des Sensors


rc5_mode()
   Nach oben

    function rc5_mode(byte ADR) returns int

Die Funktion rc5_mode() aktiviert für den IR-RMT den RC5 - Modus.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.

ADR Adresse des IR-RMT


rec80_mode()
   Nach oben

    function rec80_mode(byte ADR) returns int

Die Funktion rec80_mode() aktiviert für den IR-RMT den REC80 - Modus.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.

ADR Adresse des IR-RMT


get_ir_data()
   Nach oben

    function get_ir_data(byte ADR) returns int

Die Funktion get_ir_data() liest empfagne IR - Daten vom IR-RMT aus.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.
Die Übergabe der IR - Daten erfolgt in der globalen Variable twbs.value !

ADR Adresse des IR-RMT


send_ir_data()
   Nach oben

    function send_ir_data(byte ADR, byte IRADR, byte IRCMD) returns int

Die Funktion send_ir_data() übergibt zu sendende IR - Daten an den IR-RMT.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.
Die Übergabe der IR - Daten erfolgt in der globalen Variable twbs.value !

ADR Adresse des IR-RMT
IRADR Daten für IR-ADR
(Details siehe ab Seite 11 der Beschreibung des IR-RMT)
IRCMD Daten für IR-CMD


get_freq()
   Nach oben

    function get_freq(byte ADR) returns int

Die Funktion get_freq() liest den Frequenzwert in Hz aus dem F/E-CNT Sensor.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.
Die Übergabe des Frequenzwertes erfolgt in der globalen Variable twbs.value !

ADR Adresse des Sensors


get_events()
   Nach oben

    function get_events(byte ADR) returns int

Die Funktion get_events() liest die Impulszahl aus dem F/E-CNT Sensor.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.
Die Übergabe des Impulszahl erfolgt in der globalen Variable twbs.value !

ADR Adresse des Sensors


PIO_init()
   Nach oben

    function PIO_init(byte ADR) returns int

Die Funktion PIO_init() setzt alle Ports des Sensors auf Eingänge.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.

ADR Adresse des Sensors


PIO_on()
   Nach oben

    function PIO_on(byte ADR, byte PORT, byte PDATA, byte PDIR) returns int

Die Funktion PIO_on() setzt einen speziellen Port des Sensors auf High.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.

ADR Adresse des Sensors


PIO_off()
   Nach oben

    function PIO_off(byte ADR, byte PORT, byte PDATA, byte PDIR) returns int

Die Funktion PIO_off() setzt einen speziellen Port des Sensors auf Low.
Antwortwert ist 0x00 oder bei Fehler ein Wert über 2000.

ADR Adresse des Sensors


PIO_in()
   Nach oben

    function PIO_in(byte ADR, byte PORT, byte PDATA, byte PDIR) returns int

Die Funktion PIO_in() setzt einen speziellen Port des Sensors auf Input und liest ihn aus.
Antwortwert ist der Portwert oder bei Fehler ein Wert über 2000.

ADR Adresse des Sensors



Autor: Martin Binder   Mail: martin.binder@nusurf.at    Erstellt: 09.05.2004