Forum: HF, Funk und Felder RFM22B OOK Empfang


von Philip P. (nerb)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche momentan das RFM23B/RFM22B dazu bewegen, mir die Daten im 
OOK Modus an einem GPIO Pin direkt (kein Fifo, kein Header usw.) 
ausgeben zu lassen. Leider konnte ich bisher im Asynchron Modus nur 
Senden, aber noch nicht empfangen. Mit den Einstellungen habe ich schon 
viel gespielt, bin aber die letzten paar Tage einfach nicht 
weitergekommen.
Hier mal meine Init-Funktion:
1
void rfm_init(void) {
2
  //Hardware initialisieren
3
  spiF_init(1);
4
  
5
  PORTA_DIRSET = rfm_TX_ANT | rfm_RX_ANT;
6
  
7
  PORTA_DIRSET = rfm_GPIO0;  //GPIO0-Pin Ausgang
8
  
9
  _delay_ms(10); //warten auf Power on reset POR
10
  rfm_write(0x07, 128);    // software reset
11
  _delay_ms(10);
12
  
13
  rfm_write(0x71, 0x01);    //Asynchronous Mode, direct Mode (GPIO), OOK
14
  
15
  rfm_write(0x06, 0x00);    // all interrupts off
16
  rfm_write(0x07, 0x01);    // operating mode: ready mode
17
  rfm_write(0x09, 0x7f);    // xtal load capacitance
18
  rfm_write(0x0A, 0x02);    // uC CLK: 10MHz
19
  rfm_write(0x0B, 0x30);    // GPIO0: TX Data for direct Modulation, Pullup aktiviert
20
  rfm_write(0x0C, 0b11010100);// GPIO1: RX Data[output], volle Treiberleistung
21
  rfm_write(0x0D, 0b11001010);// GPIO2: Direct Digital Output, volle Treiberleistung am IO Pin
22
  
23
  rfm_write(0x0f, 0x70);    // ADC Input: GND
24
    rfm_write(0x10, 0x00);    // ADC offset: 0
25
    rfm_write(0x12, 0x00);    // temp sensor calibration off
26
    rfm_write(0x13, 0x00);    // temp sensor offset: 0
27
    rfm_write(0x1d, 0x40);    // enable AFC
28
    rfm_write(0x1e, 0x0A);    // afc timing
29
  rfm_write(0x1f, 0x03);    // afc timing
30
31
  rfm_write(0x1C, 0x05);    // IF bandwidth
32
  rfm_write(0x20, 0x83);    // Clock Recovery Oversampling Rate
33
  rfm_write(0x21, 0xC0);    // Clock Recovery Offset 2
34
  rfm_write(0x22, 0x13);    // Clock Recovery Offset 1
35
  rfm_write(0x23, 0xA9);    // Clock Recovery Offset 0
36
  rfm_write(0x24, 0x00);    // Clock Recovery Timing Loop Gain 1
37
  rfm_write(0x25, 0x04);    // Clock Recovery Timing Loop Gain 0
38
  rfm_write(0x2A, 0x24);
39
40
  rfm_write(0x27, 0x10);    // RSSI Threshold: -120dB
41
    //rfm_write(0x30, 0x8c);    // data access: RX/TX packet handling, enable crc: CCIT
42
43
  rfm_write(0x69, 0x60);    // AGC on
44
    rfm_write(0x6a, 0x0b);    // agc override 2
45
  rfm_write(0x6d, 0x08);    // tx power: +4dBm, LNA switch controller
46
  
47
  rfm_write(0x6E,0x13);    // set baud high
48
  rfm_write(0x6F,0xa9);    // set baud low
49
  
50
  rfm_write(0x71, 0x01);    //Asynchronous Mode, direct Mode (GPIO), OOK
51
  
52
    //rfm_write(0x72, 0x50);    // frequency deviation: 45kHz
53
  rfm_write(0x72, 0xff);    // frequency deviation: 159kHz
54
  rfm_write(0x73, 0x00);    // offset: 0
55
  rfm_write(0x74, 0x00);    // offset: 0
56
  rfm_write(0x75, 0x53);    // 430-440MHz range
57
  
58
  rfm_write(0x79, 0x0);    // frequency hopping off
59
    rfm_write(0x7a, 0x0);    // frequency hopping off
60
}

Habt ihr eine Ahnung, welche Einstellungen nicht stimmen?
Als Frequenz ist 433.92Mhz eingestellt, als Testsender dient die 
Fernbedienung einer Funksteckdose. An dem Ausgang (GPIO1)des RFM23B 
hängt ein Oszilloskop.

Die Main-Funktion sieht so aus:
1
void main(void) {
2
... //hardware init
3
rfm_init();
4
rfm_setfreq(RFMFREQ(433.92));
5
rfm_rxmode();
6
while(1);
7
}

Bin für jeden Hinweis dankbar!

Grüße,
philip

: Verschoben durch Moderator
von Philip P. (nerb)


Lesenswert?

Hat keiner eine Idee?

von Philip P. (nerb)


Lesenswert?

Ich habe heute nochmal mit den Werten gespielt, leider immer noch ohne 
Ergebnisse.

1. Wenn ich TX/RX Clock auf GPIO0 schalte, liegt im RX-Mode dauerhaft 
ein 2,5kHz an. Ist das normal, auch wenn keine Daten kommen? Kann es 
sein, dass ich nichts empfange, weil der Bittakt zu gering ist?(Es 
können Frequenzen um die 2,6khz im Funksignal vorkommen)


2. Teile vom Code stammen von Ulrich Radig, bzw Benedikt K.
Die Zeile "rfm_write(0x1d, 0x40);    // enable AFC" ist falsch, sie 
deaktiviert den AFC...

Welche Baudrate muss ich einstellen? Was genau macht der AFC? Muss der 
sich nicht vorher "tunen"? Was genau ist die Oversampling rate?

Grüße,
Philip

von Hen (Gast)


Lesenswert?

Hast du das Problem lösen können?

Ich möchte das RFM 22/23 B Modul mit OOK = 100% ASK einsetzen um mehrere 
fmt8v Heizungsstellventile anzusteuern (868Mhz).
Auf der Suche nach den Funkmodulen ist das Feedback aber oft sehr 
gering. Rfm22 sei nichts für Anfänger, Doku sei unvollständig, FSK wird 
verwendet, also ka ob OOK läuft. Hab also nichts richtiges gefunden, was 
mir hilft.

Bin zwar kein Anfänger, hab aber nicht genügend Elan (Zeit), um mich mit 
den Modulen zu ärgern, wenn nicht klar ist, das es überhaubt eine Lösung 
für den Betrieb mit OOK gibt.

Hat schoneinmal jemand die Module mit OOK betrieben?

Grüße hen

von Philip P. (nerb)


Angehängte Dateien:

Lesenswert?

Hallo,

das RFM zu knacken war in der Tat sehr schwierig, ich habe es 
schließlich nur durch Ausprobieren und ein paar Tipps von einem 
Forumsbesucher geschafft.

Das RFM ist extrem zickig und sehr empfindlich, was die genauen 
Einstellungen betrifft. Ändert man bestimmte, kritische Register nur 
leicht, ist der Empfang sofort weg. Ich habe meine Initialisierung für 
433Mhz und den Deglitching Algorithmus angehängt:

GPIO0 wird als Dateneingang für das Senden benutzt.
GPIO1 ist der RX-Datenausgang. Es werden alle empfangenen Daten 
inklusive sehr viel Rauschen an diesen Pin ausgegeben.
GPIO2 ist der RX Takt und wird für als Zeitbasis das Deglitching 
verwendet.  Am Mikrocontroller benutzt er einen Pin-Change interrupt.

Im Anhang seht ihr ein Foto, wie die Daten des des RFM22B nach der 
Initialisierung aussehen. Das Rauschen tritt nach längeren 
Empfangspausen ein, man kann das gut an dem Datenstrom erkennen. Das 
Rauschen besteht aus kurzen Impulsen, die üblicherweise mindestens 30% 
kürzer sind, als die Datenpulse. Der Deglitching Filter ist kein Median 
Filter, wie er empfohlen wurde, sondern schneidet einfach alle kurzen 
Pulse weg.

So, ich hoffe ich konnte damit alle Fragen klären. Wie man das Modul 
konfigurieren muss, um damit gut bei 868,xx MHz empfangen zu können, 
kann ich nicht sagen, dass müsst ihr selbst ausprobieren. Aber falls ihr 
brauchbare Ergebnisse erzielt, dann postet hier eure Erfahrungen.

Grüße,
Philip

von hen (Gast)


Lesenswert?

Vielen Dank für die schnelle und vor allem ausführliche Antwort!

grüße, Hen

von P. B. (Gast)


Lesenswert?

Ich danke auch Philip!!! Du hast mir mit deinem Code sehr geholfen!

Grüße

P.B.

von Hubert Hoefsloot (Gast)


Lesenswert?

Dear Philip,

Sorry for now writing in the German language.

I was also planning to use the direct mode on the RFM22b to receive a 
OOK signal. So, I wanted to ask you if I could get a copy of your 
working OOK decoding source.

I would help me very much.


Thanks in advance.

von Philip P. (nerb)


Lesenswert?

Hello Hubert,

take a look at my previous post, where I had attached "code.rar". A full 
example will be available in about a month, when I publish my complete 
project.

greetings

von JojoS (Gast)


Angehängte Dateien:

Lesenswert?

ich möchte auch gerade mit dem RFM12 die FS20 Signale empfangen. Meine 
Erfahrung ist das die Pulsweite stark von der Entfernung zum Sender bzw. 
der Feldstärke abhängt. Zum Testen habe ich die gleichen Signale von 
einem RFM12 und einem einfachen analogen Modul HFE868 aufgezeichnet. Man 
sieht das die Puls-Pausen Folgen mit dem analogen Modul übereinstimmen, 
aber die Pulse bei hoher Feldstärke sehr lang werden. Ich habe den Code 
hier noch nicht angesehen, berücksichtig der das? Sonst ist das HFE868 
auch ok, es kostete nur viel mehr als ein RFM. Kennt jemand eine 
günstige Quelle für die 868MHz Module?

von Stanislav V. (svalent)


Angehängte Dateien:

Lesenswert?

Hello,
  sorry - but i can write only in english...

to Philip - many thanks for your setting RFM22 for OOK receiving .
It works perfect for WH2 protocol 
(http://lucsmall.com/2012/04/27/weather-station-hacking-part-1/).


but... i have problem with receive longest periodical signal (KAKU 
command from remote)
I attach example receiving signal from RFM22 (on top) and from standart 
"chinese" superheterodyn receiver (bottom). Difference is cler, but why 
?....

If anybody have some idea ...

 thanks

 Stanislav

von Stanislav V. (svalent)


Angehängte Dateien:

Lesenswert?

.... and other example - i generate stable periodical signal with ratio 
1to31 :

at top is transmitter 6,2ms ON and 0,2ms OFF   ->no problem for RFM22B
at bottom is transmitter 6,2ms OFF and 0,2ms ON  -> RFM22B
after cca 3ms is go to log. level 1


(why ?)

S.

PS: still sorry for english , of course - read german answers is not 
problem for me...

von Laurent (Gast)


Lesenswert?

Hello Philip, everyone

Would you please share your fully working code please ?

I'm using PIC µC, did you use PIC or Atmel ?
I've spent long time to get transmission working between 2 x RFM22-S2 
433Mhz modules without success, your help will be much appreciated.

( sorry i do not speak German )

Best regards,

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.