Einfügen als Gemeinsames Modul
Funktionen:
init()
Increment_Lesezeiger()
rxd()
get_rxd()
sende()
Empfang()
Zusatzinfos:
Schaltpläne
Bilder
Beschreibung Nach oben
Das Modul FS20.c2 ist in Verbindung mit dem Assembler-Treiber
FS20.hex und
einem 868,35MHz Empfänger /
Sender als flexible Erweiterung für das FS20-Haussteuersystem
von ELV bzw.
Conrad-Elektronik gedacht. Die CC2 wird damit in der Lage versetzt Funkbefehle
eines jeden FS20-Senders zu empfangen und bei Anschluss eines Sendermoduls auch
zu senden.
( gesetzlichen Bestimmungen beachten!)
Die hier zur Verfügung stehende Version 1.1 unterstützt zusätzlich zum
FS20-Funkprotokoll
ein noch um 2 Byte erweitertes Funkprotokoll, das eine einfache Kodierung des Signals erlaubt
( gilt nur
für eigens entwickelte Empfänger ).
Version 1.1 | ||
|
Einfügen als Gemeinsames Modul Nach oben
Die Datei FS20.c2 in das Verzeichnis .\CControl2\UserLib
der IDE kopieren und
in der Datei modules.txt die Zeile Fs20.c2 am Ende
einfügen (falls sie noch nicht vorhanden ist!).
Ein zusätzliches Ausrufezeichen unmittelbar nach einem Modulnamen in modules.txt
bestimmt,
daß das Modul in jedem neuen Projekt von Anfang an
aktiviert wird.
Konstanten Nach oben
Die im Modul FS20.c2 aufgeführten Konstanten dienen der Definition der
Speicherstelle
im Integerarray und dürfen auf keinen Fall verändert werden!
Die im Demoprogramm FS20_Demo.c2 befindlichen Konstanten sind veränderbar.
const Hauscode_H1
= 0x1111;
// gültiger Bereich 0x1111 …0x4444 nach FS20
Spezifikation
const Hauscode_L1 = 0x1111;
// gültiger Bereich 0x1111 …0x4444 nach FS20
Spezifikation
const Hauscode_H2
= 0x1111;
// gültiger Bereich 0x1111 …0x4444 nach FS20
Spezifikation
const Hauscode_L2 = 0x1111;
// gültiger Bereich 0x1111 …0x4444 nach FS20
Spezifikation
const Testgeraet = 0x1111;
// Geräteadresse nach FS20 Spezifikation
const Empfaenger_Port = 14;
// frei wählbar im Bereich 0..15
const Sender_Port = 15;
// frei wählbar im Bereich 0..15
const T7_Mode = 1;
// 0 = kein Timer verwenden. 1 = mit Timer T7
Variablen Nach oben
Mit den hier angeführten Internet-Array Variablen
werden die Parameter an das ASM-Programm übergeben:
int Arbeitsspeicher[77]; // 154 Bytevariablen für Sende/Empfangspuffer
usw.
Funktionen:
init() Nach oben
function init()
Die Funktion init()
initialisiert die Assemblerroutine und
muß am Anfang des thread main aufgerufen
werden und zwar noch bevor der thread Empfang gestartet wird!
Die Funktion benötigt den Hauscode unbedingt
in hexadezimaler Form.
Mit der Funktion init() wird
der Hauscode bis zum nächsten Reset/Sytemstart festgelegt,
damit wird ein scannen nach
Hauscodes verhindert.
Increment_Lesezeiger() Nach oben
Function increment_Lesezeiger()
Wird nur vom Treiber selber benötigt.
rxd() Nach oben
function rxd() returns int
Die Funktion prüft ob Lesepufferzeiger und Schreibpufferzeiger voneinander
abweichen und
liefert true zurück, wenn weitere Zeichen
im Lesepuffer stehen.
get_Rx()
Nach oben
function get_Rx() returns int
Mit der Funktion get_Rx wird der Lesepuffer ausgelesen ( max. 12 Datenrahmen ).
Bei jedem Aufruf liefert die Funktion ein Integer=2Bytes zurück. Ein Datenrahmen besteht
aus 8 Bytes ( Hauscode_H, Hauscode_L, Geräteadresse, Befehl1, Befehl2,Code1,Code2,Dummy)
Die Routine muss also für einen Datenrahmen 4-mal ausgeführt werden.
Beim Empfang eines FS20-Handsenders wird Code1 und Code2 immer 0 liefern.
Die Bytes müssen trotzdem abgeholt werden!
Eine Besonderheit ist noch, der FS20-Sender sendet einen Befehl ( Taste <0,4s gedrückt ) 3 mal,
bei einwandfreiem Empfang wird auch 3 mal das gleiche Signal bei der CC2 ankommen.
Es liegt an jedem selber, ob er nach dem Empfang eines Datenpaketes sofort
weiter empfangen lässt oder mit einem sleep 150; den Mehrfachempfang unterdrückt.
Tx_Hex()
Nach oben
function Tx_Hex()
Die Funktion Tx_Hex benötigt die gleichen Parameter wie die Funktion get_Rx() liefert.
Wird Code1 ungleich 0 übergeben, so werden auch die beiden Codebytes gesendet.
Die Funktion Tx_Hex konvertiert die Adressen in das Byte-Format.
Bei jedem Aufruf wird das Signal 3 mal im Abstand von 10ms gesendet ( FS20-Vorgabe ).
Ein Datenrahmen besteht aus 59 Bit ( +18Bit für die Code1 und code2 ),
daraus ergibt sich eine Sendezeit von ca, 261ms ( inkl. 3*10ms Pause ).
Die gesetzliche Einschränkung für sie Sendedauer in unserem Frequenzbereich liegt
bei 36 Sekunden pro Stunde ( 1% Tastverhältnis/Duty-Cycle ) und muss eingehalten werden.
Im Programm muß unbedingt dafür Sorge getragen werden, daß die Sendezeit nicht überschritten wird.
Tx_Byte()
Nach oben
function Tx_Byte()
Die Funktion Tx_Byte entspricht der Funktion TX-Hex, es werden die Adressen jedoch als Byte erwartet.
Rx()
Nach oben
function Rx()
Die Funktion Rx() benötigt einen eigenen Thread und liefert true zurück, wenn ein Datenrahmen empf. wurde. Siehe Demo.
Nach dem Rücksprung aus dem Assemblerpgramms wird die übrige Rechenleistung des Threads wieder abgegeben.
Schaltpläne Nach oben
Bilder Nach oben