Misthaken

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.

MikroBlink_eingeb.jpg


Video

http://www.vimeo.com/2721486


Schaltplan

MikroBlink_Schaltplan_2.pdf

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:

ISP-Adapter.jpg

Zur Programmierung muss das Kabel dann mit ISP1 der Sercon verbunden werden (Jumper gesetzt).

SerCon.jpg

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.

MikroBlink_ISP.jpg

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:

MikroBlink.zip



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

  1. Programme zum Übersetzen der Software (WinAVR) und
  2. 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 ...