Kopp Free Control und NanoCUL

Begonnen von stoffel, 20 Januar 2016, 10:12:35

Vorheriges Thema - Nächstes Thema

Ralf9

ZitatInszwischen kann ich alle Handsender auslesen, da kommen immer 7 Bytes Nutzdaten mit jeweils drei Wiederholungen nach dem Schema:
Das sieht nach dem gleichen Protokoll aus wie es auch im Cul und Signalduino eingebaut ist. Es gibt dafür das Modul 10_KOPP_FC.pm.

Hier ist eine Beispiel Sendenachricht
07FA5E1721CC0F02FE000000000000

sie hat folgenden Aufbau:
07 FA5E               17        21     CC0F      02           FE
07 TRANSMITTERCODE1 $blkctr $keycodehex CC0F TRANSMITTERCODE2 $blkck 000000000000


blkctr wird bei jeder gesendeter Nachricht hochgezählt
blkck ist die Prüfsumme

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Haykonus

#346
Hallo Gemikro, hallo Ralf9,

@Gemikro: dann kannst du ja mit deinen Messungen bestätigen, was ich hier beobachte. Da bin ich fast erleichtert.

Ich habe hier auch schon viel probiert, um das Problem einzugrenzen:

•   Weitere, baugleiche 868 MHz-Module probiert
•   Ein anderes 433 MHz Modul mit CC1101 verwendet (mit geringerer Entfernung zum Empfänger)
•   Separate 3,3V Spannung (nicht über Arduino) für den CC1101 mit sehr viel Stromreserve und Elkos als Puffer
•   Aufbau mit sehr kurzen Drähten zw. Arduino und CC1101-Modul
•   Mit/ohne Pegelwandler
•   Abstände zw. Sender/Empfänger systematisch variiert
•   TX-Power systematisch von -10 dBm ... 10 dBm Leistung variiert 
•   Antenne mit 18 und 9 Windungen (Danke für den Tipp an Ralf9)
•   Und, wie schon gesagt, Firmware ,,culfw" und ,,SIGNALduino" von Ralf9 verwendet

Das Problem zeigte sich immer auf die gleiche Weise, die Empfänger reagieren oft sofort, aber dann doch wieder erst beim zweiten oder dritten Mal Senden. 

Ich kann mir das nicht erklären. Wenn natürlich die CC1101-Module bei 868 MHz mit GFSK das Problem sind, müsste man ggf. den CC1150 verwenden, der ein reiner Transmitter ist und in den Original-Kopp-Tastern eingesetzt wird. Meine Schaltung mit dem 868 MHz-Modul funktioniert übrigens sehr gut mit 433 MHz und Somfy-Protokoll. Damit möchte ich meine Heim&Haus-Dachfenster-Rollladen steuern. Dank der tollen SIGNALduino-Firmware von Ralf9, kann man verschiedene CC1101-Register-Konfigurationen speichern und dann leicht zwischen diesen Konfigurationen hin- und herschalten. Ich könnte alles bei mir, außer ein Velux-Fenster :-( , mit einem CC1101-Modul steuern.

Soweit mein ,,Frontbericht". Tolles Forum hier, vielleicht finden wir ja gemeinsam noch eine Lösung.

Viele Grüße,
Haykonus

Gemikro

Hi Haykonus, hi Ralf,

@Haykonus: ich hab in den letzten Tagen viel probiert mit dem Chip, laut SDR hat der deutlich weniger Leistung als die Handsender von Kopp.
Man sieht auch dass die Leistung nochmals sehr stark einbricht wenn man schnell hintereinander den gleichen Befehl absetzt, da dürfte am China Chip etwas im Leistungsteil unterdimensioniert sein.
Für meine Anwendung als reiner Empfänger mit dem ESP8266 reicht es aber bei weitem, das läuft mittlerweile ganz gut.

Ich hab auch noch die Antenne mit den 16 Windungen getestet , da ist zu der mit 9.5 Windungen kaum ein Unterschied.
Wenn ich das richtig rechne passen die aber beide nicht für 868MHz.

Ich hab heute mal eine Ringantenne mit richtiger Länge drauf gelötet, ähnlich zu der in den Kopp Empfängern, die geht etwas besser.

Ausserdem sind die Frequenzabweichungen zwischen den China Prints gewaltig, ich habe inzwischen drei davon getestet und die waren zwischen 50 und 100kHz daneben.
Die Library die ich verwende hat wenigestens eine Funktion dass man die Frequenz mit dem SDR als Feedback kalibrieren kann.

Ich hab ein paar Prints aus den Kopp Rollladenschaltern ausgebaut und in Betrieb genommen.
Leider hat der ATmega48 aber etwas wenig Flash und ich habe bisher den CC1100 darauf noch nicht zum Laufen bekommen weil der Ouptut des Arduino Compilers noch zu groß ist.

Gemikro

Hi Haykonius,

mit der neuen Antenne habe ich jetzt auch den Sender zum Laufen gebracht.
Ich habe auch einen 8080.02 Rolladenschalter zerlegt und mir den SPI Startup angesehen (Power on Codes.txt).
Ist minimal anders als beim Listing von Papa Felice, hauptsächlich die Kalibrationswerte.

Ich hab Dir auch den Arduino Code angehängt, der schaltet bei mir jetzt zuverlässig, ich verwende übrigens einen Pro Micro 3.3V / 16 MHz.

Grüsse, Gemikro

Haykonus

Hallo Gemikro,

ich kann es noch nicht glauben – mit Deinem Code funktioniert es tatsächlich richtig zuverlässig. Der 8080.02 schaltet nun wirklich jedes Mal. Super !!! Es hat hier bei mir nichts mit der Antenne, Hardware, etc. zu tun. Das hatte ich auch schon vermutet, da ich ja so extrem viel an den Hardwareparametern geändert hatte und sich das Problem trotzdem immer exakt gleich zeigte. 

Jetzt würde ich wirklich einmal wissen wollen, ob es an den angepassten Kalibrationswerten aus Deinem SPI-Trace liegt. Man müsste das doch auch mit ,,culfw" oder besser noch mit ,,SIGNALduino" hinbekommen. Ich werde das noch einmal probieren. Aber wenn es nicht gehen sollte, baue ich das auch selbst mit der ELECHOUSE Library.

Vielen Dank hier an Alle im Forum – das macht wirklich Spaß !

Viele Grüße,
Haykonus

Ralf9

Ich hab mal die cc1101 Register vom Signalduino mit denen vom Gemikro verglichen, da sind einige Werte anders.
Ich kann aber nicht abschätzen welche entscheidend sind.

Ich hab die sduino Register vor den Registern von  Gemikro eingefügt:

             sduino
0x01 IOCFG1        0B -> GDO1 serial clock
0x02 IOCFG0        0C -> GDO0 serial synchronous data output
0x06 PKTLEN     0F FF -> max length 255
0x07 PKTCTRL1   E0 00 -> no address check, no status append, no crc autoflush, Preamble quality threshold 0
0x08 PKTCTRL2   00 12 -> variable length, synchronous serial mode with data in GDO0
0x09 ADDR      *00 00 -> no addr
0x0B FSCTLR1    06 06 -> Freq_if = 152.34375kHz
0x0C FSCTRL0   *00 00 -> FreqOffset = 0
0x0D FREQ0      21 21 ->
0x0E FREQ1      65 65 ->|->
0x0F FREQ0      6A E1 ->|->|-> Freq = 868,347076 MHz
0x10 MDMCFG4    97 C7 -> BW_Chan = 101.5625 kHz
0x11 MDMCFG3    83 83 -> DataRate = 4797.935 Hz
0x12 MDMCFG2    16 10 -> No Preamble !, No Manch., GFSK, Enable DC Filter
0x13 MDMCFG1    63 22 -> 4 Preamble Bytes (but disabled !), FEC disabled
0x14 MDMCFG0    B9 F8 -> Channel Spacing = 199.951 kHz
0x0A CHANNR     00 00 -> Channel 0
0x15 DEVIATN    47 40 -> FreqDev = 25.390 kHz
0x21 FREND1    *56 56 -> Default Value (LNA, Buffer, Mixer Currents)
0x22 FREND0     11 10 -> Default Value (PA Power Table)
0x18 MCSM0      29 08 -> Osc. Setup Time 150µs, no fs_autocal
0x19 FOCCFG     36 12 -> Frq. Comp Gain 3K, no offset compensation
0x1A BSCFG     *6C 6C -> no rate offset, Post: Kp, Ki/2, Pre: 3Kp, 2Ki 
0x1B AGCCTRL2   07 43 -> Target 33dB, Max pos. LNA Gain, highest gain set. not used
0x1D AGCCTRL0   91 91 -> 16 samples, no AGC freeze, wait time 16 samples, low hyst.
0x23 FSCAL3     00 E9 -> calib value from SmartRF Studio
0x24 FSCAL2     2A 2A ->
0x25 FSCAL1     00 ??
0x26 FSCAL0     11 1F ->

* = default


Hier ist eine Beispiel Sendenachricht vom sduino
07FA5E1721CC0F02FE000000000000

Mich würde interessieren wie eine Sendenachricht von Gemikro aussieht.

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Haykonus

Hallo Ralf,

eine Nachricht sieht z.B. so aus:

00:21:52.169 -> AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,54,07,63,88,6B,10,CC,0F,03,FD,00,4F

Grüße,
Haykonus


Haykonus

#352
Hallo Gemikro, hallo Ralf,

ich habe noch einige Versuche gemacht.

Durch schrittweises Verringern der Anzahl der Sync-Bytes ,AA' konnte ich quasi den schlechten Empfang simulieren. Ab ca. 6 x ,AA' funktioniert der Empfang immer schlechter und dann gar nicht mehr. Die Anzahl der Paket-Wiederholungen bei Gemikro war 4.

Ich habe nun die Gesamtdauer des HF-Signals eines Tastendrucks der Originalschalter gemessen und mit der Dauer meiner gesendeten ,,Tastendrücke" verglichen.

Da wir wissen, dass die Originalschalter die Pakete 13 Mal hintereinander senden, konnte ich durch Einstellen der Anzahl der Sync-Bytes ,AA' und der gleichen Anzahl an Paket-Wiederholungen (13), die gleiche Länge eines Tastendrucks im Vergleich zu den Originalschaltern einstellen.

Das Ergebnis ist folgender Paketaufbau:

13:44:33.460 -> Sending...
13:44:33.460 -> AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,AA,54,07,63,88,01,10,CC,0F,03,97,00,
13:44:34.308 -> Sent !

Ich musste die Anzahl der Sync-Bytes ,AA' von 16 auf 24 erhöhen, um auf die Gesamt-Sende-Dauer der Originalschalter zu kommen. Das funktioniert nun ultra-sicher. Im Originalcode von Gemikro wurde am Ende noch das Byte ,4F' angezeigt, jedoch nicht gesendet. Das spielt also keine Rolle.

@Ralf: Könnten diese Informationen helfen, den Code im SIGNALduino anzupassen ? Ich habe noch gar nicht geschaut, wie das dort mit den Sync-Bytes ,AA' gemacht wird. Vielleicht wäre das schon die Lösung.

Viele Grüße,
Haykonus


Ralf9

Beim cul und sduino werden momentan durch das Register 0x13 MDMCFG1 mit 0x63 16 Preamble gesendet, mit 0x73 werden 24 Preamble gesendet.

Momentan werden bei der für den Signalduino angepassten 10_KOPP_FC.pm am Ende noch einige 00 angehängt
07FA5E1721CC0F02FE000000000000
damit nur eine 00 angehängt wird, muss noch in der 10_KOPP_FC.pm diese Zeile angepasst werden:

sub KOPP_FC_SendCommand($@)
$message = "SN;R=13;N=4;D=" . $dmsg . sprintf("%02x",$blkck) . "00;";  # alt "000000000000;"
neu 07FA5E1721CC0F02FE00

Vielleicht reicht es, wenn bei den sduino cc1101 registern die folgenden  6 Register angepasst werden
Reg
00 01
01 2E
02 46
03 04 FIFOTHR
04 AA SYNC1
05 54 SYNC0
06 0F PKTLEN   0F = 15 Bytes               -> neu FF =  max length 255
07 E0 PKTCTRL1
08 00 PKTCTRL0 00 = Fixed package length   -> neu 01 = variable length
0D 21 FREQ2
0E 65 FREQ1
0F 6A FREQ0
10 97 MDMCFG4  97 = bWidth 162,5           -> neu C7 = 101.5625 kHz
11 83 MDMCFG3
12 16 MDMCFG2
13 63 MDMCFG1  63 = 16 Preamble            -> neu 73 = 24 Preamble
14 B9 MDMCFG0  B9 = Channel spacing 350kHz -> neu F8 = 199.951 kHz
15 47 DEVIATN  47 = 47,607 khz (default)   -> neu 40 = 25.390 kHz
17 0C MCSM1
18 29 MCSM0
19 36 FOCCFG
1B 07 AGCCTRL2
1C 40 AGCCTRL1
1D 91 AGCCTRL0
22 11 FREND0
23 E9 FSCAL3
24 2A FSCAL2
25 00 FSCAL1
26 11 FSCAL0


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Haykonus

Hallo Ralf, hallo Gemikro,

ich habe nun folgende Konfiguration, die bei mir auch mit dem SIGNALduino sehr gut funktioniert (s.Code).

MDMCFG4, MDMCFG0, DEVIATN hatte ich auch schon genau so angepasst - zusammen mit MDMCFG1=73 (24 Preamble) läuft es jetzt richtig stabil.

Jetzt kann ich die "Heim&Haus"- und "KOPP"-Rollladen alle mit einem CC1101 am SIGNALduino steuern. Coole Sache ...

Vielen Dank für Eure Hilfe !

Grüße,
Haykonus


Reg  Haykonus
00   01     
01   2E     
02   46     
03   04       FIFOTHR
04   AA       SYNC1
05   54       SYNC0
06   0F       PKTLEN   
07   E0       PKTCTRL1
08   00       PKTCTRL0
0D   21       FREQ2
0E   65       FREQ1
0F   CA*      FREQ0    6A = 868,299 MHz            -> neu CA = 868,338 MHz
10   C7*      MDMCFG4  97 = bWidth 162,5           -> neu C7 = 101.5625 kHz
11   83       MDMCFG3
12   16       MDMCFG2
13   73*      MDMCFG1  63 = 16 Preamble            -> neu 73 = 24 Preamble
14   F8*      MDMCFG0  B9 = Channel spacing 350kHz -> neu F8 = 199.951 kHz
15   40*      DEVIATN  47 = 47,607 khz (default)   -> neu 40 = 25.390 kHz
16   07       MCSM2
17   0C       MCSM1
18   29       MCSM0
19   36       FOCCFG
1B   07       AGCCTRL2
1C   40       AGCCTRL1
1D   91       AGCCTRL0
22   11       FREND0
23   E9       FSCAL3
24   2A       FSCAL2
25   00       FSCAL1
26   1F*      FSCAL0   11 = fscal0 alt             -> neu 1F = fscal0 neu

Ralf9

Hast Du auch die Anpassung in der 10_KOPP_FC.pm (nur noch eine 00 am Ende) vorgenommen?

Hat sich am Empfang der Fernbedienung was geändert?

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Haykonus

#356
Hallo Ralf,

die 10_KOPP_FC.pm hatte ich als erstes angepasst, aber da gibt es keinen Unterschied. Ich habe es aber jetzt so gelassen, d.h. es wird nur einmal 00 gesendet.

Die Handsender funktionieren weiterhin. Der Rolling Code spielt bei KOPP scheinbar keine Rolle - zumindest bei den 8080.02-Empfängern nicht.

Viele Grüße,
Haykonus

Gemikro

Hallo Ralf, hallo Haykonus,

sorry Leute, ich war etwas angehängt in der Firma in den letzten Tagen.

Was ich gemacht habe ist einen Trace von der Initialisierung der Kopp Schaltern und Taster anzusehen (Saleae Logic Analysator), kann ich auch hier reinhängen wenn ihr den braucht aber das meiste steht schon in der Text Datei.
Die Schalter sind leicht anders konfiguriert als die Empfänger aber das sollte sich auf den Arduino Code nicht auswirken.

Ich habe mit einer Version des Programms mehrere Telegramme aufgezeichnet, das Problem der Library war dass wegen der von Kopp angegeben Länge von 7 Zeichen den CRC und die davor gesendeten Preambel nicht angezeigt hat.
Kopp verwendet nur sehr wenige Funktionen von CC1100/1101, praktisch alles was die Überprüfung der Message betrifft ist deaktiviert z.b der eingebaute CRC, Preamble, Manchester und FEC sind alles aus.
Deswegen war meine Vermutung dass der Sender alle Bytes der Message samt Preamble, Länge und das eine Byte CRC einfach berechnet, als String zusammenstellt und ca. 4-5 mal hintereinander wiederholt sendet.
Das habe ich dann ins Programm eingebaut und das funktioniert sehr gut.
Der Tastendruckzähler hat wahrscheinlich damit zu tun dass der CC1100 die Wiederholungen empfängt und puffert und dann der Schalter eventuell zweimal schalten würde. 
Soweit ich das aus dem Atmel Code sehe werden einfach alle eingehenden Nachrichten mit dem gleichen Code bearbeitet und nur ein Schaltereignis ausgelöst wenn sich der Zählerwert ändert.
Die Preambel Bytes werden ebenfalls händisch eingebaut, in den Setup Befehlen für den Sender ist ja die Preamble Länge auf Null gesetzt.

Grüsse, Gemikro


Gemikro

Übrigens:
Die Kalibrationswerte sind tatsächlich recht wichtig, vorallem bei den China Chips.
Ich muß bei meinem Testaufbau jeden Sender extra kalibrieren (ich verwende hier SDR Sharp oder den TinySA).
Es gibt hier eine Software von TI (Smart RF Studio) über den sich der CC1101 einstellen lässt und das die Registerwerte ausspuckt.
Über die Elechouse Library geht das auch (https://github.com/LSatan/CC1101-Debug-Service-Tool

Ich habe den Code von LSatan nur etwas angepasst an die SPI Pins vom ProMicro und dann für jeden CC1101 mit dem SDR die passenden Werte ermittelt.

Es gibt auch ein sehr gutes und kleines CC1101 Modul mit Antennenstecker von Anaren A1101R04C-EZ4E (z.b. bei Farnell, Digikey) da habe ich jetzt welche bestellt.
Das wäre wahrscheinlich für euren Nano CUL gut brauchbar als Huckepack Modul.

lg Gemikro