FS20.C2 V1.1 - Hilfe


Beschreibung

Neuerungen

Einfügen als Gemeinsames Modul

Konstanten

Variablen

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 ).

Neuerungen

Version 1.1
- P1H.6 – Bug beseitigt ( wurde in der V1.0 einmalig gesetzt ).
- alte Funktion sende() durch 2 neue Funktionen Tx_Hex() und Tx_Byte() ersetzt.
- alte Funktion Empfang durch die neue Funktion RX() ersetzt, RX() liefert true zurück,
   wenn ein gültiger Datenrahmen empfangen wurde.
- Die Empfangsroutine kann optional mit dem Timer T7 verwendet werden. T7 liefert
   ein u. a. ein Timeout, wenn kein Signal vom Empfänger anliegt. Aktiviert wird
   die Funktion mit T7_Modus=1 .
   Wer ein Modul verwendet, welches den Timer benötigt, der sollte T7_Modus=0 verwenden.
   (Das Timeout wird gebraucht, wenn keine Fremdimpulse in das Signal einstreuen ) 
- Der Empfangspuffer wurde auf 12 Datenrahmen erweitert ( 4*3 Datenrahemen ).
- alte Funktion get_rxd() in get_Rx() umbenannt.
- es werden 2 Hauscodes unterstützt, dadurch verdoppeln wir die Anzahl der Geräte.

 


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






Autor Version 1.1: Hans-Jörg Schuschke   Mail: hschuschke@aol.com   Erstellt: 06.12.2004