Forum: Mikrocontroller und Digitale Elektronik Problem mit RFM01/RFM02


von To L. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

wie dem Betreff bereits zu entnehmen ist, bekomme ich die Funkmodule 
RFM01/RFM02 einfach nicht zum laufen. Ich hoffe, dass mir hier jemand 
weiterhelfen kann. Die Datenblätter für das RFM01 und RFM02 scheinen 
inzwischen OK zu sein (Wenn auch viele Informationen leider fehlen...). 
Ich habe bislang zumindest keine großen Fehler gefunden und sie stimmen 
auch mit den Datennblättern vom RF01 und RF02 überein. Ich habe 
versucht, den Code anhand der Datenblätter und mit dem scheinbar nach 
wie vor fehlerhaften Pollin-Code zu erstellen.
Über die UART-Schnittstelle schickte mir der Mikrocontroller am RFM01 
nur 0en, das aber immerhin nur, solange auch der Sender (RFM02) 
eingeschaltet war. Ich habe nun versucht, mit einer Abfrage des FFIT 
statusbits im Code für das RFM01 den Fall, dass der Interrupt nicht von 
einem vollen FIFO ausgelöst wird, abzufangen und nun bekomme ich über 
die UART gar keine Ausgabe mehr.
Ich habe auch den Code von Benedikt ausprobiert, welcher ebenfalls in 
der Abfrage, ob etwas Empfangen wird ("1 an SDO"), hängen bleibt.
Die Belegung der PINS vom RFM01, RFM02 und von den Mikrocontrollern 
steht in meinem Quellcode ganz oben als Kommentar. Als Mikrocontroller 
verwende ich jeweils einen mit 8MHz getakteten ATMEGA8. Bei den beiden 
Modulen handelt es sich laut Aufdruck um rev. 5.
Inzwischen habe ich glaube ich sämtliche Beitrage zu dem Thema hier im 
Forum rauf und runter gelesen.
Wäre super, wenn sich jemand, der mehr Erfahrung mit den Modulen hat, 
mal meinen angehängten Quellcode anschauen könnte. Vielleicht ist es ja 
nur mal wieder ein ganz dämlicher Fehler...

Gruß Tobias

von Conny G. (conny_g)


Lesenswert?

Hallo Tobias,
kenne die RFM01/02 nicht.
Ich bin jedenfalls mit dem RFM12 in einen ganz dämlichen Fehler 
gelaufen: ich hatte überlesen, dass das Modul 100ms zur Initialisierung 
benötigt und man erst nach dieser Zeit SPI-Commands schicken kann. Das 
hat mich einen ganzen Abend beschäftigt, weil das Modul sich sehr 
seltsam verhielt, mal ging es, mal nicht - bis mir dann endlich dieser 
Satz im Datenblatt auffiel und dann war alles gut.

von To L. (Gast)


Lesenswert?

Vielen Dank erstmal für die schnelle Antwort!
Das mit den Zeiten hatte ich zuerst auch überlesen, habe hier allerdings 
nochmals genauer im Datenblatt nachgelesen, nachdem ich hier in mehreren 
Beiträgen davon gelesen habe. Beim RFM02 sollten 50ms reichen und beim 
RFM01 150ms. Ich warte bei beiden vorsichtsheitshalber 200ms das sollte 
also denke ich nicht das Problem sein.

Gruß Tobias

von To L. (Gast)


Angehängte Dateien:

Lesenswert?

Also einen saudämlichen Fehler habe ich inzwischen behoben (Die 
Initialisierung der Ports war/ist im ersten Code natürlich völliger 
Blödsinn).
Ich gebe mir inzwischen auch den Inhalt der Statusbits über die Uart aus 
und werte über diese jetzt auch aus, ob der Interrupt durch ein 
vollständiges Empfangenes Byte ausgelöst wurde. Das ganze funktioniert 
soweit jetzt, allerdings empfange ich anstatt dem gesendeten 0xAFFE 
(fast durchgängig) nur 0xFFFF.
Hat vielleicht jemand eine Idee, an was das noch liegen könnte?
PS: Der aktuelle Code ist diesem Beitrag angehängt

Gruß Tobias

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich habe beste Erfahrungen damit gemacht, den Fifo jedesmal nach dem 
Empfang neu zu initialisieren. Also Fifo Reset (0xCE84) und dann Fifo 
Restart(0xCE87) machen.
Ich kann dir gerne mal Code posten, allerdings ist meiner für 868Mhz und 
in Assembler.

von To L. (Gast)


Lesenswert?

Ich habe das gerade mal ausprobiert mit dem Fifo Reset und Restart. Das 
wäre bei mir dann nach der Zeile "buf = receiveByte();". Dann empfange 
ich jedoch gar nichts mehr.
Wenn du mir deinen Code posten könntest das wäre nett. Ich kann zwar 
kein Assembler für AVR Mikrocontroller aber für diverse andere, 
vielleicht fang ich ja etwas damit an :-)

Heute ist mein neues Oszilloskop gekommen und ich habe jetzt mal am 
Sender gemessen, was denn überhaupt vom µC an das RFM02 übertragen wird. 
Hier scheint alles in Ordnung zu sein (frequenz von nIRQ = 4,8kHz und 
auch die Daten, welche der µC hierbei zurücksendet entsprechen der 
Präambel, Synchronisationswort und dem zu übertragenden 0xAFFE). Daraus 
schließe ich, dass das Initialisieren des RFM02 funktioniert und ich 
würde den Fehler nun eher beim Empfänger suchen.
Lässt sich am RFM01 vielleicht irgendwo direkt Messen, was für Daten es 
empfängt (Ich meine ich hätte hier in einem Beitrag etwas in die 
Richtung gelesen, finde es gerade aber nicht mehr)

Gruß Tobias

von To L. (Gast)


Lesenswert?

Ich habe gerade so festgestellt, dass bereits das leichte Berühren eines 
Kabels am Steckbrett beim RFM01 komplett andere Empfangsergebnisse 
liefert. Ich werde mir wohl erst einmal 2 Platinen für die Module ätzen, 
nicht dass es nachher nur am Steckbrett liegt...

Gruß Tobias

von Conny G. (conny_g)


Lesenswert?

Hallo Tobias,
ich habe schon öfter gelesen, dass die Steckbretter durchaus 
problematisch sein können, weil sie sehr viel Metallmasse enthalten um 
die Steckkontakte zu realisieren - z.B. haben sie wohl recht hohe 
Kapazität im vgl. zu einer normalen Platine.
Das könnte die Antennenverhältnisse eines RF-Moduls schon 
durcheinander bringen.

Bei mir setze ich allerdings die RFM12 bisher nur auf Steckbrettern ein 
und habe einfach ein 8cm Prototypenboard-Kabelchen senkrecht als Antenne 
eingesteckt und die Module funktionieren wunderbar auf eine Entfernung 
von ca. 5m innerhalb der Wohnung. Reichweite habe ich noch nicht genauer 
ausgetestet, bei ab 7/8m war's mal wechselhaft kann ich mich an einen 
Versuch erinnern. Wir haben aber auch recht dicke Ziegelwände im Haus - 
da reicht selbst das WLan gerade noch in den Nebenraum.

Ich würde also meinen, dass nicht das Steckboard sein sollte, wenn die 
Module eher nah beeinander sind, auf einem Tisch beim Entwickeln 
sozusagen.

von To L. (Gast)


Lesenswert?

Danke für den Hinweis. Also der Abstand wir es wohl kaum sein der 
beträgt ca 15 cm. Das RFM02 scheint wie oben geschrieben auch zu 
funktionieren.
Mein Steckbrett ist allerdings nicht gerade das beste und ich hatte hier 
schon hin und wieder Probleme mit den Kontakten. Da ich für die Module 
wenn sie denn dann irgendwann hoffentlich mal laufen sollten sowieso 
Platinen brauchen ziehe ich das entwerfen, ätzen und bestücken der 
Platinen jetzt einfach mal vor.

Gruß Tobias

von To L. (Gast)


Lesenswert?

Ich konnte es einfach nicht lassen und habe gerade nochmal etwas an den 
Kabeln gewackelt und habe jetzt doch tatsächlich das gesendete Wort 
empfangen. Es scheint also tatsächlich an den Kabelen/dem Steckbrett zu 
liegen. Ich werde auf jeden Fall nochmals berichten, wenn meine Platinen 
fertig sind. Das kann aber etwas dauern .-)

Gruß Tobias

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Bei mir hat es sich auch bewährt, direkt an Vcc auf dem Platinchen einen 
SMD Elko gegen Masse zu schalten. Die Empfindlichkeit des Empfängers 
steigt auch enorm an, wenn man ihn über eine gut abgedrosselte 
Betriebsspannung versorgt und nicht direkt aus der Vcc des 
Mikrocontrollers.

Anbei der Code für den Receiver. Dieser Code läuft auf einem Arduino und 
sendet über die serielle Konsole das Statusbyte, wenn das RFM01 was 
empfangen hat. Die empfangenen Bytes werden in den Buffer ab DMXSTART 
eingelesen, mit einer kleinen Prüfsumme.
Wie bereits erwähnt, ist für 868 MHz, die gewählte Bitrate der 
Funkstrecke ist hier 4800, seriell werden 19200 Baud benutzt.

von To L. (Gast)


Lesenswert?

Hallo Matthias,

Danke für den Quellcode.
Das RFM01 sollte seine Spannung von einem 7805 beziehen und das RFM02 
von einem LF33CV. Ich hatte eigentlich vor, diese direkt dort 
anzuschließen und  wie auch bei den Mikrocontrollern an VCC kleine 
Keramikkondensatoren (100nF und zusätzlich noch wie im Datenblatt 220pF) 
anzubringen. Die Mikrocontroller hängen dann natürlich jeweils am 
gleichen Spannungsregler. Ist wirklich ein "großer" Elko an VCC 
notwendig? Normal reicht das doch einer für so eine kleine Platine in 
der nähe des Spannungsreglers!?
Wenn ich dich richtig verstehe, wäre es sogar sinnvoll, das RFM01/RFM02 
direkt aus einem Pin des Mikrocontrollers mit Spannung zu versorgen!? 
Das wollte ich eigentlich nicht, da ich viele Pins brauche. Wenn das 
jedoch die Sende-/Empfangsqualität aus irgendwelchen Gründen erhöhen 
sollte wäre es mir den einen Pin wert :-)

Gruß Tobias

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tobias L. schrieb:
> Wenn ich dich richtig verstehe, wäre es sogar sinnvoll, das RFM01/RFM02
> direkt aus einem Pin des Mikrocontrollers mit Spannung zu versorgen!?

Oh nein, da hast du etwas falsch verstanden. Im Gegenteil, je weniger 
der RFM (vor allem der Empfänger) von den Störungen des MC abkriegt, 
desto besser. Der SMD Elko, den ich hier benutze, ist nicht grösser als 
4u7 - 15u. Wichtig ist eine Drossel (100uH - 470uH) in der 
Betriebsspannung für das Modul. Damit filterst du etwaige Störungen auf 
der Betriebsspannung von MC oder anderen Oszillatoren weg, bevor sie das 
Modul erreichen.
Ich habe mit diesen Massnahmen und Schnurlostelefon Antennen schon 
locker 200-300m überbrückt. Ohne die Entstörungsmassnahmen am Empfänger 
warens nur 40-50m, also ein deutlicher Gewinn.

Die Antennen waren in diesem Fall ausserhalb des Metallgehäuses (LED 
Beamer, der seine Vcc wirklich verseucht) und das RFM Modul war ein 
wenig vom MC abgesetzt.
Achso, im Quellcode sind noch Pins des Moduls wie VIN usw. an den MC 
angeschlossen. Das ist lediglich für Versuchszwecke. Allerdings muss an 
VIN ein Pullup von ca. 10k, das wird aber in den Hope Datenblättern 
irgendwo erwähnt.

von To L. (Gast)


Lesenswert?

Ok. Dass hier sogar eine Drossel notwenig ist hätte ich nicht gedacht. 
Werde das bei meinem Schaltplan/Layout noch einbauen. Das scheint sich 
ja richtig zu lohnen bei dem Reichweitengewinn.
Welchen Pin meinst du genau mit VIN (bei mir ist kein Pin so 
bezeichnet). Meinst du vielleicht VDI? Ich habe bislang lediglich einen 
Pullup an Data/nFFS, die restlichen nichtbenötigten Pins hängen in der 
Luft.

Gruß Tobias

von To L. (Gast)


Lesenswert?

Habs doch noch im Datenblatt entdeckt. Ist VDI. Hab ich wohl mal wieder 
überlesen. Danke nochmal für den Hinweis.

Gruß Tobias

von To L. (Gast)


Lesenswert?

Aber so wie ich das lese ist es bei Verwendung des 
Synchroniserungswortes nicht notwendig. So wie ich das lese würde er den 
Fifo dann sogar füllen, wenn kein Synchronisationswort erkannt wurde. 
Das ist ja in meinem Betriebsmodus nicht erwüscht. Da müsste doch eher 
ein Pulldown Widerstand hin oder habe ich hier einen Denkfehler?

Gruß Tobias

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tobias L. schrieb:
> Aber so wie ich das lese ist es bei Verwendung des
> Synchroniserungswortes nicht notwendig. So wie ich das lese würde er den
> Fifo dann sogar füllen, wenn kein Synchronisationswort erkannt wurde.
> Das ist ja in meinem Betriebsmodus nicht erwüscht. Da müsste doch eher
> ein Pulldown Widerstand hin oder habe ich hier einen Denkfehler?
>
> Gruß Tobias

Hehehe, jetzt muss ich mich doch noch mal durch den Code wühlen - ist 
schon ein bisschen her. Ja, du hast natürlich recht, Pullup an nFFS, und 
VDI kriegt in meinem Code einen Pullup vom AVR spendiert, muss aber 
vermutlich nicht sein. Ich wollte mir in der Software die Option auf 
direktes FSK offenhalten, mit dem Synchronwort ist das alles nicht 
nötig, lediglich der Pullup an FFIT sollte dran sein.
Das Pollin Programm hatte bei mir auch den Nachteil, das ISP nicht mehr 
ging, wenn das Modul angeschlossen war, deswegen bei mir auch eine 
andere Pinbelegung.

von To L. (Gast)


Lesenswert?

Hallo,

ich bin inzwischen dazu gekommen, meine Platinen zu bestücken und in 
Betrieb zu nehmen. Mal davon abgesehen, dass die letzten beiden Bit der 
von mir übertragenen 2 Byte eine extrem hohe Bitfehlerhäufigkeit 
aufweisen funktioniert die Übertragung damit nun. Dem muss ich bei 
Gelegenheit mal noch voll auf den Grund gehen.
Vielen Dank an dieser Stelle nochmal an alle, die mir hier 
weitergeholfen haben.

Gruß Tobias

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.