Controller

      RFM12 433MHz-Modul im AM-Betrieb


Home ARM-Projekt Startupcode Bootloader myprintf() JTAG debugging Funksteck- dosen



  Funksteckdosen mittels RFM12-Modul steuern

Funksteckdosen gibt es in den verschiedensten Ausführungen - Auch als Garagentor-Steuerung und Jalousie-Steuerung. Sie laufen sehr oft mit 433MHz AM, manchmal mit 866MHz AM. Die Frequenzbänder weden nicht in Frequenz-Kanäle aufgeteilt. Die Unterscheidung läuft rein über digitale Codes, die in diesem Markt einen Quasistandard darstellen.
Pollin Funksteckdose         RFM12-433

Auch bei Pollin gibt es ein preiswertes 433MHz oder 868MHzFunkmodul, das sich leicht über SPI vom Controller ansteuern lässt.

  Die Codierung

Für die Codierung der Funksteckdosen wird eine Klasse von speziellen Coderchips eingesetzt. Die Codierung ähnelt der Manchestercodierung. Ob 0 oder 1 - es gibt immer einen Puls.

logisch 0 logisch 1
logisch0                                            logisch1

Es werden immer 25Bits mit ~1kbit/sec übertragen, wovon gut die Hälfte als Redundanz angesehen werden kann. Solch ein Frame muß nach 28 Takten Pause mindestens ein Mal wiederholt werden.
Frame
Detailliertere Beschreibungen findet man bei den Coder/Decoder-chips:
  • HX2262,HX2272,SC5262,SC5272

  Das 433MHz-Modul

Das RFM12 ist ein über SPI programmerbares FM-Funkmodul, das man bei Pollin preiswert erstehen kann:

RFM12-433

AM Senden kann es gut, leider ist es nicht so einfach, mit einem FM-Modul AM zu empfangen. Ein paar Diskussionen und eine Umbauanleitung dazu gibt es bei Jee LABS.

Entsprechend schwach ist die effektive Empfangsleistung. Es reicht aber, um aus nächster Nähe die AM-Codes zu erkennen und zu "lernen", die man zum AM-Senden braucht. Verwendet wird dabei die Empfangsstärkeauswertung (RSSI) des FM-Modules.

Folgende Leitungen werden benötigt:

Versorgung 2.2V-5V
VDD, GND Pin13, 7

SPI-Interface SDI, SDO, SCK, nSEL pin10,7,9,8
in,out,in,in
nur für den Empfang FSK/DATA
pin5
out


  Tx - Funktionen

  Initialisierung Tx

rf12_xfer(0x8017); // disable FIFO, 433MHz, 12.0pF
rf12_xfer(0x8208); // synth off, PLL off, enable xtal, enable clk pin, disable Batt
rf12_xfer(0xA620); // (0xA620 433.92MHz)
rf12_xfer(0xC647); // c647 4.8Kbps (38.4: 8, 19.2: 11, 9.6: 23, 4.8: 47)
rf12_xfer(0x9489); // VDI,FAST,BW200kHz,-6dBm,DRSSI -97dbm
rf12_xfer(0xC220); // datafiltercommand ; ** not documented command **
rf12_xfer(0xCA00); // FiFo and resetmode command ; FIFO fill disabeld
rf12_xfer(0xC4C3); // enable AFC ;enable frequency offset
rf12_xfer(0xCC67); //
rf12_xfer(0xC000); // clock output 1.00MHz, can be used to see if SPI works
rf12_xfer(0xE000); // disable wakeuptimer
rf12_xfer(0xC800); // disable low duty cycle

Der Code wird größtenteils als State machine im 300µs Timerinterrupt ausgeführt. Die 25 bits eines Frames passen prima in ein Integer und werden noch um ein Startbit erweitert.
          download:  HTMLRF12_tx.c

  Rx - Funktionen

  Initialisierung Rx

rf12_xfer(0x8027); // disable FIFO, 868MHz(!), 12.0pF
rf12_xfer(0x82C9); // synth off, PLL off, enable xtal, disable clk pin, disable Batt
rf12_xfer(0xA620); // (0xA620 433.92MHz)
rf12_xfer(0xC647); // c647 4.8Kbps (38.4: 8, 19.2: 11, 9.6: 23, 4.8: 47)
rf12_xfer(0x9489); // VDI,FAST,BW200kHz,-6dBm,DRSSI -97dbm
rf12_xfer(0xC220); // datafiltercommand ; ** not documented command **
rf12_xfer(0xCA00); // FiFo and resetmode command ; FIFO fill disabeld
rf12_xfer(0xC4C3); // enable AFC ;enable frequency offset
rf12_xfer(0xCC67); //
rf12_xfer(0xC000); // clock output 1.00MHz, can be used to see if SPI works
rf12_xfer(0xE000); // disable wakeuptimer
rf12_xfer(0xC800); // disable low duty cycle
Tatsächlich bin ich hier bei einer 433MHz-Fernbedienung mit 868MHz-setting auf bessere Ergebnisse gestoßen, als mit der 433MHz-Einstellung. Vermutlich werden hier lediglich die Oberwellen des übersteuerten Eingangsverstärkers demoduliert.

Hierfür habe ich die Capture Compare-Unit des Controllers aktiviert. Damit kann man recht genau die Zeiten der Pulse ausmessen.  Trotz HW-Modifikation des RSSI-Kondensators auf 220pF nach Jee LABS gibt es hier aber große Mess-Toleranzen und dadurch eine geringe Reichweite.

          download code:  download


  Weiterführende Links