Bei diesem Projekt ging es aber (wie fast immer) um die Software, also das Programm im AVR. Alle drei Programme wurden in Assembler geschrieben und sind ansich recht einfach.
- Die steigende Flanke am Impulseingang schaltet den nächsten Kanalimpuls ein.
- Dabei erfolgt eine Überprüfung auf Gültigkeit der Kanalimpulsbreite.
- Bei ungültigen Impulsbreiten wird der Rest des Impulstelegramms bis zur nächsten Sync-Lücke ignoriert.
- Beträgt die Pause zwischen zwei Eingangsimpulsen mehr als 2,55ms, dann wird das als Synchronlücke interpretiert, worauf der nächste Impuls als Beginn Kanal 1 gewertet wird.
- Erst nach der ersten Sync.-Lücke (nach dem Einschalten) werden Kanalimpulse generiert.
- Je nach Sender werden bis zu 8 Kanalimpulse decodiert, bei der Tiny15-Version maximal 4 Kanäle.
- Treffen etwa 30...40ms lang keine Impulse vom Empfänger ein, dann wird per Watchdog ein Reset ausgelöst, worauf keine Kanalimpulse mehr erzeugt werden, bis mindestens 2 Impulse und eine Sync.-Lücke empfangen werden.
- Die Steuerung der Kanalimpulse erfolgt in der ISR (Interrupt-Service-Routine), die vom Empfangsimpuls (steigende Flanke) ausgelöst wird. Daher sind die Impulsbreiten der erzeugten Kanalimpulse recht exakt.
- Während der Wartezeit auf die nächste Impulsflanke wird der Controller in den Sleep-Mode geschickt.
Assembler-Quelltexte:
Die 8-Kanal-Version benötigt einen Quarz mit einer Frequenz von 6,4MHz. Dies ist für die korrekte Funktion der Impulsbreitenfehlererkennung notwendig.
Bei der 4-Kanal-Version mit Tiny15 sind einige Besonderheiten zu beachten.
|