
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
So, ich hab's doch geschafft ;-) Auf der Basis des Listings unten (unter Verwendung des HighRes-Timers) hab ich einen Universalempfänge programmiert. Das Programm läuft nur unter Basic++ funktioniert aber recht sicher. Es werden alle Daten des Datenstroms ausgelesen. Alle Prüfungen (Parity und Quersumme) sind drin. Auch das Erweiterungsbyte wird, wenn vorhanden, ausgelesen. Dabei wird jeder gültige FS-20 Datenrahmen angezeigt. Man kann also auch die Markisen-Codes des Nachbarn damit ausspähen ;-) Die Anzeige erfolgt auf dem Display und ausführlich über Terminal. Beispiel: ============================================ HC1:(-1) 00001101 (13) Dez HC2:(-1) 00111101 (61) Dez ADR:(0) 00000000 (0) Dez BEF1:(0) 00010001 (17) Dez: Befehlstext: An BEF2:(0) 00000000 (0) Dez qsum:(-1) 01100001 (97) Dez ============================================ Da es reines Basic ist, kann es sicher noch stark optimiert (beschleunigt) werden. Als Hardware reicht ein beliebiges Empfängermodul und 3 Dioden zur Spannungsanpassung. Meins habe ich aus einem kaputten Dimmer ausgebaut. Der Datenport kann direkt an einen Digitalport angeschlossen werden. (bei mir Port1) Sollte doch jemand Interesse daran haben, bitte Mail an mich. > > > Hat sich damit mal jemand befasst? > > > Mich würde eine Möglichkeit FS20-Geräte anzubinden wirklich interessieren. > > > Leider hab ich noch keinerlei Erfahrungen mit Assembler-Modulen. > > > Ich fürchte in reinem Basic kann man das FS 20 Protokoll nicht auswerten oder ? > > > > Ich hab's mir einfach gemacht und bediene einen FS20-Unterputzsender (über Putz) über Relais mit der CC1-Station um meine diversen FS20-Empfänger (Rollladensteuerung) zu schalten. > > > > HTH > > > > Bye > > Achim > > Ok, Ich träum aber schon von einem Universal Sender/Empfänger ;-) > Ein bisschen hab ich schon versucht in Basic zu schreiben, um das Sendersignal auszulesen: > > > define LIGHT as port[16] > define FTIMER as word[4] ' RESERVIERT VOM TREIBER > '-- SYSTEM ROUTINEN ------- > CONST CLR_FTIMER = FD98h > CONST GET_FTIMER = FD89h > CONST NO_INT = FD85h > CONST YES_INT = FD87h > import "..\LIB\SERVOMODE.BAS" > '-------------------------------------------------------------------- > ' HOCHAUFLÖSENDER TIMER > '-------------------------------------------------------------------- > ' --------- SYS INIT -------- > SERVOMODE () > LCD.INIT > LIGHT=off > dim x as byte > dim oldbit as bit > dim ioport as port[1] > dim wert as byte > > oldbit = ioport > #LOOP > WAIT oldbit <> ioport 'or timer > 0 > SYS CLR_FTIMER ' 1us TIMER UND 20ms TIMER > 'Eine Perionde warten > WAIT oldbit = ioport 'or timer > 0 > WAIT oldbit <> ioport 'or timer > 0 > 'Timer stoppen > SYS NO_INT '32us > SYS GET_FTIMER ' WERTE DER TIMER SICHERN > 'Bestimmen ob es ein HighBit oder ein LowBit war ( wert=2 : ungültige Perionenlänge ) > if FTIMER < 600 then wert = 2 > if FTIMER > 600 then wert = 0 > if FTIMER > 1000 then wert = 1 > if FTIMER > 1450 then wert = 2 > > 'Zeit und Wert ausgeben > LCD.POS 1,1 > '---------- n*20 ms VOM TIMER BERECHNEN ----------------------------- > SYS YES_INT > LCD.PRINT "ZEIT: " & FTIMER & "." > LCD.POS 2,1 > LCD.PRINT "Wert: " & wert > pause 20 > 'Nächste Periode messen > goto LOOP > > '--------- GERÄTETREIBER LADEN ---------- > syscode "M20_UTIL11_PAGE0.s19" > > > > Hier nutze ich das Util1.1 zum Messen der Zeiten. > Zumindest kann ich schon einmal High von Low-Bits unterscheiden. Aber das stößt schon sehr an die Grenzen von Basic. > Hat keiner eine bessere Idee, wie das besser zu lösen ist ? |
| Antwort schreiben |