Für die Dekodierung des Frames gibt es die verschiedensten Verfahren,
abhängig von der verwendeten Hardware. Hier wurde der folgende Weg gewählt:
Über den Timer wird alle 0.25ms in einen Interrupt hineingesprungen und dort
ein Zähler inkrementiert.
Sobald das Signal wechselt, wird der Zähler in einer Funktion ausgewertet (und rückgesetzt).
Erwartungsgemäß liegt der Zähler bei großem Abstand um den Wert '7x 0.25ms und bei kurzem Abstand um 3x 0.25ms.
Die Funktion gibt '1' zurück, wenn der Zähler größer 5 ist, ansonsten '0'.
- 3x 0.25ms ≤ 5 → 0
- 7x 0.25ms > 5 → 1
Die einzelnen Bits werden nun gesammelt bis das Signal sich für mehr als 2ms nicht ändert.
Am Ende sollten maximal 28 Bit an Abschnittslängen entstanden sein, sodass hier eine einzige 32Bit Variable als Speicher ausreicht.
|