Forum: Mikrocontroller und Digitale Elektronik Funk senden mit CC1101 und OOK - Verständnisproblem


von C. L. (calle)


Lesenswert?

Hallo zusammen,

Ich möchte OOK mit dem CC1101 senden.
Das Schreiben/Lesen via SPI mit dem PIC klappt gesichert.
Write/Read; Burst/Single usw. alles geht.

Ich bekomme einfach nicht das klare Verständniss dieses Bausteins in den 
Kopf. Kann mir jemand mit der richtigen Initialisierung weiterhelfen?
868,662Mhz, min. 200K/Bit Datenrate, keine festen Pakete und keine CRC 
Prüfungen oder Präamblen. Reines OOK vom GDO0 Pin zur HF.

Im Netz stehen zig Beispiele aber nichts bekomme ich aus dem Modul raus.
Habe hier einen Scanner auf der Frequenz laufen und würde die Signale 
oder einen Träger hören bzw. bemerken.
Das der CC1101 defekt ist, glaube ich nicht, denn er reagiert ja und ich 
kann an GDO0 auch eine LED blinken lassen anhand der SPI Befehle.
Die reine Registerinitialisierung des CC1101 habe ichmit diesen Werten 
aus dem I-Net.
1
CC1101_sendreg(CC1101_IOCFG2,  0x06);
2
CC1101_sendreg(CC1101_IOCFG1,  0x2E);
3
CC1101_sendreg(CC1101_IOCFG0,  0x0E);
4
5
CC1101_sendreg(CC1101_FIFOTHR,  0x0F);
6
CC1101_sendreg(CC1101_SYNC1,  0x9B);
7
CC1101_sendreg(CC1101_SYNC0,  0xAD);
8
9
CC1101_sendreg(CC1101_PKTLEN,  0x3D);
10
CC1101_sendreg(CC1101_PKTCTRL1,  0x06);
11
CC1101_sendreg(CC1101_PKTCTRL0,  0x45);
12
13
CC1101_sendreg(CC1101_ADDR,  0xFF);
14
CC1101_sendreg(CC1101_FSCTRL1,  0x0B);
15
CC1101_sendreg(CC1101_FSCTRL0,  0x00);
16
17
CC1101_sendreg(CC1101_FREQ0, 0xFB);
18
CC1101_sendreg(CC1101_FREQ1, 0x68);
19
CC1101_sendreg(CC1101_FREQ2, 0x21);
20
21
CC1101_sendreg(CC1101_MDMCFG4,  0x2C);
22
CC1101_sendreg(CC1101_MDMCFG3,  0xF8);
23
CC1101_sendreg(CC1101_MDMCFG2,  0x33);
24
CC1101_sendreg(CC1101_MDMCFG1,  0x42);
25
CC1101_sendreg(CC1101_MDMCFG0,  0xF8);
26
CC1101_sendreg(CC1101_DEVIATN,  0x00);
27
28
CC1101_sendreg(CC1101_MCSM2,  0x07);
29
CC1101_sendreg(CC1101_MCSM1,  0x03);
30
CC1101_sendreg(CC1101_MCSM0,  0x18);
31
CC1101_sendreg(CC1101_FOCCFG,  0x1D);
32
33
CC1101_sendreg(CC1101_BSCFG,  0x07);
34
CC1101_sendreg(CC1101_AGCCTRL2,  0x04);
35
CC1101_sendreg(CC1101_AGCCTRL1,  0x00);
36
CC1101_sendreg(CC1101_AGCCTRL0,  0x92);
37
38
CC1101_sendreg(CC1101_WOREVT1,  0x87);
39
CC1101_sendreg(CC1101_WOREVT0,  0x6B);
40
CC1101_sendreg(CC1101_WORCTRL,  0xF8);
41
CC1101_sendreg(CC1101_FREND1,  0xB6);
42
CC1101_sendreg(CC1101_FREND0,  0x11);
43
44
CC1101_sendreg(CC1101_FSCAL3,  0xEA);
45
CC1101_sendreg(CC1101_FSCAL0,  0x2A);
46
CC1101_sendreg(CC1101_FSCAL2,  0x00);
47
CC1101_sendreg(CC1101_FSCAL1,  0x1F);

Wie geht es dann weiter?
Normalerweise sollte ich ja am PIN GD0O den TX Eingang mit Pulsen 
beaufschlagen und was im Scanner hören, aber es tut sich nix.

Kann mir jemand mal eine funktionierende OOK Initialisierung geben oder 
ein Beispiel?
Gerne auch per PN.

Gruß

CL

von C. L. (calle)


Lesenswert?

Push

von C. L. (calle)


Lesenswert?

Habe mir jetzt die SmartRF Konfigurationsoftware von TI besorgt und 
diese mit meinen Parametern gefüttert. Raus kommt diese Chip 
Konfiguration.
Leider kann ich immer noch nichts senden.
1
  CC1101_sendreg(CC1101_IOCFG2,      0x0B);
2
  CC1101_sendreg(CC1101_IOCFG0,      0x0C);
3
  CC1101_sendreg(CC1101_FIFOTHR,     0x47);
4
  CC1101_sendreg(CC1101_PKTCTRL0,    0x12);
5
  CC1101_sendreg(CC1101_FSCTRL1,     0x06);
6
  CC1101_sendreg(CC1101_FREQ2,       0x21);
7
  CC1101_sendreg(CC1101_FREQ1,       0x68);
8
  CC1101_sendreg(CC1101_FREQ0,       0xFA);
9
  CC1101_sendreg(CC1101_MDMCFG4,     0xFC);
10
  CC1101_sendreg(CC1101_MDMCFG3,     0xF8);
11
  CC1101_sendreg(CC1101_MDMCFG2,     0x30);
12
  CC1101_sendreg(CC1101_DEVIATN,     0x15);
13
  CC1101_sendreg(CC1101_MCSM0,       0x18);
14
  CC1101_sendreg(CC1101_FOCCFG,      0x14);
15
  CC1101_sendreg(CC1101_AGCCTRL0,    0x92);
16
  CC1101_sendreg(CC1101_WORCTRL,     0xFB);
17
  CC1101_sendreg(CC1101_FREND0,      0x11);
18
  CC1101_sendreg(CC1101_FSCAL3,      0xEA);
19
  CC1101_sendreg(CC1101_FSCAL2,      0x2A);
20
  CC1101_sendreg(CC1101_FSCAL1,      0x00);
21
  CC1101_sendreg(CC1101_FSCAL0,      0x1F);
22
  CC1101_sendreg(CC1101_TEST2,       0x81);
23
  CC1101_sendreg(CC1101_TEST1,       0x35);
24
  CC1101_sendreg(CC1101_TEST0,       0x09);

Wenn ich stichprobenartig Register auslese, kommen die richtigen Werte 
raus. Wie kann ich nun das OOK Senden anstoßen, Pin GDO0 geht scheinbar 
nicht.

Keiner eine Idee?
Bitte um Unterstützung...

CL

von C. L. (calle)


Lesenswert?

... habe jetzt nach der o.g. Initialisierung noch das PATABLE 
beschrieben und das STX Commando gesendet.
1
  
2
  PORTB.B7 = 0;
3
  while(SPI_RDY);//Wait SDO to go low, indicating that the CC1101 is ready
4
  SPI1_Write((CC1101_PATABLE&0x3F)| WRITE_BURST);
5
  SPI1_Write(0x51);  
6
  SPI1_Write(0x00);  
7
  PORTB.B7 = 1;
8
9
  CC1101_sendCS(CC1101_STX);

Jetzt habe ich auch einen Dauerträger auf der gewünschten Frequenz.
Wenn ich nun noch OOK modulieren könnte wäre ich vorerst mal am Ziel.
Der GDO0 Pin wird bei diesem Mode ja als Input geschaltet, aber es tut 
sich nix.

Ideen?

CL

von Christopher J. (christopher_j23)


Lesenswert?

Kannst ja mal hier schauen:
https://github.com/heliflieger/a-culfw/blob/master/culfw/clib/cc1100.c

Da gibt es verschiedene Konfigurationen für den CC1100, unter anderem 
auch mit OOK. Was mir als erstes auffällt ist die (zu dir) 
unterschiedliche Konfiguration von IOCFG0 und IOCFG2. Außerdem solltest 
du mal einen Blick auf die Funktionen ccTX bzw. ccRX werfen, weil die - 
soweit ich das richtig verstehe - den CC1100 in den entsprechenden Modus 
umschalten.

von C. L. (calle)


Lesenswert?

Ok, danke für den Link, dann werde ich mal nachsehen....

CL

von Steffl (Gast)


Lesenswert?

Hallo,

Bist du hier weitergekommen?
Das ist genau das, was mich auch interessieren würde!

Was ich mich frage - müsste das nicht auch viel einfacher  gehen?
Die ELECHOUSE Library bietet ja schon viele Voreinstellungen an:
   Serial.begin(9600);
    ELECHOUSE_cc1101.Init();               // must be set to initialize 
the cc1101!
    ELECHOUSE_cc1101.setGDO(gdo0,0);      // set lib internal gdo pins 
(gdo0,gdo2). Gdo2 not use for this example.
    ELECHOUSE_cc1101.setCCMode(1);       // set config for internal 
transmission mode.
    ELECHOUSE_cc1101.setModulation(0);  // set modulation mode. 0 = 
2-FSK, 1 = GFSK, 2 = ASK/OOK, 3 = 4-FSK, 4 = MSK.
    ELECHOUSE_cc1101.setMHZ(433.92);   // Here you can set your basic 
frequency. The lib calculates the frequency automatically (default = 
433.92).The cc1101 can: 300-348 MHZ, 387-464MHZ and 779-928MHZ. Read 
More info from datasheet.

Einzig das Senden von HIGH and LOW müsste noch umgesetzt werden.
Der Befehl ELECHOUSE_CC1101.SendData("daten",byte) sendet ja immer nur 
ganze Bytes die irgendwie codiert werden.

Gruß
Stefan

von 8015 (Gast)


Lesenswert?

Hallo zusammen,

habe die gleiche Frage - gibt es was neues?

Gruß

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.