<> = Light-CTRL, was ist das... = Die Light-CTRL ist eine Licht oder auch Lastschaltung, basierend auf der Bl-CTRL. = ... und warum eigentlich? = Das Problem bestand darin, dass zum einen die LED-Beleuchtung über J16/J17 der FL-CTRL steuerbar sein sollte und zudem die teilweise blinken oder besser doppelt blitzen sollte. Die erste Überlegung war, die LED-Beleuchtung über eine Transistorschaltung zu realisieren und den Blitzer über eine Reihenschaltung von NE555-Timern zu realisieren. Jedoch stößt man aufgrund der Abmessungen auf einer Lochrasterplatine schnell an seine Grenzen. Auch die Einstellung der Zeit über Potentiometer ist nicht sauber realisierbar. Viel einfacher kann eine solche Schaltung mit einem Mikrokontroller wie dem ATMEGA8 aufgebaut werden. Die BL-CTRL-Platine eignet sich aufgrund der vorgesehenen FETs auch wunderbar dazu. = Umbau der bestehenden BL-Ctrl = Auf einer Fertig bestückten BL-CTRl müssen die FETs IRFR 5305 und deren Ansteuerung entfernt werden. Die FETs IRFR1205 und die Transistoren BC817-16SMD können als Schalter verwendet werden. Die Widerstände R7,R12,R13,R20,R21,R22,R1,R4,R18,R10,R14, sowie die Kondensatoren C1,C2, C4 und C17 müssen entfernt werden. Anbei hier auch ein abgeänderter Schaltplan des BL-CTRL: [[http://gallery.mikrokopter.de/main.php/v/tech/Light-CTRL_Schaltplan.JPG.html|{{http://gallery.mikrokopter.de/main.php?g2_view=core.DownloadItem&g2_itemId=11926}}]] [[http://gallery.mikrokopter.de/main.php/v/tech/bild+087.jpg.html|{{http://gallery.mikrokopter.de/main.php?g2_view=core.DownloadItem&g2_itemId=11949}}]] [[http://gallery.mikrokopter.de/main.php/v/tech/bild+091.jpg.html|{{http://gallery.mikrokopter.de/main.php?g2_view=core.DownloadItem&g2_itemId=11951}}]] == FETs und Transistoren der Bl-Ctrl als Schalter nutzen == Die Transistoren und FETs, die bereits mit dem Emitter, bzw. Source an Masse liegen können relativ leicht als Masseschalter verwendet werden. z.B. können direkt über die 12V Versorgungsspannung und einen FET, LED-Leisten angesteuert werden. /!\ Bei den SMD-Transistoren muss man die Leistung beachten! == Eingänge mit J16/J17 (FL-Ctrl) schalten == Bei einem Mikrokontroller lassen sich die Ports auch als Eingänge deklarieren. Die Ports PC0..PC2 bieten sich dabei an, denn diese wurden für die Motorenbemessung bereits auf Lötflächen herausgeführt. Durch die Einbindung eines Softwaremäßigen Pull-Up-Widerstands entfällt dieser Hardwareseitig. Dadurch kann z.B. J16/J17 der FL-CTRL direkt mit dem Eingang, z.B. PC2 des Light-CTRL verbunden werden. = Programmierung = == Programmieren WinAVR == /!\ Hier gibt es noch was zu tun... == Der Programmcode == Zu Beginn des Programms wird mit den Präprozessordirektiven gestartet. Hier werden die Unterprogramme und wichtige Parameter, wie z.B. die Prozessorgeschwindigkeit angegeben. {{{ // Einstellen des Systemtakts des µC auf 1Mhz. // UL gibt an, dass es ein unsigned-Long Datentyp ist. #define F_CPU 1000000UL // Erstellt eine Instanz des Prozessabbilds der Eingänge. Soll heißen, // dass die Zustände der Eingänge ständig in die Variable WP übergeben werden. #define WP PINC // Einbinden zusätzlicher Bibliotheken oder Unterprogramme. Z.B. die Funktionen // der Ein- und Ausgabe des ATMEL. #include #include }}} Im Hauptprogramm (main) werden zunächst die Parameter für die einzelnen Ports und Pins definiert. Pin C2 (BL-CTRL auch NULL_C genannt) wird als Eingang verwendet: {{{ int main(void) { // Variablendeklaration für Zeitschleifen uint8_t j; // Port C "pauschal" als Eingänge festlegen DDRC =0x00; // Pullup für PC2 aktivieren. Damit entfällt der Aufbau // eines Pull-Up Widerstandes für die Eingangsbeschaltung PORTC |= (1 << PC2); // Pin D3,D4,D5 und D7 als Ausgänge festlegen DDRD |= (1 << PD3)|(1 << PD4)|(1 << PD5)|(1 << PD7); }}} Das eigentliche Programm liest nun den Port C aus und führt bei einer logischen "0" an Pin C2 das Blink-Programm aus. Damit dies immer wieder passiert wird es in einer endlosen While-Schleife verpackt. {{{ // Unendlich lang wiederholen while(1) { // UND-Verknüpfung => Wenn PC2 auf LOW ist, dann... if (!(WP & (1< #FF (h) PORTD = 0xFF; // Mehrmaliger Durchlauf der Zeitschleife, um die // Delay-Zeit zu verlängern. FOR (j=0; j<10; j++) { _delay_ms(50); } //Alle Pins an Port D, außer PD5 deaktivieren // Pin D |7|6|5|4|3|2|1|0 // Binär:|0|0|0|0|1|0|0|0 (b) => #08 (h) PORTD = 0x08; // Mehrmaliger Durchlauf der Zeitschleife, um die // Delay-Zeit zu verlängern. for (j=0; j<10; j++) { _delay_ms(100); } }}} Wenn der Eingang ausgeschaltet bzw. über den Pullup wieder High-Signal (1) anliegt sollen die Leuchten alle ausgehen. Dazu wird die Else-Funktion der Schleife genutzt: {{{ else PORTD = 0x00; // PD0 deaktivieren }}} Zusammengesetzt, und ohne Kommentare sieht das ganze so aus: {{{ #define F_CPU 1000000UL #define WP PINC #include #include int main(void) { uint8_t j; DDRC =0x00; PORTC |= (1 << PC2); DDRD |= (1 << PD7)|(1 << PD3)|(1 << PD4)|(1 << PD5); while(1) { if (!(WP & (1<> /!\ Weitere Infos folgen... ---- . KategorieHardware KategorieProjekte KategorieFun KategorieBeleuchtung