Forum: Mikrocontroller und Digitale Elektronik Funkferbedienung decodieren


von Michael S. (jackson)


Lesenswert?

Hallo,

ich habe eine 433Mhz 24 Tasten FunkFB nebst Empfänger und möchte die 
gerne an meinen MC anschliessen.

Ich habe mal ein paar Datenlogs angehängt da ich noch nicht verstehe wie 
die Codierung bzw. das Protokoll funktioniert.

Es kann keine direkte Bitcodierung sein da die "Bits" sowohl bei H wie L 
immer min. 600µs oder 1200µs lang sind und es wenn man sie nach 600µs 
auflöst 74bit wären was warscheinlich etwas zu lang ist.

Da gibt es doch bestimmt irgendwie einen Trick wie man daraus "echte 
Bits" macht oder?

Gruß
Jackson

von Christopher G. (cbg)


Lesenswert?

Anhang fehlt.

von Michael S. (jackson)


Angehängte Dateien:

Lesenswert?

hab ich auch gerade gemerkt,...

von Christopher G. (cbg)


Lesenswert?

Länger high gefolgt von kurz low ist 1, kurz high gefolgt von länger low 
ist 0. Komme auf 25 Bit.
Am Anfang steht ein Byte mit 11100101 = 0xE5.
Danach kommt ein Byte mit 10011001 = 0x99.
Dann kommt ein Byte mit der Tastennummer.
Im ersten Bild steht 1 drin, im Zweiten 2, im Dritten 3, usw.
Am Schluss scheint ein Stop Bit zu sein, das ist immer 0.

Edit: Ab Taste5 stimmts nicht mehr. Bei Taste5.png steht 7 im 
Tastennummern Byte, bei Taste6.png steht 8 drin, bei Taste7.png steht 9 
drin und bei Taste8.png steht 10 drin. Richtigen Bilder hochgeladen?

von Michael S. (jackson)


Lesenswert?

Hallo,

ich denke das liegt an der Tastaturmatrix, die FB hat keine Zahlen 1-24 
drauf sondern Symbole für eine RGB LED Steuerung die müssen ja nicht 
zwingend der Reihe nach angeordnet sein.

Das sieht doch schon mal gar nicht schlecht aus, hast recht das passt.

Wie könnte man das am einfachsten mit einem MC auswerten?

Gruß
Jackosn

von Christopher G. (cbg)


Lesenswert?

Mit einem Timer den HIGH Pegel messen (Input Capture bietet sich an) und 
schaun ober der in einem gültigen Bereich für 1 bzw 0 ist. Daten in 
irgendeinen Puffer schreiben.
Den Timer so konfigurieren, dass er während der Messung eines Bits z.B. 
nach 1.5 facher Bitdauer (HIGH und LOW zusammen scheinen optisch für 1 
und 0 gleich lang zu sein) einen anderen Interrupt auslöst. So erkennst 
du das Ende des Signals.
Daten auf Gültigkeit Prüfen. 25 Bit sollten es sein. Erstes Byte muss 
gleich 0xE5 sein, zweites gleich 0x99 (sofern dies auch wirklich immer 
so ist). Das nächste Byte ist dann die Tastennummer. Dieser Wert muss 
auch auf Gültigkeit überprüft werden. Taste 255 wird es wohl nicht 
geben, wenn fortlaufend nummeriert wird. Am Schluss muss noch das 0 Bit 
sein.

Kann sein, dass eine Taste mehrmals hintereinander Übertragen wird oder 
sogar ständig, so lange man sie drückt. Sowas natürlich dort 
berücksichtigen, wo die Daten dann verwendet werden.

von Martin (Gast)


Lesenswert?

Wenn man das noch mal als Tabelle zusammenfaßt, werden im dritten Byte 
für die Tasten Binärwerte übertragen. In der letzte Spalte der Tabelle 
ist der Tastencode noch mal als Hex-Code hingeschrieben. Wie Christopher 
schon schrieb, sollte das für einen µC eine leicht Übung sein, anhand 
eines Timerstandes beim Pulsende den 0/1 Werte zu erkennen und mit ein 
paar Schiebeoperationen, die Datenworte zusammenzusetzen.
(1 - langer Puls mit kurzer Pause, 0 - kurzer Puls mit langer Pause)
1
          _Byte_1_ _Byte_2_ _Byte_3__ S  Tastencode hex 
2
Taste 1:  11100101 10011001 0000 0001 0  0x01
3
Taste 2:  11100101 10011001 0000 0010 0  0x02
4
Taste 3:  11100101 10011001 0000 0011 0  0x03
5
Taste 4:  11100101 10011001 0000 0100 0  0x04
6
Taste 5:  11100101 10011001 0000 0111 0  0x07
7
Taste 6:  11100101 10011001 0000 1000 0  0x08
8
Taste 7:  11100101 10011001 0000 1001 0  0x09
9
Taste 8:  11100101 10011001 0000 1010 0  0x0A
10
           0xE5     0x99

von Michael S. (jackson)


Lesenswert?

Hallo,

erstmal Danke für die Hilfe, das leuchtet wirklich ein und mit 2 Adress 
+ 1 Datenbyte kann man ja sehr einfach viele unterschiedliche Sender 
bauen...

Bevor ich den Bitstream das erste mal komplett gesehen habe, hatte ich 
gedacht das es sich um eine Serielle Übertragung handeln würde. Deshalb 
habe ich den Empfänger Ausgang auf den TX Eingang meines MC's (Fujitsu 
Fx16)gelegt. Bei der MC ist dieser Eingang wahlweise als TX oder INT 
(ext. Interrupt Input) wählbar. Damit müsste ich doch auch arbeiten 
können oder?

Datenblatt:
http://mcu.emea.fujitsu.com/document/appnotes/Public/16Bit/mcu-an-300203-e-16fx_ext_int/mcu-an-300203-e-v17-16fx_ext_int.pdf

Oder ist es doch viel einfacher mit der ICU (INPUT CAPTURE UNIT):
http://mcu.emea.fujitsu.com/document/appnotes/Public/16Bit/mcu-an-300204-e-16fx_iotmr/mcu-an-300204-e-v15-16fx_iotmr.pdf

Ihr müsst die vielleicht etwas dummen Fragen entschuldigen aber ich bin 
noch Anfänger was das MC Programmieren betrifft!

Gruß
Jackson

von gaast (Gast)


Lesenswert?

Christopher G. schrieb:
> Mit einem Timer den HIGH Pegel messen (Input Capture bietet sich an) und
> schaun ober der in einem gültigen Bereich für 1 bzw 0 ist. Daten in
> irgendeinen Puffer schreiben.

Alternativ eine halbe Bitdauer nach jeder steigenden Flanke den Zustand 
einlesen.

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.