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
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?
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
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.
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 |
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.