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| 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 |
| 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 |
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:
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.
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.
| 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) |
| 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. |
| 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. |
| 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 |
| 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 |
| 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 |
| Wert | Verzögerungszeit | Bemerkung |
|---|---|---|
| 1 | 2,5s | Voreinstellung bei der Inbetriebnahme |
| 2 | 3,3s | |
| 3 | 4,0s | |
| 4 | 5,0s |
| 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. |
// 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. |
// 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-ProgrammDiese 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.
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