RFM12
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.
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 Interface
- Maximale SPI Frequenz: 2,5MHz (10MHz Quarz / 4)
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 (FifoFill bit), wieder eingeschaltet und für den Empfang der nächsten Präambel neu scharf gemacht werden.
RFM hängt sich auf
Wenn man die AFC nicht begrenzt, also keinen Wertebereich vorgibt, die eine maximale Abweichung korrigiert wird passiert es nach einer Weile, dass sich der Empfänger aufhängt, die Offsetbits im Status werden maximal und dann geht gar nichts mehr, er 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
- Forenbeitrag RFM12: Erfahrungen
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.
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)
Configuration Setting
Hex = 80 & xx Bit-Syntax:
| Byte | 1 | 2 | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Bits |
|
|
el (TX FIFO) = Sendepuffer für Datentransfer nutzen (1 = An / 0 = Aus)
ef (RX FIFO) = Empfangspuffer für Datenspeicherung nutzen (1 = An / 0 = Aus)
b... = Zu nutzende Basisfrequenz (00=315MHz / 01=433MHz / 10=868MHz / 11=915MHz)
x... = Interner Clock des Chips kann durch verschieben einer Kondensator-Anpass-Stufe bestimmt werden.
0,5pF pro Schritt. Basis ist 8,5pF -> (0000=8,5 / 0001=9,0 / 0010=9,5 / ...)
Power-Management
Hex = 82 & xx
Bit-Syntax: 10000010 | er | ebb | et | es | ex | eb | ew | dc
er = Gesamten Empfänger einschalten (1 = an / 0 = Aus).
ebb = Baseband Block einschalten (1 = an / 0 = aus)
et = Sender einschalten (1 = an / 0 = Aus) (Wenn das TX-Register aktiv und mit Daten gefüllt ist/wurde,
werden diese Daten sofort gesendet) (1 = an / 0 = aus)
es = Schaltet den Synthesizer ein. (1 = an / 0 = aus)
ex = Schaltet den Quarz-Oszilator ein. (1 = an / 0 = aus)
eb = Vergleichbar mit BrownOutDetection -> Erkennt eine zu geringe Betriebsspannung und erzeugt einen Interrupt,
um einen drohenden Spannungsaufall anzukündigen (1 = An / 0 = Aus)
ew = Aktiviert den WakeUp Timer des Prozessors. (1 = an / 0 = aus)
dc = Deaktiviert die Ausgabe des System Clocks auf dem CLK Pin am Chip (1 = Keine ClockAusgabe / 0 = Clock ausgeben)
<er> bzw <et> schalten alle benötigten Module (Quarz-Oszillator, Sythesizer, Base Band Block, Power Amplifier ein auch wenn <ebb>, <es> oder <ex> nicht gesetzt sind. Durch separates Einschalten von <ebb> oder <ex> kann aber die Startzeit für den Empfänger bzw. den Sender verkürzt werden. Wird der WakeUp Timer verwendet ist <ew> nach jedem Cyclus zu löschen und wieder zu setzen. /small>
PLL Setting
Hex = 198 + y Bit-Syntax: 110011000 | ob1 | ob0 | lpx | ddy | ddit | bw1 | bw0 ob... = ... (00= 5 oder 10MHz [standard] / 01=3.3MHz / 1x=2.5MHz oder weniger) lpx = Wählt den Low-Power-Mode für den Quarz-Oszilator aus. (0=1ms [620µA] / 1=2ms [460µA]) ddy = ... ddi = Schaltet das Dithering in PLL-Schleife ab. (1=abgeschaltet / 0=eingeschaltet) bw... = Wählt die Bandbreite des PLL-Signals aus. (00=86.2kbps [-107dBc/Hz] / 01=256kbps [-102dBc/Hz]) Bei 1MHz Offset Phasenrauschen.
LowBatt / µC Clock Control
Hex = c0 & xx
Bit-Syntax: 11000000 | d2 | d1 | d0 | v4 | v3 | v2 | v1 | v0
d... = Bestimmt den Teilungsfaktor für die Clockausgabe am CLK-Pin in Abhängigkeit des Internen SystemTakts.
(000=1 / 001=1.25 / 010=1.66 / 011=2 / 100=2.5 / 101=3.33 / 110=5 / 111=10)
v... = Bestimmt die Betriebsspannung, bei der der RFM12 einen Low Battery Interrupt auslöst. (BrownOutDetection). Im Power-Managment muss das eb-Bit aktiv sein, damit dies funktioniert.
Frequency-setting
Bestimmt den Offset der Sende- und Empfangsfrequenz. Dieser Offset wird auf das Basisband im Configuration Setting hinzu gerechnet.
Hex = a & xxx Bit-Syntax:
| Byte | 1 | 2 | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Bits |
|
|
f... = Bestimmt den Offsetwert der Frequenz.
Als Basis gilt das eingestellte Band im Configuration-Settings-Kommando
freq = 10 * C1 * (C2 + f/4000) [MHz]
| Band | C1 | C2 |
|---|---|---|
| 315 | 1 | 31 |
| 433 | 1 | 43 |
| 868 | 2 | 43 |
| 915 | 3 | 30 |
Data-Rate
Hex = c6 & xx
Bit-Syntax: 11000110 | cs | r6 | r5 | r4 | r3 | r2 | r1 | r0
cs = Vorteiler, Faktor 8. Hiermit kann ein Vorteiler aktiviert werden,
der die errechnete Baudrate (r...) durch 8 teilt.
r... = Baudratenteilerfaktor
RX Control
Hex = 94 & xx
Bit-Syntax: 10010 | p20 | d1 | d2 | i2 | i1 | i0 | g1 | g0 | r2 | r1 | r0
p20 = Bestimmt die Funktion des Pin20 (nINT / VDI) am RFM12 Chip (1 = VDI-Ausgang / 0 = Interrupt-Eingang)
d... = (Valid Data Indicator). Definiert die Geschwindigkeit, mit der bestimmt wird, ob ein Signal korrekt ist, oder nicht.
(00=schnell / 01=mittel / 10=langsam / 11=immer an). Je nach eingestellter Variante werden
unterschiedliche Hardware- und Software-Kombinationen genuzt.
Fast: CR_Lock OR DQD ... Medium: CR_Lock AND ( DRSSI OR DQD ) ...
SLOW: R/S FlipFlop aus (SET) DRSSI OR DQD OR CR_Lock und (CLR) DRSSI AND DQD AND CR_Lock .
i... = Bestimmt die Bandbreite des Empfängers in KHz (KiloHertz).
(000=Reserviert / 001=400 / 010=340 / 011=270 / 100=200 / 101=134 / 110=67 / 111=Reserviert)
g... = (LNA-Gain) Verstärkungsfaktor des Rauscharmen-Eingangs-Signal-Verstärkers (LNA Low Noise Amplifier).
Werte in dBm (Dezibel [Grösse: Milliwatt]) Mögliche Werte sind: 0 / -6 / -14 / -20
r... = (DRSSI = Digital Received Signal Strength Indication) Minimale Empfangssignalfeldstärke.
6 dBm pro Schritt: (000=-103 / 001=-97 / 010=-91 / ...)
Synchron Pattern
Hex = ce & xx Bit-Syntax: 11001110 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 b... = Legt den Wert fest, der als Synchronisations-Byte für die Datenfilterung verwendet werden soll.
Data Filter
Hex = c2 & xx
Bit-Syntax: 11000010 | al | ml | -unknow- (1) | s | -unknow- (1) | f2 | f1 | f0
al = Baudratenregenerator schaltet automatisch in den langsamen Modus,
sobald er einen Takt erkannt hat.
ml = schneller/langsamer Modus
-unknown- (1) = ??? (Standard = 1) (Auch im Datenblatt von IA4420 so beschrieben)
s = (DataFilter) Typ des Datenfilters (0=DigitalFilter / 1=AnalogFilter).
Bei Nutzung des Analog-Filters kann kein FIFO sowie kein ClockRecovery genuzt werden.
-unknown- (1) = ??? (Standard = 1) (Auch im Datenblatt von IA4420 so beschrieben)
f... = (DQD Threshold) Bestimmt den Schwellwert, ab dem ein Signal als gut empfunden 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.
FIFO und RESET-Mode
Hex = ca & xx
Bit-Syntax: 11001010 | f3 | f2 | f1 | f0 | sp | al | ff | dr
f... = (FIFO interrupt Level)
sp = (Sync-Pattern length) Legt die Länge des Synchron-Patterns fest
(0 = 2Byte / 1 = 1Byte)
al = (FIFO Fill Condition) Legt den Wert fest, ab dem das Füllen des FIFOs beginnt.
(0=Synchron / 1=Ständig). Bei Nutzung des Synchron-Modus, werden erst dann Daten in den FIFO geschrieben,
wenn eine definierte 8-Bit od. 16-Bit lange Datenfolge empfangen wurde (Standard ist Hex: 2dd4,
das LSB kann geändert werden und stellt das 8-Bit Synchron-Pattern dar).
ff = (FIFO Fill) Startet das Einlesen der empfangenen Daten in den FIFO-Puffer.
Wenn al (FIFO Fill Condition) auf synchron steht, dann startet das Setzen dieses Bits die Synchronisation-Bit-Erkennung.
dr = (Sens Reset Mode) Wenn dieses Bit auf 0 steht, wird bei einer Schwankung von 200mV auf
der VCC-Leitung (Spannungsversorgung des Chips), ein System-Reset ausgelöst.
Automatic Frequency Control
Hex = c4 & xx Bit-Syntax: 11000100 | a1 | a0 | rl1 | rl0 | st | fi | oe | en a... = Modus der AFC-Schaltung, 0=Auto off, 1=einmalig nach Einschalten, 2=Solange VDI low ist, 3=unabhängig von VDI r... = (Range Limit) Frequenzraster (00=KeineBegrenzung / 01=+15 > -16 / 10=+7 > -8 / 11=+3 > -4) st = Berechneten Offset-Wert übernehmen fi = Genauer Berechnungsmodus (besser aber lansgamer) oe = AFC-Offset freischalten en = AFC-Berechnung aktivieren
TX Configuration Control
- Hex = 98xx (99xx, da nur die 7 MSB fix sind)
Bit-Syntax:
| POR | 0x9 | 0x8 | 0x0 | 0x0 |
| Nilbbes | 1001 | 100 mp | m3 m2 m1 m0 | 0 p2 p1 p0 |
Bitfelder:
| mp | Modulation Polarity | Bestimmt die Richtung der FSK-Erzeugung (invertiert das Spektrum). |
| mn | frequency deviation | Bestimmt den Frequenzabstand des High- und Low-Wertes bei der Übertragung im FSK-Betrieb. Basis ist der mp-Wert. |
| 0 | unknown | immer 0 (Auch im Datenblatt von IA4420 so beschrieben) |
| pn | relative output power | Bestimmt die relative Ausgangsleistung des Senders anhand des dBm-Wertes (Dezibel [Grösse: Milliwat]) 3-dBm-Schritte. (000=0 / 001=-3 / 010=-6 .. 111=-21 dBm). Der Wert steht im Zusammenhang mit der angeschlossenen Antennen-Impedanz. |
Wake-Up Timer
Bestimmt die Zeitperiode der zyklischen Einschaltung des WakeUp-Timers. Nach Ablauf der Zeitperiode erfolgt ein WKUP interrupt, der zB. zum Aufwecken eines Mikrocontrollers verwendet werden kann. Hex = e & xxx Bit-Syntax: 111 | R4 | R3 | R2 | R1 | R0 | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 R = Exponent der Zeit M = Zeit
Low Duty-Cycle
Hiermit kann der Empfänger, cyklisch ein- bzw ausgeschaltet werden. Er kann damit die eingestellte Frequenz "überwachen" Dies wirkt sich stark auf die Stromaufnahme des Moduls bei Batteriebetrieb aus. Mit den <M> bits des WakeUp Timer commands wird die Einschaltfrequenz des Empfängers eingestellt (zB. alle 500ms) und mit dem Low Duty Cycle wird bestimmt, wie lange der Empfänger dann aktiv sein soll (zb. 30% von 500ms = 150ms. Werden während der On-Periode gültige Daten empfangen, bleibt der Empfänger bis zum Ende der Aussendung aktiv. Der WakeUp Timer muß zur Nutzung des Low Duty Cycles weder aktiviert sein, noch muss er in jedem Zyklus zurückgesetzt werden.
hex = 6400 + Bits Bit-Syntax: 11001000 | d6 | d5 | d4 | d3 | d2 | d1 | d0 | en d... = Einschaltdauer während der zyklischen Einschaltung en = zyklische Einschaltung aktivieren
RX FIFO Read
Hex = b000 Bit-Syntax: 1011000000000000
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!
TX Register Write
Dieses Kommando schreibt Daten in den TX-Puffer. Wenn der Sender aktiv ist, wird dieses sofort gesendet. el (TX-Register) muss im Configuration-Setting-Kommando aktiv sein.
Hex = b8 & xx Bit-Syntax: 10111000 | DataByteToSend DataByteToSend = Das Datenbyte, welches gesendet werden soll.
(Senden Funktioniert nur wenn zuvor der Status abgefragt wurde)
Status Read
Dieses Kommando löst die Rückgabe des Statusregisters aus, welches nach der ersten 0 im ersten Bit synchron übertragen wird.
Hex = 0000
Bit-Syntax: 0000000000000000<000>
Rückgabe-Syntax: x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | x10 | x11 | x12 | x13 | x14 | x15 | x16 | x17 | x18
x0 -> x5 = Interrupt bits
x6 -> x15 = Status Bits
x16 -> x18 = FIFO
x0 = FFIT / RGIT (RGIT = TX-Register ist bereit neue Daten zu senden ... kann mit dem TX-Register gelöscht werden)
(FFIT = Die Anzahl der Datenbits im FIFO-Puffer hat das eingestellte Limit erreicht.
Kann mit einer der FIFO-Lesemethoden gelöscht werden)
x1 = POR (PowerOnReset)
x2 = FFOV / RGUR (RGUR = Der Datenstrom beim Senden ist abgerissen, da nicht schnell genug Daten nachgeladen wurden)
(FFOV = Der RX-FIFO ist übergelaufen)
x3 = WKUP
x4 = EXT (Externer IRq vom nINT-Pin)
x5 = LBD (Low Battery Detected)
x6 = FFEM (Der FIFO-Puffer ist leer/EMpty)
x7 = RSSI/ATS (ATS = )(RSSI = Die Signalstärke ist über dem eingestelltem Limit)
x8 = DQD
x9 = CRL
x10 = ATGL
x11 = OFFS_6 (sign of offset)
x12 = OFFS_3
x13 = OFFS_2
x14 = OFFS_1
x15 = OFFS_0
x16 = FO
x17 = FO+1
x18 = FO+2
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. Mir 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.
Antennen-Anpaßnetzwerk
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.
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.
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.
Was folgt aus diesen Messungen?
- Der ARRSI-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 Durchlaßkurve 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äßt 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 ARRSI-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 µsec, entsprechend einer Messfolgefrequenz von 4 kHz - 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, sodaß 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
- AVR RFM12
- RFM12 Protokoll Stack
- RF_SOAP
- Pollin_Funk-AVR-Evaluationsboard
- Bezugsquellen
- Library zur Ansteuerung des RFM12
- Datenblatt des Chipherstellers Integration IA4420.pdf
- Silabs hat Integration im Juni 2008 gekauft, Chipbezeichnung jetzt Si4420
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.
- Datenblatt des ICs RF12 (PDF)
- Datenblatt des Moduls RFM12 (PDF)
- Programming Guide (PDF)
- Demo Kit User Manual (PDF)
- Beispielprogramm von Pollin (ZIP)