Guten Morgen zusammen, ich habe mit einem 433Mhz Empfänger am Mikrofoneingang das angehängte Signal aufgenommen, es stammt von einer FB für Funksteckdosen. In einem anderen Thread wurde ich schon darauf hingewiesen das es sich dabei um Manchester-Codierung handelt. Mein Ziel ist es, später mit einem Arduino sowohl die Signale zu senden, also Steckdosen zu steuern, als auch Signale zu empfangen um im Ptrogramm darauf zu reagieren. So nun zum ersten Schritt, ich möchte das Signal erstmal von hand decodieren. Komme aber nicht auf die Bitabfolge. Nach Manchester komme ich auf folgendes: "1101001001101101101101101101101" - richtig? Funktioniert aber nicht. oder ist das erste Signal evt ein synchronisationsbit oder sowas (weil da ja so eine Art Überschwinger drinnen ist)? Des weiteren möchte ich später auch Signale von der FB empfangen und im Programm dann reagieren, weiß aber ehrlich gesagt nicht wie ein solches Programm aussieht um Manchester zu dekodieren. (hab schon libs für arduino ausprobiert, ohne erfolg) weiß jemand zufällig etwas oder hatte schon ähnliche Probleme?
:
Bearbeitet durch User
es tut mir sehr leid, ich glaub ich habs jetz :D Beitrag von 2012(von einem Gase-Matze).. mit nur "0" und "1" kommt man nicht aus.. man braucht auch noch was zum unterscheiden von lang high und lang low.. hier mal sein code mit dem er es gemacht hat. Senden sollte also nun klappen, wie kann ich denn die empfangenen Signale verarbeiten? also ich bekomm das signal ja auf mein Eingang und muss dann irgendwie ein byte damit beschreiben.. hab da schon ne Idee sorry wenn ich hier das board vollmüll.. #define RF_DATA_PIN 8 #define CLOCK 875 void rf_send(char command[]) { int i; // send command (on/off) for(i=0;i<66;i++) { if(command[i] == '1') { digitalWrite(RF_DATA_PIN, HIGH); delayMicroseconds(CLOCK); digitalWrite(RF_DATA_PIN, LOW); delayMicroseconds(CLOCK); } if(command[i] == '0') { digitalWrite(RF_DATA_PIN, LOW); delayMicroseconds(CLOCK); digitalWrite(RF_DATA_PIN, HIGH); delayMicroseconds(CLOCK); } if(command[i] == 'h') { digitalWrite(RF_DATA_PIN, LOW); delayMicroseconds(2*CLOCK); } if(command[i] == 'l') { digitalWrite(RF_DATA_PIN, HIGH); delayMicroseconds(2*CLOCK); } Serial.println(command[i]); } } void setup() { pinMode(RF_DATA_PIN, OUTPUT); } void loop(){ rf_send("lllll10001011000000lll101100010lll101110101lllhhhhhhhhhhhhhhhhh hhh"); rf_send("lllll10001011000000lll101100010lll101110101lllhhhhhhhhhhhhhhhhh hhh"); delay(30000); }
Mathias K. schrieb: > Senden sollte also nun klappen, wie kann ich denn die empfangenen > Signale verarbeiten? also ich bekomm das signal ja auf mein Eingang und > muss dann irgendwie ein byte damit beschreiben.. hab da schon ne Idee > sorry wenn ich hier das board vollmüll.. > > > #define RF_DATA_PIN 8 > #define CLOCK 875 Wenn ich das Signal in Deinem oben gezeigten Bild "per Auge" auswerte, komme ich auf ein Clock von ca. 700 Mikrosekunden. Die langen Zeiten sehen für mich ungefähr doppelt so lang aus wie die kurzen, und zwischen 1.860s und 1.8705s liegen demzufolge 10,5 Millisekunden = 10500 Mikrosekunden bei 5 langen und 5 kurzen Impulsen = 15*Clock. 10500/15 = 700 µs Zur Auswertung würde ich eine Interrupt-Behandlungsroutine schreiben, die auf Flankenwechsel (CHANGE) am Pin reagiert. Und innerhalb der ISR dann die HIGH- bzw. LOW-Zeiten ermitteln, die dann in Bits umgesetzt werden, z.B. nach dem Schema: Dauer zwischen den Flankenwechseln 700 +/-200 µs ==> 0-Bit Dauer zwischen den Flankenwechseln 1400 +/-200 µs ==> 1-Bit alle anderen Dauern ==> Error
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.