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
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
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.
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
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.
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
hast du zufällig ein ein Codeschnipseln zur bidirektionale Verbindung?
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?
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
Hallo, evt. hilft dir der Democode von Hope RF weiter. Gruß Uli
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.
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
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.
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.
hier mein RF22 File. Was so halbwegs geht ist 400000 Baud. (ca 1% Verlust) bei 2400 Baud habe ich keine Verluste. Gruß Christoph
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.