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
Oh man das tut mir leid. Jetzt habe ich die Datei 2x angehängt weil nach einem klick auf Vorschau die erste nichtmehr eingetragen schien und jetzt ist das auchnoch 2x die alte Version. Tut mir leid: Hier die neue
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.
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.