Misthaken
MikroBlink
Oft habe ich mir für die Beleuchtungssteuerung meines Mikrokopters etwas mehr Möglichkeiten gewünscht; allerdings sollte dabei nicht mehr als ein Kanal der Fernsteuerung herhalten müssen. Dabei ist eine kleine Platine auf Basis eines MEGA8s und FETs vom Typ IRLML2502 entstanden, die ich hier vorstellen möchte.
Video
Schaltplan
Mit dieser Schaltung ist es möglich, bis zu 10 Verbraucher mit einem Strom von max. 0,5A einzeln zu schalten. Bei mir werden damit die LED-Streifen sowie weitere Positionslichter geschaltet. Der Eingang STEUER_IN kann direkt mit einem Ausgang auf der FlightCtrl (J16 oder J17) verbunden werden. Durch Betätigen des Ausgangs lassen sich nun verschiedene Lichtprogramme durchschalten.
Hardware
Stückliste
Anz |
Bezeichnung |
Teil |
Hinweis |
Name |
1 |
ATMEGA8-16TQ |
Mikrocontroller |
|
IC1 |
11 |
18k SMD-0805 |
Widerstand |
|
R1,R13,R15,R17,R19,R21,R23,R25,R27,R29,R31 |
1 |
1k SMD-0805 |
Widerstand |
|
R5 |
10 |
100R SMD-0805 |
Widerstand |
|
R12,R14,R16,R18,R20,R22,R24,R26,R28,R30 |
1 |
10R SMD-0805 |
Widerstand |
|
R2 |
1 |
besser TA78L05(SOT-89) oder µA78L05(TO92) |
Festspannungsregler |
z.B. Conrad: 144711 - 62 |
IC2 |
5 |
100nF SMD-0805 |
Kondensator |
|
C1,C2,C3,C4,C6 |
2 |
100uF SMD-0405 |
Elko |
Wenn man keinen in der Kiste hat: Ich hab bei mir 33uF eingelötet, geht auch |
C5,C7 |
1 |
LED SMD-0805 |
LED |
Die Farbe kann man sich aussuchen |
LD1 |
1 |
Stiftleiste 2x 5pol. RM 2,54 |
Stiftleiste |
z.B. Reichelt SL 2X40G 2,54; Vorsicht: Fehler im Layout! |
ISP |
10 |
IRLML2502 |
N-Kanal MOSFET |
gibt es leider nicht bei Reichelt, ich hab sie bei eBay erstanden |
U$1 bis U$10 |
Bestückung
Obersteite: top.pdf
Unterseite: bottom.pdf
Programmierung
Beim Layout der Platine ist mir leider ein kleiner Anfängerfehler unterlaufen, die ISP-Schnittstelle ist mit der falschen Seite zum Platinenrand ausgerichtet. Dies lässt sich aber leicht mit einem kleinen Adapterkabel zur SerCon beheben. Mann muss das Flachbandkabel nur alle zwei Leitungen etwas auftrennen und diese Pärchen dann vor dem Crimpen verkehrt herum in den Stecker einsetzten. Das folgende Bild zeigt das ganz gut:
Zur Programmierung muss das Kabel dann mit ISP1 der Sercon verbunden werden (Jumper gesetzt).
Auf der Beleutungsplatinenseite wird das Kabel so gesteckt, dass Pin1 links liegt, wenn man auf die Seite mit dem MEGA8 schaut und die ISP-Schnittstelle oben ist.
Zum Programmieren aus PN heraus muss nur noch im makefile die richtige serielle Schnittstelle ausgewählt werden, es sollte aber auch genau so gut mit PonyProg usw. gehen.
Software
Bei der Software handelt es sich um ein kleines C-Programm. Es wird ein Interrupt benutzt, um bei jeder Flanke an STEUER_IN den Beleuchtungsablauf zu wechseln. Es können beliebig lange Sequenzen programmiert werden, da durch die Interrupt-Steuerung die aktuelle Sequenz sofort beendet und in die nächste gesprungen wird. Dies ist mein erstes eigenes C-Programm, man verzeihe mir bitte die sicher zahlreichen Schönheitsfehler
Dateien
Hier eine Zip-Datei mit den Eagle-Dateien sowie dem Programm (Quellcode incl. Hex-Dateien) zur freien Benutzung:
Zugehöriger Forumsthread: http://forum.mikrokopter.de/topic-7347.html
MikroBlink Version 2
Für die Version 2 habe ich die Hardware etwas überarbeitet:
- Die ISP-Schnittstelle ist jetzt richtig herum
- INT0 wurde herausgeführt, so dass man ihn als zweiten Eingang nutzen kann (aber vor der Programmierung abklemmen!)
- Die Akkuspannung kann nun gemessen werden, um auch optisch auf einen leeren Akku hinzuweisen.
Die EAGLE-Dateien gibt's hier schonmal, die Software muss natürlich noch angepasst werden, das wird aber noch ein paar Tage dauern.
gesammelte Infos zur Version 2.2 sind zu finden unter - http:///mikrokopter.de/mikrosvn/Projects/MikroBlink
Blitzdings
pangu hat hier http://forum.mikrokopter.de/topic-post113907.html#post113907 seinen verbesserten Code mit Arrays und Structs vorgestellt.
Syntax bsp.:
- // Pausenflags:
- // . 10 ms
- // : 20 ms
- // ; 50 ms
- // I 100 ms
- // N 200 ms
- // M 300 ms
- // V 500 ms
- // S 1s
- // LED:
- // A-an a-aus
- char *ledprg_A[] = {
- "A:aIA:aSV", // LED #1 rot
- ".", // LED #2
- "ASSSaN", // LED #3 blau
- ".", // LED #4
- "NASSSa", // LED #5 weiss
"VNA:aIA:aMV", // LED #6 grün
- ".", // LED #7
- "NASSSa", // LED #8 weiss
- ".", // LED #9
- "ASSSaN" // LED #10 blau
- };
- Jede Zeile definiert das Ein-Aus-Pausen-Programm für eine LED, die Zeile wird zirkulär abgearbeitet.
- Man kann mehrere Structs definieren und jederzeit per Mode-Schalter austauschen.
- Die Licht-Programme werden wie oben beschrieben definiert (in main.c).
- Im Moment werden die Lichtprogramme durch den Eingang-Trigger durchgeschaltet wie bei Misthaken, ausserdem als Demo-Mode alle 10s weitergeschaltet.
- Status-LED blinkt mit 1Hz
- LED 1 (rot) und LED 6 (grün) flimmern alle 1.5s als Positionslichter
- LED 3,5,8,10 sind daueran (bei mir 2xweiss, 2xblau)
- die Spannung wird mit 1Hz überwacht. Wenn die Spannung unter ca.9,4V sinkt, blinken alle LEDs mit ca.10Hz
- Wenn die SPannung wieder über den Schwellwert steigt, wird nach 3s das normale Blinkschema wieder aktiviert.
Die Fusebits muessen wie folgt gesetzt werden (sonst geht alles in Zeitlupe!):
Häkchen in Ponyprog:
CKSEL3 gesetzt
CKSEL2 nicht gesetzt
CKSEL1 gesetzt
CKSEL0 gesetzt
Hexfile generieren
Um ein Hexfile mit eigenem Blinkmuster zu generieren, braucht man
- Programme zum Übersetzen der Software (WinAVR) und
- die Programme zum Download der Sourcen aus dem SVN (TortoiseSVN).
Dazu folgt man der Beschreibung zur Softwareentwicklung für die FlightCtrl, man braucht genau dieselbe Umgebung, nämlich WINAVR unt TortoiseSVN unter Windows. Für die Entwicklung unter Linux gilt das entsprechende.
Die Sourcen sind zu finden unter - http://mikrokopter.de/mikrosvn/Projects/MikroBlink/Blitzdings
Auch das Abholen der Sourcen erfolgt exakt wie bei der FlightCtrl, nur mit obigem URL.
Zum ersten Übersetzen startet man das Programmer Notepad durch Doppelklick auf die Datei "Blitzdings.pnproj".
Unter dem Menüpunkt "Tools" wird "Make all" gewählt, was den Übersetzungsvorgang anstösst, und das Hexfile im Ordner "Hexfiles" neu generiert - zusammen mit ein paar weiteren Dateien.
Wenn das geklappt hat, ist es soweit, die mit dem LED-Simulator oder von Hand erzeugte Blinksequenz einzufügen und dann neu zu übersetzen.
Dazu wird die Datei main.c durch Doppelklick links in der Dateiliste im Programmers Notepad geöffnet und an der passenden Stelle die eigene Blinksequenz eingefügt.
Aktiv sind alle die Blinksequenzen, die in folgender Zeile eingetragen sind:
void *modes[]= { led_posflash, led_posflash1, led_an, led_flash1,led_aus, led_flash2 };
Hier sollte Blinksequenzen, die nicht gebraucht werden, gelöscht und die eigenen eingetragen werden:
void *modes[]= { led_myFirstBlinkSequence, led_mySecondBlinkSequence };
Dann neu übersetzen und das erzeugte Hexfile im Ordner Hexfiles zum Brennen mit Ponyprog abholen ...