433Mhz Funksignal von FB decodieren

OP #3710897
Lesenswert?

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?
Angehängte Dateien:
OP #3711017
Lesenswert?

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);


}
#3711078
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren