Demodulation eines PWM modulierten digitalem Signals mithilfe des ATTiny45

Gast #3151490
Lesenswert?

Hallo,

ich versuche zur Zeit ein PWM moduliertes Digitales Signal mithilfe 
eines ATTiny45 zu demodulieren. Das Signal kommt von einer 
Wetterstation. Das ganze Reverse Engineering habe ich schon betrieben. 
Das Signal hat 9 Synchronisationsbits am Anfang (logisch 1). Ein kurzer 
Puls (25 Samples) ist eine 1, ein langer Puls (68 Samples) ist eine 0. 
Die Pause zwischen den hohen Planken beträgt immer 40 Samples. Ein 
komplettes Datenpaket hat 88Bits.
Da ich das Signal mithilfe meiner Soundkarte und Audacity abgetastet 
habe weiss ich dass mit 44100 Samples/s abgetastet wird. Soweit die 
Theorie.

Jetzt wollte ich das Ganze bitweise auslesen und an den PC übertragen, 
nur bekomme ich nicht die Daten die ich will.
Zum auslesen habe ich mir überlegt dass ich einen Timer alle 23µs 
überlaufen lasse. Dabei wird eine Variable um 1 erhöht. Bei einem PCINT 
an meinem Empfänger PIN lese ich dann diese Variable aus und ( mit einer 
Toleranz von 20 ) schreibe das entsprechende Signal in das entsprechende 
Bit.

Im Anhang noch der Code.

Jetzt meine Frage: Ist mein vorgehen soweit korrekt oder geht das auch 
noch besser? Bzw. wo ist der logische/technische Fehler in meiner 
Vorgehensweise?

PS.: Die "Debug LED" blinkt munter vor sich hin. Wenn ich auf meinem 
Autoschlüssel drücke kommt auch etwas am UART raus, jedoch nicht solange 
nur die Wetterstation funkt.

Achja.: Die Wetterstation sendet alle 48 Sekunden
Angehängte Dateien:
Gast #3151701
Lesenswert?

Also ich hatte jetzt definitiv zuviel im ISR behandelt.
Ich habe jetzt die ganze Timingbehandlung aus dem ISR rausgezogen, 
arbeite jetzt dafür mit 88byte Buffern.

Falls es jemanden interessiert, meine PCINT_vect sieht jetzt 
folgendermassen aus:
1
  timedata[j++] = i;
2
  if( j > 87 )
3
  {
4
    j=0;
5
    memcpy( buffer, timedata, sizeof(char)*88 );
6
    needsending = true;
7
  }
8
  i=0;

Damit bekomme ich jetzt bereits sehr stabile Ergebnisse.

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