Forum: Mikrocontroller und Digitale Elektronik Kompatibelität CC1100 und RFM12


von oldies (Gast)


Lesenswert?

Hallo,
kennt sich irgendjemand von euch mit dem CC1100 von TI aus?
Versuche schon seit tagen ihn zu überreden mit dem Pollin-Funkmodul 
RFM12 zu reden.
Ist das überhaupt möglich??

Das Funkmodul RFM12 ist wie folgt initialisiert (bis auf die Frequenz 
aus den Beispielen übernommen):
1
  rf12_setfreq(RF12FREQ(433.25));      // Sende/Empfangsfrequenz auf 433,25MHz einstellen
2
  rf12_setbandwidth(RxBW200, LNA_6, RSSI_79);  // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm 
3
  rf12_setbaud(19200);        // 19200 baud
4
  rf12_setpower(PWRdB_0, TxBW120);    // 1mW Ausgangangsleistung, 120kHz Frequenzshift
Es empfängt auch brav Daten von einem anderen RFM12.

Die Konfiguration des CC1100 sieht wie folgt aus:
1
  0x29,  // IOCFG2
2
  0x2E,  // IOCFG1
3
  0x06,  // IOCFG0
4
  0x47,  // FIFOTHR
5
  0x2D,  // SYNC1
6
  0xD4,  // SYNC0
7
  0x3E,  // PKTLEN
8
  0x1A,  // PKTCTRL1
9
  0x45,  // PKTCTRL0
10
  0x01,  // ADDR
11
  0x00,  // CHANNR
12
  0x06,  // FSCTRL1
13
  0x00,  // FSCTRL0
14
  0x10,  // FREQ2    #
15
  0x0B,  // FREQ1    #
16
  0xDA,  // FREQ0    # -> 433,249969 MHz
17
  0x49,  // MDMCFG4 
18
  0x75,  // MDMCFG3 
19
  0x02,  // MDMCFG2 
20
  0x32,  // MDMCFG1
21
  0xC1,  // MDMCFG0  CHANSPC_M
22
  0x35,  // DEVIATN
23
  0x04,  // MCSM2
24
  0x0C,  // MCSM1 0c
25
  0x38,  // MCSM0
26
  0x16,  // FOCCFG
27
  0x6C,  // BSCFG
28
  0x43,  // AGCCTRL2
29
  0x40,  // AGCCTRL1
30
  0x91,  // AGCCTRL0
31
  0x46,  // WOREVT1
32
  0x50,  // WOREVT0
33
  0x78,  // WORCTRL
34
  0x56,  // FREND1
35
  0x10,  // FREND0
36
  0xA9,  // FSCAL3
37
  0x0A,  // FSCAL2
38
  0x00,  // FSCAL1
39
  0x11,  // FSCAL0
40
  0x41,  // RCCTRL1
41
  0x00,  // RCCTRL0
42
  0x57,  // FSTEST
43
  0x7F,  // PTEST
44
  0x3F,  // AGCTEST
45
  0x98,  // TEST2
46
  0x31,  // TEST1
47
  0x0B  // TEST0
Das Sync-Word ist auf das vom RFM12 eingestellt; Modulation 2-FSK; Baud 
19200 [lt. RFStudio]. Das RFM12 erkennt es auch, nur die anschließend 
kommt nur Datenmüll an, nichts verwertbares.

Kann mir evtl. jemand von euch bei diesem Problem helfen??

MfG

von oldies (Gast)


Lesenswert?

Nachtrag:
zum Senden verwende ich folgenden Code (teils aus boop-firmware):
1
void switch_to_idle() {
2
  cc1100_strobe(SIDLE);
3
  while (cc1100_read1(MARCSTATE) != 01);
4
}
5
6
// write length bytes of data to addr in CC1100
7
unsigned char cc1100_write(unsigned char addr,unsigned char* data, unsigned char length) {
8
9
  unsigned short i;
10
  unsigned char status;
11
  unsigned char x;
12
  
13
  FIOCLR0 = CS1;
14
  while (FIOPIN0 & MISO1);
15
  SSPDR = (addr | WRITE);
16
  while ((SSPSR & (1<<4)));
17
  status = SSPDR;
18
  for (i=0; i < length; i++) {
19
    SSPDR = data[i];
20
    while ((SSPSR & (1<<4)));
21
    x=SSPDR;
22
  }
23
  FIOSET0 = CS1;
24
  
25
  return(status);
26
}
27
// write on byte of data to addr in CC1100
28
// a few instructions faster than cc1100_write(addr, data, 1)
29
unsigned char cc1100_write1(unsigned char addr,unsigned char data) {
30
31
  unsigned char status;
32
  unsigned char x;
33
  
34
  FIOCLR0 = CS1;
35
  while (FIOPIN0 & MISO1);
36
  SSPDR = (addr | WRITE);
37
  while ((SSPSR & (1<<4)));
38
  status = SSPDR;
39
  
40
  SSPDR = data;
41
  while ((SSPSR & (1<<4)));
42
  x=SSPDR;
43
  
44
  FIOSET0 = CS1;
45
  
46
  return(status);
47
}
48
unsigned char cc1100_strobe(unsigned char cmd) {
49
50
  unsigned short status;
51
  
52
  FIOCLR0 = CS1;
53
  while (FIOPIN0 & MISO1);
54
  SSPDR = cmd;
55
  while ((SSPSR & (1<<4)));
56
  status = SSPDR;
57
  FIOSET0 = CS1;
58
  
59
  return(status);
60
}
61
62
/* Send the contents of buffer b over radio 
63
  b must be less than 62 characters
64
  Blocks until radio is idle.
65
  A EOT (0x04) is appended to the packet.
66
*/
67
void RF_send(unsigned char* b, int payload_cnt) {
68
  
69
  switch_to_idle();
70
  cc1100_strobe(SFTX);
71
  cc1100_strobe(SCAL);
72
  cc1100_write1(TX_fifo, payload_cnt+2);
73
  cc1100_write1(TX_fifo, 1);
74
  cc1100_write(TX_fifo | BURST, b, payload_cnt);
75
  cc1100_write1(TX_fifo, 0x04);
76
  
77
  cc1100_strobe(STX);
78
}
gesendet wird folgendes:
1
 unsigned char* buf = "Dies ist ein Test!!!"; 
2
RF_send(buf, 20) ;

leider sieht der Empfang (Sync wird wohl erkannt, da die Daten in den 
Fifo geladen werden) alles andere als schön aus - und leider auch nicht 
immer gleich; Hier mal die Aufzeichnung von dem, was der RFM12 über SPI 
beim senden des CC1100 (s.o.) von sich gibt:

1.
1
E0167CE21FE134D8C877C8B839F8BBAE8C61CA9F8A30B27C906820860DC0100C8014874001C00080041040098E00400700030100C066904006004000840140030002678021804E07038A6001869020460411C0280C84110840004C0A802500800048000DC0A0208020008003900000C01E2A4C80100F00024353060A05CC3309882208C0000606CC86CC6C0008000088300080420001404E1C0C08004C05020440C00204C0008E864000469802001500480403C8708810827F06400EC040010082F40C00C00403C4090000000101C00088800015807F8EC640518C18823239080058000E05C0812896
2.
1
E0167CF08F611A6CC83BC8B839F8BBAE8C43CA90F134C265F221A0700002F060401A8800424FC2C8000780024B400044038C5F8008841FEC100FD80D0006080188010001038C4502C00C0184C0028000C833438209C08780800B06000792FA02D0080F604201000400004080400000C8704040028828420100018002018646000041C4224105010500800601C011C810C000004303C00E8C010E807000C80C03018000844100000CC44A0C84230002408C1080000088044000807FC40788004800490400CA050584C80008C000000380E0000A8C7F8280D010C006060F800800424A42020804084480
3.
1
E0367CE08F6134D8C877927073F2775E310F2CFC530B2F920D83A2E64C4000000E04C01A4DC47018C81CD0E26204CC489003C60CC40040C860E84280220FC0904A0084CE80DD61CC0700C0C545CC1304000C600C0EC0530C800008804454008030000204000780510609041F0400E02388204846030F8600C4114284300801843161005DC4400040840C40410E030000C4000805848021C422C06921A2A0380600404640000DC010C029146FC0514005C4FAC0878400C0C0010B0E9CFB8410807848802601010F400301A20C4408414418640002C8E66FC0858403A00C000240000219C08846164D01
4.
1
E02CFC711EE090A06CC83BE45C1CFC5DD6C610E4CFE530B27C9068364300018055C02D0A8C184000C002900108901C020000C01A004301001C018020540F10C00E0E0000018052C7100D01C0000C808048C8080646400244040E08444008044A49824F90008807061300110280040000410E02450600800C0D0209C01241807400C4304380040000040044400088780401C000008240080080600C0001806061000808008028058042C000802100C040C00084222001468460E4E027C000018A08540E900008A2E00009C4208C400400004410C0410041800847D0040016D998A6A2C400C080002031

Mir gehen langsam die Ideen aus, was hier schief läuft. Würde mich 
wirklich über Hilfe freuen :)

MfG

von oldies (Gast)


Lesenswert?

Hallo,
habe festgestellt, dass der CC1100 von Haus aus "Data whitening" macht, 
dieses kann im Register PKTCTRL0 (z.B. wert 0x05) abgestellt werden.
nun bekomme ich vom RFM12 valide Datenpakete (CRC OK), diese sehen eben 
allerdings noch so aus:
1
Dies ist 2�[�^MFW7B^R^R^P
2
Dies 4��^H^L���^CQ���!!!
3
Dies 4��^H^Ym-�^D����BBB
4
Dies t��^H^L���^CQ���!!!
5
Dies l��^H^L���^B����BBB
6
Dies d��^H^L���^CQ���!^P�
7
Dies ist 2�[�^MFW7B^R^Y^H
8
Dies t��^H^L���^B����BBB
9
Dies t�ބ^FV�q^AQ��� ��

Wobei noch zu klären wäre, ob es wirklich nur an der Sendefunktion 
liegt.

MfG

von oldies (Gast)


Lesenswert?

Sry, editieren geht leider nicht.
Korrektur:
Habe in meinem Empfänger den crc-check wohl versehentlich abgeschaltet 
gehabt. Die ankommenden Datenpakete sind NICHT valide, somit scheint es 
wohl doch noch Probleme bei der Kommunikation zu geben.
Kennt jemand einen Zaubertrick?!

MfG

von oldies (Gast)


Lesenswert?

Problem gelöst,
das RFM12 arbeitet nicht mit der eingestellten Baudrate von 19200, 
sondern mit 20284, daher ist es nötig beim cc1100 die Baudrate auf 
diesen Wert zu setzen um die Funktion zu gewährleisten.

MfG

von R. W. (quakeman)


Lesenswert?

oldies schrieb:
> Problem gelöst,
> das RFM12 arbeitet nicht mit der eingestellten Baudrate von 19200,
> sondern mit 20284, daher ist es nötig beim cc1100 die Baudrate auf
> diesen Wert zu setzen um die Funktion zu gewährleisten.

Bist du sicher, dass du die Baudrate im RFM12 auch korrekt eingestellt 
hast?
Denn mir wäre das neu, dass die eingestellte Baudrate nicht eingehalten 
wird. Leider hast du für den RFM12 keine Registerwerte für die 
Initialisierung angegeben, weshalb ich dazu eben nicht viel sagen kann.

Wenn man im "Data Rate Command" Register cs=1 benutzt kommt man 
rechnerisch auf schlechte 21552Bps bei 0xC681 als Init Wert. Wenn man 
dagegen cs=0 setzt kommt man auf gute 19157Bps bei 0xC611 als Init Wert. 
Ich würde mal dadrauf Tippen, dass du cs=1 benutzt, womit man keine gute 
Näherung an 19200Bps bekommt.

Ciao,
     Rainer

von thinkJD (Gast)


Lesenswert?

Hi,
wie es scheint funktioniert die Kommunikation jetzt, habe ich das 
richtig verstanden?
Falls ja, hast du noch ein paar Tipps für mich? Ich möchte nämlich 
ebenfalls die Betty und das RFM12 zum Kommunizieren überreden.

Gruß JD

von B. G. (smarti)


Lesenswert?

Hi,

ich hab mal gegoogelt und das hier gefunden:

Linksammlung zur Betty sowohl cc1100 also auch rfm12:

http://bettyhacks.com/forum/index.php?topic=121.0

@ oldies
läuft deine kommunikation inzwischen?

Grüßle

Smarti

von Bernhard M. (boregard)


Lesenswert?

Fox Mulder schrieb:
> oldies schrieb:
>> Problem gelöst,
>> das RFM12 arbeitet nicht mit der eingestellten Baudrate von 19200,
>> sondern mit 20284, daher ist es nötig beim cc1100 die Baudrate auf
>> diesen Wert zu setzen um die Funktion zu gewährleisten.
>
> Bist du sicher, dass du die Baudrate im RFM12 auch korrekt eingestellt
> hast?

Ich vermute mal, er hat den code von Benedikt für die RFM benutzt
 (z.B. aud dem Thread hier 
Beitrag "Beispielprogramm für RFM12 433MHz Funk-Module" ). Dort wird 
die Berechnung für die Baudrate folgendermassen gemacht:
1
rf12_trans(0xC600|((344828UL/baud)-1));
was aber genau bei 19200 zu dem Wert 16 führt, der aber lt. Datenblatt 
21552 Baud ergibt, richtig wäre 17, also 0xC611...

von avr (Gast)


Lesenswert?

Hi oldies,

wollte fragen ob die Kommunikation funktioniert? Wenn ja, kannst du 
deine Konfiguration hier posten? Ich wollte auch Betty mit RFM12 
kommunizieren lassen.

Gruß
AVR

von antonia (Gast)


Lesenswert?

Mich würde auch interessieren ob die Kommunikation geht. Ich möchte den 
mpd-deamon damit steuern (siehe mcbetty). Es gibt aber dass 
scartinterface nirgends zu kaufen. Ich hatte schon überlegt, ob man 
nicht einfach eine zweite Betty als Gegenstelle verwenden kann

Gruß
antonia

von thinkJD (Gast)


Lesenswert?

Jap, funktioniert :-)
http://www.thinkjd.de/2011/05/moodpxl-v1-0-das-vorlaufige-projektende/

Die grundlegende Kommunikation funktioniert wie oben beschrieben.
Wenn man noch ein paar Features mehr haben will, ist das auch kein 
Thema. Der CC1100 Chip lässt sich sehr komfortabel parametrieren.
Einziges Problem, nahezu alles was der CC1100 hardwareseitig kann, muss 
für den RFM12 nachprogrammiert werden.

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.