Forum: Mikrocontroller und Digitale Elektronik RFM22B Beispiel Projekt gesucht.


von Christoph H. (christoph_b)


Lesenswert?

Hallo

Ich habe nun das RFM22B Funkmodul mit dem Atemga 328 von Ulrich Radig 
aufgebaut. Leider bekomme ich die Module nicht zum laufen.


Kann jemand vieleicht ein Beispiel Projekt in C für die RFM22B Module 
hochladen.


Besten Dank Christoph

von Christoph H. (christoph_b)


Lesenswert?

hat noch keiner mit dem RFM22B gearbeitet?

von Carsten M. (ccp1con)


Lesenswert?

Doch ich! Was willste wissen?

von Christoph H. (christoph_b)


Lesenswert?

Ich bin mit den ganzen Register überfordert ;-)

Für mein Projekt sollte ich Daten die ich an einen Atmega 328 schicke 
(I2C) über das RFM22B Modul an ein anderes RFM22B Modul welches am PC 
hängt senden. Das ganze bidirektional.

Leider programmiere ich erst seit ca 8 Monaten. Und aus den 
Datenblättern werde ich einfach nicht schlau.

Ich habe irgendwo mal gelesen das das Modul einen Modus hat bei dem es 
alles was es über SPI empfängt sendet. Sozusagen einen Automatik Modus. 
Ich glaube es war der Automatic Packet Handling Modus
Keine Ahnung ob das stimmt und ob ich den verwenden kann.

Daher die Suche nach einem Beispiel Projekt ohne viel Schnickschnack.

Gruß Christoph

von Carsten M. (ccp1con)


Lesenswert?

Ja das ist richtig dieser Modus heißt automatic transmission und wird im 
Register 0x08 konfiguriert.
Ein anderer Wert TX FIFO almost full (Register 0x7C) bestimmt bei 
welchem FIFO Füllungsgrad der Chip anfängt automatisch zu senden.
Nachdem Senden kehrt der Chip in den Idle State zurück.
Also braucht man lediglich, wie du es wolltest, über SPI Bytes 
rüberschieben. Den Rest mach dann der RFM, wenn alles andere richtig 
konfiguriert ist!

Ein komplettes Beispielprojekt kenne ich nicht.
Könnte mit ein paar Codeschnipseln aushelfen.

von Christoph H. (christoph_b)


Lesenswert?

Hallo Carsten

noch eine Frage
Ich benötige eine bidirektionale Verbindung zwischen den Modulen. Es 
sollten beide Senden und Empfangen können.

Meine Frage. Wie stelle ich es an das immer nur 1 Modul sendet? Es kann 
ja sein das beide zur gleichen Zeit senden was passiert dann. Konmmt 
dann nur Müll an??

Gruß Christoph

von Carsten M. (ccp1con)


Lesenswert?

Müll kommt nicht an, das Packet wird einfach nur verloren gehen.
Das Modul kann entweder Senden oder Empfangen, nichts gleichzeitig.
Also musst du die Modi einstellen/umschalten.

Ich habe Beide immer in RX Mode.
Das mit dem PC verbundene Modul sendet dann (vom PC Programm initiiert) 
und geht gleich wieder in RX.
Das Modul in der Ferne empfängt, sendet sofort (wenn was zu senden ist) 
und geht wieder in RX.

von dunno.. (Gast)


Lesenswert?

simpler ansatz:

jedes modul befindet sich permanent im rx modus. hierbei läuft ein timer 
mit einer bestimmten zeit, ist nach timerablauf nichts empfangen worden, 
wird das entsprechend in ner zählvariable vermerkt.

soll ein modul etwas senden, tut es das nur, wenn es so lange (oder 
länger) nichts empfangen hat, wie der normale transfer zwischen 2 
modulen dauert.



http://de.wikipedia.org/wiki/Carrier_Sense_Multiple_Access/Collision_Avoidance

von Christoph H. (christoph_b)


Lesenswert?

hast du zufällig ein ein Codeschnipseln zur bidirektionale Verbindung?

von Christoph H. (christoph_b)


Lesenswert?

so noch eine Frage.

Ich teste momentan die Datenrate der Module. Leider bekomme ich bei mehr 
als 2400Baud Übertragungsfehler. Bei 19200Baud kommen von 10 Char Werten 
max 6-7 an. Die Module sind ca 1m entfernt.

Was könnte da falsch sein?

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

ja was könnte da falsch sein - sicher mindestens irgend ein Register.
Bin hier gerade selbst am basteln, hab mit dem Code von Uli und den 
darin enthaltenen Einstellungen für 2400Baud auch alles am laufen. Beim 
Versuch auf eine höhere Baurate zu gehen hab ich bisher immer nicht's 
mehr empfangen. Die Registerkalkulationstabelle von SiLabs liefert 
leider schon für die 2400Baud völlig andere Werte als die von Uli 
verwendeten.

Hast du die CRC-Prüfung an? Dann müssten doch die Pakete mit 
fehlerhaften Daten aussortiert werden - auch wenn dir das für die Lösung 
des Problems erst mal nicht hilft.

Sascha

von Uli (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

evt. hilft dir der Democode von Hope RF weiter.

Gruß
Uli

von Christoph H. (christoph_b)


Lesenswert?

Hallo

Nachdem ich bei 19.2k Baud Probleme habe habe ich mir die AP Note 440 
angesehen. Die IF Filter Bandwidth steht momentan bei 127.9kHz.

Habe mit dem Lehrer diskutiert und der meine das ich einfach die 
Bandbreite erhöhen sollte da er dann empfindlicher ist. Ich habe dann 
auf Anraten vom Lehrer die Bandbreite auf die maximalen 620kHz gestellt. 
Leider empfange ich dann gar nichts. Grund unbekannt. Das selbe gilt 
wenn ich die Bandbreite z.B auf 56.2kHz stelle.

Das Frequency Deviation Register (0x72) steht auf 50kHz. Das soll ja der 
Frequenzhub zwischen dem 0 und 1er sein. Auch wenn ich den Erhöhe 
empfange ich nichts mehr. Mehr Hub sollte auch das erkenne von Daten 
vereinfachen.

PS: Natürlich habe ich die Register auf beiden Modulen ( Sender und 
Empfänger )geändert.

Vieleicht kann jemand der sich auskennt kurz ein paar Worte zu den 
Registern posten.

PSS: Laut AP NOTE 440 Seite 26 sind folgende Werte Default.
Datenrate: 40kbps
FD: 20kHz (Frequency Deviation)
BW: 80kHz (Filter Bandwidth)

Mit diesen Werten scheint der Sender sich aufzuhängen. Ich habe das 
Beispiel von Ulrich Radig bei dem die LED getoggelt wird sobald etwas 
gesendet wird. Leider leuchtet die LED dauernd. D.h das es nicht sendet.

von Carsten M. (ccp1con)


Lesenswert?

Hast du mal die Werte genommen, die vom Excel tool ausgegeben werden.
Die sind meines Erachtens gut.

Die aktuelle Version ist "RF22B 23B 31B 42B 43B Register 
Settings_RevB1-v5.xls" und gibts bei HopeRF.com

von Christoph H. (christoph_b)


Lesenswert?

so ich habe mal das Excel Sheet angeschaut und die Werte übernommen.
Folgende Einstellungen
Rb 40
Deviation 100
Modulation FSK
RX/TX Carrier 869

Die Senderoutine wird alle 100ms aufgerufen. Also nicht schnell. 
Trotzdem verliehre ich von 200 Paketen 1-2.

von Carsten M. (ccp1con)


Lesenswert?

es gibt viele mögliche Gründe.

Hast du AFC on?
Wie groß ist der RSSI beim Empfänger?
Wie groß ist die transmit power?

vielleicht zeigst du mal deine Konfiguration.

von Christoph H. (christoph_b)


Angehängte Dateien:

Lesenswert?

hier mein RF22 File.

Was so halbwegs geht ist 400000 Baud. (ca 1% Verlust)
bei 2400 Baud habe ich keine Verluste.

Gruß Christoph

von Carsten M. (ccp1con)


Angehängte Dateien:

Lesenswert?

Register 0x09 – XTALshift bit7 habe ich 1
//Register 0x55 ist in RFM22B nicht mehr benannt

Ich habe meine Config mal angehängt, ... have fun ...
Es ist für 100 kbps GFSK 869,3 MHz paket handler und FIFO konfiguriert.

von Christoph H. (christoph_b)


Lesenswert?

danke für die Hilfe

so ein kurzes Statusupdate.

Ich habe jetzt mal als Modulation OOK eingestellt und siehe da bei 40k 
Baud läuft alles ohne Fehler. Bei 50000 Paketen geht kein Einziges Paket 
verloren.

Welche Nachteile habe ich durch OOK. Es soll ja empfindlicher sein als 
FSK.
Und was ist mit GFSK??

Noch eine Frage
Wird der Manchester Code Hardwaremässig erzeugt oder muss ich das 
Software mässig implementiere?

von Carsten M. (ccp1con)


Lesenswert?

Hardware Manchester wird in Register 0x70 Modulation_Mode eingestellt 
(siehe RFM22.c). Reduziert jedoch die effektive Datenrate.

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.