Hallo zusammen, ich habe im Datenblatt von dem RFM12 gelesen, dass man diesen auch ohne TX Buffer/Register benutzen kann. Für eine spezielle Anwendung würde ich gerne mit dem RFM12 Modul einzelne Bits verschicken können. Kann mann, wenn man das Bit 7 "el" im Configuration Control Command Register auf low lässt, einzelne Bits wie beim RF02 Modul versenden? d.h. wird die Bit Rate vom RFM12 Modul dann als Taktgeber an irgendeinem Pin herausgegeben und kann ich dann am FSK Input meine zu versendenen Bits anlegen? Ich hoffe, dass mir da jemand weiterhelfen kann- danke für eure Hilfe! Gruß Tim
Ich habe es schon einmal ohne TX-Register ausprobiert, gleiche Ansteuerung wie beim RFM02. Allerdings kamen keine IRQ's zur Synchronisierung raus. Wenn die Beschreibung im Datenblatt korrekt ist, produziert der auch wohl gar keine IRQ, wenn der TX-Puffer aus ist. Ich werde die Senderoutine mal ohne IRQ-Warteschleife testen.
Hallo Holger, in dem Datenblatt habe ich auch nichts gefunden- war mir aber nicht sicher ob nicht doch irgendwo ein IRQ Signal vorhanden ist, da die Datenblätter auch nicht so wirklich toll sind. Zur "Non Buffered Transmission" steht ja da gar nichts drin auch nicht in den Dateblättern vom "MRF49XA" bzw. "IA4420". Dann frage ich mich allerdings wie die Synchronisierung ohne IRQ`s funktioniert. Vermutlich muß man auf dem "Host Controller" sich selbst einen timer mit der jeweiligen Bit Rate erstellen und dementsprechend die Datenbits am FSK Port durchtoggeln. Trotzdem kann ich mir noch nicht ganz vorstellen wie die Datenbits dann vom RFM12 richtig erkannt werden, wenn keine Synchronisierung vorhanden ist. Ich bin mal gespannt. Wenn du was herausfindest wäre klasse.
Hallo, Tim schrieb: > Hallo Holger, > > in dem Datenblatt habe ich auch nichts gefunden- war mir aber nicht > sicher ob nicht doch irgendwo ein IRQ Signal vorhanden ist, da die > Datenblätter auch nicht so wirklich toll sind. Zur "Non Buffered > Transmission" steht ja da gar nichts drin auch nicht in den Dateblättern > vom "MRF49XA" bzw. "IA4420". Dann frage ich mich allerdings wie die > Synchronisierung ohne IRQ`s funktioniert. Vermutlich muß man auf dem > "Host Controller" sich selbst einen timer mit der jeweiligen Bit Rate > erstellen und dementsprechend die Datenbits am FSK Port durchtoggeln. > Trotzdem kann ich mir noch nicht ganz vorstellen wie die Datenbits dann > vom RFM12 richtig erkannt werden, wenn keine Synchronisierung vorhanden > ist. Ich bin mal gespannt. Wenn du was herausfindest wäre klasse. Da wirst Du auch nichts finden. Jede Störung, jeder fremde Sender erzeugt "Bits" am Ausgang. Es ist dann Dein Problem, für eine funktionierende Übertragung zu sorgen. Also 2-3x 0x55 oder 0xAA senden, damit Verstärkungsregelung und AFC des RFM sich auf Dein Signal einstellen können, eine Kennbytefolge senden, damit Du per Software rausfinden kannst, daß es überhaupt Dein Sender ist und dann Deine Bits senden und einsammeln. Du weist ja, was und wie schnell der Sender sendet, das muß Deine Empfangssoftware eben auswerten können. Anders ausgedrückt: Du mußt alles das von Hand programmieren und erledigen, was der RFM sonst alleine kann, wenn man es einschaltet... Es gubt nur 2 sinnvolle Gründe, die Hardware des RFM beim Empfang nicht zu nutzen: man will z.B. die ASK einer Funksteckdose/Funkthermometers empfangen, daß es so schon fertig gibt oder man hat ein Gerät mit fertigem Protokoll, daß mit dem des RFM nicht zusammenpasst. Verrate doch einfach mal, was Du vorhast. Gruß aus Berlin Michael
Hallo Tim, also, es funktioniert ohne TX-Puffer direkt über den FSK-Pin. Wie du schon geschrieben hast, die Synchronisierung zur gewünschten Bitrate musst du über einen Timer des Controllers steuern. Vom RFM selbst kommt nichts raus. Mein übliches Testprogramm überträgt in einem Durchgang jeweils 32 Byte mit Präambel usw. und funktioniert bei 19,2 kbit problemlos. Im Anhang mal 2 Screenshots vom Logikanalysator, der obere Teil gehört zum Sender und der untere zum Empfänger. Einmal mit und ohne RX-FIFO.
Hallo, @ Michael: eine funktionierende Datenübertragung mit zwei RFM12 Modulen (mit FIFO Funktionalität) habe ich bereits für eine Funkfernbedienung am Laufen. Jetzt probiere ich das Protokoll eines Funkempfängers zu implementieren. Der echte Sender terminiert das Protokoll mit einzelnen Bits. Im FIFO Mode sendet der RFM12 jedoch immer nur komplette Bytes. Daher wollte ich gerne mal den RFM12 im "non Buffered Mode" betreiben (nur den Sender). Du hast recht-wenn ich als Empfänger auch einen RFM12 benutzen würde wäre das recht aufwendig und doppelte Arbeit. Vielleicht wäre eine "duale Senderoutine" machbar. Erst das TX-Register benutzen und dann Umschalten, um die einzelnen Bits zu senden. Ich befürchte jedoch, dass es schwierig ist die einzelnen Bits dann synchron zu den vorherigen Bytes zu versenden. @Holger: Schade, dass das Modul keinen generierten IRQ herausgibt. Aber es scheint ja auch so zu funktionieren. Kannst du mir vielleicht mal dein Testprogram posten!? Mich interessiert vor allem wie du die Register initialisierst und wann/wie du den Sender ein- und ausschaltest. Die Screenshots sind echt hilfreich- sollte mir vielleicht auch mal einen Logicanalyser zulegen.
Hier ist mein Testprogramm in Bascom. Ich habe es möglichst einfach gehalten. Den Timer habe ich auf 48µs eingestellt. Damit ergeben sich 52µs für die FSK-Routine (19,2 kbit). Der Empfänger mit RX-FIFO empfängt das Ganze ohne Probleme. Die FSK-Routine wartet auf den IRQ und toggelt den Pin entsprechend. In der Hauptschleife ist nach dem Einschalten des Senders noch eine 1,2 ms Warteschleife. Damit wird schon das erste Bit der Präambel beim Empfänger ohne RX-FIFO sauber ausgegeben. Sonst gehen die ersten Bits unter. Beim Verwenden des RX-FIFO braucht man die Wartezeit nicht, da nur die Nutzdaten ausgegeben werden.
Super,danke Holger! Ich werd das ganze mal in meiner C Application ausprobieren. Sieht recht simple aber effektiv aus. Der Versatz von den 4µs (52<->48) ergibt der sich, weil der Prescaler nicht genau auf 52µs eingestellt werden kann? In dem Screenshot ist mir noch das nINT Signal in der Empfänger Routine aufgefallen. Hast du den RFM12 so initialisiert, dass dieser dir anzeigt, wenn er gültige Datenpakete empfängt?
Hallo Tim, laut dem Bascom Simulator vergehen etwa 4,5µs vom Sprung in die ISR bis zum Neuladen des Timers in der ISR. Ich habe den Versatz vorher nur mit dem Logikanalysator ausgemessen und das Ganze auf 52µs getrimmt. Beim RFM ist ja der nINT/VDI entweder IRQ Eingang oder VDI Ausgang. Ich stelle das immer auf VDI Ausgang über "Receiver Control" - Bit 10.
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.