Forum: Mikrocontroller und Digitale Elektronik RFM12 schaltet Funksteckdose (nicht)


von Andreas S. (igel1)



Lesenswert?

Liebe Forengemeinde,

ich stehe derzeit etwas auf dem Schlauch und benötige Euren Rat:
Ich versuche, mit einem RFM12 meine Elro-Funksteckdose anzusteuern.

Dazu verwende ich :

- 2x Funk-Evaluationsboards von Pollin
- Atmega8 (12 MHz) samt jeweils aufgelötetem
- RFM12B (468MHz)

Beide Boards funktionieren und Funkverbindungen zwischen den Boards
mit Benedikts Beispielprogrammen tun's ebenfalls. (ich glaube, es war 
das hier: Beitrag "Re: Beispielprogramm für RFM12 433MHz Funk-Module").

Sodann habe mit Hilfe des in den Datenblättern undokumentierten
OOK-Tricks mein Empfänger-Board auf ASK (oftmals auch OOK genannt)
umgestellt. Die Initialisierungsparameter sind diejenigen von jeelabs:

http://jeelabs.net/projects/cafe/wiki/Receiving_OOKASK_with_a_modified_RFM12B

Funksignale meines Elro-Senders konnte ich danach mit meinem RFM12B
Empfänger wunderbar empfangen und mitschneiden (siehe 1. Bild im 
Anhang).

Anschließend habe ich wiederum mit den jeelabs-Parametern meinen Sender 
aufgesetzt und per schnödem Ein-/Ausschalten in den TX/RX-Mode das 
Signal so genau wie irgend möglich (von Hand) nachgetuned.

Ich finde, es ist mir gut gelungen (siehe 2. Bild im Anhang).
Nur leider findet das die Funksteckdose nicht und sagt keinen Pieps.

Ich bin momentan etwas ratlos.
Habt Ihr irgendwelche Ideen?

Viele Grüße

Igel1

von Ober (Gast)


Lesenswert?


von Igel1 (Gast)


Lesenswert?

Den Link kannte ich schon - der verwendete leider auch nur die 
RFM12-Initialisierungen von jeelab (so jedenfalls meine Erinnerung).
Und ARM-Code wird auf meinem Atmega etwas holpern.

Trotzdem Danke für den Hinweis.

Habt Ihr noch weitere Tipps (oder besser: eigene (Erfolgs)erfahrungen) ?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ohne jetzt den Code der Elros zu kennen (ich schlage mich z.Z. mit dem 
alten ELV FS10 rum): Die Low-Zeiten im 2. Bild kommen mir noch etwas 
kurz vor, sofern in beiden Bildern die gleiche Zeitbasis verwandt wurde.
Kannst du das Signal auch direkt in der Funksteckdose messen? Ist wg. 
fehlender Netztrennung ja nicht ganz trivial, aber könnte evtl. noch 
weiterhelfen.

von Holger W. (holgerw)


Lesenswert?

Ich würde auch sagen die Low Zeiten sind zu kurz.
Verwendest du die gleiche Programmlogik (Laufzeit) für die Erzeugung der 
High und Low Signale ?

Holger

PS: Wiederholst du das Signal auch mindestens 2 mal ? Die Funksteckdosen 
schalten est wenn es 2 mal hintereinander fehlerfrei empfangen wurde.

von MWS (Gast)


Lesenswert?

Andreas S. schrieb:
> Ich finde, es ist mir gut gelungen (siehe 2. Bild im Anhang).

Wenn man sich die untere Linie des LA ansieht, finde ich das nicht. 
Stellt ja wohl den Flankenwechsel von Low nach High dar. Da ist 
auffällig, dass viel mehr Spikes im zweiten Bild zu sehen sind, also 
finden evtl. zusätzliche Flankenwechsel statt.

von Helmut H. (der_andere)


Angehängte Dateien:

Lesenswert?

Ich schätze mal, der Code ist falsch. Selbst Der, der empfangen wurde 
passt nicht.
Du müßtest 12 Daten mit je 0, 1 oder F bekommen. Die sehe ich 
nicht....den Synchronimpuls am Ende sehe ich auch nicht...

Gruß Helmut

PS: Welche Elro's hast Du da? Anbei von den HE-Typen.

von Holger W. (holgerw)


Lesenswert?

Meine ELROs steuer ich so an:
12 Bit
S = Systemcode
F = Adresse A-D
xx  10 für aus,  01 für an

//    8421 8421 8421   Sync
//    SSSS SFFF FFxx

Adresse A-D wird so aufgelöst:
  'A':    01111
  'B':    10111
  'C':    11011
  'D':    11101

Bit 0 --> / Null ausgeben -___-___  1000 1000
Bit 1 --> / Floatzeichen  -___---_  1000 1110
Sync  --> /   -______________________   1:31

Ich baue alles in einem int zusammen, gebe die 12 Bits aus und danach 
ein Sync, dann Wartezeit 10ms, dann wiederholen.

von Helmut H. (der_andere)


Angehängte Dateien:

Lesenswert?

Ist Das nicht Intertechno in Elro-Format?

Anbei eine Übersicht, beachte die untere Bewerkung:

von Andreas S. (igel1)


Angehängte Dateien:

Lesenswert?

Zunächst einmal: vielen Dank für Eure Anregungen und Tipps.

----

@ Matthias:

Okay - die Low-Zeiten werde ich mal etwas verlängern und dann hier 
wieder berichten. Allerdings meine ich gelesen zu haben, daß das, was 
man mit dem RFM12 empfängt wegen Empfänger-Übersteuerung sowieso nicht 
100% der Realität entspricht. Ob das stimmt weiß ich nicht.

Mein Ansatz war daher: wenn ich mit meinem RFM12-Sender ein Signal 
erzeuge, welches am RFM12-Empfänger genauso aussieht wie das 
Original-Signal des Elro-Senders, so sollten auch die Sendesignale von 
RFM12-Sender und Elro-Originalsender übereinstimmen - ganz egal, wie 
deren Timings in Wirklichkeit sind. Daher habe ich quasi "blind" 
versucht, das "Original-Signal" (so, wie ich es im RFM12-Empfänger 
angezeigt bekommen) mit dem RFM12-Sender nachzubauen. Ist dieser Ansatz 
schon falsch?

Die Idee mit dem direkten Abgreifen an der Steckdose hatte ich auch 
schon, ist mir aber derzeit noch zu heikel. Ich werde das nur "in 
letzter Instanz" probieren - wenn alle anderen Optionen ausgeschöpft 
sind. (Hoffentlich wird das dann für mich nicht auch die "letzte 
Instanz" :-)

----

@ Holger:

Meine Programmlogik ist brutal einfach (Achtung: die Bezeichnungen 
"bit0" und "bit1" und "sync" sind willkürlich - nur nicht dadurch 
verwirren lassen):
1
void sendOOK(void)
2
{  
3
  bit0();
4
  bit0();
5
  bit0();
6
  bit1();
7
  bit1();
8
  bit0();
9
  bit0();
10
  bit1();
11
  bit1();
12
  bit1();
13
  bit0();
14
  bit0();
15
  bit1();
16
  bit1();
17
  bit0();
18
  bit0();
19
  bit1();
20
  sync();
21
}
22
23
24
void bit0(void)
25
{
26
  rf12_trans(0x8238);      // TX on
27
  _delay_us(420);
28
  rf12_trans(0x8208);      // TX off
29
  _delay_us(840);
30
}
31
32
33
void bit1(void)
34
{
35
  rf12_trans(0x8238);      // TX on
36
  _delay_us(1630);
37
  rf12_trans(0x8208);      // TX off
38
  _delay_us(910);
39
}
40
41
42
void sync(void)
43
{;
44
  rf12_trans(0x8208);      // TX off
45
  _delay_us(9000);
46
}

"sendOOK()" wird aus einer Endlosschleife heraus aufgerufen - das Signal 
wird also mehr als 2x ausgestrahlt.

Der Vollständigkeithalber habe ich den kompletten Code ebenfalls 
angehängt.
Relevant sind für Euch vermutlich nur die Teile main.c und rf12.c


----


@Helmut

> Ich schätze mal, der Code ist falsch. Selbst Der, der empfangen wurde
> passt nicht.
> Du müßtest 12 Daten mit je 0, 1 oder F bekommen. Die sehe ich
> nicht....den Synchronimpuls am Ende sehe ich auch nicht...
>
> Gruß Helmut
>
> PS: Welche Elro's hast Du da? Anbei von den HE-Typen.

Die Bezeichnung der Elro-Dosen lautet:

- AB440S

Die Dosen-Switches meiner Testdose, die auf Taste "C" hört,
sind wie folgt gesetzt:

System-Code  |  uit code
1 2 3 4 5       A B C D E
--------------------------
1 0 0 1 0       0 0 1 0 0    # 1=ON   0=OFF

Der Abgebildete Code aus meinem ersten Posting stammt vom
Einschalten dieser "C"-Dose. Bei Bedarf kann ich hier gerne weitere 
Bildchen einstellen.


----

Geben Euch diese Zusatzinfos weitere Anhaltspunkte, wo bei mir "der Hund 
begraben" liegt?


Viele Grüße

Igel1

von Holger W. (holgerw)


Angehängte Dateien:

Lesenswert?

Hier mal mein Code für die Ab440S, ist zwar für PIC sollte aber dank C 
leicht umzusetzen sein.

Holger

von Holger W. (holgerw)


Lesenswert?

Fall du oder ein anderer es testen will,mit

steckdose(0x18,'A',1);

wird die Funksteckdose mit dem Code (Mäuseklavier)  00111 10000 
eingeschaltet (1=on)

Fernbedienung: 00111 (1=on)

von Sven (Gast)


Lesenswert?

Würdest Du uns den Hexcode und den Prozessortyp/Quarz geben?
Wird es über RS232 übergeben?

LG Sven

von Holger W. (holgerw)


Lesenswert?

@Sven: Falls du mich meinst das ist eine Routine die nichts weiter macht 
als den Steckdosencode ausgibt, da braucht es noch rundherum Software.
Prozessor ist ein 18F, lässt sich aber auf alle gängigen µC anpassen

von Andreas S. (igel1)


Angehängte Dateien:

Lesenswert?

So - ich habe nun also schön brav die LOW-Zeiten verlängert, aber meine 
Steckdose sagt noch immer keinen Pieps.

Im Anhang findet Ihr alle 8 Signale, die ich meinem Elro-Sender 
entlocken kann.

Habe mir außerdem mal das Datenblatt vom HX2262 Chip angeschaut - meine 
Signalformen sehen dem leider so gar nicht ähnlich.

Ich glaube, ich benötige doch noch ein paar Worte (oder gute Links) zur 
Codierung ...

Viele Grüße

Igel1


PS: Danke für den Code und all die anderen Bemühungen. Vor allem Holger 
hat mir Mut gemacht. Wenn er die AB440S ans Fliegen gebracht hat, so 
werde ich das (hoffentlich) auch irgendwann schaffen.

von Holger W. (holgerw)


Lesenswert?

meine Routinen entstanden mit den Informationen von dieser Seite:
http://avr.börke.de/Funksteckdosen.htm

Holger

von Andreas S. (igel1)


Angehängte Dateien:

Lesenswert?

@Holger: mein Signal scheint eine völlig andere Codierung zu haben - die 
von Dir zitierte Börke-Website (Danke dafür) paßt leider gar nicht.
Und Du hast wirklich auch die AB440S im Einsatz?
Und die Codierung war wirklich so, wie auf der Börke-Seite angegeben?

--------------

Sodann habe ich soeben nochmals 2h investiert, um mein Signal so exakt 
wie irgend möglich an das Originalsignal anzupassen.

Das Ergebnis seht Ihr im Anhang:
Oben ist das Original-Signal des Elro-Senders AB440S abgebildet.
Unten ist mein Signalnachbau, den mein RFM12 erzeugt, abgebildet.
Beide Signale habe ich mit demselben RFM12-Empfänger empfangen und 
aufgezeichnet.

Sieht doch wirklich schön aus, oder?
Funktioniert aber trotzdem nicht: die Funksteckdose schweigt.

Ich gebe zu: absolute Genauigkeit ist mit dem RFM12 nicht zu erreichen, 
da sich die Pulslängen immer wieder minimal verändern (warum auch 
immer?). Das Originalsignal fluktuiert aber ebenfalls ein wenig.

Ich weiß nun echt nicht mehr weiter.

Als nächstes werde ich nun Holgers PIC-Programm analysieren - 
insbesondere die Initialisierung des RFM12-Senders. Habe allerdings 
wenig Hoffnung.

Langsam kommt Frust auf.

Viele Grüße

Igel1

von Holger W. (holgerw)


Lesenswert?

Ich hab hier liegen, ELRO AB440R als Handsender, AB440S als Empfänger.
Davon laufen ca. 8 Stück hier mit dem Programm im Anhang oben.
Die Initialisierung des RFM12 ist
1
RFM12_init(  4, 1, 4,                // 200kHz Bandbreite, -6dB Verstärkung,   DRSSI threshold: -79dBm
2
                  RF12FREQ(433.92),       // Sende/Empfangsfrequenz auf 433,92MHz einstellen (Berechnung im #define Macro!)
3
                  4800,                     // Baudrate
4
                0, 6                    // 1mW Ausgangangsleistung, 120kHz Frequenzshift
5
             );

Das wird schon !

von Andreas S. (igel1)


Lesenswert?

Hallo zusammen,

ich stecke nach wie vor fest und benötige Eure Hilfe.

Folgende Fragen stellen sich mir:

- Wie genau muß ich das Timing des Senders nachbilden?

- Warum passen meine mitgeschnittenen Signale offenbar so gar nicht
  zu der von Holger zitierten Börke-Seite?
  (ich habe z.B. nur 17 Signalperioden [1 Periode = High-Low-Folge],
   auf der Börke-Seite werden 12 Zeichen mit 24 Perioden + 1 Sync 
übertragen)

Viele Grüße

Igel1

von Andreas S. (igel1)


Lesenswert?

@Holger:

Könntest Du mir netterweise Deinen kompletten Code zusenden oder hier 
einstellen?

Ich benötige doch etwas mehr als die reinen Funktionsaufrufe, um die 
genaue Initialisierung  bzw. das Timing zu rekonstruieren.

Viele Grüße

Igel1

von Holger W. (holgerw)


Lesenswert?

PN ist unterwegs, wenn es dann bei dir funktioniert können wir ja hier 
berichten an was es gelegen hat.

Holger

von Andreas S. (igel1)


Angehängte Dateien:

Lesenswert?

Hallo Nachtschwärmer,

Holger hat mir den entscheidenden Denkanstoß gegeben, indem er so 
beharrlich darauf bestanden hat, daß das Signale bzgl. der Anzahl der 
Perioden exakt dem entspricht, was auf der Börke-Seite dokumentiert ist:
http://avr.börke.de/Funksteckdosen.htm

Ich hab's so lange nicht geglaubt, bis er mir sogar sein Programm 
geschickt hat (@Holger: sehr sauber geschrieben - Chapeau und 
Kompliment!).

Das hat letztlich dazu geführt, daß ich meine eigene Frage aus meinem 
vorletzten Posting beantworten konnte, die da lautete:

- Warum passen meine mitgeschnittenen Signale offenbar so gar nicht
  zu der von Holger zitierten Börke-Seite? Ich selber habe z.B. nur
  17 Signalperioden [1 Periode = High-Low-Folge], auf der Börke-Seite
  werden 12 Zeichen mit 24 Perioden + 1 Sync übertragen.

Des Rätsels Lösung:

Offenbar ist mein RFM12 Empfänger zu träge: er folgt einfach den Flanken 
nicht schnell genug. Das führt dazu, daß kurze Low-Gräben verschluckt 
werden und ich ein umso längeres High Signal angezeigt bekomme.

Ein Bild sagt mehr als 1000 Worte:
Schaut Euch das Bild im Anhang an und Ihr versteht, was ich meine ...

Kaum fügt man die besagten "Low-Gräben" in den Signalverlauf ein (siehe 
rote Linien im unteren Teil des Bildes), schon stimmt das Ergebnis exakt 
mit der Börke-Seite überein. Bitte beachten: meine weiter oben zitierte 
Dosen-Codierung, die an den DIP-Schaltern eingestellt ist, ist nach der 
"Börke" Nomenklatur invertiert zu lesen ist, nämlich:

System-Code  |  uit code
1 2 3 4 5       A B C D E
--------------------------
0 1 1 0 1       1 1 0 1 1    # 0=Dip-Schalter: ON   1=Dip-Schalter: OFF

Genau diese Dosencodierung finde ich auch im korrigierten Signal wieder 
(wobei eine "0" als "00" und eine "1" als "01" im Signal abgebildet 
ist).

Und somit paßt das Ergebnis exakt zur Börke-Seite und ich schöpfe 
Hoffnung, daß ich nun auch in der Lage bin, das Signal meines Senders 
richtig zu "designen". Mann-oh-Mann - das war für mich ein langer Weg 
bis zu dieser Erkenntnis.

Leider ist's schon so spät, daß ich Euch das Ergebnis - sprich: ob das 
korrigierte Signal die Dose schaltet oder nicht - vermutlich erst morgen 
oder in ein paar Tagen präsentieren kann.

Viele Grüße (und nochmals vielen Dank an Holger!)

Igel1

von Helmut H. (der_andere)


Lesenswert?

Einfacher wäre ein stink normaler 433 Sender gewesen, darf ich fragen 
warum gerade der RFM12?

von Andreas S. (igel1)


Lesenswert?

Helmut H. schrieb:
> Einfacher wäre ein stink normaler 433 Sender gewesen, darf ich fragen
> warum gerade der RFM12?

Ich hatte mich seinerzeit einige Stunden / Tage in dieses Funkmodul 
eingearbeitet, weil der RFM12:

- sehr billig ist
- bei gängigen Versandhändlern verfügbar ist
- es viele Beiträge dazu im Forum gibt

Aber ich gebe Dir, Helmut, vollkommen Recht: Die Module sind für den 
oben genannten Einsatzzweck definitiv nicht optimal geeignet.

Inzwischen weiß ich auch, daß die RFM12-Herstellerdoku wirklich 
grauenhaft ist. Lediglich der verbaute Chip ist einigermaßen 
dokumentiert (meine persönliche Bewertung: eher so lala bis schwach).

Wie dem auch sei: wo ich mich nun schon einmal in den RFM12 eingelesen 
hatte, da packte mich halt der Ehrgeiz, es mit dem RFM12 und den 
Funksteckdosen auch irgendwie "hinzubiegen".

Insgesamt hast Du aber Recht: ein zweites Mal würde ich mir eine solche 
"Kante" vielleicht doch nicht geben.

Viele Grüße

Igel1

von Andreas S. (igel1)


Lesenswert?

Heureka - es hat geklappt !!

Mit der Erkenntnis aus meinem vorletzten Posting (das mit der 
korrigierten Signalform im angehängten Bildchen), bin ich nun endlich 
zum Ziel gekommen:

Ich konnte soeben erfolgreich mit meinem Funk-Evaluationsboard von 
Pollin samt aufgelötetem RFM12 eine Funksteckdose vom Typ Elro AB440S 
schalten.

Ein dickes Dankeschön an alle Helfer - insbesondere an Holger für die 
moralische Unterstützung und die netten Code-Beigaben.

Selbstverständlich werde ich Euch alle nicht enttäuschen und meinen Code 
in den nächsten Tagen hier einstellen (er ist derzeit noch sehr 
"struppig" und ich muß morgen früh raus, da reicht's nicht mehr zum 
Beautyfy'en ...).

Viele Grüße

Igel1

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Andreas S. schrieb:
> Inzwischen weiß ich auch, daß die RFM12-Herstellerdoku wirklich
> grauenhaft ist.
Das ist schon wahr, wenn man sich nur die Doku von HopeRF anschaut. Die 
Waschzettel von SiliconLabs in Verbindung mit den HopeRF Blättern 
allerdings haben mir zumindest bei den RFM01/02 sehr geholfen.

> Ich konnte soeben erfolgreich mit meinem Funk-Evaluationsboard von
> Pollin samt aufgelötetem RFM12 eine Funksteckdose vom Typ Elro AB440S
> schalten.
Gratuliere!


Nur wäre es mir als Verschwendung vorgekommen, einen schönen 
Datentranceiver lediglich als 433MHz OOK Sender zu benutzen. Ich habe 
mir deswegen diese Dinger zugelegt und statt dem HS1527 einen ATTiny 
montiert:
http://www.pollin.de/shop/dt/NDY0OTQ0OTk-/Haustechnik/Installationsmaterial/Schalter_Steckdosen/Ersatz_Fernbedienung_fuer_Funk_Dimmer_Schalter.html

von Andreas S. (igel1)


Angehängte Dateien:

Lesenswert?

Liebe Forengemeinde,

ich löse hiermit mein gestriges Versprechen ein:
Ihr findet anbei meinen Code, der meine Elro AB440S Funksteckdose 
ansteuert. Er ist vermutlich für zahlreiche weitere, ähnliche 
Funksteckdosen geeignet.

Der Code ist eine reine Machbarkeitsstudie und zeigt lediglich das 
Prinzip auf: der Code ist daher jedes Mal  minimal anzupassen, sobald 
eine andere als die fest codierte Steuersequenz gesendet werden soll 
(z.B. Ausschalt-Sequenz statt Einschalt-Sequenz).

Möchte man alle Steckdosen A ... E einer Elro-Gruppe mit diesem Code 
ein- oder ausschalten und diesen Vorgang z.B. via I2C oder RS232 
steuern, so ist der Code entsprechend zu erweitern.

Selbstverständlich ist der Code nur für Versuchszwecke geeignet und 
entspricht ggf. nicht den gängigen/aktuellen Funkrichtlinien und 
Gesetzen – jeder, der den Code einsetzt, sollte sich vorab mit diesen 
Richtlinien/Gesetzen vertraut machen (inklusive ich selbst ...).

Viel Spaß beim Funken und Schalten

Igel1


1
/*********************************************************************************************************
2
*
3
*  Description:  
4
*          Very basic program that sends a control sequence to a remote control outlet
5
*          Sehr einfaches Programm, das eine Steuersequenz an eine Funksteckdose sendet
6
*
7
*          This program is just a feasibility study that demonstrates how to employ an RFM12
8
*          module to switch a remote control outlet using OOK modulation (On-/Off keying)
9
*
10
*          Das Programm ist lediglich eine Machbarkeitsstudie, die aufzeigt, wie man
11
*          RFM12-Module verwendet, um per OOK-Modulation (On-/Off keying)  Funksteck-
12
*          dosen zu schalten.
13
*
14
*  Hardware:    
15
*          AVR Funkevaluationsboard v1.20 from Pollin
16
*          Atmega8L using a 12MHz external crystal osc., 
17
*          RFM12 radio module  (433 MHz - version)
18
*
19
*  Software    
20
*          IDE:  AVR Studio 4.19 Build 716, 
21
*          using external gcc compiler from WinAVR
22
*
23
*  Readings:    
24
*          http://www.mikrocontroller.net/topic/298868    # program was first published here
25
*          http://avr.börke.de/Funksteckdosen.htm      # explains coding sequence schema
26
*          http://www.firefly-power.de/ARM/RFM12.html    # good init-sequence for rfm12
27
*
28
*          http://www.mikrocontroller.net/articles/RFM12   # RFM12 basics
29
*          http://www.mikrocontroller.net/topic/65984    # part of this code is based on benedikt's code
30
*
31
**********************************************************************************************************/

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.