RFM12

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Beschreibung der Funkmodule RFM01, RFM02 und RFM12.

Benötigt werden in der Minimal-Version im FIFO-Modus nur die Anschlüsse nSEL, SDO, SDI und SCK, eben das komplette SPI-Interface. Der Zugriff auf das Sende- und Empfangs-FIFO ist per Software möglich, ebenso die Abfrage der Statusbits. Deshalb werden z. B. nIRQ und nFFS nicht unbedingt benötigt. nIRQ signalisiert unter anderem, dass das Modul bereit ist Daten zu empfangen. Wenn Daten empfangen wurden, kann dies über den FFIT-Pin abgefragt werden (falls die Füllschwelle eingestellt wurde). nFFS dient dazu das FIFO direkt anzusprechen (es ist quasi der Chipselect für das FIFO), davon wird in der Minimalversion aber kein Gebrauch gemacht. Der Pin muss daher auf high-Pegel gelegt werden! An CLK kann eine Frequenz von 1MHz bis 10MHz eingestellt werden. Hiermit kann dann z. B. der Mikrocontroller versorgt werden. Reset ist ein Open-Collector-Ausgang und gleichzeitig der Reset-Eingang. Er sollte daher entweder gar nicht, oder aber hochohmig angeschlossen werden.

Im FIFO-Mode kann das Modul konfiguriert werden mit dem Empfang zu warten, bis die Daten 0x2DD4 empfangen wurden. Sobald dieses Bitmuster empfangen wurde, werden Daten in das FIFO geschrieben, bis man das FIFO abschaltet und die Mustererkennung neu startet.

Als weitere Modi stehen unter anderem ein synchroner Modus zur Verfügung (no FIFO mode), in dem der Sender/Empfänger den Bittakt ausgibt, und synchron dazu die zu sendenden Daten einliest bzw. die empfangenen Daten ausgibt. Der SPI Bus ist trotzdem zur Initialisierung des Moduls notwendig.

Grundlagen

Wichtig zu erwähnen ist, dass der beim RFM12 von HopeRF verwendete Chip ein SI4420 (RFM12B SI4421) von Silicon Labs ist. Warum HopeRF diesen Chip abschmirgelt bzw unkenntlich macht versteht keiner, denn der Chiptyp ist bekannt. Jedoch ist das Datenblatt von HopeRF teilweise fehlerhaft weshalb das DB von Silicon Labs verwendet werden sollte. Neuanfänger haben es jedoch schwer den Chiptyp herauszufinden, weshalb hier nochmals deutlich mitgeteilt wird, dass es sich um einen "4420" von Silicon Labs handelt!


HF-seitiges Funktionsprinzip

Ich möchte hier etwas das Funktionsprinzip des RFM12 erläutern, da das Verständnis wichtig ist, um die Parameter Frequenzhub, Datenrate, Tiefpassfrequenz usw., daraus folgend Bandbreite und Kanalraster sinnvoll auswählen zu können. Schließlich ist ein sauberer Frequenzplan wichtig für die kollisionsfreie Funktion mehrerer gleichartiger Geräte.

(1)

Betrachten wir zunächst die Amplitudenmodulation:

Rf12fm1.png

Multiplikation im Zeitbereich bewirkt Faltung im Frequenzbereich.

Das Ein- und Ausschalten eines hochfrequenten Trägers im Takt eines Datensignals ist eine Multiplikation und lässt rings um den Träger zwei Seitenbänder entstehen. Deren Breite ist jeweils die halbe Datenrate, sofern die Daten bandbegrenzt (also verschliffen) werden. Zur einfacheren Rekonstruktion verschleift man das Datensignal deutlich weniger; etwa ein 8-kBit/s-Signal auf 8 kHz (statt 4 kHz). Der RFM12 verschleift die Daten gar nicht.

Ist das Datensignal gleichspannungsfrei (gleich viel +1 wie -1), verschwindet der Träger, und die gesamte Sendeleistung steckt in den Seitenbändern, also der gewünschten Information. Das hilft den Rauschabstand zu verbessern und/oder die Sendeleistung zu verringern (weniger Elektrosmog).

(2)

Die Frequenzumtastung (FSK) wird gern als ein Sonderfall der Frequenzmodulation betrachtet. Bei Modulationsgrad η > 1 (der RFM12 kann eh' nichts anderes demodulieren) kann man das Ganze auch als doppelte Amplitudenmodulation interpretieren:

Rf12fm2.png

Hier wird die Bandbreitenverschwendung offensichtlich, aber im 433-MHz-Band ist ja genug Platz dafür. FM-Signale lassen sich viel leichter verstärken als AM-Signale: man braucht sie nur durch einen (Energie sparenden, digitalen) Begrenzerverstärker zu schicken.

Da die Sendedaten nicht bandbegrenzt werden (der Träger wird hart umgeschaltet) entstehen theoretisch unendlich breite Seitenbänder, die in einer sinc-Funktion (= sin(x)/x) abfallen.

Das ist möglicherweise der Grund, warum die meisten Beispiele genau in der Mittenfrequenz des 433-MHz-Bandes, nämlich 433,92 MHz, funken und so die übrigen Störer geradezu magisch anziehen. Die Störung außerhalb der Zulassungsgrenzen (433,05 .. 434,79 MHz) ist so definitiv minimal. Beim wesentlich breiteren amerikanischen 915-MHz-Band ist's deutlich entschärfter.

(3)

Die Demodulation erfolgt beim RFM12 im Basisband. Es wird also keine Zwischenfrequenz (wie die 10,7 MHz beim analogen UKW-Rundfunk) verwendet. Das FSK-Signal wird (wahrscheinlich) mit der Mittenfrequenz multipliziert, und heraus kommt dieses Bild:

Rf12fm3.png

Danach kommt das Signal durch den einstellbaren Tiefpass. Diesen dimensioniert man so, dass der Frequenzhub plus die Nutzsignalbandbreite durchpasst.

Die Multiplikation erfolgt zweimal, mit dem Träger und dem 90° verschobenen Träger. Mit dieser sogenannten I/Q-Demodulation kann man recht viel machen, so AM, FM und PM demodulieren. Die Funktion im RFM12 ist etwa so:

Das gesendete FSK-Signal wird um die Mittenfrequenz gefaltet, somit entsteht eine Differenzfrequenz, unabhängig davon, ob gerade die obere oder untere Frequenz empfangen wird. Sozusagen Spiegelfrequenzdämpfung = 0. Damit könnte man ohne I/Q gar nichts anfangen.

Das Ergebnis der I/Q-Demodulation ist ein umlaufender (komplexer) Zeiger. Die Drehzahl ist gleich der Differenzfrequenz, der Umlaufsinn ist jedoch bei der unteren (Spiegel-)Frequenz anderherum! Man muss also nur noch die Drehrichtung detektieren, genauso wie bei Inkrementalgebern. Das ist einfach ein D-Flip-Flop.

Die beteiligten Schaltfrequenzen liegen im Frequenzbereich des Tiefpasses, also im kHz-Bereich.

(4)

Typischerweise gibt es einen Unterschied zwischen der Sende- und Empfangsfrequenz von ein paar kHz. Entsprechend einer Quarzabweichung im Bereich von 10 ppm oder 1 s pro Tag. Dann ergibt sich folgendes Bild:

Rf12fm4.png

Die eingebaute AFC misst die beiden Frequenzen je nach empfangenem Bit (= Frequenzhub = Umlaufsinn hinter dem I/Q-Demodulator), und regelt so, dass die beiden Frequenzen etwa gleich sind. Sie werden also getrennt per Frequenzzähler gemessen.

Die AFC-Schaltung kann nur in 2,5-kHz-Schritten arbeiten, demnach den Frequenzversatz um 5 kHz ändern. Die AFC dient also vor allem dazu, dass das Empfangssignal immer schön durch den Tiefpass passt.

Daher muss man bei der Auswahl der Tiefpass-Eckfrequenz auch die zu erwartende Quarzabweichung mit einrechnen. Diese ist aber im 433-MHz-Bereich noch nicht so relevant.

(5)

Der ARSSI-Anschluss (analog received signal strength indicator, svw. Feldstärke) hat laut Datenblatt (RFM12B Seite 3) die folgende Kennlinie:

Rfm12b-s3.png

Dieser Anschluss ist bei den RFM12-Modulen nicht herausgeführt, aber an einem der SMD-Kondensatoren leicht abgreifbar. Beispielsweise kann man damit AM oder ASK (Amplitude Shift Keying) demodulieren.

FAQ

Soll ich 433 oder 868 MHz nehmen?

Wähle das für deine Anwendung kleinere der beiden Übel: Bei 433 MHz sind i.d.R. mehr Störer unterwegs und bei 868 MHz sind die maximale Belegungsdauer bzw. das listen-before-talk (LBT) Verfahren gemäß Allgemeinzuteilung zu beachten. Siehe auch im Forum [1] und [2].

SPI (Serial Peripheral Interface)

Rfm12b-s13.png

Alle Zeiten in ns. Die angegebenen Bits im Datenblatt (RFM12B Seite 13) sind falsch! So wie hier ist es richtig.

  • Maximale SCK-Frequenz: 20 MHz
  • Maximale SCK-Frequenz zum Auslesen der Empfänger-FIFO (Kommando 0xB000 oder via FFS): 2,5 MHz = 10 MHz {Quarz} / 4
  • Nicht zur seriellen Kaskadierung gedacht oder geeignet
  • Man kann sich SEL und FFS als zwei separate Chip-Select-Anschlüsse vorstellen; letzterer adressiert direkt die Empfangs-FIFO (sofern er gesetzt) oder das Sende-Latch (andernfalls). Bei ersterem muss man für jedes Byte (mindestens) ein Kommandopräfix 0xB0 und damit 8 Takte voranstellen. Da die Aktivierung von SEL ohne jeden Takt den FIFO-Zustand an SDO meldet, lässt sich so zwischendurch der FIFO-Füllstand überprüfen.
  • Welches der beiden Signale SEL und FFS bei gleichzeitiger Aktivierung Priorität hat ist undokumentiert. Vermutlich FFS.

Kann man auf SPI verzichten?

  • Auf der RFM12-Seite: nein! Man benötigt SPI zum Einstellen der Frequenz, der sonstigen Sende- und Empfangsparameter sowie zum Ein- und Ausschalten des Sendebetriebs. Wenn man ohne die integrierte Empfangs-FIFO arbeitet, kann man notfalls auf SDO verzichten, da man ohnehin nur Kommandos hinschicken muss. Eine echte Statusabfrage bei Interrupt ist dann nicht möglich.
  • Auf der Mikrocontroller-Seite: Es ist freigestellt, ob man die eingebaute SPI-Hardware benutzt oder nicht. Eingebaut läuft schneller; für Empfangs-FIFO-Zugriff muss man aber bei der maximalen Taktfrequenz aufpassen. Außerdem ist man bei der Auswahl der Anschlusspins festgelegt, und man steht in Konkurrenz mit einem SPI-Programmierinterface. Damit das Programmiergerät nicht unbeabsichtigt Kommandos zum RFM12 sendet, muss an SEL ein externer Pull-Up-Widerstand beschaltet werden (oder aber RESET sind verbunden oder RES mit PullDown)! Dies kann Konsequenzen für einen beabsichtigten Schlafmodus haben, siehe unten.

Kann man SEL permanent auf LOW halten?

Jein.

  • Ein Kommando beginnt stets mit der High-Low-Flanke von SEL. Mit Masse verbinden darf man den Eingang also nicht.
  • Man kann SEL auf LOW halten, um mit der Low-High-Flanke von SDO einen alternativen Sende- bzw. Empfangsinterrupt auszulösen. Das hilft einen Mikrocontroller-Anschluss (das für IRQ) einzusparen und trotzdem Interrupts zu verwenden. Das ist insbesondere bei solchen Controllern vorteilhaft, bei denen man den seriellen Dateneingang mit Pin-Change-Interrupt belegen kann (also ATtiny oder ATmega88, nicht aber ATmega8) und so aufwecken kann.
  • Beim RFM12B ist die Möglichkeit ausführlich dokumentiert, das Senderegister fortwährend mit Bytes zu füllen (ohne das Kommandopräfix 0xB8 und weitere 8 Takte pro Byte), High an SDO signaliert jeweils die Bereitschaft dafür. Beim Vorgängertyp (ohne B) ist der entsprechende Passus zweifelhaft formuliert, funktioniert aber wahrscheinlich genauso.
  • Im Gegensatz zu FFS enthält SEL keinen Pull-Up-Widerstand, sodass man diesen Anschluss auch im Schlafmodus ohne zusätzlichen Strombedarf nach LOW ziehen darf. Man darf nur nicht vergessen, am entsprechenden Mikrocontroller-Eingang (ATmega: MISO, ATtiny: SDI) keinen Pull-Up zu aktivieren, da SDO des RFM12 zumeist LOW liefert. ACHTUNG! Das RFM12 (ohne B) hat auch am FFS KEINEN Pull-Up-Widerstand

Was passiert, wenn man bei aktivem SEL mehr als 16 Takte ausgibt?

Ist er (Empfängerfreigabe) gesetzt, kann man so die Empfangs-FIFO auslesen. Ab da ist die maximale SCK-Taktfrequenz von 2,5 MHz einzuhalten, sonst kommt Murks. Ist die FIFO nicht entsprechend gefüllt, kommt ebenfalls Murks. Insofern holt das Kommandopräfix 0xB0 die FIFO-Bits nur 8 Takte nach vorn.

Ist er gelöscht ist das Verhalten undokumentiert. Wahrscheinlich erscheint RGIT an SDO, und das Senderegister wird nach je 8 Takten mit einem Byte gefüllt (wie beim Kommandopräfix 0xB8 oder bei Benutzung von FFS).

Sollte man RES mit dem Reset-Anschluss des Mikrocontrollers verbinden?

Jein.

  • Tatsächlich ist das vom Hersteller des RFM12 so angedacht!
    So kann ein etwas minderbemittelter Mikrocontroller von den Überwachungs- und Stromspar-Features des RFM12 profitieren. Auch spart man sich so den Brown-Out-Detektor eines AVR-Controllers (10 µA) und überlässt das den RFM12 (0,5 µA).
  • Gelegentlich kommt es vor, dass der RFM12 auf Grund eines ungewollten Kommandos (welches?) oder wackliger Speisespannung RES permanent nach LOW zieht: Deadlock!
    Die brutale Methode des Bastlers ist es in diesem Fall, diese Verbindung kurz auf Speisespannung zu klemmen, damit der Mikrocontroller loslaufen und den RFM12 mit entsprechenden Initialisierungskommandos enteisen kann.

Also: Im Allgemeinen ja, bei Mondfahrzeugen oder Omas Fernbedienung in 'zig Kilometer Entfernung würde ich davon erst mal abraten.

Die günstigste Beschaltung für (optionale) 250 kBit/s?

Hier für ATtiny2313 sowie alle ATmega via UART: Keine permanente Bitsynchronisation; eine höhere Bitfehlerrate (BER) durch zeitliche Fehlerkennung des Startbits muss in Kauf genommen werden.

  • FFS (nun FSK/DATA (3)) an RxD und TxD
  • 100 pF an FFIT (nun CFIL (4)) nach Masse
  • Senden und Empfangen mit eingebauter UART in einer Art RS-485:
    • Beim Senden müssen Empfangsdaten ignoriert werden
    • Beim Empfang muss der TxD-Ausgangstreiber abgeschaltet werden
    • Bitsynchronisation gibt's nicht und wird nicht benötigt
    • Bytesynchronisation erreicht man am besten durch 1-2 x Aussenden von 0xFF in halber Baudrate (empfängt theoretisch 0xFE), dann Aussenden eines Rahmenstartwortes mit 250 kBaud
  • Senden und Empfangen bis 115,2 kBit/s ist ohne Schaltungsänderung mit der eingebauten FIFO weiterhin möglich, da das SPI-Interface ohnehin benötigt wird

CLK-Ausgang bleibt bei 1 MHz

  • Vor dem Umschalten (mit 0xC0E0) länger warten.

RFM12 empfängt ein paar Bytes, dann nur Müll

  • Es wird zu langsam gesendet (TX FIFO underrun)
  • Es wird zu langsam empfangen (RX FIFO overrun)

Die Status-Bits helfen hier beim Debuggen. SPI sollte auf maximaler Transferrate stehen.

RFM empfängt nur Müll

http://www.mikrocontroller.net/topic/73560#605528

Deine Module verhalten sich normal. Man muß mit den Gain- und AFC-Bits eine ganze Weile spielen, bis die Module korrekt laufen (kommt auf die Anwendung an). Fakt ist: der Empfänger empfängt ständig Datenmüll als Rauschen. Wenn der FIFO durch die Präambel getriggert wird, sind die Daten im FIFO ziemlich korrekt, wenn alles "gut" eingestellt ist. Der FIFO sollte per Interrupt dann auch sofort abgeholt werden, da sonst das nächste Byte das alte direkt überschreibt. Jeder zusammenhängende Datensatz (mehrere Bytes an einem Stück) muß von einer Präambel eingeleitet werden. Nach dem kompletten Einlesen eines Datensatzes muß der FIFO abgeschaltet, wieder eingeschaltet und für den Empfang der nächsten Präambel neu scharf gemacht werden. (FifoFill bit)

RFM hängt sich auf

Der Wertebereich für die AFC, der die maximale Abweichung korrigiert, sollte begrenzt werden. Ansonsten können die Offsetbits im Status maximal werden => es geht gar nichts mehr, der Empfänger hängt fest.

edit: Leider bringt die Beschränkung der AFC auf Minimum bei mir keine Verbesserung. Zumindest ist obige Aussage nicht allgemein gültig.

Siehe auch

Kommunikation mit RFM funktioniert nur sporadisch

  • Ist die Versorgungsspannung stabil? (evtl. Kondensator einbauen)

Interrupt nIRQ klappt nicht bei 868MHz

Wenn bei der Verwendung der 868er Module die üblichen Sourcen (dasLabor, etc) verwendet werden, müssen einige Änderungen gemacht werden, die sich leicht finden lassen. Ohne weiteres funktionierte der blockierende Empfang, der Interruptbetriebene (nIRQ) machte in mindestens einem Fall Probleme. Hier half die Anpassung des FIFO IT Level . In vorhandenen Sourcen ist 0xCA83 zu finden, eine Änderung auf 0xCAF3 hilft dabei.

Bei Interruptbetrieb ist darauf zu achten, dass wirklich auf jeden Interrupt reagiert wird. Solange ein Interrupt nicht behandelt wird bleibt nIRQ auf LOW! Durch das Lesen des Statusregisters können alle Interrupts ausser FFIT und RGIT "gelöscht" werden. Für FFIT ist das FIFO zu lesen und für RGIT das TxRegister zu beschreiben.

Was passiert, wenn ich beim Senden die Daten nicht schnell genug liefere?

Es kommt zum Interrupt wegen Latch-Unterlauf.

Der Sender wiederholt die letzten beiden Bytes im Wechsel. Er wird nicht abgeschaltet.

Die maximale erlaubte Latenzzeit zwischen Auftreten des Interrupts und Einschreiben des letzten der 8 Bits beträgt 8 Bitzeiten.

Was passiert, wenn ich beim Empfang die Daten nicht schnell genug abhole?

Es kommt zum Interrupt wegen FIFO-Überlauf.

Logisch wäre, die ältesten Bits werden verworfen. Laut Doku wird hingegen das weitere Schreiben der FIFO unterbunden, bis die FIFO hinreichend geleert ist und das Synchronwort (typisch 0x2DD4) erneut erscheint.

Vorausgesetzt, der Interrupt ist bei FIFO-Füllstand 8 Bit gesetzt (Voreinstellung), beträgt die maximale Latenzzeit zwischen Auftreten des Interrupts und Abholen des ersten Bits aus der FIFO 7 Bitzeiten, für jedes weitere Bit eine Bitzeit mehr.

Bei derart knapper Kalkulierung muss der Interrupteingang pegelgetriggert sein! Bei Verwendung eines flankengetriggerten Interrupts (Pin-Change-Interrupt) sollte die Interruptbedienungsroutine (ISR) die Pegeltriggerung simulieren, indem der Kode so lange in einer Schleife ausgeführt wird, bis der Interrupteingang inaktiv geworden ist.

Was passiert, wenn der Empfangsdatenstrom abbricht?

DQD wird inaktiv. Das kann man mittels Status-Read abfragen. Oder mit dem Extra-Ausgang VDI. Die Erkennung ist jedoch mehr oder weniger verzögert und kann nicht als echte Endekennung herangezogen werden.

Der Empfang, die Taktrückgewinnung und das Daten-Schieben laufen einfach in der vorgegebenen Baudrate weiter! Man braucht sich daher nicht um Inter-Character-Timeouts zu kümmern; Daten kommen immer.

Die Datenlänge muss demnach in das Übertragungsprotokoll eingebaut werden, typischerweise:

  • mit einer festen Paketlänge
  • mit einer Paketlängenangabe am Anfang (dadurch begrenzte Paketlänge)
  • mit einer speziellen Endekennung (unbegrenzte Paketlänge möglich; unfair)

Die Wahl der maximalen Paketlänge ist gemeinsam mit der Baudrate ein wichtiges Kriterium für das zeitliche Verhalten des gesamten Funkprotokolls.


Register

Von https://www.mikrocontroller.net/attachment/24947/RFM12.txt

Dieses Dokument beschreibt die Nutzung des RFM12 TRX Moduls!

WICHTIG

Dieses Dokument wurde aus mehreren Quellen zusammengestellt, und kann Fehler enthalten! Es können Abweichungen in Bezug auf RF01 / RF02 / RF12 / RFM01 / RFM02 und andere Module auftreten! Es wurde das Datenblatt vom RFM12B und RF12 von www.hoperf.com als Basis genuzt. Zusätzlich wurden diese Informationen mit Hilfe von Forums-Nutzern (https://www.mikrocontroller.net/topic/71682) weiter vervollständigt!

WICHTIG

Hinweis: Die LNA-Eingangsimpedanz beträgt 250Ω, und muss beim Anschluss einer 50-Ohm-Antenne entsprechend angepasst werden, um das Rauschen zu minimieren! -- (Auf den Pollin-Modulen bereits vorhanden)

WICHTIG

Vor der Einstellung der Konfiguration sollte dem RFM12-Modul ausreichend Zeit für seine Power-On-Sequenz gegeben werden. Manche Module brauchen dazu nur 10ms, manche aber 100ms. Ist die Power-on Zeit zu kurz, können durchaus einige Konfigurationswerte gesetzt sein, andere aber nicht.

Das Datenblatt zum RFM12B schreibt 100 ms vor (wenn auch durch die Blume).

Blockdiagramm

Rfm12-1.png

Die angegebenen Pin-Nummern beziehen sich auf das (bei Pollin erhältliche) SMD-Modul.


Grundkonfiguration (Configuration Setting 80xx)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 0 el ef b1 b0 x3 x2 x1 x0 0x8008
el enable latch
(TX-FIFO)
Sendepuffer (2 Bytes) für Daten-Senden nutzen.
Typischerweise permanent einschalten!
0 = aus
1 = ein
ef enable fifo
(RX-FIFO)
Empfangspuffer (16 Bits) für Daten-Empfang nutzen.
Typischerweise permanent einschalten!
0 = aus
1 = ein
b band
(Band)
Zu nutzendes Frequenzband.
Muss in Übereinstimmung mit der Modulbestückung gesetzt werden, insbesondere wegen der Antennen-Anpassung
00 = 315 MHz
01 = 433 MHz
10 = 868 MHz
11 = 915 MHz
x xtal
(Quarz)
Kapazität des eingebauten Ballastkondensators („Ziehkondensators“) für den Quarzoszillator.
Diese sollte entsprechend den Herstellervorgaben des Quarzes ausgewählt werden.
Höhere Werte „ziehen“ die Frequenz nach unten.
Der exakte Abgleich erfolgt mit einem hochgenauen Frequenzzähler am CLK-Ausgang ⑤ auf bspw. 1 MHz.
0000 = 8,5 pF
0001 = 9 pF
...
1000 = 12,5 pF
1111 = 16 pF

Bei el = 0 erscheinen die Daten an DATA und der Takt an DCLK.

Komponentenauswahl (Power Management 82xx)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 0 0 1 0 er ebb et es ex eb ew dc 0x8208
er enable receiver Empfänger-Trakt komplett einschalten (11 mA) 0 = aus
1 = an
ebb enable baseband Basisband-Empfangsteil einschalten / eingeschaltet halten (mA-Bereich).
Dient zum Verkürzen von Umschaltzeiten
0 = aus
1 = an
et enable transmitter Sendertrakt komplett einschalten (22 mA bei max. Ausgangsleistung).
Der Sender beginnt sofort mit dem Senden. Die beiden Sendepuffer werden beim 1-0-Übergang mit 0xAA (0-1-Bits im Wechsel zur Taktsynchronisation beim Empfänger) gefüllt, können aber vor dem 0-1-Übergang mit einer anderen Präambel besetzt werden.
0 = aus
1 = an
es enable synthesizer PLL-Synthesizer einschalten oder eingeschaltet halten
Dient zum Verkürzen von Umschaltzeiten
0 = aus
1 = an
ex enable xtal
(Quarz)
Schaltet den Quarz-Oszillator ein (3 mA).
Der Quarzoszillator hat eine erhebliche Hochlaufzeit von 1..5 ms.
0 = aus
1 = an
eb enable brownout Aktiviert Betriebsspannung-Überwachung (0,5 µA).
Generiert Interrupt bei Unterschreitung einer einstellbaren Schwelle
0 = aus
1 = an
ew enable wakeup Aktiviert den eingebauten WakeUp-Timer (1,5 µA).
Generiert Interrupt nach Ablauf einer einstellbaren Zeit
0 = aus
1 = an
dc disable clock Deaktiviert die Ausgabe des Taktes auf dem CLK-Ausgang ⑤
Der Takt ist zwischen 1 .. 10 MHz einstellbar kann zur Speisung eines Mikrocontrollers dienen.
0 = Takt ausgeben
1 = LOW ausgeben

er bzw. et schalten alle zum Empfangen bzw. Senden benötigten Module (Quarz-Oszillator, PLL-Sythesizer, Basisband-Block) ein auch wenn ebb, es oder ex nicht gesetzt sind. er hat Vorrang vor et.

Rfm12-2.png

Durch separates Einschalten von ebb, ex oder es kann aber die Startzeit für den Empfänger bzw. den Sender verkürzt werden. Am nützlichsten ist dies für ex, da die Hochlaufzeit des Quarzes mit einigen Millisekunden deutlich länger ist als die der anderen Komponenten (unter 1 ms).

Wird der WakeUp-Timer verwendet ist ew nach jedem Aufwecken zu löschen und wieder zu setzen.

Ist dc = 0, läuft der Quarzoszillator unabhängig von ex weiter, solange eine Unterbrechungsanforderung (Interrupt) vorliegt. Daher müssen Interrupts unbedingt bedient werden, damit der RFM12 den Oszillator abschalten kann. Der Taktausgang liefert nach einem Status-Lesen, gefolgt vom Abschaltkommando des Quarzes (ex = 0) noch einige (192) Taktimpulse, um den angeschlossenen Prozessor ein paar Befehle bis zum Schlafmodus ausführen zu lassen.

Taktgenerator-Einstellungen (PLL Setting CCxx, nur RFM12B)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 1 1 0 0 0 ob1 ob0 lpx dly ddit bw1 bw0 0xCC77
ob output buffer Legt die Treiberstärke des Taktausgangs CLK ⑤ fest.
Höhere Treiberstärke bedeutet steilere Flanken, aber auch mehr Störungen des Empfangsteils
0x = für ≤ 2,5 MHz
10 = für 3,3 MHz
11 = für 5 oder 10 MHz
lpx low-power xtal Wählt den Low-Power-Mode für den Quarz-Oszillator aus.
(Fix 1 in der RFM12B-Dokumentation)
0 = 1 ms Hochlaufzeit, 620 µA
1 = 2 ms Hochlaufzeit, 460 µA
dly delay Verzögerung im Phasendetektor aktivieren.
(Keine weiteren Erläuterungen verfügbar)
0 = keine Verzögerung
1 = Verzögerung aktiv
ddit disable dithering Schaltet das Dithering in der PLL ab.
(Dithering verbreitert ein eventuelles Störspektrum.)
0 = eingeschaltet
1 = abgeschaltet
bw bandwidth Wählt die Bandbreite des PLL-Signals aus. Angegebene Werte = Phasenrauschen für 1 MHz Offset.
(bw1 = 1 in der RFM12B-Dokumentation)
x0 = -107dBc/Hz für max. 86,2 kBit/s
x1 = -102dBc/Hz für max. 256 kBit/s

Unterspannungs-Detektor und Taktausgangsteiler (LowBatt / µC Clock Control C0xx)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 0 0 d2 d1 d0 v4 v3 v2 v1 v0 0xC000
d divider Bestimmt den Teilungsfaktor für die Taktausgabe am CLK-Anschluss ⑤.
Die Ausgangsfrequenzangaben beziehen sich auf 10 MHz Quarzfrequenz.
000 = 1 MHz (:10) 001 = 1,25 MHz (:8)
010 = 1,6 MHz (:6) 011 = 2 MHz (:5)
100 = 2,5 MHz (:4) 101 = 3,3 MHz (:3)
110 = 5 MHz (:2) 111 = 10 MHz
v voltage Bestimmt die Betriebsspannung, bei der der RFM12 einen Unterspannungs-Interrupt auslöst.
Im Power-Managment muss das eb-Bit aktiv sein, damit dies funktioniert.
Im Datenblatt zum RFM12B ist v4 = 0 angegeben.
00000 = 2,25 V, Minimum
xxxxx = (2,25 + 0,1*v) V
11111 = 5,35 V, Maximum (Quatsch)

Frequenzeinstellung (Frequency Setting Axxx)

Bestimmt die Sende- und Empfangsfrequenz.

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 1 0 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0 0xA680


F = f11 .. f0 = Bestimmt den Offsetwert der Frequenz.
    Als Basis gilt das eingestellte Band im Grundeinstellungs-Kommando.
    Voreingestellt ist F = 1664 = 0x680.

Zulässig sind nur 96 ≤ F ≤ 3903. Falsche Werte werden beim Einschreiben ignoriert.

f = 10 MHz * C1 * (C2 + F/4000) (gilt für 10-MHz-Quarz)

Band [MHz] C1 C2 fmin [MHz] fmax [MHz] ∆f [kHz] Vorgabe [MHz] f berechnen [MHz] F berechnen (f in MHz) ISM-Bereich [MHz]
315 1 31 310,24 319,7575 2,5 314,16 310 + F/400 (f - 310) * 400 (beim RFM12B nicht vorhanden)
433 43 430,24 439,7575 434,16 430 + F/400 (f - 430) * 400 433,05 .. 434,79 (Europa, BW = 1,74)
868 2 860,48 879,515 5 868,32 860 + F/200 (f - 860) * 200 868 .. 870 (kein ISM! BW = 2)
915 3 30 900,72 929,2725 7,5 912,48 900 + 3*F/400 (f - 900) * 133,3 902 .. 928 (Amerika, BW = 26)

Gesendet wird mit einem (weiter unten) einstellbaren Frequenzhub. Empfangen wird mit der hiermit einstellbaren Mittenfrequenz, zuzüglich einem AFC-Offset.

Bitrate (Data Rate C6xx)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 0 1 1 0 cs r6 r5 r4 r3 r2 r1 r0 0xC623
cs clock select Vorteiler mit Faktor 8 aktivieren für Bitraten kleiner 2694 s-1. 0 : Basistakt = 10 MHz / 29
1 : Basistakt = 10 MHz / 29 / 8
r rate Bitratenteilerfaktor 0000010 = Maximum (2) ≈ 115200 s-1 (cs=0)
xxxxxxx : Baudrate = Basistakt / (r+1)
0100011 = Vorgabe (35) ≈ 9600 s-1 (cs=0)
1111111 = Minimum (127) ≈ 336 s-1 (cs=1)

Die theoretisch maximale Bitrate von 250 kBit/s muss zu Fuß ohne FIFO-Beteiligung sowohl generiert als auch eingelesen werden. Dafür benutzt man am ehesten eine im Mikrocontroller eingebaute RS-232-Schnittstelle und verzichtet auf die elegante Taktrekonstruktion, nimmt einfach das Startbit. Einige wenige Mikrocontroller enthalten eine Serialisierungseinheit für magnetische Speichermedien, Infrarot- oder Funkstrecken, die dafür bestens geeignet ist.

Die Anzahl der notwendigen Bitwechsel (1-0 oder 0-1) im Datenstrom bzw. deren Ausbleiben ist davon abhängig, wie sehr sich die Baudraten auf Sender- und Empfängerseite unterscheiden und ob eine langsame oder schnelle Taktsynchronisierung eingestellt wurde. Wenn sich zwei RFM12-Module gegenüber stehen, ist die Taktregenerierung kaum ein Problem; laut Datenblatt dürften bei einer Quarzabweichung von 10-5 430 Bytes ohne Bitwechsel korrekt erfasst werden

Die hier eingestellte Bitrate wirkt sowohl auf den Sender als auch den Empfänger, hat aber keinen Einfluss auf bestimmte, davon abhängige Parameter wie Frequenzhub, Sender- und Empfängerbandbreite. Dies muss nach folgender Empfehlung eingestellt werden:

Bitrate in kBit/s 1,2 2,4 4,8 9,6 19,2 38,4 57,6 115,2 250
Basisband-Empfängerbandbreite in kHz 67 134 200 400
Frequenzhub in kHz (±) 45 90 120 240
PLL-Bandbreite (bw0) 0 1

Kurios: Die maximale Bitrate beim Senden mittels Senderegister beträgt 172 kBit/s; hier darf der Teilerwert r = 1 sein. Empfangen kann man damit nicht, jedenfalls nicht mit der FIFO.

Empfängersteuerung (Receiver Control 9xxx   9000 .. 97FF)

Bestimmt Eigenschaften des Empfänger-Traktes, insbesondere die Bandbreite des Tiefpasses.

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 1 0 pi d1 d0 i2 i1 i0 g1 g0 r2 r1 r0 0x9080
pi pin int/vdi Bestimmt die Funktion des Pins INT / VDI ⑪
Typischerweise einschalten. Als INT dient es zum Kaskadieren einer weiteren Interruptquelle (die am Mikrocontroller durch IRQ ② verloren geht).
0 = INT, Interrupt-Eingang
1 = VDI, Daten-Gültig-Ausgang
d valid data indicator response Definiert die Geschwindigkeit, mit der bestimmt wird, ob ein Empfangssignal korrekt ist oder nicht. Je nach eingestellter Variante werden unterschiedliche Verknüpfungen benutzt. Siehe Schaltbild unten. 00 = schnell
01 = mittel
10 = langsam
11 = immer an
i i/q demodulator bandwidth Bestimmt die Bandbreite des Empfängers (einstellbarer Tiefpass). Da sollte der Frequenzhub und die Nutzsignalbandbreite hineinpassen. Siehe Vorbetrachtungen. 000 = reserviert
001 = 400 kHz
010 = 340 kHz
011 = 270 kHz
100 = 200 kHz
101 =134 kHz
110 = 67 kHz
111 = reserviert
g lna gain select Verstärkungsfaktor des UHF-Verstärkers am Eingang (LNA = Low Noise Amplifier, als ob das nicht selbstverständlich ist). Werte in dBm (Dezibel [Größe: Milliwatt]). Da negativ handelt es sich effektiv um Dämpfungen bezüglich der Maximalverstärkung. 00 = 0 dB
01 = -6 dB
10 = -14 dB
11 = -20 dB
r rssi detector threshold Relative Empfangsfeldstärke, bei der das digitale Feldstärkesignal dRSSI aktiv wird, in 6-dB-Schritten. Die Dämpfung des UHF-Verstärkers geht in die tatsächliche Berechnung noch ein.
Die Vorgabe ist maximal empfindlich, bereits 6 dB weniger brachte versuchsweise eine sinnvolle Funktion.

Die Schaltschwelle ergibt sich aus Subtraktion der (negativen) UHF-Verstärker-Verstärkung von der Schaltschwelle. Das Plus im Datenblatt ist falsch.

000 = -103 dB
001 = -97 dB
010 = -91 dB
011 = -85 dB
100 = -79 dB
101 = -73 dB
11x = reserviert

Rfm12-3.png

Synchronmuster (Synchron Pattern 0xCExx, nur RFM12B)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 1 1 1 0 b7 b6 b5 b4 b3 b2 b1 b0 0xCED4
b byte Legt den Wert fest, der als Synchronisations-Byte für die Datenfilterung verwendet werden soll.

Empfangsdatenrekonstruktion (Data Filter C2xx)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 1 0 al ml 1 s 1 q2 q1 q0 0xC22C


Die beiden 1-Bits sind unbekannt. (Auch im Datenblatt von IA4420 so beschrieben.)

al auto lock Bittakt-Rekonstruktion schaltet automatisch vom schnellen in den langsamen Modus, sobald ein Takt erkannt wurde 0 = aus, siehe ml
1 = ein, ml unwirksam
ml manual lock schneller/langsamer Modus der Bittakt-Rekonstruktion 0 = langsam (für 12 bis 16 Bit Takteinlauf)
1 = schnell (für 4 bis 8 Bit Takteinlauf)
s select filter Typ des Datenfilters auswählen.
Bei Analogfilter kann weder die FIFO noch die Taktrekonstruktion genutzt werden!
0 = Digitalfilter
1 = Analogfilter
q quality Bestimmt den Schwellwert, ab dem ein Signal als gut befunden wird und der Empfänger dieses weiterverarbeiten soll. DQD (data quality detection) zählt die „Spikes“ des ungefilterten Signals und bestimmt darüber die Qualität der Daten. 000 = DQD immmer EIN (?)
100 = mittlere Schwelle
111 = Maximum (7)

Die maximale Bitrate für die Verwendung des Digitalfilters (und damit der FIFO und Taktrekonstruktion) beträgt 115 kBit/s. Das Digitalfilter ist eine digitale Implementation eines RC-Filters, gefolgt von einem hysteresebehafteten Komparator. Dessen Zeitkonstante wird automatisch an die programmierte Bitrate angepasst.

Die maximale Bitrate für die Verwendung des Analogfilters beträgt 250 kBit/s. Zu seiner Nutzung ist ein Kondensator an CFIL ④ zu beschalten. Der intern wirksame Widerstand hat 10 kΩ.

Datenrate in kBit/s 1,2 2,4 4,8 9,6 19,2 38,4 57,6 115,2 256
Filterkapazität 12 nF 8,2 nF 6,8 nF 3,3 nF 1,5 nF 680 pF 270 pF 150 pF 100 pF

Der „Datenqualitätsmesser“ (Data Quality Detector) ist eine digitale Signalverarbeitungsstufe, die das Demodulatorsignal abgreift. Er wird automatisch aktiviert, sobald der Empfänger läuft, und stellt den Empfang eines FSK-Signals fest. Der einstellbare Schwellwert entscheidet, wie sauber das Empfangssignal sein muss, damit es als gültiges Signal erkannt wird. Wenn der intern berechnete DQD-Wert für mindestens 5 HIGH-Bits und mindestens 5 LOW-Bits größer als der Schwellwert ist, dann ist das resultierende Ausgangssignal HIGH. Der Schwellwert q sollte nach folgender Vorschrift gewählt werden:

  • 4 × (Frequenzhub - Frequenzdifferenz[TX-RX]) / Bitrate
  • ≥ 4, sonst wird möglicherweise Rauschen als FSK erkannt
  • Maximal 7
  • Man kann getrost kleinere Werte verwenden, wenn DQD nicht wichtig ist.

FIFO-Steuerung (FIFO and RESET Mode CAxx)

Legt Eigenschaften der Empfänger-FIFO fest

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 1 0 1 0 f3 f2 f1 f0 sp al ff dr 0xCA80
f fifo interrupt level Legt den Füllstand fest, bei dem die FIFO einen Interrupt auslöst.
Die Vorgabe von 8 bit ist am sinnvollsten, weil passend zum Sende-Latch, welches fest 8 bit breit ist.
0000 = verboten
0001 = 1 (Interrupt bei jedem Bit)
1000 = 8 (Interrupt bei vollem Byte)
1111 = 15 (Interrupt bei 15 Bit)
sp sync pattern length Legt die Länge des Synchronmusters fest, nur RFM12B 0 = 2 Byte, typ. 0x2DD4
1 = 1 Byte, typ. 0xD4
al always fill Legt fest, ab wann das Füllen der FIFO beginnt 0 = Nach erkanntem Synchronmuster
1 = sofort alles
ff fifo fill Freigabe der FIFO zum Beschreiben durch den Empfänger, oder Leeren der FIFO
Die FIFO wird zusätzlich von er gesteuert.
0 = FIFO leeren und sperren
1 = FIFO freigeben
dr disable sens-reset Abschalten des hochsensitiven Power-On-Resets.
Normalerweise wird bei einer Speisespannung unter 1,6 V oder einem Anstieg von 0,6 V ein Reset ausgelöst
0 = Resetschaltung aktiv
1 = Resetschaltung AUS

Zum Neustart der Synchronmustererkennung bei durchlaufendem Empfänger (er = 1) sollte ff auf 0 und danach wieder auf 1 gesetzt werden.

Rfm12b-s20.png

Bei der Synchronmustererkennung darf kein Bitfehler auftauchen, d.h. es wird eine Hammingdistanz von 0 erwartet.

Automatische Frequenznachregelung (Automatic Frequency Control, AFC C4xx)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 0 1 0 0 a1 a0 rl1 rl0 st fi oe en 0xC4F7


Die AFC ist unbrauchbar!
Entweder abschalten (und manuell Axxx oder 80xx x korrigieren) oder per Software die Korrektur des Frequenzregisters Axxx über das Auslesen des Offset-Registers OFFS im Modus a = 11 bei Empfang eines Senders (VDI = 1) vornehmen - Details im Anhang.

a auto mode Modus der AFC-Schaltung

AFC-Fangbereich: 0,8·δf (Frequenzhub: δf=(fmax-fmin)/2)

00 = kein automatischer Betrieb
01 = einmalig nach POR
(Power-on reset)
10 = solange VDI high ist
(keine Funktion - siehe Anhang)
11 = unabhängig von VDI
(unbrauchbar - siehe Anhang)
r range limit Korrekturwertbegrenzung
(AFC arbeitet immer im Bereich -64∆f .. +63∆f - siehe Anhang)

∆f beträgt:
* 2,5 kHz im 433-MHz-Band
* 5 kHz im 868-MHz-Band
* 7,5 kHz im 915-MHz-Band

00 = unbegrenzt: -64∆f .. +63∆f
01 = -16∆f .. +15∆f
10 = -8∆f .. +7∆f
11 = -4∆f .. +3∆f
st strobe edge Eine steigende Flanke (0->1) übernimmt den berechneten Wert ins Offset-Register
fi fine mode Genauer Berechnungsmodus (besser aber lansgamer) 0 = normal
1 = präziser
oe offset enable AFC-Offset freischalten (zum PLL-Synthesizer durchschalten)

(Sicherlich nur sofern der Empfänger läuft, also er aktiv ist!)

0 = aus, AFC unwirksam
1 = ein, AFC wirksam
en enable afc AFC-Berechnung aktivieren 0 = aus
1 = ein

Warum ist die AFC unbrauchbar:
Die AFC arbeitet immer im Bereich -64∆f .. +63∆f, die Begrenzung r für das Offset-Register erfolgt mittels digitaler Begrenzung. Dadurch kann es schnell passieren, dass die AFC vom eigentlichen Signal wegdriftet und das ursprüngliche Signal nicht mehr im Fangbereich (0,8·Frequenzhub) liegt und somit nichts mehr empfangen wird. Aus diesem Grund ist die Einstellung AFC immer an (a = 11) wohl völlig unbrauchbar. Siehe dazu Diagramm S.23 des Datenblatts.

Die Einstellung mit VDI a = 10 scheint (zumindest bei den RFM12B - RFM12S Rev 4.0) nicht zu funktionieren, da egal welchen Status VDI hat, das Offset-Register immer den Wert 0 hat. Auch ein manuelles Übernehmen der Offsetwerte mittels steigender Flanke an strobe st = 0->1 liefert immer Offset 0. Siehe dazu auch den Forumbeitrag RFM12 - AFC mit VDI ohne Funktion?

Der Fangbereich der AFC ist relativ klein und eignet sich meist nur für geringfügige Frequenzkorrekturen (Abhängig vom Frequenzhub des Signals). Bei größeren Frequenzabweichungen (Toleranzen der Quarze), kann es deshalb notwendig sein, einen Frequenzscan (über Axxx oder 80xx x) zum Finden der Senderfrequenz durchzuführen (manuell oder per Software). Das Ergebnis sollte dann gespeichert und nach einem Neustart zurückgeschrieben werden (EEPROM des µCs). Damit ist eine Grundabstimmung gewährleistet, auf eine AFC kann dann möglicherweise verzichtet werden.

Zum Auslesen des AFC-Offset-Werts ist folgendes zu beachten:
Eine AFC-Berechnung ist beendet, wenn sich im Statusregister ATGL ändert. Das Statusregister gibt nur sinnvolle Werte für OFFS aus, wenn vorher die AFC abgeschaltet wird (en = 0), da der Teil des Statusregisters bei der Ausgabe nicht zwischengespeichert wird, sondern einfach raustaktet. Dabei könnte es während des Abrufs zu einer Änderung der Offset-Werte kommen und das Ergebnis wäre falsch. Siehe dazu Diagramm und Anmerkung S.28 des Datenblatts.
Das funktioniert nur vernünftig, wenn das Register regelmäßig gepollt wird (der Interruptbetrieb macht dann im Rx-Modus keinen Sinn mehr)

Der Vollständigkeit halber die Erklärungen aus dem Datenblatt:

Der Automatik-Modus a = 10 sollte bevorzugt verwendet werden, wenn mehrere RFM12-Transceiver angesprochen werden sollen, etwa in einem Peer-to-Peer-Netzwerk oder als Zentralknoten in einem sternförmigen Netzwerk. Der Modus a = 11 ist zu bevorzugen, wenn nur eine Gegenstelle angesprochen wird, also bei nur 2 Teilnehmern oder Endpunkte in einem sternförmigen Netzwerk.

Senderkonfiguration (TX Configuration 9800 oder 9900)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 1 1 0 0 mp m3 m2 m1 m0 0 p2 p1 p0 0x9800
mp modulation polarity Bestimmt die Richtung der FSK-Erzeugung (entspricht Signalinvertierung). 0 = normal (1-Bit = höhere Frequenz)
1 = invertiert (0-Bit = höhere Frequenz)
m frequency deviation Legt den Frequenzhub fest, die Frequenzablage von der eingestellten Mittenfrequenz, in 15-kHz-Schritten. Dieser ist als ±-Wert zu sehen.
Zum Vergleich: Der (maximale) Frequenzhub beim UKW-Rundfunk beträgt ± 75 kHz.
0000 = ± 15 kHz, Minimum
xxxx = (m+1) * 15 kHz
1111 = ± 240 kHz, Maximum
p relative output power Bestimmt die relative Ausgangsleistung des Senders relativ zu seiner Maximalleistung. (Dezibel [Größe: Milliwatt]) RFM12: 3-dBm-Schritte. RFM12B: 2,5-dB-Schritte. Der Wert steht im Zusammenhang mit der angeschlossenen Antennen-Impedanz. 000 = 0 dB, Maximum
xxx = -3 * p bzw. -2,5 * p
111 = -21dB bzw. -17,5dB, Minimum

Zeitgeber für Wake-Up (Wake-Up Timer Exxx .. Fxxx)

Bestimmt die Zeitperiode der zyklischen Einschaltung des WakeUp-Timers. Nach Ablauf der Zeitperiode erfolgt ein WKUP-Interrupt, der zum Aufwecken eines Mikrocontrollers verwendet werden kann.

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 r4 r3 r2 r1 r0 m7 m6 m5 m4 m3 m2 m1 m0 0xE196


Das Bit ew muss aktiv sein, damit der Zeitgeber funktioniert

r radix Exponent zur Basis 2. Erlaubt: 0 .. 29
m mantissa Mantisse. Erlaubt: 1..255. Die Schlafzeit Twake-up = m * 2r ms
  • Minimale Schlafzeit: 1 ms
  • Vorgabe: 150 * 21 ms = 300 ms
  • Maximale Schlafzeit: ≈ 2 Jahre

Bei Wake-Up-Interrupt ist ew nach jedem Zyklus zu löschen und wieder zu setzen. Vor der ersten Benutzung sollte einmal ein „Dummy-Lauf“ mit einer kurzen Zeitperiode absolviert werden, d.h. der Interrupt sollte einmal ausgelöst werden. Danach kann die gewünschte Wake-Up-Zeit eingestellt werden. Ohne den „Dummy-Lauf“ kann es zu unverständlichen Interrupts kommen. Der Zeitgeber rekalibriert sich bei jedem Hochlauf am Quarzoszillator und benötigt dafür 0,5 ms (nach der Quarz-Hochlaufzeit von bis zu 7 ms).

Im Datenblatt zum RFM12B ist ein zuzurechnender Faktor von 1,03 angegeben, der aber in der gleichsam angegebenen Genauigkeit von 10 % untergeht. Ist also Quatsch, selbst wenn man der beim RFM12 angegebenen 5 % glaubt.

Software-Reset (0xFE00)

Das Kommando 0xFE00 löst einen Software-Reset aus. Die Wirkung ist vermutlich wie bei Power-On-Reset (also Interrupt aktiv). Der Befehl ist im Datenblatt für den RFM12 nicht beschrieben, scheint aber wie beim RFM12B zu wirken.

Der Befehl funktioniert nur im high-sensitive reset mode. Nach dem Befehl muss wie beim POR eine Wartezeit von 100ms eingehalten werden.

Automatisch zyklischer Empfänger (Low Duty-Cycle C8xx)

Neben der Möglichkeit des zyklischen Aufweckens eines angeschlossenen Mikrocontrollers besteht beim RFM12 auch die Möglichkeit, den Empfänger kurzzeitig zu aktivieren ohne den Controller zu wecken, und den Mikrocontroller erst bei gültigem Signal (etwa vom Ausgang VDI ⑪ oder bei Synchronmusterempfang) zu wecken. Somit kann der Empfänger autonom eine feste Frequenz bei geringem Stromverbrauch überwachen.

Mit dem Wake-Up-Timer wird die Periodendauer (mithin die Einschaltfrequenz) des Empfängers eingestellt (bspw. alle 500 ms), und mit dem hier einstellbaren Wert wird bestimmt, wie lange der Empfänger dann aktiv sein soll (bspw. 30 % von 500 ms = 150 ms. Werden während der Einschaltdauer gültige Daten empfangen, bleibt der Empfänger bis zum Ende von DQD aktiv. Wird dabei schließlich ein Synchronmuster erkannt und die FIFO gefüllt, gibt es einen FIFO-Interrupt.

Der WakeUp Timer muß zur Nutzung des Low Duty Cycles weder aktiviert sein, noch muss er in jedem Zyklus zurückgesetzt werden.    
Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 1 0 0 0 d6 d5 d4 d3 d2 d1 d0 en 0xC80E
d duration Einschaltdauer während der zyklischen Einschaltung
Einschaltverhältnis = (d*2+1)/m
Einschaltdauer = (d*2+1) * 2r ms
0000000 = 2r ms, Minimum
0000111 = 2r × 15 ms = 30 ms (r = 1)
1111111 = Quatsch, Einschaltdauer ≥ Zykluszeit
en enable Zyklische Einschaltung aktivieren 0 = aus
1 = ein

Normalerweise muss die Sendeseite ein permanentes oder eng gelücktes Signal über die gesamte Periodendauer ausstrahlen, damit der Empfänger davon Notiz nehmen kann. Um sowohl beim Sender als auch beim Empfänger Strom sparen zu können, ist es hilfreich, wenn die Wachzeiten der Gegenseite in etwa bekannt sind. Dazu sind hinreichend genau gehende Wake-Up-Zeitgeber erforderlich. Dies wird beim RFM12 bewerkstelligt, indem der Timer beim Einschalten an der Quarzfrequenz abgeglichen wird, um Streuungen zu minimieren.

Ein deutlich exakteres Arbeiten ist möglich, wenn auch aufwändiger, wenn man auf den Zeitgeber des RFM12 verzichtet und statt dessen eine 32-kHz-basierte Uhrenquarzzeitbasis des Mikrocontrollers verwendet, typischerweise am asynchronen Oszillator am Timer2 eines ATmega-Controllers.

Empfänger-FIFO lesen (RX FIFO Read B000)

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0xB000


Dieses Kommando löst die Rückgabe eines Datenbytes (synchron mit dem 8. Bit) aus. Es ist nötig, dass das ef-Bit (RX-FIFO) im Configuration Setting gesetzt wurde, um diese Funktion nutzen zu können!

 ___ _                                                                                  __
 SEL  \________________________________________________________________________________/  \___|?|__________________
         _   _   _   _   _   _   _   _    __    __    __    __    __    __    __    __              _   _   _   _
 SCK ___/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \_______|?|__/ \_/ \_/ \_/ \_
     _____     _______                        ggf. reduzierte Schiebetaktfrequenz      _______   ____     _______
 SDI _/   \___/  0xB0 \_______________________________________________________________/_______|?|/   \___/  0xB0 \_
      ________________________________ _____ _____ _____ _____ _____ _____ _____ _____ _       ____________________
 SDO -________________________________X_____X_____X_____X_____X_____X_____X_____X_____X_---___/↑
        FFIT (sollte HIGH sein)         D7    D6    D5    D4    D3    D2    D1    D0   D?      └─Interrupt

D?  = FIFO ist vom Fall-Through-Typ; ungültig oder nächstes Datenbit wenn nicht leer
|?| = warten bis SDO = HIGH (nicht auf die L-H-Flanke, diese könnte ausbleiben!)
--- = Tristate, der Bus-Holder hält den Ausgang auf den letzten Pegel fest

Bei entsprechender Füllstands-Einstellung kann man hiermit auch mehr (bspw. 9 Bit) oder weniger (bspw. 7 Bit oder auch jedes Bit einzeln) abholen. Da das Senderegister auf 8 Bit festgelegt ist, hat das meistens keinen Sinn.

Die Taktfrequenz darf für das FIFO-Auslesen maximal 2,5 MHz betragen.

Alternativ kann das Auslesen der FIFO ohne den 0xB0-Präfix mittels FFS ③ erfolgen. Das Bit er muss dazu eingeschaltet sein, ansonsten beschreibt man damit das Sende-Register. Um festzustellen, ob ein Byte verfügbar ist, ist im Datenblatt die Auswertung von FFIT ④ angegeben. Mit einiger Sicherheit genügt auch der LOW-Pegel an IRQ ②. Hat man nur SDO ① zur Verfügung, muss man FFS zwischendurch deaktivieren und SEL ⑭ aktivieren. Was bei gleichzeitiger Aktivierung der beiden Chip-Select-Signale passiert ist undokumentiert.

Senderegister schreiben (TX Register Write B8xx)

Dieses Kommando schreibt Daten in den TX-Puffer. Wenn der Sender aktiv ist, wird dieses gesendet, sobald das andere Register leer ist.

el muss eingeschaltet sein.

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 1 1 1 0 0 0 t7 t6 t5 t4 t3 t2 t1 t0 0xB8AA
t transmit Das Datenbyte, welches gesendet werden soll.

(Senden Funktioniert nur wenn zuvor der Status abgefragt wurde - Nö!)

 ___ _                                                                                                                                          _
 SEL  \_________________________________________________________________|?|_________________________________|?|________________________________/
        _   _   _   _   _   _   _   _    _   _   _   _   _   _   _   _       _   _   _   _   _   _   _   _       _   _   _   _   _   _   _   _   
 SCK __/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \__/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_|?|_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_|?|_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \__
       __     ___________              ___ ___ ___ ___ ___ ___ ___ _____    ___ ___ ___ ___ ___ ___ ___ ___     ___ ___ ___ ___ ___ ___ ___ ___
 SDI _/  \___/  = B 8    \____________/___X___X___X___X___X___X___X_____|?|X___X___X___X___X___X___X___X___X|?|X___X___X___X___X___X___X___X___\_
      __________________________________________                          ___________                         ___________
 SDO -          = RGIT                          \\\\\____________________/           \\\\\___________________/           \\\\\__________________-

 |?| = warten bis SDO ① wieder HIGH wird, bspw. per Interrupt

Datenbytes können, bei aktiv LOW gehaltenem SEL ⑭, bei HIGH an SDO ① nachgeschoben werden, ohne das Präfixbyte 0xB8 wiederholen zu müssen.

Alternativ kann das Einschreiben der Daten mittels FFS ③ erfolgen.

Die beiden Senderegister werden beim Power-On-Reset und beim Ausschalten von et mit 0xAA vorbelegt und eins davon (?) als leer markiert.

Solange der Sender ausgeschaltet ist, kann man durch Einschreiben zweier anderer Bytes eine andere Präambel (Takteinlauf) beim Einschalten des Senders erzwingen.

Um das Aussenden des passenden Synchronmusters (typ. 0x2DD4) für den Empfänger muss man sich selbst kümmern! Der typische Sendeverlauf ist daher:

  • Senden von mehr oder weniger Takteinlauf-Bytes (viele Flankenwechsel, möglichst gleich viele 0-Bits und 1-Bits, etwa 0xAA, 0x55, 0xCC usw.
  • Senden des Synchronmusters
  • Senden der Daten, typischerweise:
    • Längenangabe voraus (da der Empfänger keine sichere Endeerkennung hat)
    • eigentliche Nutzdaten, ggf. hamming-kodiert gegen einzelne Bitfehler
    • Fehlersicherung (CRC)

Um den korrekten Moment zum Ausschalten des Senders zu finden, ist es am günstigsten, am Ende ein Dummy-Byte (typischerweise 0xAA) einzuschreiben und danach auf ein erneutes HIGH von SDO ① zu warten. In diesem Moment beginnt der Sender mit dem ersten Bit des Dummy-Bytes, und man kann et sicher und zeitnah auf Null setzen.

Status lesen (Status Read 0000)

Dieses Kommando löst die Rückgabe des Statusregisters aus. Im wesentlichen werden damit Interruptanforderungen gelöscht. Das Null-Bit im MSB entscheidet hierbei, dass Statusbits geliefert werden. (Vermutlich sind die anderen Sende-Bits don't care, also egal.) Wie auch sonst erscheint das erste Bit ganz ohne Takt SCK ⑬ nach der fallenden Flanke von SEL ⑭.

Byte MSB LSB Vorgabe
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Ausgabe-Bits (er≡1)
Ausgabe-Bits (er≡0)
FFIT
RGIT
POR FFOV
RGUR
WKUP EXT LBD FFEM RSSI
ATS
DQD CRL ATGL OFFS6 OFFS3 OFFS2 OFFS1 OFFS0 0x4000


Wie weiter oben betrachtet kann man mit weiteren Takten die Empfangs-FIFO auslesen.

er=1 er=0 Unterbrechungsanforderungen (Interrupts), 6 Bits verschwindet durch …
15 RGIT register interrupt Senderegister ist bereit für neue Sendedaten
  • Beschreiben des Senderegisters
  • Auschalten des Senders (et=0)
  • Ausschalten des Latches (el=0)
FFIT fifo interrupt Die Anzahl der Datenbits im FIFO-Puffer hat das eingestellte Limit (Standard: 8 Bits) erreicht
  • Auslesen der FIFO
  • Ausschalten des Empfängers (er=0)
  • Deaktivieren der FIFO (ef=0)
14 POR power-on reset Power-On-Reset: Alle Register wurden mit Vorgabewerten geladen / überschrieben
  • dieses Status-Lese-Kommando
13 RGUR register underrun Der Datenstrom ist beim Senden abgerissen, da nicht schnell genug Daten nachgeladen wurden. Es wurden und werden abwechselnd die letzten beiden Bytes gesendet.

Oder aber es wurde in ein volles Senderegister geschrieben.

  • Auschalten des Senders (et=0)
  • Ausschalten des Latches (el=0)
FFOV fifo overflow Die Empfangs-FIFO ist übergelaufen, weil Daten nicht zügig genug abgeholt wurden. Die FIFO ist blockiert bis zum nächsten Synchronwort
  • Ausschalten des Empfängers (er=0)
  • Deaktivieren der FIFO (ef=0)
12 WKUP wakeup Der Aufweck-Timer ist abgelaufen
  • dieses Status-Lese-Kommando
  • Abschalten des Wake-Up-Timers (ew=0)
11 EXT external interrupt Es liegt Low-Pegel am Eingang INT ⑪ vor
  • High-Pegel an INT
  • Deaktivieren von INT (pi=1)
10 LBD low battery detected Es liegt Unterspannung vor
  • ausreichend Spannung
  • Verringerung der Schaltschwelle
  • Abschalten des Unterspannungsdetektors (eb=0)
Statusangaben, 10 Bits
9 FFEM fifo empty Der FIFO-Puffer ist leer
8 RSSI received signal strength Die Signalstärke ist über dem eingestellten Limit
ATS antenna tuning: strong Das Antennenabstimmschaltung hat ein starkes Radiosignal detektiert (Was auch immer das bedeutet. Könnte auch perfekte Antennen-Fehlanpassung beim Senden sein.)
7 DQD data quality detector Der Ausgang des Datenqualitätsbewerters
6 CRL clock recovery locked Die Taktwiederherstellung ist eingerastet
5 ATGL afc toggle Kippt mit jedem AFC-Zyklus, d.h. nachfolgende Bits ändern sich (gemessen wurden etwa 4 kHz, s.u.)
4 OFFS6 sign of offset MSB = Vorzeichen des AFC-Offsets
3:0 OFFS3:0 offset Letzte 4 Bits vom AFC-Offset. Bei entsprechend begrenzter AFC (Vorgabe) entspricht dies dem tatsächlichen AFC-Offset. Ansonsten muss man den AFC-Abstimmvorgang durch zyklisches Auslesen des Statusregisters beobachten und die fehlenden Bits extrapolieren.

Einen Interrupt bei FIFO-Unterlauf (Auslesen von zu vielen Bits) scheint es nicht zu geben.

Beachte: Solange irgendein Interrupt aktiv ist sowie der Taktausgang aktiv ist (dc=0), kann der RFM12 nicht in den Schlafmodus wechseln, und der Quarzoszillator läuft durch. Grundsätzlich sollte bei jedem Interrupt eine Statusabfrage (über die Interruptquelle) erfolgen und danach die Ursache getilgt werden. Bei Verwendung eines flankengetriggerten Interrupt-Eingangs (etwa Pin-Change) läuft man Gefahr, nicht alle Interrupts zu bedienen! Hier sollte pegelgetriggerter Interrupt simuliert werden, indem der Kode in einer Schleife so lange ausgeführt wird, bis der Eingang inaktiv (HIGH) ist.

Die AFC-Werte sind nur glaubhaft, wenn nicht gerade eine automatische AFC läuft. (Da fehlt wohl ein Puffer.) Um hiermit korrekte AFC-Werte zu lesen, sollte die AFC-Berechnung vor dem Status-Lesen ausgeschaltet werden (Bit en = 0).

Mit vagabundierender Spannung bei deaktiviertem Pull-Up-Widerstand an SDO ① braucht man nicht rechnen, da (laut Datenblatt) dieser Ausgang mit Bus-Hold ausgestattet ist. So bezeichnet man eine hochohmige Rückführung eines nichtinvertierenden Eingangstreibers, die den Eingang im zuletzt vorgefundenen Spannungspegel hält (tatsächlich ein Flipflop-Effekt).

Einstellungen für maximale Reichweite

Für eine maximale Reichweite eignen sich folgende Einstellungen:

  • Bitrate: 2k - 10kbit/s.
  • Receiver Baseband Bandwidth: 134kHz
  • RSSI Threshold: -97dBm
  • LNA gain: 0dB. Falls in der Gegend Störer im gleichen Frequenzbereich sind, dann -6dB, ansonsten kann die Eingangsstufe übersteuern.
  • FSK frequency deviation: +/-90kHz
  • Output Power: 0dB

Und vor allem: Eine gute (Richt-) Antenne.

Quarzfrequenz ändern

Im Datenblatt wird die Verwendung eines 10 MHz-Quarzes empfohlen. Man darf die Frequenz aber nach oben und unten variieren, wie Messungen mit einem DDS-Generators anstelle des Quarzes zeigen: PLL-Einrast-Tabelle. Eine Tabelle: Quarzfrequenzen von 8,5-11 MHz zeigt die damit erreichbaren Frequenzen. Quarze für 3. oder auch 5.Oberton sollten auch auf ihrer Grundfrequenz verwendbar sein, dafür bieten sich u.a. CB-Funk- und 10m-Amateurbandquarze an.

Den Einfluß der vier unteren Bits im Configuration Setting Register und des mp-Bits (Modulations-Polarität?) auf die PLL-Frequenz zeigt diese Kapazitäts-Tabelle. Pro Stufe sind es hier etwa 4 kHz, das kann je nach Quarz schwanken. Möglicherweise ist so auch Schmalband-FSK möglich, ohne Änderung des PLL-Teilers.

Was können wir damit anfangen? Neben dem regulären Einsatz auf den beiden zugelassenen Bändern 433 und 868 MHz sind das unter anderem (bitte weitere Ideen einfügen):

  • Packet-Radio mit 9600 Baud im 70cm-Amateurband 430-440 MHz. Die einfachste Möglichkeit ist das Programm Soundmodem, das für Windows und Linux existiert. Wer es komfortabler haben will findet hier eine Beschreibung wie Soundmodem mit den Programmen Flexnet und Paxon zusammenarbeitet. Eine Karte der Packet-Radio-Digipeater im 70cm-Band kann man mittels Hammap erstellen. Leider werden die Daten in den letzten Jahren nicht mehr sehr gepflegt, es dürften einige Karteileichen enthalten sein.
  • Empfang der POCSAG-Funkrufsender am oberen Ende des Amateurbandes auf 439,9875 MHz 2-FSK mit 4kHz Hub und 1200 bit/s im POCSAG Radio Paging Code 1 (Liste der Sender, Stand 18.09.07). Zur Decodierung existieren mehrere Programme, aufbauend auf Multimon die Weiterentwicklungen Monitor und MonitorD. Im Prinzip könnte man damit auch die verschlüsselten Wettermeldungen auf 466,23 MHz mitschreiben, aber nicht decodieren.
  • Empfang der D-Star-Relais. Das ist eine patentierte digitale Sprach- und Datenübertragung, deren Eigentümer dafür sorgt, dass kein käufliches oder Selbstbaufunkgerät ohne den "AMBE"-Modemchip D-Star senden und empfangen darf. Es gibt eine kleine Ausnahme, das Programm r00t's D-Star Decoder V0.2a für die Soundkarte, das nur Rufzeichen und Datentelegramme der beteiligten Funkamateure darstellt.
  • Panoramaempfänger (die Bezeichnung Spektrumanalysator wäre etwas übertrieben) unter Verwendung des analogen RSSI Ausgangs (Anschluß am Kondensator in der Ecke). Damit ließe sich z. B. auch die Bandbelegung im PMR-Bereich 446,0-446,2 MHz oder im Mobilfunkband um 900 MHz anzeigen.
  • Pegelanzeige für Mobilfunksender. Im 900 MHz Mobilfunkbereich könnte man mit dem RSSI-Ausgang die umliegenden Funkmasten anpeilen und ihre Pegel anzeigen. Laut Datenblatt nur ein Anzeigeumfang von 35 dB, aber mit umschaltbarem Grundpegel.
  • In Verbindung mit einem Frequenzumsetzer lassen sich weitere Frequenzbereiche erschließen, z. B. Packet-Radio im 23cm- (1240-1200 MHz) und 13cm- (2320-2450 MHz) Amateurband. Leider liegt die Zwischenfrequenz der Satellitentuner (479,5 MHz) schon am oberen Ende des PLL-VCO-Einrastbereiches. Damit wäre ein preiswerter Konverter für 23cm möglich, meistens schon mit I2C-Bus PLL.
  • Local Oscillator für einen Empfänger. Mit den ca. 5 Milliwatt des RFM12 läßt sich ein passiver Diodenringmischer ansteuern. Damit kann man einen Überlagerungsempfänger oder -sender mit hoher erster Zwischenfrequenz bauen.
  • Umsetzer für DVB-T Amateurfunkrelais Manche ATV-Relais haben eine digitale Ausgabe im 23cm-Band, beispielsweise DB0FT auf dem großen Feldberg im Taunus mit 1285 MHz. Übliche DVB-T-Empfänger sind aber auf die terrestrischen TV-Bänder 47-862 MHz beschränkt. Ein Umsetzer mit einer LO-Frequenz von 850 MHz, z.B. ein RFM02 mit 9,8 MHz-Quarz setzt auf 435 MHz um.

Antennen-Anpaßnetzwerk

Antennen-Anpassnetzwerk im Datenblatt

Soll das RFM12 auf anderen Frequenzen betrieben werden, ist nur eine Änderung des Antennennetzwerks nötig. Das Datenblatt bietet knappe aber ausreichende Informationen.

Zwischen Pin 12 und 13 liegt eine Spannungsquelle, die ihre maximale Sendeleistung in eine komplexe Last nach der Tabelle "Note4" abgibt. Das bedeutet, ihr Innenwiderstand ist konjugiert-komplex zu dieser Last, also dieselben Zahlenwerte, nur mit Minuszeichen vor dem "j".

Das Anpassnetzwerk läßt sich auf zwei Bauteile reduzieren: von der Antenne ausgehend, die als reeller 50Ω- Widerstand angenommen wird, ist ein Kondensator in Reihe geschaltet. C8 und C9 (in der Tabelle C9 und C10 bezeichnet) liegen in Reihe und sind gleich groß, dürfen also in einem Kondensator mit der halben Kapazität zusammengefasst werden. Dann liegt noch L1 parallel zur Quelle, L3 hat mehr als den 20-fachen Wert und kann vernachlässigt werden. Das ganze läßt sich im Smith-Diagramm gut darstellen.

Anpassnetzwerk im Smith-Diagramm

Von der Antenne im Mittelpunkt ausgehend bewegen wir uns mit dem Serien-C Cs auf einem Kreisbogen nach unten (kapazitive Halbebene) auf den Punkt "Unendlich" rechts außen zu. Ungefähr senkrecht unter dem Zielpunkt, hier für 433 MHz gezeichnet, biegen wir ab auf eine Kreisbahn für die Parallelinduktivität Lp. Sie führt in die obere (induktive) Halbebene auf den Nullpunkt links zu. Der genaue Schnittpunkt beider Kreise kann "mit Zirkel und Lineal" oder einem der Hochfrequenz-Berechnungsprogramme ermittelt werden.

Die Kreise für Lp oder Cp sind im Smith-Diagramm nicht eingezeichnet , um die Übersicht zu wahren. Man könnte ein gespiegeltes Diagramm darüberlegen, aber stattdessen spiegelt man die Kurve am Diagramm-Mittelpunkt (dünne blaue Kurven). Am Rand kann man jetzt die auf 50Ω (bzw. 1/50Ω für die gespiegelte Kurve) normierten Blindwiderstände ablesen. Für Cs lesen wir eine Differenz zwischen Start und Zielpunkt von etwa Xc=(3,2-0) * 50Ω ab, für Lp sind es (0,25 +0,32) = 0,57*(1/50Ω). Damit erhalten wir Cs=1/(2*Pi*f*Xc)=2,3 pF das war wie gesagt die halbe Kapazität der beiden hintereinandergeschalteten Kondensatoren, Tabellenwert ist 4,7pF und Lp=1/(2*Pi*f*0,57*(1/50))= 32,2 nH, der Tabellenwert ist 27nH.

Anpassnetzwerk im Datenblatt zu RF12
Smith-Diagramm zum RF12

Im RF12 wird ein um zwei Bauteile (im Bild C2 und L1 genannt) erweitertes Netzwerk empfohlen, das macht man um eine breitbandigere Anpassung zu erreichen.

Betriebsspannung

Achtung nicht alle Module sind für 5V geeignet, alle Typen mit "B" am Ende sind nur für 3,3V. Man muß dann entweder den Mikrocontroller ebenfalls mit 3,3V betreiben, oder Pegelwandler verwenden.

Messungen

Drei Messungen am RFM12 zeigen den Einfluß von Eingangpegel, Frequenzhub und Mittenfrequenz auf das Ausgangssignal, gemessen am Filterkondensator CFIL. Zwei weitere Kurven zeigen die ARSSI-Spannung (Anschluß am Kondensator in der Ecke) und die damit gemessene Filterkurve.

Messungen am RFM12 Änderung des Eingangspegels
Messungen am RFM12 Änderung des Frequenzhubs
Messungen am RFM12 Änderung der Mittenfrequenz
Messungen am RFM12 ARSSI_und_Filterkurve

Was folgt aus diesen Messungen?

  • Der ARSSI-Anschluß zeigt uns über mehr als 100 kHz ein Sendesignal an. Decodierbar ist es aber nur im Abstand von weniger als 5 kHz von der Mittenfrequenz. Ohne Abgleich von Sender und Empfänger ist also die AFC unverzichtbar.
  • Das "Loch" in der Mitte der Durchlasskurve stammt von dem im Datenblatt gezeigten Hochpass "> 7 kHz". Für ein unmoduliertes Sendesignal geht die ARSSI-Spannung fast auf den Rauschpegel herunter, hier wurde mit ±15kHz moduliert.
  • Damit lässt sich der Empfänger abgleichen. Man braucht dazu nur ein unmoduliertes Sendesignal auf der Sollfrequenz. Das kann ein mittels Frequenzzähler abgeglichenes zweites RFM12 sein. Der Empfängerquarz wird mit den 4 Bit für die Oszillatorkapazität genau auf dieses "Loch" der ARSSI-Spannung eingestellt.

Die AFC-Messdauer ist im Datenblatt nicht genannt, eine schnelle Abfrage des ATGL-Bit im Statusregister im "Auto-AFC" - Modus liefert minimale Pulsbreiten von ca. 250..270 µs, entsprechend einer Messfolgefrequenz von 4 kHz (schneller oder präziser AFC-Modus?) - leider nicht ausreichend um 9600 Baud Schmalband-FM zu demodulieren. Im Auto-Modus werden zwei Messungen zusammengefasst, damit beträgt die Updaterate sogar nur 2 kHz. Weitere Messung: ab etwa ± 10 kHz Hub synchronisiert sich das ATGL-Bit auf der Mittenfrequenz mit einem bis zu 1,8...2 kHz FM-modulierten Signal.

Neue Idee: "Dithering und FM-Flankendemodulator":
Wenn das Empfangssignal nicht weit genug FM-moduliert ist, müssen wir eben den Empfänger modulieren. Im Timer-Interrupt wird die Quarzkapazität oder die PLL z. B. mit 38,4 oder 76,8 kHz und mindestens ±15kHz Hub umgeschaltet, sodass bei Empfang eines unmodulierten Signals am CFIL-Ausgang ein symmetrisches Rechteck dieser Frequenz erscheint. Ist das Empfangssignal schmalbandig FM-moduliert, und man stimmt den Empfänger leicht daneben ab, so sollte das CFIL-Signal mit dieser Modulation PWM-moduliert sein. Ein Tiefpass filtert die Dithering-Frequenz weg und übrig bleibt (wenns funktioniert) die Modulation, vielleicht sogar analoger Sprechfunk... Motto "Engineering is the art of making what you want from things you can get." (von http://www.dsprelated.com)

Bezugsquellen

Links

Folgende Links sind mit Vorsicht zu genießen, da die Datenblätter teilweise fehlerbehaftet sind. Es empfiehlt sich, direkt mit dem Datenblatt des RF12 (das ist das IC auf dem Modul) zu arbeiten. Dieses ist so gut wie fehlerfrei.