Kleine Projekte: Multi-Modul für Scale-Modelle


Kleine Projekte: Übersicht
Kleine Projekte: Akku-Alarm für Modell-Helikopter
Kleine Projekte: Beleuchtung für Modell-Helikopter
Kleine Projekte: Servotester
Kleine Projekte: Multi-Modul für Scale-Modelle


Downloads und Links

Schaltplan multimodul-sch.pdf
Konfigurationsanleitung in kompakter Tabellenform multimodul-konf.pdf
Stückliste mit Empfehlungen zur Bauteilbestellung multimodul-stkl.htm
Software für den ATmega88PA mit komplettem Quelltext in Assembler multimodul-atmega88-v102.zip vom 03.01.2011
Platinenlayout (Sprint-Layout 5.0 und PDF) multimodul-layout.zip vom 22.06.2010

Inhaltsverzeichnis

Beschreibung Allgemeine Informationen über das Multi-Modul
Schaltung Beschreibung der Schaltung
Hardware Bilder und Hinweise zum Aufbau des Moduls
Software Beschreibung der Software
Inbetriebnahme Inbetriebnahme des Multi-Moduls
Bedienung und Konfiguration Bedienungs- und Konfigurationsanleitung für das Multi-Modul
Sonstiges Weitere Informationen

Beschreibung

Das Ziel bei der Entwicklung dieses Moduls war, folgende 3 elektronische Zusatzfunktionen eines Scale-Modell-Helikopters der 450er-Klasse zu realisieren:

Das Ergebnis ist dieses Multi-Modul, welches mit einem Mikrocontroller ATmega88PA aufgebaut wurde. Das Multi-Modul ermöglicht die Steuerung einer weitgehend vorbildgetreuen Beleuchtung, bietet eine Verzögerung zum langsamen Ein- und Ausfahren eines Einziehfahrwerks und eine konfigurierbare Überwachung eines 3-Zellen-LiPo-Akkus. Einige Funktionen wurden miteinander verknüpft, um den Piloten weitgehend zu entlasten. Die folgende Übersicht zeigt alle Funktionen des Multi-Moduls:

Bei der Entwicklung des Moduls wurde großer Wert auf eine möglichst einfache Inbetriebnahme und Konfiguration gelegt. Es sind außer der einmaligen Programmierung des Mikrocontrollers keine Voreinstellungen oder Abgleich-Arbeiten erforderlich. Alle Einstellungen können mit einem Taster direkt am Modul vorgenommen werden.

Schaltung

Die Schaltung ist trotz ihrer komplexen Funktion relativ einfach aufgebaut. Das zentrale Element ist hier der Mikrocontroller ATmega88PA (IC3), welcher hier als SMD-Version zum Einsatz kommt, damit das Modul möglichst klein und leicht aufgebaut werden kann. Die Kondensatoren C4-C6 sollen Störungen auf der Betriebsspannung reduzieren und müssen möglichst nah am Controller platziert werden. Der Schaltung wird mit einer Spannung von 5V betrieben, die entweder direkt vom Empfänger oder über einen Spannungsregler aus dem Antriebs-Akku bereitgestellt werden kann. Welche der beiden Varianten am besten geeignet ist, hängt von mehreren Faktoren ab:

Bei Variante 1 sollte man folgendes beachten: IC1 ist so bemessen, dass ohne zusätzliche Kühlung ein Dauerbetrieb der Beleuchtung möglich ist und außerdem ein kleines Fahrwerkservo gelegentlich bewegt werden kann. Bei größeren Belastungen ist eine Kühlung erforderlich oder man entscheidet sich für Variante 2.

Die Servokabel an J3 und J5 führen die vom Empfänger kommenden PPM-Impulse für die Licht- und Fahrwerksteuerung direkt zum Controller IC3, welcher die Impulslängen ständig misst und auswertet. J3 ist für die Lichtsteuerung zuständig und bei Erreichen einer bestimmten Impulslänge werden vom Controller die Ausgänge LED1-LED7 aktiviert. An diese Ausgänge kann jeweils eine LED direkt angeschlossen werden. Die Funktion der 7 LEDs kann dabei individuell konfiguriert werden. Dazu stehen derzeit 17 vorprogrammierte Funktionen wie Dauerlicht, 9 Blitzlicht-Varianten, 3 Blinklichter und 4 Beacon-Programme zur Verfügung. Eine vollständige Übersicht ist im Abschnitt Konfiguration zu finden. Die Vorwiderstände R3-R5, R8-R10 und R12 sind so bemessen, dass sich je nach LED-Farbe ein Strom zwischen 8mA und 15mA ergibt. Das sorgt bei Verwendung ultraheller LEDs für eine ausreichende Helligkeit.

Weiterhin kann über den Eingang J3 bei Erreichen einer bestimmten Impulslänge zusätzlich das Landelicht eingeschaltet werden. Hier sind 4 parallel geschaltete ultrahelle weiße LEDs vorgesehen, welche über eine Treiberstufe geschaltet werden, die aus R13, T1 und R11 besteht. R11 ist so dimensioniert, dass sich bei 4 weißen LEDs ein Strom von ungefähr 75mA ergibt. Das Landelicht wird übrigens mit PWM gesteuert - damit konnte ein weiches Schalten ähnlich einer Glühlampe realisiert werden. Auch die Ausgänge LED6 und LED7 können mit PWM gesteuert werden, was für bestimmte Effekte genutzt werden kann, mehr dazu im Abschnitt Inbetriebnahme.

An J5 werden die PPM-Impulse für die Fahrwerksteuerung empfangen. Diese werden beim Einschalten des Moduls zunächst am Servoausgang J8 direkt wieder ausgegeben. Später wird jede Änderung der Impulslänge an J5 verzögert an J8 ausgegeben, wobei die Verzögerungszeit in 4 Stufen zwischen 2,5s und 5,0s eingestellt werden kann. C7 hat hier die Aufgabe, vom Servo ausgehende Störungen zu mindern. Wird die Fahrwerksteuerung nicht benötigt, dann können J5 und J8 offen bleiben. Wenn keine PPM-Impulse an J5 anliegen, dann werden auch keine Impulse an J8 ausgegeben.

Zur Überwachung des Antriebs-Akkus wird die an J1 anliegende Akku-Spannung über R1 und R6 auf einen Wert unter 2,6V gebracht und dem Analog-Eingang PC0 von IC3 zugeführt. C3 soll die Spannung etwas glätten und Störungen reduzieren. Zwar verfügen die Mikrocontroller der ATmega-Reihe über eine interne Referenzspannungsquelle, diese ist aber mit einer Toleranz von 10% sehr ungenau. Aus diesem Grund wurde die Referenz IC2 ergänzt, die über den Vorwiderstand R7 gespeist wird und eine Spannung von 2,495V mit einer Genauigkeit von 1% bereitstellt. So kann die Schwelle für den Akku-Alarm ohne Abgleich sehr genau konfiguriert werden.

An J6 kann ein Akku-Alarm-Signal für Erweiterungen abgegriffen werden. Der Ausgang führt im Ruhezustand Low-Pegel und wird bei Unterschreitung der eingestellten Alarmschwelle H-aktiv. Weiterhin wird dieser Ausgang kurzzeitig beim Einschalten des Moduls aktiviert.

S1 ist ein einfacher Taster und über diesen können alle Funktionen des Multi-Moduls konfiguriert werden. Es wird hier zwischen einem kurzen Tastendruck (<500ms) und einem langen Tastendruck (>500ms) unterschieden, um eine bestimmte Einstellung anzuwählen oder eine Änderung durchzuführen. Dazu später mehr im Abschnitt Konfiguration.

Zum Schluss möchte ich noch die Bauteile J7 und R2 erwähnen. Diese stellen einen ISP-Anschluss zur Verfügung, über den die Programmierung das Mikrocontrollers IC3 vorgenommen wird.

Diese Stückliste enthält alle Bauteile für das Multi-Modul und einige Tipps für die Beschaffung.

Hardware

Für das Multi-Modul gibt es ein Platinenlayout, welches von Dietmar Heyer entwickelt und bereitgestellt wurde. Dieses Paket enthält das Layout in den Formaten Sprint-Layout v5.0 und PDF.

Dieses Bild zeigt die fertige Schaltung, welche auf der Basis des eben erwähnten Platinenlayouts mit den Maßen 48mm x 28mm aufgebaut wurde. Hier ist die Leiterseite zu sehen, auf der alle SMD-Bauteile untergebracht sind. Die Bestückung ist etwas knifflig, insbesondere dann, wenn die Augen nicht mehr so gut sind :-) Aber mit viel Licht, einer Lupe und einer ruhigen Hand ist auch das zu schaffen.

So sieht die andere Seite der Platine aus. Hier sind einige Brücken und die wenigen bedrahteten Bauteile untergebracht: IC1, IC2, C5, S1 sowie die Steckverbinder J7 und J4. Letztere bestehen aus trennbaren einreihigen Buchsenleisten, die man auch als Stecker verwenden kann. Somit hat man ein kompaktes und leichtes Stecksystem für die LEDs. Die noch freien Löcher dienen zum Anschluss des Akkus (J1), der Servokabel (J3 und J5) und eines Servosteckers (J8). Natürlich darf die Brücke an J2 nicht vergessen werden, ohne diese bekommt die Schaltung keinen Strom.

Hier wurde die Platine in ein Airwolf-Modell auf der Basis eines T-Rex 450 eingebaut. Für die Leitungen zu den LEDs habe ich 0,2mm Kupferlackdraht verwendet. Dieser ist sehr leicht und lässt sich gut im Rumpf des Modells verlegen. Die einzige Ausnahme ist das Kabel zum Landelicht, hier kommt dickeres Litzen-Kabel zum Einsatz.

Vor dem Einbau der LEDs wurden deren Anschlüsse auf ca. 5mm gekürzt und zwei ausreichend lange Drahtstücke angelötet. Durch Festhalten der Drahtenden und Drehen der LED wird das Drahtpaar anschließend verdrillt. Danach können die LEDs in vorbereitete Löcher im Rumpf gesteckt und mit Zweikomponentenkleber befestigt werden. Es empfiehlt sich, die Drähte im Rumpf zu fixieren, dafür eignet sich Sekundenkleber recht gut. Zum Schluss werden die Drahtenden auf die richtige Länge gebracht und eine 2-polige Buchsenleiste angelötet.

In diesem Video (DivX 8,6MB) kann man das Multi-Modul in Aktion sehen. Es zeigt einen kurzen Indoor-Flug meines T-Rex 450 als Airwolf mit Beleuchtung und Einziehfahrwerk.

An dieser Stelle noch einige Informationen zu den verwendeten LEDs: Ich habe verschiedene Typen ausprobiert und festgestellt, dass es für die Positionslichter und Beacons keine perfekten LEDs gibt. Ideal wäre eine große Helligkeit, ein Gehäuse in der entsprechenden Farbe und ein großer Abstrahlwinkel - aber alle Eigenschaften zusammen scheint es nicht zu geben. Aber zumindest auf den Abstrahlwinkel kann man ein wenig Einfluss nehmen: Ich habe ultrahelle LEDs verwendet und den vorderen Teil, der später aus dem Rumpf herausragt, mit feinem Schleifpapier bearbeitet. Durch die raue Oberfläche verringert sich zwar die Helligkeit, aber das Licht wird mehr gestreut und ist besser sichtbar. Hier sollte man mehrere LED-Exemplare beschaffen und ein wenig experimentieren.

Für die Landelichter und trifft das allerdings nicht zu, hier kann man ruhig die hellsten LEDs nehmen und der kleine Abstrahlwinkel ergibt einen perfekten Scheinwerfer.

Software

Dieser Abschnitt beschreibt die in Assembler geschriebene Software des Multi-Moduls und ist für diejenigen interessant, die mit Mikrocontroller-Programmierung vertraut sind. Für den Nachbau und die Konfiguration des Moduls sind diese Informationen nicht unbedingt erforderlich, so dass man diesen Abschnitt auch überspringen kann.

Der Mikrocontroller des Multi-Moduls läuft mit einem Takt von 8MHz, der von einem internen Oszillator erzeugt wird. Dieser Oszillator wird vom Hersteller kalibriert und mit einer Genauigkeit von 10% ausgeliefert. Das ist nicht wirklich sehr genau, reicht aber für diese Anwendung vollkommen aus. Eine Abweichung vom Solltakt führt allerdings dazu, dass sich die Schaltschwellen für das Einschalten der Beleuchtung etwas verschieben. Die 3 Stufen (Aus-Ein-Landelicht) liegen allerdings sehr weit auseinander, so dass es hier nicht stört. Auch die Position des Fahrwerk-Kanals verschiebt sich, allerdings wird das durch einen Software-Kniff kompensiert, dazu später mehr. Und natürlich wirkt sich das auch auf die Blink- und Blitzzeiten der LEDs aus, was aber in der Praxis nicht auffällt. Somit konnte auf einen Quarz verzichtet werden und es ist trotzdem kein Abgleich erforderlich.

Beim Einschalten des Multi-Moduls werden zunächst alle I/O-Ports und alle 3 Timer initialisiert, wobei der 16-Bit-Timer1 mit einem Takt von 1MHz betrieben wird und bei 20000 (eigentlich bei 19999) automatisch zurückgesetzt wird. Daraus ergibt sich eine Zählung alle 1µs und ein Zählbereich von 20ms. Dieser Zähler bildet die zentrale Zeitbasis für alle Funktionen des Multi-Moduls. Hier werden die PPM-Impulslängen der beiden Kanaleingänge ermittelt, der Servo-Impuls für das Fahrwerk-Servo generiert und die Überläufe alle 20ms dienen als abgeleitete Zeitbasis für die LED-Programme und weitere Zähler. Die beiden 8-Bit-Timer (0 und 2) werden für die PWM-Steuerung der LED-Ausgänge 6-8 verwendet und ebenfalls mit einer Taktfrequenz von 1MHz betrieben. Bei dem hier verwendeten Fast-PWM-Modus mit 256 Stufen ergibt sich eine Schaltfrequenz von 3906Hz für die LEDs.

Weiterhin werden beim Start noch die gespeicherten Einstellungen aus dem EEPROM gelesen und in das RAM kopiert, der Analog-Digital-Wandler zur Messung der Akku-Spannung eingestellt, die externe Referenzspannungsquelle aktiviert sowie 3 Interrupts definiert, die folgendes tun:

Nun beginnt das Hauptprogramm, welches in einer endlosen Schleife läuft, mit der Arbeit. Es werden ständig die beiden Flag-Bits der externen Interrupts geprüft und falls ein solches gesetzt ist, aus den beiden gespeicherten Zählerständen die PPM-Impulslänge ermittelt. Befindet sich die Impulslänge in einem Bereich zwischen 0,75ms und 2,25ms, dann wird der Wert in einen Pufferspeicher geschrieben, in dem immer die letzten 4 gültigen Werte aufbewahrt werden. Aus diesen 4 Werten wird dann der Mittelwert gebildet und zur weiteren Verarbeitung gespeichert. Diese Prozedur sorgt für eine kontinuierliche Rundung der Werte und dämpft "Ausreißer", die bei einfachen PPM-Fernsteuersystemen immer mal auftreten können. Das führt allerdings bei gewollten Änderungen des Wertes zu einer kleinen Verzögerung. So spricht die Beleuchtung mit maximal 100ms verzögert an und beim Fahrwerk will man ohnehin eine Verzögerung haben - es wirkt sich also nicht störend aus.

Liegt ein erster gültiger Mittelwert für den Fahrwerkskanal vor, dann wird der Servo-Ausgang aktiviert und der Mittelwert direkt wieder ausgegeben. Hierfür wird die PWM-Ausgabe von Timer1 Kanal B eingeschaltet und der Mittelwert direkt als PWM-Wert verwendet. An dieser Stelle kann man erkennen, weshalb eine Takt-Abweichung des Controllers keinen Einfluss auf die Stellung des Fahrwerk-Servos hat: Es wird die gleiche Zeitbasis für das Einlesen und Ausgeben der PPM-Impulse verwendet. Somit gleichen sich Differenzen automatisch wieder aus. Der Servo-Ausgang arbeitet übrigens (unabhängig vom Impulsabstand des Senders) immer mit einem festen Impulsabstand von 20ms.

Alle weiteren Programmteile werden nur alle 20ms ausgeführt. Dazu gehört die Abfrage des Tasters und wenn hier eine Änderung erkannt wird, werden entsprechende Flags gesetzt, die im weiteren Programm ausgewertet werden. Der Taster wird übrigens erst dann als gedrückt gewertet, wenn er mindestens in 2 aufeinander folgenden 20ms-Zyklen gedrückt war. Damit werden Prellungen unterdrückt. Gleiches gilt auch für das Loslassen des Tasters. Beim Drücken des Tasters passiert noch mehr: Es wird ein Zähler gestartet, der bei jeder weiteren Abfrage geprüft wird und erreicht dieser einen bestimmten Stand, was nach genau 500ms passiert, dann wird dies als Langer Tastendruck erkannt. Wird der Taster vorher losgelassen, dann wird ein Kurzer Tastendruck registriert. Damit wird später die Konfiguration des Multi-Moduls realisiert.

Der nächste Programmteil liest den aktuellen Wert des Analog-Digital-Wandlers aus und legt ihn in einen Pufferspeicher, in dem (ebenso wie bei den Kanaleingängen) die letzten 4 Werte abgelegt sind. Auch hier wird ein Mittelwert gebildet, um kurzzeitige Spannungseinbrüche zu filtern. Dieser Mittelwert wird mit dem konfigurierten Alarm-Schwellwert verglichen und bei Unterschreitung ein Flag zur späteren Auswertung sowie der Externe Alarmausgang entsprechend gesetzt.

Anschließend folgt die Servo-Verzögerung, die folgendermaßen funktioniert: Es wird der Mittelwert des Fahrwerkkanals mit der aktuellen Servo-Position vergleichen und sollte hier eine Abweichung von mindestens 3µs bestehen (entspricht 0,3% bezogen auf den vollen Servo-Weg), dann wird entsprechend der konfigurierten Verzögerungsstufe ein Schrittwert ermittelt. Je nach Bewegungsrichtung wird die aktuelle Servo-Position um diesen Wert erhöht oder vermindert. Da dies nur einmal alle 20ms passiert, nähert sich das Servo langsam und gleichmäßig dem Zielwert. Die 3µs Toleranz sind notwendig, weil das Fahrwerk-Servo sonst ständig Mikroschritte ausführt. So wird unnötiger Stress für das Servo vermieden und außerdem der Stromverbrauch reduziert.
Es gibt in diesem Programmteil noch einen Sonderfall: Ist der Akku-Alarm aktiv und das automatische Ausfahren des Fahrwerks eingeschaltet, dann wird nach dem gleichen Prinzip das Servo an die gespeicherte Ausfahr-Position gesteuert und dann gesperrt - bis der Strom abgeschaltet oder die Sperre mit einem langen Tastendruck wieder gelöst wird.

Weiter geht es mit der Steuerung der Beleuchtung. Zunächst wird der aktuelle PPM-Mittelwert des Beleuchtungskanals geprüft und der Licht-Status entsprechend gesetzt. Ist der Mittelwert größer als 1,35ms, dann wird die Beleuchtung mit den LEDs 1-7 eingeschaltet. Ist der Wert größer als 1,65ms, dann wird zusätzlich das Landelicht eingeschaltet. Das Landelicht wird auch eingeschaltet, wenn nur die normale Beleuchtung (LEDs 1-7) aktiv ist und sich gleichzeitig das Fahrwerk in der Ausfahr-Position befindet. Vor der eigentlichen Beleuchtungssteuerung erfolgt noch ein Test, ob der Akku-Alarm aktiv und die Signalisierung über die Beleuchtung eingeschaltet ist. In diesem Fall blinken die LEDs an den Ausgängen 1-7 mit einer Frequenz von 3,1Hz (160ms ein, 160ms aus) und die normale Beleuchtungssteuerung wird umgangen.

Im Normalfall werden die LED-Ausgänge 1-7 jedoch über eine recht umfangreiche Programmsteuerung bedient. Dabei kann für jede LED eins von 17 vordefinierten Licht-Programmen zugeordnet werden. Das kann ein Dauerlicht, ein Blitzlicht, ein Blinklicht oder auch ein Beacon sein. Für die Erstellung der Licht-Programme habe ich eine Art Programmiersprache entwickelt, die aus 5 Steuer-Kommandos und jeweils einem Parameter besteht. Die Beleuchtungssteuerung macht nun folgendes: Es wird für jede LED das zugeordnete Programm ermittelt, das erste Kommando geholt und ausgeführt. Mit dem Parameter wird ein Zähler geladen, der in den folgenden Durchläufen (alle 20ms) vermindert und geprüft wird. Nach Ablauf dieses Zählers wird das nächste Kommando geholt und wiederum abgearbeitet. Den Abschluss jedes Programms bildet ein so genanntes Ende-Kommando und dieses veranlasst die Programmsteuerung, wieder das erste Kommando zu holen und den Zyklus von vorn zu beginnen - und das für jede LED getrennt. Im Abschnitt Sonstiges wird auf diese Technik noch etwas genauer eingegangen und beschrieben, wie man Licht-Programme modifizieren oder eigene Licht-Programme erstellen kann.

Anschließend folgt die Steuerung des Landelichts. Auch hier wird zunächst geprüft, ob der Akku-Alarm aktiv ist und die Signalisierung über das Landelicht erfolgen soll. In diesem Fall blinkt das Landelicht mit einer Frequenz von 3,1Hz (160ms ein, 160ms aus) und die normale Landelichtsteuerung wird umgangen. Im Normalfall wird das Landelicht jedoch abhängig vom PPM-Mittelwert des Beleuchtungskanals entweder ein- oder ausgeschaltet. Um das Landelicht etwas effektvoller erscheinen zu lassen, wird es per PWM weich ein- und ausgeschaltet (Glühlampeneffekt).

Der restliche Programmteil ist für die Konfiguration des Multi-Moduls zuständig. Dieser wird aktiv, sobald der Taster einmal kurz gedrückt wird. Es werden dann verschiedene Zähler gesetzt, die den Ablauf für die Datenausgabe (Anzeige der aktuellen Einstellung über die LEDs) genau steuern. Im weiteren Programmverlauf wird auch der Tastendruck ausgewertet. Ein kurzer Tastendruck setzt alle Zähler für die nächste Einstellung, ein langer Tastendruck ändert die Einstellung auf den nächsten Wert, speichert diesen im EEPROM und setzt wiederum einige Zähler, so dass die neue Einstellung sofort angezeigt wird. Einer der Zähler überwacht die Zeit und wenn innerhalb von 2min keine Tasteneingabe mehr erfolgt, wird der Konfigurations-Modus wieder verlassen.

Den Abschluss des Programms bilden 2 Unterprogramme für den Zugriff auf das EEPROM (Lesen und Schreiben eines Bytes), sowie die 17 Licht-Programme und eine dazugehörige Adresstabelle.

Inbetriebnahme

Vor der Inbetriebnahme des Multi-Moduls sollte folgendes beachtet werden: Die Ausgänge LED1-LED7 sind technisch gesehen vollkommen identisch und können mit beliebigen Funktionen belegt werden. Die Ausgänge LED6 und LED7 haben jedoch noch eine Besonderheit: Diese lassen sich über PWM langsam ein- und ausblenden, weshalb sie am besten für Beacon-Funktionen geeignet sind (langsam aufleuchtende und wieder verlöschende Rot-Lichter). Auch die Ausgänge LED1 und LED2 besitzen eine besondere Funktion: Die dort angeschlossenen LEDs leuchten beim Einschalten des Moduls kurz auf und zeigen so die Betriebsbereitschaft des Moduls an. Außerdem werden sie bei der Konfiguration benötigt und so bietet es sich an, diese Ausgänge für das rechte und linke Positionslicht (grüne und rote LED) zu verwenden.

Hat man sich für die optimale Anschlussbelegung entschieden, empfehle ich zunächst einen Test der Positionslichter (Grün, Rot und Weiß) und gegebenenfalls der Beacons ohne das Multi-Modul. Diese Aktion dient dazu, die Helligkeiten zu prüfen und gegebenenfalls anzupassen. Dazu wird eine 5V-Spannungsquelle und eine kleine Auswahl an Widerständen (220Ω, 470Ω, 1k und 1,5k) benötigt. Die LEDs werden zunächst mit den vorgesehenen 220Ω-Widerständen an 5V angeschlossen. Bei zu hellen LEDs sollte mit größeren Vorwiderständen aus unserer Auswahl experimentiert werden, bis ein möglichst gleiches Helligkeitsniveau erreicht ist. Bei Bedarf ist es auch möglich, kleinere Werte als 220Ω zu verwenden, dann sollte man aber den Strom messen und 20mA nicht überschreiten. Mit den so ermittelten Widerstandswerten kann nun die Platine komplett bestückt werden.

Im nächsten Schritt muss man sich für die am besten geeignete Stromversorgungsvariante entscheiden und die entsprechende Brücke an J2 einlöten. Nachdem man nochmals alles genau kontrolliert hat, wird die Spannungsquelle angeschlossen. Dafür kann provisorisch ein passendes Netzteil mit 12V bzw. 5V (abhängig von der Stromversorgungsvariante) verwendet werden oder man schließt das Multi-Modul gleich an die zukünftige Spannungsquelle im Modell an. Bitte unbedingt auf die Polarität achten! Die Schaltung ist nicht gegen Falschpolung geschützt und im schlimmsten Fall können auch weitere elektronische Komponenten im Modell Schaden nehmen.

Nach dem Einschalten der Stromversorgung sollte man zur Sicherheit die Betriebsspannung an der Platine überprüfen, die etwa 5V betragen muss. Als Messpunkte eignen sich am besten die Masse-Buchse vom Programmieranschluss J7 (in der Nähe der Platinenmitte) und ein 5V-Anschluss vom LED-Steckverbinder J4 (am Platinenrand). So muss man nicht an den engen Leiterbahnen zwischen den SMD-Bauteilen hantieren. Wenn alles im grünen Bereich ist, wird der Strom wieder abgeschaltet und ein Programmiergerät an J7 angeschlossen. Danach kann der Strom wieder eingeschaltet und die aktuelle Software v1.02 in den Mikrocontroller geschrieben werden. Weiterhin müssen für die richtige Funktion noch einige Fuse-Bits gesetzt bzw. gelöscht werden:

So sieht die Einstellung im AVR Studio für den ATmega88PA des Multi-Moduls aus.

So sieht die Einstellung in PonyProg für den ATmega88PA des Multi-Moduls aus.

Nach der Programmierung der Software und der Einstellung der Fuse-Bits kann ein erster Funktionstest durchgeführt werden. Dazu sollte eine LED an den Ausgang LED1 angeschlossen werden und sobald das Multi-Modul eingeschaltet wird, muss diese zweimal für ca. 300ms aufleuchten. Für die weitere Inbetriebnahme empfiehlt es sich, das Multi-Modul mit der Stromversorgung des Modells zu betreiben. Dabei muss immer mit größter Vorsicht gearbeitet werden. Die Anschlüsse für Ein- und Ausgänge sollten immer bei abgetrennter Stromversorgung gesteckt oder gelöst werden - niemals etwas unter Spannung umstecken! Weitere Schutzmaßnahmen, wie z.B. das Abschrauben der Rotorblätter oder das Abklemmen des Antriebsmotors sollten selbstverständlich sein.

Inbetriebnahme der Beleuchtung: Dafür ist es notwendig, das Servokabel J3 an den für die Beleuchtung vorgesehenen Empfänger-Ausgang anzuschließen. Zum Schalten der Beleuchtung am Sender eignet sich am besten ein 3-Stufen-Schalter mit der Programmierung -100% / 0% / +100%. Zu beachten ist, dass manche Sender mit den Einstellungen 0% / 50% / 100% arbeiten. Wichtig ist, dass sich Impulszeiten wie in der folgenden Tabelle ergeben:

Schalterstellung Impulszeit Impulsbereich des Multi-Moduls Aktion
0 (-100%) 1,0ms 0,8ms - 1,35ms Beleuchtung ausgeschaltet
1 (0%) 1,5ms 1,35ms bis 1,65ms Beleuchtung eingeschaltet (LED1-LED7)
2 (+100%) 2,0ms 1,65ms bis 2,2ms Beleuchtung und Landelicht eingeschaltet (LED1-LED8)

Zur Inbetriebnahme der gesamten Beleuchtung müssen alle vorgesehenen LEDs angeschlossen werden. Beim Einschalten des Multi-Moduls leuchten zunächst die LED1 und LED2 zweimal für 300ms auf, um die Betriebsbereitschaft anzuzeigen. Wenn der Lichtschalter am Sender in Position 1 gebracht wird, sollten die LEDs 1-7 aufleuchten. Solange das Modul noch nicht konfiguriert ist, arbeiten alle LEDs mit dem Licht-Programm 1 (Dauerlicht). Beim Schalten auf Stufe 2 muss zusätzlich das Landelicht aufleuchten und beim Zurückschalten auf Stufe 0 müssen alle LEDs verlöschen.

Inbetriebnahme der Fahrwerk-Steuerung: Wird diese verwendet, dann müssen die Anschlüsse J5 und J8 verkabelt werden. Es wird an dieser Stelle davon ausgegangen, dass sowohl am Sender als auch im Modell alles fertig eingestellt und funktionsfähig ist. Üblicherweise wird am Sender ein Schalter verwendet, bei dem die beiden Endstellungen des Fahrwerk-Servos programmiert sind. Ist diese Voraussetzung erfüllt, dann wird das Fahrwerk-Servo vom Empfänger getrennt und das Multi-Modul mit J5 und J8 dazwischen geschaltet. Da beim Einschalten des Moduls die aktuelle Position des Fahrwerk-Servos nicht bekannt ist, wird dieses zunächst ohne Verzögerung in die vom Sender übermittelte Position gebracht. Danach erfolgen alle Änderungen des Fahrwerk-Servos verzögert, was man mit dem Fahrwerk-Schalter am Sender sofort testen kann.

Bedienung und Konfiguration

Bedienung: Die Bedienung des Multi-Moduls erfolgt hauptsächlich über die Fernsteuerung. Die beiden Bedienelemente am Sender wurden bereits im vorherigen Abschnitt eingerichtet und beschrieben, so dass im normalen Betrieb folgendes gilt:

Bedienelement Aktion
Lichtschalter in Stellung 0 Die Beleuchtung wird komplett ausgeschaltet.
Lichtschalter in Stellung 1 Die Beleuchtung wird eingeschaltet.
Lichtschalter in Stellung 2 Die Beleuchtung und das Landelicht werden eingeschaltet.
Fahrwerkschalter in Stellung 0 Das Fahrwerk wird verzögert ausgefahren.
Fahrwerkschalter in Stellung 1 Das Fahrwerk wird verzögert eingefahren.

Unter bestimmten Bedingungen werden jedoch die Schalterstellungen am Sender ignoriert und das Multi-Modul übernimmt (abhängig von der Konfiguration) die Kontrolle über Licht- und Fahrwerk-Funktionen. Dies ist der Fall, wenn die Spannung des Antriebs-Akkus die eingestellte Schwelle unterschreitet. Ist das Modul so konfiguriert, dass der Akku-Alarm über die Beleuchtung oder das Landelicht signalisiert wird, dann beginnt das entsprechende Licht zu blinken - unabhängig von der Stellung des Lichtschalters am Sender. Wenn das automatische Ausfahren des Fahrwerks aktiviert ist, dann wird bei einem Akku-Alarm das Fahrwerk ausgefahren - ebenfalls unabhängig von der Stellung des Fahrwerkschalters am Sender. Wenn der Akku-Alarm wieder verschwindet, weil sich der Akku nach der Landung und der Abschaltung des Motors wieder etwas erholt, dann wird die normale Licht-Funktion wieder hergestellt. Das Fahrwerk bleibt allerdings in der Ausfahrstellung gesperrt. Hier lässt sich die normale Funktion nur durch 2 Bedingungen wieder herstellen:
  1. Aus- und Einschalten der Stromversorgung
  2. Langer Tastendruck (>500ms), anschließend leuchten LED1 und LED2 zweimal für 300ms zur Bestätigung auf

In beiden Fällen sollte vorher unbedingt die Stellung des Fahrwerkschalters am Sender geprüft werden, damit das Fahrwerk nicht eingezogen wird, wenn das Modell auf dem Boden steht. Ich benutze übrigens die Tasterfunktion nach dem letzten Flug, um mein Modell transportfähig zu machen, denn es passt nur mit eingezogenem Fahrwerk in den Transportkoffer.

Weiterhin gibt es noch eine Kopplung zwischen dem Fahrwerk und der Beleuchtung. Diese bewirkt, dass bei eingeschalteter Beleuchtung und gleichzeitig ausgefahrenem Fahrwerk immer das Landelicht eingeschaltet wird. Durch diese Funktion wird der Pilot etwas entlastet und muss somit im Flug nur noch das Fahrwerk bedienen.

Konfiguration:

Die Konfiguration erfolgt über einen speziellen Konfigurations-Modus, in dem insgesamt 11 Einstellungen angewählt und geändert werden können. Die Einstellung erfolgt dabei nach einem einheitlichen System: Beim Drücken des Tasters wird zwischen einem Kurzen Tastendruck (<500ms) und einem Langen Tastendruck (>500ms) unterschieden. Ein Kurzer Tastendruck schaltet immer zur nächsten Einstellung weiter, ohne diese zu verändern. Ein Langer Tastendruck ändert die aktuelle Einstellung und speichert den neuen Wert gleichzeitig im EEPROM des Mikrocontrollers ab. Der Konfigurations-Modus wird mit einem Kurzen Tastendruck aktiviert, das Verlassen der Konfiguration erfolgt ebenfalls durch einen Kurzen Tastendruck nach der letzten Einstellung - oder automatisch nach 2 Minuten, wenn kein weiterer Tastendruck erfolgt.

Alle Taster-Eingaben werden durch Leuchten oder Blinken einiger LEDs unterstützt - so kann man die gerade angewählte Einstellung sehen. Die folgende Tabelle enthält alle Einstellungen, den möglichen Werte-Bereich und die entsprechende LED-Anzeige. Hier gilt: Um von einer Einstellung zur nächsten zu kommen (entspricht der nächsten Zeile in der Tabelle) ist ein Kurzer Tastendruck erforderlich. Die Änderung eines Wertes erfolgt durch einen Langen Tastendruck. In diesem Fall wird der Wert um 1 erhöht, gespeichert und die LED-Anzeige erneut ausgegeben, wobei nach dem letzten möglichen Wert automatisch wieder bei 1 begonnen wird. Es ist übrigens nicht nötig, die LED-Anzeigen abzuwarten. Möchte man beispielsweise direkt zur Einstellung 9, dann kann man gleich 9-mal hintereinander den Taster kurz drücken. Auch beim Ändern von Einstellungen muss nicht die komplette Datenausgabe abgewartet werden, hier kann der Taster mehrmals hintereinander lang gedrückt werden, um schnell zum gewünschten Wert zu kommen.

Noch ein wichtiger Hinweis zum Konfigurations-Modus: Solange sich das Multi-Modul in diesem Modus befindet, wird die Stellung des Licht-Schalters am Sender ignoriert. Auch der Akku-Alarm wird während dieser Zeit nicht über die Beleuchtung signalisiert, die Fahrwerk-Steuerung bleibt jedoch aktiv. Bei den Einstellungen 8-11 wird das Landelicht zur Datenausgabe verwendet, in diesem Fall wird die Helligkeit reduziert, damit man bei der Konfiguration nicht erblindet :-)

Einstellung Beschreibung Werte-Bereich LED-Anzeige
1 Licht-Programm für LED1 1 - 17 LED1 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
2 Licht-Programm für LED2 1 - 17 LED2 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
3 Licht-Programm für LED3 1 - 17 LED3 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
4 Licht-Programm für LED4 1 - 17 LED4 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
5 Licht-Programm für LED5 1 - 17 LED5 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
6 Licht-Programm für LED6 1 - 17 LED6 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
7 Licht-Programm für LED7 1 - 17 LED7 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
8 Akku-Alarm-Programm 1 - 8 LED1 leuchtet ständig. Das Landelicht blinkt 1- bis 8-mal, wobei die Anzahl der Blinkzeichen dem aktuellen Wert entspricht. Nach einer kurzen Pause werden die Blinkzeichen wiederholt.
9 Spannungsschwelle für Akku-Alarm 1 - 15 LED2 leuchtet ständig. Das Landelicht blinkt 1- bis 15-mal, wobei die Anzahl der Blinkzeichen dem aktuellen Wert entspricht. Nach einer kurzen Pause werden die Blinkzeichen wiederholt.
10 Servo-Verzögerung 1 - 4 LED1 und LED2 leuchten ständig. Das Landelicht blinkt 1- bis 4-mal, wobei die Anzahl der Blinkzeichen dem aktuellen Wert entspricht. Nach einer kurzen Pause werden die Blinkzeichen wiederholt.
11 Servo-Position für das automatische
Ausfahren des Fahrwerks
- LED1 und LED2 blinken schnell. Wird nach einem Langen Tastendruck eine gültige Servo-Position erkannt, dann leuchtet das Landelicht einmal kurz auf und die Position wird gespeichert.

Hinweis zu den Einstellungen 1-7: Hier wird nach einem kurzen Aufleuchten der gerade angewählten LED das aktuell eingestellte Licht-Programm abgespielt. Aber nicht nur das: alle anderen LEDs werden auch aktiv und zeigen ihr aktuelles Programm - so als hätte man am Sender die Beleuchtung eingeschaltet. Mit einem Langen Tastendruck kann man nun das nächste Licht-Programm auswählen, anschließend leuchtet wieder die gerade angewählte LED kurz auf und wiederum laufen alle LEDs mit ihrem Programm. So kann man jederzeit sehen, wie das eingestellte Licht-Programm auf die gesamte Beleuchtung wirkt. Die 17 wählbaren Licht-Programme sind in der folgenden Tabelle als Zeitdiagramm zusammengefasst. Die senkrechten gepunkteten Linien sind Sekunden-Markierungen. Die Zeiten der Beacons und der Blinklichter wurden übrigens absichtlich "krumm" gewählt, damit diese nicht synchron mit den Blitzlichtern arbeiten (so wie in der Realität auch).

Wert Diagramm Beschreibung
01 Dauerlicht (Voreinstellung bei der Inbetriebnahme)
02 Einfach-Blitzlicht 1s
03 Zweifach-Blitzlicht 1s
04 Dreifach-Blitzlicht 1s
05 Einfach-Blitzlicht 1,6s
06 Zweifach-Blitzlicht 1,6s
07 Dreifach-Blitzlicht 1,6s
08 Einfach-Blitzlicht 1,6s, zeitversetzt zu Programm 05
09 Zweifach-Blitzlicht 1,6s, zeitversetzt zu Programm 06
10 Dreifach-Blitzlicht 1,6s, zeitversetzt zu Programm 07
11 Beacon 2,72s
12 Beacon 3,72s
13 Beacon 2,72s, zeitversetzt zu Programm 11
14 Beacon 3,72s, zeitversetzt zu Programm 12
15 Einfach-Blinklicht 1,3s
16 Einfach-Blinklicht 1,7s
17 Einfach-Blinklicht 2,1s

Die Programme 11-14 funktionieren grundsätzlich an allen LED-Ausgängen. Allerdings sind nur die PWM-fähigen Ausgänge LED6 und LED7 in der Lage, das Licht langsam ein- und auszublenden.

Hinweis zur Einstellung 8: Diese legt fest, wie das Multi-Modul auf einen Akku-Alarm reagieren soll. Es steht eine optische Signalisierung über die Beleuchtung (LEDs 1-7) oder das Landelicht (LED8) zur Auswahl, außerdem kann das Fahrwerk automatisch ausgefahren werden. Die Fahrwerk-Funktion steht allerdings nur zur Verfügung, wenn eine Ausfahrposition (siehe Einstellung 11) gespeichert ist. Die 8 möglichen Werte haben folgende Bedeutung:

Wert Beleuchtung bei Alarm Landelicht bei Alarm Fahrwerk bei Alarm Bemerkung
1 normale Funktion normale Funktion normale Funktion Voreinstellung bei der Inbetriebnahme
2 blinkt normale Funktion normale Funktion  
3 normale Funktion blinkt normale Funktion  
4 blinkt blinkt normale Funktion  
5 normale Funktion normale Funktion wird ausgefahren  
6 blinkt normale Funktion wird ausgefahren  
7 normale Funktion blinkt wird ausgefahren  
8 blinkt blinkt wird ausgefahren  

Ist die optische Signalisierung aktiviert, dann blinkt bei einem Akku-Alarm die gewählte Beleuchtung mit ca. 3,1Hz (160ms ein, 160ms aus). Auch bei kurzen Spannungseinbrüchen wird das Blinklicht für mindestens 1,28s eingeschaltet. Sind Beleuchtung und Landelicht aktiviert, dann blinkt das Landelicht entgegengesetzt zur Beleuchtung. Ist das automatische Ausfahren des Fahrwerks aktiviert, dann wird das Fahrwerk-Servo beim ersten Auftreten eines Akku-Alarms mit der eingestellten Verzögerung in die Ausfahrposition gebracht und dann gesperrt.

Hinweis zur Einstellung 9: Mit dieser Einstellung wird die Spannungsschwelle festgelegt, bei der ein Akku-Alarm ausgelöst werden soll. Diese Einstellung ist für LiPo-Akkus mit 3 Zellen (Nennspannung 11,1V) optimiert und kann in 15 Stufen eingestellt werden. Dabei gilt folgende Zuordnung zum eingestellten Wert:

Wert Spannungsschwelle
(Software v1.01)
Spannungsschwelle
(Software ab v1.02)
Bemerkung
1 10,40V 11,00V Voreinstellung bei der Inbetriebnahme
2 10,34V 10,89V  
3 10,28V 10,79V  
4 10,22V 10,68V  
5 10,16V 10,58V  
6 10,10V 10,47V  
7 10,04V 10,36V  
8 9,98V 10,26V  
9 9,92V 10,15V  
10 9,86V 10,05V  
11 9,80V 9,94V  
12 9,74V 9,83V  
13 9,68V 9,73V  
14 9,62V 9,62V  
15 9,56V 9,52V  

Es wird empfohlen, zunächst die Voreinstellung zu testen und bei jedem Flug den Wert um 1 zu erhöhen, bis man die richtige Schwelle gefunden hat. Das ist der Fall, wenn der Akku-Alarm rechtzeitig vor dem Eingreifen des Motor-Reglers anspricht, so dass man mit voller Motorleistung noch sicher landen kann. Je nach Alter und Qualität der Akkus kann das Verhalten allerdings unterschiedlich sein, hier muss man ein wenig experimentieren.

Hinweis zur Einstellung 10: Hier wird die Verzögerungszeit für das Fahrwerk-Servo festgelegt. Es sind 4 Werte möglich, die in der folgenden Tabelle zusammengefasst sind:

Wert Verzögerungszeit Bemerkung
1 2,5s Voreinstellung bei der Inbetriebnahme
2 3,3s  
3 4,0s  
4 5,0s  

Die Zeit bezieht sich auf den vollen Servo-Weg bei einem PPM-Signalwechsel von 1,0ms auf 2,0ms oder umgekehrt. Ist der Servo-Weg geringer, dann wird die Zielposition schneller erreicht, bei größeren Wegen dauert es entsprechend länger.

Hinweis zur Einstellung 11: Mit dieser Einstellung wird dem Multi-Modul mitgeteilt, welche Position das Fahrwerk-Servo bei einem Akku-Alarm einnehmen soll. Dazu muss das Fahrwerk über den Schalter am Sender in die gewünschte Position gebracht werden. Anschließend wird der Taster Lang gedrückt. Wurde ein gültiger Wert ermittelt, dann leuchtet das Landelicht kurz auf und quittiert damit das Speichern des Wertes. Der Wert kann jederzeit durch Wiederholen dieser Prozedur neu eingestellt werden, ein Löschen ist jedoch nicht möglich. Soll das automatische Ausfahren deaktiviert werden, dann ist dies über die Einstellung 8 möglich, indem man diese auf einen Wert von 1-4 setzt. Auch wichtig: Wird das Fahrwerk neu justiert, dann muss die neue Position unbedingt mit der eben beschriebenen Prozedur neu angelernt werden!

Diese Einstellung wird übrigens auch für die automatische Landelicht-Funktion benötigt. Ist hier ein Positions-Wert gespeichert und befindet sich das Fahrwerk-Servo in der Nähe dieser Position, dann wird automatisch das Landelicht eingeschaltet (allerdings nur bei eingeschalteter Beleuchtung).

Sonstiges

Dieser Abschnitt ist für Neugierige gedacht, die gern mit der Hard- und Software experimentieren möchten. Bei der Software gibt es einen Bereich, der sich geradezu anbietet.

Die Licht-Programm-Steuerung: Damit das Multi-Modul möglichst flexibel einsetzbar ist, habe ich die Lichtsteuerung programmierbar gemacht. In der aktuellen Software sind bereits 17 fertige Licht-Programme enthalten, die beliebig den 7 LED-Ausgängen zugeordnet werden können. Es ist aber durch Bearbeiten des Assembler-Quelltextes möglich, Licht-Programme zu modifizieren und weitere Licht-Programme zu erstellen. Dafür habe ich eine einfache Programmiersprache entwickelt, die aus nur 5 Kommandos besteht:

Name Kommando
Byte 1
Kommando
Byte 2
Beschreibung
Licht ausschalten 0 0 - 255 Licht ausschalten und anschließend 20ms - 5,12s warten.
Licht einschalten 1 0 - 255 Licht einschalten und anschließend 20ms - 5,12s warten.
Licht ausblenden 2 0 - 255 Licht langsam ausblenden und anschließend 20ms - 5,12s warten.
Licht einblenden 3 0 - 255 Licht langsam einblenden und anschließend 20ms - 5,12s warten.
Ende 255 255 Programm beenden und von vorn beginnen; der Parameter muss vorhanden sein, wird aber nicht ausgewertet.

Ein Kommando besteht immer aus 2 Bytes: Das erste Byte ist der Kommando-Code und das zweite Byte ist ein Parameter. Der Kommando-Code legt fest, was mit dem Licht passieren soll (ein- oder ausschalten) und der Parameter bestimmt die Zeit, die gewartet werden soll, bis das nächste Kommando ausgeführt wird. Der Parameter ist eine Zahl im Bereich 0-255 und gibt die Zeiteinheiten im Raster von 20ms an, d.h. der Parameter wird einfach mit 20ms multipliziert und ergibt so die Wartezeit bis zum nächsten Kommando. Eine Ausnahme ist der Wert 0, er wird als 256 gewertet und entspricht damit der größten möglichen Wartezeit von 256 * 20ms = 5120ms oder 5,12s. Der kleinste Wert ist 1 und der entspricht einer Wartezeit von 1 * 20ms = 20ms.

Die Funktion der Kommandos lässt sich am besten an einem Beispiel erklären. Nachfolgend wurde das Licht-Programm 03 aus dem Quelltext kopiert:

// Licht-Programm 03 - Zweifach-Blitzlicht 1s
ligh03: .db     1, 3                            // Licht einschalten,  60ms warten
        .db     0, 6                            // Licht ausschalten, 120ms warten
        .db     1, 3                            // Licht einschalten,  60ms warten
        .db     0, 38                           // Licht ausschalten, 760ms warten
        .db     255, 255

Hier sieht man den grundsätzlichen Aufbau eines Licht-Programms. Jedes Programm beginnt mit einem eindeutigen Label (in diesem Beispiel ligh03:), welches der Assembler benötigt, um das Programm aufzufinden. Danach werden alle Kommandos mit der Assembler-Anweisung .db in Form einer Liste notiert, wobei jede Zeile 1 Kommando enthalten sollte. Diese Schreibweise hat 2 Gründe: Das Programm ist gut lesbar und der Assembler möchte wegen der 16-Bit-Speicherarchitektur immer eine geradzahlige Anzahl Bytes in einer Zeile haben.

Die nachfolgende Tabelle zeigt auf, was die Kommandos des Beispielprogramms bewirken:

Nr. Kommando Grafik Beschreibung
1 1, 3 Das erste Kommando wird abgearbeitet, wenn am Sender die Beleuchtung eingeschaltet wird. In diesem Beispiel wird also sofort das Licht eingeschaltet.
Der Parameter-Wert 3 wird mit 20ms multipliziert, somit ergibt sich eine anschließende Wartezeit von 3 * 20ms = 60ms.
2 0, 6 Das Licht wird ausgeschaltet. Dies passiert nach Ablauf der Wartezeit des vorherigen Kommandos, also genau nach 60ms. Das Ergebnis ist ein Lichtblitz mit einer Länge von 60ms.
Der Parameter-Wert 6 wird mit 20ms multipliziert, somit ergibt sich eine anschließende Wartezeit von 6 * 20ms = 120ms.
3 1, 3 Das Licht wird wiederum eingeschaltet - nach Ablauf der Wartezeit des vorherigen Kommandos von 120ms.
Der Parameter-Wert 3 wird mit 20ms multipliziert, somit ergibt sich wieder eine anschließende Wartezeit von 3 * 20ms = 60ms.
4 0, 38 Das Licht wird wieder ausgeschaltet - auch hier wieder nach Ablauf der Wartezeit des vorherigen Kommandos von 60ms. Das Ergebnis ist wiederum ein Lichtblitz mit einer Länge von 60ms.
Der Parameter-Wert 38 wird mit 20ms multipliziert, dies ergibt eine Wartezeit von 38 * 20ms = 760ms. Das Ergebnis ist eine längere Pause nach den beiden Lichtblitzen.
5 255, 255 Dieses spezielle Kommando muss immer am Ende eines Programms stehen. Es veranlasst die Programmsteuerung wieder zum ersten Kommando zurückzukehren und den Programmablauf neu zu beginnen. Somit schließt sich nach Ablauf der Wartezeit des vorherigen Kommandos nahtlos das erste Kommando wieder an und das Programm läuft in einer endlosen Schleife.

Die gesamte Programmlaufzeit lässt sich übrigens einfach errechnen, indem man alle Parameter addiert (ohne das Ende-Kommando) und mit 20ms multipliziert. Unser Beispiel-Programm läuft also: (3 + 6 + 3 + 38) * 20ms = 50 * 20ms = 1000ms = 1s. Bitte nicht vergessen, dass bei einem Parameter-Wert von 0 mit 256 gerechnet werden muss (trifft in diesem Fall nicht zu). Die Gesamtlaufzeit ist wichtig, wenn mehrere Programme synchron laufen sollen. Bei den 17 vordefinierten Programmen sind die Programme 2-4, 5-10, 11/13 sowie 12/14 synchronisiert.

Die beiden Kommandos Licht ausblenden (Kommando-Code 2) und Licht einblenden (Kommando-Code 3) können genau so eingesetzt werden wie die normalen Aus- und Einschalt-Kommandos (Kommando-Codes 0 und 1). Allerdings sollte man berücksichtigen, dass ein vollständiger Aus- oder Einblendvorgang ungefähr 0,5s dauert und somit längere Wartezeiten im Parameter verwendet werden sollten. Auch hier noch mal der Hinweis, dass Programme mit Blend-Kommandos (Kommando-Codes 2 und 3) nur an den Ausgängen LED6 und LED7 optimal funktionieren. An den anderen Ausgängen wird dann einfach aus dem Blend- ein Schaltvorgang.

Sollte ausnahmsweise eine längere Wartezeit als 5,12s benötigt werden, dann besteht die Möglichkeit, zwei Kommandos zu kaskadieren. Hier ist ein Beispiel für eine Wartezeit von 6s:

// Test-Programm für ein Beacon mit 6s ein / 6s aus
test99: .db     3, 0                            // Licht einblenden,           5120ms warten \ ergibt zusammen
        .db     1, 44                           // Licht bleibt eingeschaltet,  880ms warten / 6000ms
        .db     2, 200                          // Licht einblenden,           4000ms warten \ ergibt zusammen
        .db     0, 100                          // Licht bleibt ausgeschaltet, 2000ms warten / 6000ms
        .db     255, 255

Hier wurde die Wartezeit einfach auf 2 Kommandos aufgeteilt, wobei verschiedene Möglichkeiten angewandt wurden, die aber letztlich zum gleichen Ergebnis führen. Die ersten beiden Kommandos verwenden die Parameter 0 und 44 (entspricht 256 + 44 = 300) um auf die gewünschte Zeit von 6s zu kommen. Bei den Kommandos 3 und 4 wurde einfach 200 und 100 verwendet, was einfacher zu berechnen ist. Bei Beacon-Programmen ist zu beachten, dass beim "Verlängerungs-Kommando" nur die Kommando-Codes 0 und 1 verwendet werden, da sonst die LED erneut ein- oder ausgeblendet wird.

Damit das oben stehende Beispiel-Programm vom Multi-Modul verwendet wird, muss es in eine Adress-Tabelle eingetragen werden. Dieser Vorgang ist immer notwendig, wenn ein neues Programm hinzugefügt wird. Die Tabelle sieht in der aktuellen Programm-Version so aus (etwas gekürzt):

// Licht-Programm-Tabelle
ligtab: .dw     ligh00                          // Adresse von Licht-Programm 00 (wird nur intern verwendet)
        .dw     ligh01                          // Adresse von Licht-Programm 01
        .dw     ligh02                          // Adresse von Licht-Programm 02
        ...
        .dw     ligh15                          // Adresse von Licht-Programm 15
        .dw     ligh16                          // Adresse von Licht-Programm 16
        .dw     ligh17                          // Adresse von Licht-Programm 17

In dieser Tabelle sind die Labels aller Licht-Programme eingetragen und über diese Tabelle ermittelt das Programm die Speicheradresse der Licht-Programme. Die Reihenfolge der Einträge ist wichtig, denn in dieser werden bei der Konfiguration der Ausgänge LED1-LED7 die verschiedenen Licht-Programme angeboten. Auch die im EEPROM gespeicherten Einstellungen der LED-Ausgänge beziehen sich auf diese Tabelle. Gegebenenfalls muss nach einer Änderung in der Tabelle die Konfiguration der Ausgänge LED1-LED7 angepasst werden. Es ist möglich, nicht benötigte Programme aus der Tabelle zu löschen, dann stehen sie bei der Konfiguration auch nicht mehr zur Verfügung. Wir wollen allerdings jetzt unser Testprogramm ergänzen und fügen deshalb einfach eine neue Zeile hinzu:

        .dw     test99                          // Adresse vom Beacon-Test-Programm

Diese Zeile kann auch zwischen vorhandene Einträge geschrieben werden, dann erscheint das neue Programm bei der Konfiguration an der entsprechenden Stelle. Bitte nicht das Licht-Programm 00 löschen oder verschieben, dieses wird intern verwendet und ist wichtig für die Funktion des Multi-Moduls.

Bei der Modifizierung eines bereits vorhandenen Licht-Programms ist es übrigens nicht nötig, die Tabelle zu bearbeiten. Hier kann man einfach die Zeilen des Licht-Programms editieren, Zeilen entfernen oder weitere Zeilen hinzufügen.


Noch einige Worte zum Projekt: Es wurde zunächst ein Prototyp auf einer Lochrasterplatine mit der DIP-Version des ATmega88PA aufgebaut. Auf dieser Basis wurde ein großer Teil der Software entwickelt und die Schaltung optimiert. Nach einem gewissen "Reifegrad" der Hard- und Software wurde eine erste Platinenversion entwickelt, die dann auch endlich mitfliegen durfte. Diese war voll funktionsfähig, allerdings mussten noch einige Leiterbahnen optimiert werden. Also wurde eine weitere Version entwickelt und eine kleine Serie hergestellt. Das aktuelle Layout ist recht gut gelungen und es sind noch einige Platinen übrig, die gegen einen kleinen Betrag erworben werden können.

Ursprünglich war geplant, die Programmiersprache C zu verwenden. Dies scheiterte aber daran, dass ich äußerst schnelle und kompakte Interrupt-Routinen brauchte, die zudem noch mit Register-Variablen arbeiten sollten. Dies mag durchaus mit C realisierbar sein, mir ist es jedoch nicht gelungen. Also wurde doch wieder auf die bewährte Assembler-Sprache zurückgegriffen, was aber zu einer längeren Entwicklungszeit führte.

Leider traten im realen Einsatz einige Probleme auf und nach langer Suche wurde festgestellt, dass der Mikrocontroller beim Einschalten der Stromversorgung gelegentlich nicht sauber startete. Mit einem zusätzlichen 100nF Kondensator am Reset-Anschluss des Controllers trat das Problem nicht mehr auf, allerdings wollten wir eine Änderung des Layouts vermeiden und so wurde nach einer anderen Lösung gesucht. Eine Änderung der Brown-Out-Schwelle von 4,3V auf 2,7V brachte schließlich das gewünschte Ergebnis, auch wenn das nicht wirklich logisch erscheint. Weiterhin hat die Praxis gezeigt, dass auch die Akku-Technik höchst unterschiedlich sein kann. So halten einige neue und sehr leistungsstarke Akkus die Spannung lange stabil und knicken dann kurz vor dem Ende recht schnell ein. So bleibt nach dem Auslösen des Alarms nur wenig Zeit für eine sichere Landung. Aus diesem Grund wurde die Einstellung der Spannungsschwellen für die Anzeige des Akku-Alarms mehrfach geändert und hat hoffentlich in der aktuellen Version 1.02 die optimalen Werte erreicht.

Inzwischen kommt das Multi-Modul bei uns in 3 T-Rex-450-Modellen und einem Quadrocopter zum Einsatz und arbeitet hier höchst zuverlässig.


Kleine Projekte: Übersicht
Kleine Projekte: Akku-Alarm für Modell-Helikopter
Kleine Projekte: Beleuchtung für Modell-Helikopter
Kleine Projekte: Servotester
Kleine Projekte: Multi-Modul für Scale-Modelle


Allgemeines - Projekt-Überblick - Links, Software - Neuigkeiten - "Klassiker" - Galerie - Impressum
AVR-Programmierung - AVR-Bootloader - Multifunktionsuhr - Tischuhr - Wohnraumuhr - Wecker - Zahnputzuhr - BigBen-Türgong - Fahrtregler - EPROM-Programmiergerät - Temperaturmesssystem - USB-RS232 Interface - Kleine Projekte