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.