Forum: HF, Funk und Felder RFM12 non buffered TX mode


von Tim (Gast)


Lesenswert?

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

von Holger S. (holli_1)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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.

von Michael U. (amiga)


Lesenswert?

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

von Holger S. (holli_1)


Angehängte Dateien:

Lesenswert?

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.

von Tim W. (synapse)


Lesenswert?

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.

von Holger S. (holli_1)


Angehängte Dateien:

Lesenswert?

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.

von Tim W. (synapse)


Lesenswert?

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?

von Holger S. (holli_1)


Lesenswert?

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
Noch kein Account? Hier anmelden.