Forum: Mikrocontroller und Digitale Elektronik RFM12B Empfangs Probleme


von Bastelbube (Gast)


Angehängte Dateien:

Lesenswert?

Hallo alle zusammen,
ich beschäftige mich seit geraumer Zeit mit den RFM12B Funkmodulen, 
dabei habe ich mich weitest gehend an folgenden Beitrag orientiert: 
Beitrag "Re: Beispielprogramm für RFM12 433MHz Funk-Module"

Meine RFM12B Funkmodule sind für ein 868 Mhz Band ausgelegt und über 
einen Spannungsteiler mit den Atmega 1284P verbunden. Wobei 
FSK/DATA/nFFS über ein
10K Pullup Widerstand mit vdd(ca. 3.3V) verbunden ist.

Ich benutze ausschließlich CS,SDO, SDI und SCK.

Die Verdrahtung scheint auch richtig zu sein, weil die Init soweit 
durchläuft und ich am CLK Ausgang des Rfm12B 10 Mhz messe. Ich kann auch 
beide Module auf Senden einstelle und dies Klappt ebenso einwandfrei. 
Ich sehe dann auf meinen Spektrumsanalysator ein sehr eindeutiges Signal 
in meinen Frequenzbereich.


Mein Code den ich verwende ist im Anhang verfügbar.
Vielleicht sieht von euch jemand den Fehler.

MFG

von WehOhWeh (Gast)


Lesenswert?

Schau dir mal auf ARSSI an, ob das Modul überhaupt einmal ein Signal 
bekommt. Das ist einer der SMD-Kondensatoren am Rand auf dem Modul.

Bekommt das Modul ein Signal (erkennbar am Anstieg der Spannung an 
ARSSI) kann es noch sein, dass der FIFO nicht triggert. Das kann man an 
einem der Pins des Moduls mit dem OSZI anschauen (MISO glaube ich).

Hast du an ARSSI was, am FIFO nichts, ist das Modul schon mal auf 
Empfang, aber der FIFO triggert nicht.

Kleiner Tipp: Erfolg  hatte ich damit:

Den gleichen Chip verkauft Microchip auch, unter dem Namen MRF49XA 
(vermutlich gebrandet).
Da gibts ein Codebeispiel und eine Appnote dazu.
http://www.microchip.com/wwwproducts/Devices.aspx?product=MRF49XA

Das Beispiel lief bei mir - nach Änderung der Frqeuenz - sofort. Die 
Portierung sollte recht einfach sein, es ist ja nur eine Software-SPI.

von Bastelbube (Gast)


Lesenswert?

Am ARSSI Pin 15 messe ich 0V...?Muss das RFM12B anders eingestellt 
werden als das RFM12? Ich bin gerade etwas überfragt...

MFG

von einer_meiner (Gast)


Lesenswert?

hiho,

bin auch derzeitig dabei das RFM12b 868 Mhz zum empfangen zu bringen. 
Bzw arbeite mit Bastelbube zusammen. Und ich habe vergebens versucht am 
Kondensator eine spannung zu messen. Ich habe das jedenfalls so 
verstanden das wenn ein HF Signal empfangen wird das sich die spannung 
an diesem Kondensator von ca 450mV auf 1150 mV ändern soll?. Kann man ja 
auch gut im Datenblatt sehen. Passiert dies bei jedem HF Signal oder nur 
nur beim 1. Empfangenden. btw habe an mehreren Punkten mit einem 
Speicheroziloskop gemessen konnte nix feststellen. Das heisst doch das 
unser Empfänger kein HF-Signal misst. Die Bandbreite seht aber schon 
200kHz und beide module werden druch die gleiche ini initialisiert.

Und müsste mann nicht sowieso noch 2 Zusätzliche Register in der INI 
aufrufen, da wir ja ein RFM 12b haben. Welche noch das 12. PPL 
Settings(CC77) und das 8. Synchron Pattern(CED4). Damit etwas passiert?

MFG

von Norbert Windmann (Gast)


Lesenswert?

Auch wenn jetzt viele schreien werden.
Schau Dir mal die RFM12 Teile der für Arduino vorgesehenen Lib an: 
https://github.com/jcw/jeelib
Die können problemlos (wenig Modifikationen sind nötig) auch ohne 
Arduino-Basis verwendet werden.

Ich hatte zunächst ebenfalls Probleme mit dem RFM12; habe keine 
Datenübertragung hinbekommen. Daher nahm ich einfach ein 
Arduino-Beispiel und schrieb dieses auf zwei Attiny84. Nun hatte ich 
eine funktionierende Verbindung auf die ich aufbauen kann. Ich habe 
jetzt auf jeden Fall einen funktionierenden Teil und kann den anderen 
selber entwickeln.

von Stefan B. (sibbl) Benutzerseite


Lesenswert?


von einer_meiner (Gast)


Lesenswert?

Norbert Windmann schrieb:
> Auch wenn jetzt viele schreien werden.
> Schau Dir mal die RFM12 Teile der für Arduino vorgesehenen Lib an:
> https://github.com/jcw/jeelib
> Die können problemlos (wenig Modifikationen sind nötig) auch ohne
> Arduino-Basis verwendet werden.
>
> Ich hatte zunächst ebenfalls Probleme mit dem RFM12; habe keine
> Datenübertragung hinbekommen. Daher nahm ich einfach ein
> Arduino-Beispiel und schrieb dieses auf zwei Attiny84. Nun hatte ich
> eine funktionierende Verbindung auf die ich aufbauen kann. Ich habe
> jetzt auf jeden Fall einen funktionierenden Teil und kann den anderen
> selber entwickeln.

Danke für die Hilfe hab eine Lib mit klappt ja auch senden. Wollt schon 
gern wissen wieso es nicht funktioniert und dies auch ändern. Weil ich 
so schon recht viel gelehrnt habe. Daher fände ich es nicht so gut 
wieder auf neue lib um zu steigen, wobei ich auch keine Erfahung von 
Arduino habe.

ergänzend zu meinem vorherigen Beitrag hatte leider kleinen fehler bei 
der Software-Spi, hatte da bissel rumgespielt.

Jetzt konnte ich ne spannung von ca 400mV messen am ARSSI messen. Aber 
leider den Sprung auf die besagte 1000mv konnte ich nicht festellen. 
Wäre für weitere denkanstöße offen :)

MFG

von einer_meiner (Gast)


Angehängte Dateien:

Lesenswert?

Update:

WehOhWeh schrieb:
> Bekommt das Modul ein Signal (erkennbar am Anstieg der Spannung an
> ARSSI) kann es noch sein, dass der FIFO nicht triggert. Das kann man an
> einem der Pins des Moduls mit dem OSZI anschauen (MISO glaube ich).

heute morgen habe ich nochmal beide module angeschlossen einen auf 
senden gestellt und den anderen auf empfangen. Und nochmals an am ARSSI 
gemessen ich konnte ein Flanken wechsel festellen aber leider von ca 
300mv auf 0V.

Kann das auch sein kann man das mit einem Register umstellen?. Und wenn 
unser Empfänger ein Hf signal empfängt, schlägt die Fifo triggerung 
fehl?
Dann sollte ich mir also das Register 0xCA-XX anschauen.

MFG

von Bastelbube (Gast)


Lesenswert?

Hat niemand eine Idee? Push^^

von Felix P. (fixxl)


Lesenswert?

Die Art und Weise, wie du empfangen willst, wird nicht funktionieren, 
weil beim RFM12 aufgrund des kleinen Puffers der Empfang quasi in 
Echtzeit abgehandelt werden muss und du mit deiner Sequenz "Einschalten 
- sofort FIFO auslesen" den genauen Empfangszeitpunkt nie erwischen 
wirst.

Also musst du den Receiver dauerhaft eingeschaltet haben und immer 
wieder den FIFO-Status (MSB im Status-Register) abfragen. Erst wenn 
dieses Bit 1 ist, befinden sich Daten im FIFO, die dann relativ fix 
ausgelesen werden sollten, damit es keinen Überlauf gibt (FIFO ist nur 
16 Bit groß!).

In der main.c muss es also etwa so aussehen (ich verwende den 
Synthesizer, also schicke ich 82D8 und nicht 82C8):
1
  rfm_cmd(0x82D8); // RX on (set bit ER in Power Management)
2
  rfm_cmd(0xCA81);// set FIFO mode
3
  rfm_cmd(0xCA83);// enable FIFO: sync word search
4
5
  for (;;) {
6
    if(rfm_trans(0x0000) & 32768) {
7
       receive();
8
    }
9
  }

Aus der rxdata-Funktion musst du die drei rfm_trans-Befehle vor der 
for-Schleife dementsprechend rausschmeißen.

: Bearbeitet durch User
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.