Forum: HF, Funk und Felder Preiswertes CC1101-Funkmodul


von Jürgen T. (jtreumer)


Angehängte Dateien:

Lesenswert?

Unter dem Label 'Sygonix' sind diverse Sensoren und Aktoren im Handel, 
die auf dem (proprietären?) RS2W-Funkprotokoll basieren. Beim 
Versandhändler V*lkner ist derzeit mit der Artikel-Nr.S335991 ein 
solcher Sensor für knapp einen Euro erhältlich. Basierend auf einem 
kleinen AC-Stromwandler mit 6mm Durchlass teilt das Gerät einem 
Empfänger per 868MHz-Funksignal mit, ob ein zu überwachendes Gerät 
eingeschaltet ist oder nicht.

Beim Öffnen des Gehäuses (40x40mm, Bild_01) findet man eine 
Li-Knopfzelle CR2477 mit weit höherer Kapazität als die üblichen 
kleineren Exemplare (2032 o.ä.), sowie die eigentliche Trägerplatine 
(Bild_02). Nach Lösen von zwei Schrauben kann diese entnommen werden und 
gibt den Blick auf die Bestückungsseite frei (Bild_03). Zu erkennen sind 
ein Mikrocontroller (Nuvoton) und im oberen Bereich das CC1101-Modul, 
welches das HF-Signal über ein SMD-Bauteil auf die PCB-Antenne 
auskoppelt; weiterhin vorhanden sind einige SMDs zur Aufbereitung des 
Signals vom Stromwandler.

In einem Versuchsaufbau wurde ein Leiter einer 40W Glühlampe durch den 
Wandler geführt und untersucht, mit welchen Daten der Controller den 
CC1101 steuert. Hierbei konnte zwar der Schaltvorgang detektiert werden, 
aber nicht zwischen Ein- und Ausschalten differenziert werden. Nach 
längeren Recherchen zum RS2W-Funkprotokoll wurde beschlossen, den 
Controller durch Unterbrechen der Leiterbahnen vom CC1101-Modul 
abzutrennen, um letzteres mit einem Arduino-Nano zu verdrahten, Bild_04 
zeigt Details. Um die Anpassung an die PCB-Antenne weiterhin nutzen zu 
können, verblieb das Modul auf der Trägerplatine.

Verbreitete Verwendung finden fertige CC1101-Module (Bild_05) im 
'CUL-stick' oder 'nanoCUL' zum Betrieb in Homematic-Systemen. Aus der 
modifizierten Trägerplatine und einem Arduino lässt sich leicht ein 
solcher Stick herstellen; dazu muss natürlich die entsprechende Firmware 
in den Arduino geladen werden. Es gilt zu beachten, dass das 
CC1101-Modul mit 3.3V versorgt wird, ebenso die Datenleitungen. - Eine 
interessante Seite (https://asksinpp.de/) liefert weitere Infos zum 
Funkmodul und dem Thema 'Homematic'.

Für die Anschlussbelegung des Moduls auf der Trägerplatine gilt
(Lötinseln links oben im Gegenuhrzeigersinn):

CC1101-Modul     CC1101-IC-Pins     Funktion
-----------------------------------------------------
  #1                 ---            Antenne
  #2              #4,9,11,14,15     +3.3V Vcc
  #3              #20               SI
  #4              #1                SCLK
  #5              #2                SO
  #6              #3                GDO2
  #7              #6                GDO0
  #8              #7                CSn
  #9              #16,19            GND

Weitere Details zum CC1101-Chip ggfs.im Datenblatt nachschlagen.

Ich würde mich freuen, wenn jemand die im Sygonix-Baustein enthaltenen 
Elemente für eigene Zwecke nutzen kann, vielleicht sogar Details zum 
RS2W-Protokoll nennen kann. Immerhin sind der AC-Stromwandler, die 
Li-Knopfzelle und das Gehäuse ebenfalls Komponenten, für deren regulären 
Erwerb wesentlich mehr zu zahlen ist.

Beste Grüße, Jürgen

von Martin (Gast)


Lesenswert?

> Beim Versandhändler V*lkner ist derzeit mit der Artikel-Nr.S335991 ...

Warum kannst nicht gleich einen Links angeben?

von Felix U. (ubfx)


Lesenswert?

Das Protokoll zu reversen würde mich auch interessieren. Nur wird man da 
mehr als ein Endgerät brauchen und die restlichen sind leider nicht so 
günstig.

Beitrag #6390884 wurde vom Autor gelöscht.
von Peter K. (beschtler)


Angehängte Dateien:

Lesenswert?

Hallo Jürgen,
ich habe mir ein paar dieser Module gekauft und den Funkteil 
herausgeschnitten (s. Bild).
Damit konnte ich auf dem Labortisch eine Funkverbindung mithilfe 2er 
Arduino Pro Micros und der SmartRC-CC1101 Library herstellen.

Allerdings ist die Reichweite auf ca. 5m beschränkt.
Wie ist denn bei deinem Setup die Reichweite?
Evtl. ist die onboard Antenne nicht optimal.

Beitrag #6390928 wurde vom Autor gelöscht.
von Bastler (Gast)


Lesenswert?

Ist der Nuvoton (8051?/M0?) noch programmierbar oder hat der ein OTP 
Flash?

von wendelsberg (Gast)


Lesenswert?

Peter K. schrieb:
> Allerdings ist die Reichweite auf ca. 5m beschränkt.
> Wie ist denn bei deinem Setup die Reichweite?
> Evtl. ist die onboard Antenne nicht optimal.

Die Beschreibung sagt max. 150m im Freien.
Ich wuerde eher darauf tippen, dass nach dem Herausschneiden das 
Gegengewicht in Form der grossen Masseflaechen fehlt.

wendelsberg

von Gerald K. (geku)


Lesenswert?

Vielleicht schirmt auch das Steckbrett ab?

von jtreumer (Gast)


Lesenswert?

Das Argument mit der fehlenden Massefläche ist nicht von der Hand zu 
weisen, ich habe deshalb nach dem Durchtrennen der Leiterbahnen den Teil 
mit dem Prozessor stehengelassen. Auch eine Beeinflussung der 
PCB-Antenne durch das Steckbrett ist möglich; mit einem VNWA wurden bei 
868MHz Messungen an verschiedenen Antennen-Designs vorgenommen - ich war 
erstaunt, bei welch geringen Änderungen der Umgebung sich die 
Resonanzfrequenz der Antenne änderte..

Die Reichweite des Moduls habe ich nicht untersucht, sie sollte aber 
deutlich über 5m liegen. Stimmen die Parameter, mit denen das Modul über 
die Library angesprochen wird? Ich hatte damit den nanoCUL aufgebaut, da 
konnte man die HF-Leistung einfach ändern.

Versuche zur Weiterverwendung des Nuvoton-uP wurden nicht unternommen, 
es dürfte sich um einen OTP handeln.

Grüße, Jürgen

von Peter K. (beschtler)


Lesenswert?

Ich habe die folgenden Parameter aus dem advanced Beispiel der erwähnten 
Lib genommen:
1
#include <ELECHOUSE_CC1101_SRC_DRV.h>
2
3
//int gdo0 ;
4
const byte LED_PIN = 3 ;
5
6
void setup()
7
{   Serial.begin( 9600 ) ;
8
    pinMode( LED_PIN, OUTPUT ) ;
9
10
    ELECHOUSE_cc1101.Init() ;                  // must be set to initialize the cc1101!
11
  //ELECHOUSE_cc1101.setGDO( gdo0,0 ) ;        // set lib internal gdo pins ( gdo0,gdo2 )
12
13
    ELECHOUSE_cc1101.setCCMode( 1 ) ;          // config for internal transmission mode
14
    ELECHOUSE_cc1101.setModulation( 0 ) ;      // modulation mode. 0 = 2-FSK, 1 = GFSK, 2 = ASK/OOK, 3 = 4-FSK, 4 = MSK
15
    ELECHOUSE_cc1101.setMHZ( 868.3 ) ;         // auto calculated frequency ( default = 433.92 ). CC1101 can: 300-348 MHZ, 387-464MHZ and 779-928MHZ
16
    ELECHOUSE_cc1101.setDeviation( 47.60 ) ;   // frequency deviation in kHz. Value from 1.58 to 380.85. Default is 47.60 kHz
17
    ELECHOUSE_cc1101.setChannel( 0 ) ;         // channel number from 0 to 255. Default is 0
18
    ELECHOUSE_cc1101.setChsp( 199.95 ) ;       // channel spacing is multiplied by channel number CHAN & added to the base freq in kHz. Range: 25.39..405.45. Default 199.95 kHz
19
    ELECHOUSE_cc1101.setRxBW( 812.50 ) ;       // receive bandwidth in kHz. Range: 58.03..812.50. Default 812.50 kHz
20
    ELECHOUSE_cc1101.setDRate( 99.97 ) ;       // data rate in kBaud. Range: 0.02..1621.83. Default 99.97 kBaud!
21
    ELECHOUSE_cc1101.setPA( 10 ) ;             // TxPower. Possible values depending on the frequency band. (-30 -20 -15 -10 -6 0 5 7 10 11 12 ) Default = max!
22
    ELECHOUSE_cc1101.setSyncMode( 2 ) ;        // Combined sync-word qualifier mode
23
                                               // 0 = No preamble/sync
24
                                               // 1 = 16 sync word bits detected
25
                                               // 2 = 16/16 sync word bits detected
26
                                               // 3 = 30/32 sync word bits detected
27
                                               // 4 = No preamble/sync, carrier-sense above threshold
28
                                               // 5 = 15/16 + carrier-sense above threshold
29
                                               // 6 = 16/16 + carrier-sense above threshold
30
                                               // 7 = 30/32 + carrier-sense above threshold
31
    ELECHOUSE_cc1101.setSyncWord( 211, 145 ) ; // Syncword-H, Syncword-L. Must be the same for the transmitter and receiver. 
32
    ELECHOUSE_cc1101.setAdrChk( 0 ) ;          // Address check of received packages
33
                                               // 0=No check, 1=Addr check/no broadcast, 2=Addr check + 0x00 broadcast, 3=Addr check + 0x00 + 0xFF broadcast
34
    ELECHOUSE_cc1101.setAddr( 0 ) ;            // Address used for packet filtration. Optional broadcast addresses are 0 ( 0x00 ) and 255 ( 0xFF )
35
    ELECHOUSE_cc1101.setWhiteData( 0 ) ;       // Turn data whitening on/off. 0=Whitening off. 1 = Whitening on
36
    ELECHOUSE_cc1101.setPktFormat( 0 ) ;       // Format of RX and TX data. 0=Normal mode, use FIFOs for RX and TX
37
                                               //                           1=Synchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins
38
                                               //                           2=Random TX test mode; sends random data using PN9 generator. Works as normal mode, setting 0 in RX
39
                                               //                           3=Asynchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins
40
    ELECHOUSE_cc1101.setLengthConfig( 1 ) ;    // 0=Fixed packet length mode. 1=Variable packet length mode. 2=Infinite packet length mode. 3=Reserved
41
    ELECHOUSE_cc1101.setPacketLength( 0 ) ;    // Indicates the packet length in fixed packet length mode or max packet length in variable packet length mode
42
    ELECHOUSE_cc1101.setCrc( 1 ) ;             // 1=CRC calculation in TX and CRC check in RX enabled. 0=CRC disabled for TX and RX
43
    ELECHOUSE_cc1101.setCRC_AF( 0 ) ;          // automatic flush RX FIFO if wrong CRC. Requires that only 1 packet is in the RXIFIFO and packet length is limited to FIFO size
44
    ELECHOUSE_cc1101.setDcFilterOff( 0 ) ;     // Disable digital DC blocking filter before demodulator. Only for data rates < 250 kBaud.
45
                                               // The recommended IF frequency changes when DC blocking is disabled. 1=Disable (current optimized). 0=Enable (better sensitivity)
46
    ELECHOUSE_cc1101.setManchester( 0 ) ;      // Enables Manchester encoding/decoding. 0=Disable. 1=Enable
47
    ELECHOUSE_cc1101.setFEC( 0 ) ;             // Enable Forward Error Correction (FEC) with interleaving for packet payload (Only supported for fixed packet length mode)
48
    ELECHOUSE_cc1101.setPQT( 0 ) ;             // Preamble quality estimator threshold. The preamble quality estimator increases an internal counter by one each time
49
                                               //   a bit is received that is different from the previous bit
50
                                               //   and decreases the counter by 8 each time a bit is received that is the same as the last bit
51
                                               // A threshold of 4*PQT for this counter is used to gate sync word detection. When PQT=0 a sync word is always accepted
52
    ELECHOUSE_cc1101.setAppendStatus( 0 ) ;    // When enabled, two status bytes will be appended to the payload of the packet.
53
                                               // The status bytes contain RSSI and LQI values, as well as CRC OK
Und hier der Output des Receivers:
1
Hello World
2
72,101,108,108,111,32,87,111,114,108,100,
3
Rssi: -46
4
LQI: 130

Danke für den Hinweis mit der Massefläche.
Ich habe noch Module nachbestellt.
Damit kann ich dann testen, ob es damit besser ist.

von A. O. (a-o)


Lesenswert?

Zur Info: Über deren Nebenvetriebskanal 'Digitalo' ist es für 1 EUR 
weniger Versandkosten zu haben.

von Peter K. (beschtler)


Angehängte Dateien:

Lesenswert?

Ich habe die nachbestellten Module bekommen und mal den Empfänger mit 
Massefläche getestet. Die Reichweite war damit auch nicht besser.
Vermutlich wird das Modul anders initialisiert als die Defaults im 
Example Sketch.
Daher habe ich mal die Initialisierungssequenz aufgenommen.
Die SPI Frequenz ist bei 105kHz und die Initialisierungssequenz ist im 
angehängten CSV.

von Peter K. (beschtler)


Angehängte Dateien:

Lesenswert?

Und hier noch die Protokolle beim Ein- und Ausschalten eines Stromes 
durch die Detektionsspule.

von jtreumer (Gast)


Lesenswert?

Moin Peter,

es dürfte ein beträchtlicher Aufwand sein, die Initialisierung des 
CC1101 auf diese Weise herausfinden zu wollen; ich würde eher versuchen, 
die Parameter der verwendeten Library einzeln zu ändern und den Effekt 
zu beobachten. Z.B. hast Du verwendet 'ELECHOUSE_cc1101.setPA( 10 ) ; // 
TxPower' - offensichtlich kann man die HF-Leistung aber noch erhöhen 
(11,12).


Hast Du einmal eine einfache Initialisierung versucht wie in diesem 
Beispiel:

https://www.aeq-web.com/arduino-10mw-cc1101-ism-rf-transceiver/

Es muss natürlich verwendet werden: ELECHOUSE_cc1101.Init(F_868);

LG Jürgen

von Landolf (Gast)


Lesenswert?

Hallo! Na das klingt interessant... Mhm, noch eine Möglichkeit wäre es, 
die Register des cc1101 auszulesen, nachdem er gestartet und vom onboard 
Controller initialisiert wurde?

von A. O. (a-o)


Lesenswert?

Landolf schrieb:
> Mhm, noch eine Möglichkeit wäre es, die Register des cc1101 auszulesen,
> nachdem er gestartet und vom onboard Controller initialisiert wurde?
Warum so kompliziert? Gleich mit einem BusPirate bzw. SPI-Sniffer der 
eigenen Wahl reinhören und aufzeichnen.

: Bearbeitet durch User
von Sönke P. (snke_p)


Lesenswert?

Gibt für sigrok einen Protokoll-Dekoder zum CC1101:
https://sigrok.org/wiki/Protocol_decoder:Cc1101

von Peter K. (beschtler)


Angehängte Dateien:

Lesenswert?

Sönke P. schrieb:
> https://sigrok.org/wiki/Protocol_decoder:Cc1101

Danke für den Link.
Leider stürzt Pulseview unter w10 mit meinem LogicSniffer immer ab.
Ich habe aber die Init Sequenz mittlerweile komplett aufgenommen.
Allerdings empfange ich mit dem Elechouse Receiver Sketch nichts, wenn 
ich in dessen Setup die gleiche Init Sequenz angebe und dann noch den Rx 
Mode setze.

von Peter K. (beschtler)


Lesenswert?

Ich habe jetzt mal versuchsweise einen 8,6cm Draht über 3.3nF anstelle 
der PCB Antenne angeschlossen und damit komme ich schon mal 10m weit.
Kritischer als die Drahtlänge erweist sich die Orientierung.
Ich benutze die Example Sketches aus der SmartRC_CC1101 Driver Lib 
"cc1101_Transmitt_Hello_World_advanced" und 
"cc1101_New_Receive_method_advanced"
Der einzige Wert, den ich geändert habe, ist die Frequenz über 
.setMHZ(868.3).
Im Serial Monitor der Arduino IDE wird vom Receiver Sketch auch der Rssi 
Wert angezeigt.
Damit kann man sehr schnell erkennen, welche Antennenmaßnahme deutliche 
Veränderungen bringt.

von Flip B. (frickelfreak)


Lesenswert?

Leider sind scheinbar alle vergriffen oder der niedrige Preis war keine 
Absicht.
Mal schauen ob die jetzt aus dem Programm genommen werden.

Ich habe mir ein Paar kommen lassen und einen Nuvoton ICP Programmer.
Der CN2-T20 µC lässt sich als N79E844 nach einmaligem Flash erase der 
LOCK-Bits flashen und lesen. Die 12k flash sind vorhanden und 
ansprechbar. Der E814 und E854 hat jedoch dieselbe Chip ID und ähnliche 
Funktionen.

Mit ein  bisschen internetsuche fand ich für den SDCC passende Header 
mit allen registerdefinitionen und sample code für die onchip 
peripherie.

Was bereits getestet ist:
Sleep Mode, WDT zum zyklischen aufwachen,
Interrupts, SPI, I2C, UART, ADC etc.
Rudimentäre library für den CC1101

Erstes Ziel ist ein funk-Bootloader sowie eine Pin-Kontaktplatte zum 
initialen flashen.

Wenn alles gut klappt, möchte ich Raumklima, Präsenz und Objektsensoren 
anflanschen.

von jtreumer (Gast)


Lesenswert?

Hallo Flip B.,

das ist ja eine elegante Lösung, den Nuvoton uC direkt zur Ansteuerung 
des CC1101-Moduls zu verwenden! Es scheint ein 8051-Kern zu sein, was 
die Programmierung deutlich erleichtern sollte. - Schade, dass der 
Artikel inzwischen nicht mehr lieferbar ist, aber damit war angesichts 
des Preises schnell zu rechnen..

Berichte doch bitte, wenn Du Fortschritte bei der Verwendung des uC 
machst.

LG Jürgen

von Flip B. (frickelfreak)


Lesenswert?

https://www.digitalo.de/products/1127223/ Hier gibt es noch eine 433MHz 
variante, etwas teurer.

von Martin (Gast)


Lesenswert?

Falls jemand wirklich daran interessiert ist die Hardware weiter zu 
verwenden (und nicht nur wie ich wegen des günstigen cc1101 haben 
möchte... ) Ich hab 10 Stück gekauft und gestern erhalten. Gegen 
original Preis + Versand würde ich welche weitergeben.

von Dieter S. (ds1)


Lesenswert?

Martin schrieb:
> Falls jemand wirklich daran interessiert ist die Hardware weiter zu
> verwenden (und nicht nur wie ich wegen des günstigen cc1101 haben
> möchte... ) Ich hab 10 Stück gekauft und gestern erhalten. Gegen
> original Preis + Versand würde ich welche weitergeben.

Ich wäre an zwei Stück interessiert (ja, die komplette Hardware 
interessiert mich, CC1101 Module habe ich). Wieviel möchtest Du dafür, 
Versand per Post/DHL wäre ideal?

von Martin P. (billx)


Lesenswert?

Dieter S. schrieb:
> Ich wäre an zwei Stück interessiert (ja, die komplette Hardware
> interessiert mich, CC1101 Module habe ich). Wieviel möchtest Du dafür,
> Versand per Post/DHL wäre ideal?

Hallo Dieter, ich habe dir eine PN geschickt. Kosten, das was ich 
bezahlt habe + Versand nach deiner Wahl.

von Dieter (Gast)


Lesenswert?

Ich habe mir mal kurz das RS2W Protokoll angesehen. Der Sensor alleine 
reicht dazu natürlich nicht, als Gegenstelle verwende ich eine dieser 
"RS2W Funk-Schaltsteckdose Außen".

Im Prinzip sieht das so aus:
1
Frequenz:   868.3 MHz
2
Modulation: FSK
3
Datenrate   50000 Baud
4
5
Das Format der Datenpakete entspricht der Doku des CC1101.
6
Das Preamble (32 Bit, 1-0 alternierend) vor dem Sync ist bei
7
den Beispielen aus Gründen der Übersichtlichkeit weggelassen.
8
9
Anlernen (Sensor in Lernmodus bringen, Taste der Steckdose gedrückt halten):
10
----------------------------------------------------------------------------
11
12
                         Length     Bit4 (0x10) "Achnkowledge" ?
13
                         |          |
14
           Sync          |  Address |  Sequence Nr.  CRC-16
15
           |             |  |       |  |             |  |
16
Steckdose: A5 5A A5 5A : 07 06 - 40 20 06 01 AA AA - 7C 07
17
Sensor:    A5 5A A5 5A : 07 06 - 40 30 06 01 AA AA - FB 84 
18
19
20
Ein (Stromfluss im Leiter)
21
--------------------------                01: On
22
                                          |  
23
Sensor:    A5 5A A5 5A : 07 06 - 40 00 0F 01 AA AA - 47 04 
24
Steckdose: A5 5A A5 5A : 07 06 - 40 10 0F 01 AA AA - C0 87
25
26
27
Aus (kein Stromfluss im Leiter)
28
-------------------------------           02: Off
29
                                          |
30
Sensor:    A5 5A A5 5A : 07 06 - 40 00 10 02 AA AA - CB 3E 
31
Steckdose: A5 5A A5 5A : 07 06 - 40 10 10 02 AA AA - 4C BD

Das Ganze ist jetzt nicht sonderlich spektakulär. Inwieweit im 
Addressbyte bzw. dem darauf folgenden 0x40 die Geräte-ID der Steckdose 
codiert ist kann ich nicht beurteilen, ich habe hier nur eine Steckdose 
zum testen.

Übrigens gab es beim "Homegear" Source Code auf Github wohl eine Weile 
ein Repository "homegear-rs2w", das ist aber scheinbar nicht mehr da 
bzw. nicht mehr öffentlich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.