Eigentlich betreibe ich keinen Modellbau. Ich wurde aber gebeten, einige Komponenten für Modellbau-Elektronik zu entwickeln bzw. die Programme für die dabei verwendeten AVR-Mikrocontroller zu schreiben. Eines dieser Projekte ist der:

Modellbau-Impulsdecoder

Dieser Decoder erzeugt aus dem vom RC-Empfänger empfangenen Impulstelegramm die einzelnen Kanalimpulse. Es wurden Varianten mit 4 Kanälen (mit AT-Tiny15) und max. 8 Kanälen (mit AT90S1200 sowie mit AT90S2313) entwickelt. Es wird davon ausgegangen, dass das vom Empfänger ausgegebene Signal TTL-Pegel entspricht, es ist in der Hardware der Testplatinen also keine Pegelanpassung vorgesehen.
Die Test-Hardware ist recht einfach. Das empfangene Impulstelegramm wird an den Interrupt-Eingang des Mikrocontrollers gelegt, wobei ein Schutzwiderstand den Eingang vor Überspannung und Falschpolung schützt. Die übrigen Pins des AVR werden als Impulsausgänge genutzt, beim 1200/2313 allerdings nur die 8 Pins des Ports B. Da 1200 und 2313 identisches Pinout haben, wurde für beide Versionen die gleiche Testplatine genutzt. Die Versionen mit 1200 und 2313 unterstützen maximal 8 Kanäle. An einem 7-Kanal-Sender können natürlich nur 7 Kanäle decodiert werden. Die Testplatine wurde gefräse und oberflächenbestückt. Das eine Bild zeigt die Leiterzüge, das andere die Fräslinien.

Für kleinere Modelle mit weniger Funktionsumfang wurde die Mini-Version mit AT-Tiny15 entwickelt. Diese generiert nur 4 Kanäle, auch wenn der Sender mehr als 4 Kanäle unterstützt. Die Bilder zeigen Schaltplan, Leiterbild und Fräslinien der Test-Platine. Das Foto zeigt beide Testplatinen.

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.


...HanneS...