1.1.2 Experimente mit der Leuchtdiodenzeile
Einleitung
Nachdem wir unsere erste LED unter Kontrolle haben, werden wir uns in diesem Abschnitt nun der gesamten LED- Zeile widmen. Hierfür reichen nach wie vor unsere 5 Jumper, sodass immer noch keine Drahtbrücken eingesetzt werden müssen. Zur Erinnerung: alle fünf Jumperstecker verbinden den oberen mit dem mittleren Stift auf den dreipoligen Stiftleisten unter den roten LED´s. Der untere Stiftbleibt jeweils unbelegt. So werden die Jumper für dieses Kapitel gesteckt:
Jumperbelegung Lauflicht.jpg
Da wir uns zwischenzeitlich eingearbeitet haben setze ich bestimmte Vorgehensweisen, welche im Vorfeld schon erklärt wurden als gegeben voraus.Dies bedeutet dass einige Arbeitsschritte nicht mehr so ausführlich erklärt werden. Sollte das ein oder andere nicht verständlich sein, so sucht Euch die entsprechenden Bereiche in der vorangegangenen Erklärungen noch einmal heraus. Aber keine Sorge- ich denke Ihr werdet alles genauso leicht wie bishe rverstehen.
Nach dem Doppelblitzer nun die 2 LED- Variante
Im letzten Kapitel haben wir zum Abschluß einen Doppelblitzer programmiert.Diesen kennen wir alle vornehmlich von den Einsatzfahrzeugen im öffentlichen Straßenverkehr. Das diese gelb oder Blau sind und nicht wie unsere LED`s hier rot, soll uns erst einmal nicht stören. Was wir jetzt auf alle Fälle nachahmen können sind zwei wechselseitig aufblitzende Leuchtdioden. Um einen gewissen Abstand für den Effekt zu bekommen verwenden wir hierfür die beiden äußeren Leuchtdioden welche von Port PB1 (links) und PB3 (rechts) angesteuert werden. Unsere bisherige LED an PB0 (mitte) wird hierbei nicht verwendet.
Wir configurieren also die beiden Portpins als Ausgang und weisen diesen eindeutige Aliasnamen zu, damit das Programm überschaubarer bleibt. Das ist hier zwar noch nicht unbedingt notwendig, es gibt aber auch Controller mit weitaus mehr Portpins, wo man dann leicht den Überblick verliert. Wenn wir uns hier schon eine eindeutige Aliasverwendung angewöhnen, haben wir es später leichter (Was Hänschen nicht lernt ...).
Darüber hinaus wurden die Impuls- und Pausenzeiten verändert um das Blitzen dem Originaleffekt anzupassen. Ihr habt hier andere Vorstellungen? - kein Problem, passt die Zeiten einfach an Eure Wünsche an. Aber zuerst testet das folgende Programm:
Alles anzeigen
Doppelblitzer 2 LEDs.gif
Schon hätten wir eine erste sinnvolle Anwendung, zumindest für Modellbauer. Mit konventioneller Elektronik aufgebaut wäre die Schaltung viel umfangreicher. Der Attiny 13, die zwei Vorwiderstände und zwei blaue oder gelbe LED´s passen locker (auf einem Stück Lochrasterplatine) auch in einen PKW im Maßstab 1: 87 (bekanntlich HO). Solche Lichteffekte, die wir jetzt ganz einfach und preiswert bauen können werten die Fahrzeuge enorm auf. Da wir noch LED´s übrig haben programmieren wir doch gleich noch etwas dazu: einen
Warnblinker zusätzlich zum Doppelblitzer
Wenn wir uns oben unser Programm ansehen und alle Schaltzeiten zusammenzählen kommen wir auf eine Gesamtzeit von 500 ms pro Durchlauf. Dies entspricht genau der Zeit, die wir beim Warnblinker jeweils für die Leucht- und Dunkelphase benötigen.
Na, wißt Ihr noch, welcher Befehl hier optimal einsetzbar ist? - Ja, richtig,der Toggle Befehl. "Toggeln" wir doch nach jedem Blitzdurchlauf einfach die LED´s PB2 und PB4:
Alles anzeigen
Nach Ergänzung der Configurations- und Aliaszeilen reichen uns zwei weitere (Toggle) Befehle nach dem Pausenbefehl (waitms 150). Spätestens jetzt werden alle beim Anblick Eurer Modellfahrzeuge neidisch.
Wenn wir auch keine blauen LED´s auf der Platine haben, können wir dennoch auf zwei gelbe LED´s zurückgreifen. Die mittlere LED des Würfels läßt sich ja einzeln ansteuern und liegt auf gleicher Höhe mit der gelben Ampel- LED.
Wir verbinden also Stecker W3 mit C2 und A2 mit C4 und stecken die Jumper PB2 und PB4 von der oberen in die untere Position. Schon übernehmen die beiden gelben LED´s die Funktion der Warnblinkanlage. Die Steckerbezeichnungen entnehmt Ihr dem Bestückungsdruck. Wir werden diese in Zukunft noch öfter verwenden, sodass es nicht schaden kann, wenn Ihr Euch ein wenig mit den Stiftbezeichnungen befasst. So wie oben werde ich zukünftig des öfteren die mit den Kabeln herzustellenden Verbindungen benennen.
Beachtet auch die umgesteckten Jumper!
Steckbrücken.gif
So werden Brücken und Jumper für den Doppelblitzer mit Warnblinker gesetzt
Alles richtig? Na dann schalten wir mal ein:
Blitzer mit WB ani.gif
Als die "Lampen" laufen lernten
Lauflichter, früher überwiegend in Reklameleuchtanlagen eingesetzt waren zu Anfang nicht einfach umzusetzten. Zu Beginn waren hier motorgetriebene Nockenschaltwerke im Einsatz, später mit hohem Bauteilaufwand hergestellte Ringzähler. So einfach wie heute war es noch nie. Auch ist unser Mikrocontroller was sowohl die Zeit, als auch die Leuchtmuster angeht viel flexibler. Verzeiht mir, wenn ich in meinen Beispielen hier des öfteren die Modellbahn als Beispiel anführe, aber damit lassen sich viele Anwendungsbeispiele sehr gut erklären, obwohl ich selber noch nicht mal eine Modellbahn besitze (außer dem LGB- Schienen- und Fahrzeugpark, der seit meiner "Jugend" sein Dasein in irgendwelchen Kartons fristet).
Erstes Lauflicht
Zu Beginn fangen wir mal mit einem einfachen, von links nach rechts laufenden Leuchtpunkt an. Dazu müssen wir selbstverständlich alle 5 Portpins(B0- B4) als Ausgänge configurieren. Wenn wir einen gesamten Port als Ausgang definieren können wir uns Schreibarbeit sparen. Wir verwenden einfach: PORTB= Output. Als Aliasnamen verwenden wir jetzt nicht "rechts" und "links" sondern 1- 5 von links beginnend.
Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout "verdrahtet" sind. Bei LED 1, 2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0, und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
Als Zeit starten wir mit 200 ms. Vorher stecken wir die Jumper noch einmal für unsere folgenden Versuche um und entfernen die Kabelbrücken, denn diese werden erst einmal nicht benötigt:
Jumperbelegung Lauflicht.jpg
Hier das Programm:
Alles anzeigen
Und das passiert nach dem Compilieren und Flashen auf unserer Platine:
Erstes Lauflicht ani.gif
Leuchtreklame
Atmel ani kl.gif
Zu Anfang dieses Kapitels habe ich ja die Leuchtreklame bereits erwähnt und mit der Modellbahn habe ich ebenfalls schon gedroht. Wollen wir also eine Leuchtreklame nachbilden, bei der die Leuchtdioden der Reihe nach aufleuchten, eine Weile gemeinsam leuchten und dann gemeinsam verlöschen; nach einer Pause geht´s dann wieder von Vorne los. Hierfür entfernen wir lediglich die Befehle, welche für das Ausschalten der LED´s verantwortlich sind und programmieren die Pausenzeiten. Um alle Ausgänge des Ports abzuschalten verwenden wir den Befehl Portb = 0. Das spart Schreibarbeit und fördert die Übersichtlichkeit bei späteren, komplexeren Programmen.
Alles anzeigen
Ein Beispiel für eine praktische Anwendung habt Ihr oben ja schon gesehen.Hier folgt noch unsere Experimentierplatine:
Leuchtreklame ani.gif
Leuchtbalken in zwei Richtungen
Mit einem Leuchtbalken, welcher zunächst von links nach rechts durchläuft und anschließend von rechts nach links läuft möchte ich an dieser Stelle die Leuchtdiodenzeile zunächst verlassen. Wenn wir zu einem späteren Zeitpunkt die Verwendung von Variablen und die Timerfunktion kennen gelernt haben, werden wir zu dieser Thematik noch einmal zurückkehren und einige Beispiele ohne den Waitbefehl erneut umsetzen. Auch bieten sich gerade bei Lauflichtern "Schiebefunktionen" an, welche wir ebenfalls später kennen lernen werden.
Hier jetzt erst mal der Code für das oben beschriebene Lauflicht. Ladet dieses auf Euer Experimentierboard und versucht anhand des Leuchtmusters den Code zu analysieren.
Auch wenn wir diesen Bereich jetzt offiziell verlassen könnt Ihr natürlich neue Leuchtmuster entwickeln. Die 5 LED´s des Experimentierboards könnt Ihr fast beliebiebig schalten wobei nur der Speicher des Attiny 13 eine Grenze darstellt.
Alles anzeigen
Rchts-linkslauflicht ani.gif
Tips für eigene Experimente
Baustellensicherung.jpg
Quelle: Internet sos24h.de
Mir fällt dabei sofort wieder etwas zum Thema Modellbahn ein. Zum ersten ein abgewandeltes "normales" Lauflicht als Baustellenabsicherung. Dabei können wir das mit dem Mikrocontroller auch leicht so programmieren, dass die einzelnen LED´s der Reihe nach aufblitzen. Dies ist mit konventioneller Elektronik erheblich aufwendiger.
Darüber hinaus könnt Ihr als Übung ja auch mal den Lichteffekt einer Autobahnwanderbaustelle nachstellen (blinkender Pfeil und blitzende Warnleuchten, siehe oben) Hier kann die mittlere "Würfel-LED" den Pfeil symbolisieren. An Anschluß W2 könnt Ihr die beiden mittleren "Würfel-LED´s" gleichzeitig ansteuer
Weiter geht es mit der Ampelsteuerung
Einleitung
Nachdem wir unsere erste LED unter Kontrolle haben, werden wir uns in diesem Abschnitt nun der gesamten LED- Zeile widmen. Hierfür reichen nach wie vor unsere 5 Jumper, sodass immer noch keine Drahtbrücken eingesetzt werden müssen. Zur Erinnerung: alle fünf Jumperstecker verbinden den oberen mit dem mittleren Stift auf den dreipoligen Stiftleisten unter den roten LED´s. Der untere Stiftbleibt jeweils unbelegt. So werden die Jumper für dieses Kapitel gesteckt:
Jumperbelegung Lauflicht.jpg
Da wir uns zwischenzeitlich eingearbeitet haben setze ich bestimmte Vorgehensweisen, welche im Vorfeld schon erklärt wurden als gegeben voraus.Dies bedeutet dass einige Arbeitsschritte nicht mehr so ausführlich erklärt werden. Sollte das ein oder andere nicht verständlich sein, so sucht Euch die entsprechenden Bereiche in der vorangegangenen Erklärungen noch einmal heraus. Aber keine Sorge- ich denke Ihr werdet alles genauso leicht wie bishe rverstehen.
Nach dem Doppelblitzer nun die 2 LED- Variante
Im letzten Kapitel haben wir zum Abschluß einen Doppelblitzer programmiert.Diesen kennen wir alle vornehmlich von den Einsatzfahrzeugen im öffentlichen Straßenverkehr. Das diese gelb oder Blau sind und nicht wie unsere LED`s hier rot, soll uns erst einmal nicht stören. Was wir jetzt auf alle Fälle nachahmen können sind zwei wechselseitig aufblitzende Leuchtdioden. Um einen gewissen Abstand für den Effekt zu bekommen verwenden wir hierfür die beiden äußeren Leuchtdioden welche von Port PB1 (links) und PB3 (rechts) angesteuert werden. Unsere bisherige LED an PB0 (mitte) wird hierbei nicht verwendet.
Wir configurieren also die beiden Portpins als Ausgang und weisen diesen eindeutige Aliasnamen zu, damit das Programm überschaubarer bleibt. Das ist hier zwar noch nicht unbedingt notwendig, es gibt aber auch Controller mit weitaus mehr Portpins, wo man dann leicht den Überblick verliert. Wenn wir uns hier schon eine eindeutige Aliasverwendung angewöhnen, haben wir es später leichter (Was Hänschen nicht lernt ...).
Darüber hinaus wurden die Impuls- und Pausenzeiten verändert um das Blitzen dem Originaleffekt anzupassen. Ihr habt hier andere Vorstellungen? - kein Problem, passt die Zeiten einfach an Eure Wünsche an. Aber zuerst testet das folgende Programm:
BASCOM-Quellcode
- '************************************************************
- ' Kleiner Mikrocontroller Einsteigerkurs
- ' (c) 2013/2014 ceperiga
- '------------------------------------------------------------
- ' Projektinfos: www.bascomforum.de
- '------------------------------------------------------------
- ' Stufe 1: Attiny 13
- '------------------------------------------------------------
- 'Informationen zur CC-Lizensierung:http://creativecommons.org
- '============================================================
- ' Name:
- ' Unit: 1.1.2
- '------------------------------------------------------------
- 'Beschreibung: Doppelblitzer mit 2 Leuchtdioden
- '************************************************************
- $regfile = "attiny13.dat" 'verwendeter Controller
- $crystal = 1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerte und Framesize zuweisen
- $swstack = 6
- $framesize = 28
- '==============================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb.1 = Output 'Port b.1 als Ausgang
- Config Portb.3 = Output 'Port b.3 als Ausgang
- Led_links Alias PortB.1 'Umbenennen von PortB.1
- Led_rechts Alias PortB.3 'Umbenennen von PortB.3
- '==============================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Led_links = 1 'Port B.1 einschalten
- Waitms 50 '50 ms warten
- Led_links = 0 'Port B.1 ausschalten
- Waitms 50 '50 ms warten
- Led_links = 1 'Port B.1 einschalten
- Waitms 50 '50 ms warten
- Led_links = 0 'Port B.1 ausschalten
- Waitms 50 '50 ms warten
- Led_rechts = 1 'Port B.3 einschalten
- Waitms 50 '50 ms warten
- Led_rechts = 0 'Port B.3 ausschalten
- Waitms 50 '50 ms warten
- Led_rechts = 1 'Port B.3 einschalten
- Waitms 50 '50 ms warten
- Led_rechts = 0 'Port B.1 ausschalten
- Waitms 150 '150 ms warten
- Loop 'Zurück zu Do (Schleifenanfang)
- '==============================================================================
- End 'end program
Doppelblitzer 2 LEDs.gif
Schon hätten wir eine erste sinnvolle Anwendung, zumindest für Modellbauer. Mit konventioneller Elektronik aufgebaut wäre die Schaltung viel umfangreicher. Der Attiny 13, die zwei Vorwiderstände und zwei blaue oder gelbe LED´s passen locker (auf einem Stück Lochrasterplatine) auch in einen PKW im Maßstab 1: 87 (bekanntlich HO). Solche Lichteffekte, die wir jetzt ganz einfach und preiswert bauen können werten die Fahrzeuge enorm auf. Da wir noch LED´s übrig haben programmieren wir doch gleich noch etwas dazu: einen
Warnblinker zusätzlich zum Doppelblitzer
Wenn wir uns oben unser Programm ansehen und alle Schaltzeiten zusammenzählen kommen wir auf eine Gesamtzeit von 500 ms pro Durchlauf. Dies entspricht genau der Zeit, die wir beim Warnblinker jeweils für die Leucht- und Dunkelphase benötigen.
Na, wißt Ihr noch, welcher Befehl hier optimal einsetzbar ist? - Ja, richtig,der Toggle Befehl. "Toggeln" wir doch nach jedem Blitzdurchlauf einfach die LED´s PB2 und PB4:
BASCOM-Quellcode
- '************************************************************
- ' Kleiner Mikrocontroller Einsteigerkurs
- ' (c) 2013/2014 ceperiga
- '------------------------------------------------------------
- ' Projektinfos: www.bascomforum.de
- '------------------------------------------------------------
- ' Stufe 1: Attiny 13
- '------------------------------------------------------------
- 'Informationen zur CC-Lizensierung:http://creativecommons.org
- '============================================================
- ' Name:
- ' Unit: 1.1.2
- '------------------------------------------------------------
- 'Beschreibung: Doppelblitzer mit Warnblinker
- '************************************************************
- $regfile = "attiny13.dat" 'verwendeter Controller
- $crystal = 1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerte und Framesize zuweisen
- $swstack = 6
- $framesize = 28
- '==============================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb.1 = Output 'Port b.1 als Ausgang
- Config Portb.3 = Output 'Port b.3 als Ausgang
- Config Portb.2 = Output 'Port b.2 als Ausgang
- Config Portb.4 = Output 'Port b.4 als Ausgang
- Led_links Alias Portb.1 'Umbenennen von PortB.1
- Led_rechts Alias Portb.3 'Umbenennen von PortB.3
- Blinker_links Alias Portb.2 'Umbenennen von PortB.2
- Blinker_rechts Alias Portb.4 'Umbenennen von PortB.4
- '==============================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Led_links = 1 'Port B.1 einschalten
- Waitms 50 '50 ms warten
- Led_links = 0 'Port B.1 ausschalten
- Waitms 50 '50 ms warten
- Led_links = 1 'Port B.1 einschalten
- Waitms 50 '50 ms warten
- Led_links = 0 'Port B.1 ausschalten
- Waitms 50 '50 ms warten
- Led_rechts = 1 'Port B.3 einschalten
- Waitms 50 '50 ms warten
- Led_rechts = 0 'Port B.3 ausschalten
- Waitms 50 '50 ms warten
- Led_rechts = 1 'Port B.3 einschalten
- Waitms 50 '50 ms warten
- Led_rechts = 0 'Port B.1 ausschalten
- Waitms 150 '150 ms warten
- 'Warnblinker toggeln
- Toggle Blinker_links
- Toggle Blinker_rechts
- Loop 'Zurück zu Do (Schleifenanfang)
- '==============================================================================
- End 'end program
Nach Ergänzung der Configurations- und Aliaszeilen reichen uns zwei weitere (Toggle) Befehle nach dem Pausenbefehl (waitms 150). Spätestens jetzt werden alle beim Anblick Eurer Modellfahrzeuge neidisch.
Wenn wir auch keine blauen LED´s auf der Platine haben, können wir dennoch auf zwei gelbe LED´s zurückgreifen. Die mittlere LED des Würfels läßt sich ja einzeln ansteuern und liegt auf gleicher Höhe mit der gelben Ampel- LED.
Wir verbinden also Stecker W3 mit C2 und A2 mit C4 und stecken die Jumper PB2 und PB4 von der oberen in die untere Position. Schon übernehmen die beiden gelben LED´s die Funktion der Warnblinkanlage. Die Steckerbezeichnungen entnehmt Ihr dem Bestückungsdruck. Wir werden diese in Zukunft noch öfter verwenden, sodass es nicht schaden kann, wenn Ihr Euch ein wenig mit den Stiftbezeichnungen befasst. So wie oben werde ich zukünftig des öfteren die mit den Kabeln herzustellenden Verbindungen benennen.
Beachtet auch die umgesteckten Jumper!
Steckbrücken.gif
So werden Brücken und Jumper für den Doppelblitzer mit Warnblinker gesetzt
Alles richtig? Na dann schalten wir mal ein:
Blitzer mit WB ani.gif
Als die "Lampen" laufen lernten
Lauflichter, früher überwiegend in Reklameleuchtanlagen eingesetzt waren zu Anfang nicht einfach umzusetzten. Zu Beginn waren hier motorgetriebene Nockenschaltwerke im Einsatz, später mit hohem Bauteilaufwand hergestellte Ringzähler. So einfach wie heute war es noch nie. Auch ist unser Mikrocontroller was sowohl die Zeit, als auch die Leuchtmuster angeht viel flexibler. Verzeiht mir, wenn ich in meinen Beispielen hier des öfteren die Modellbahn als Beispiel anführe, aber damit lassen sich viele Anwendungsbeispiele sehr gut erklären, obwohl ich selber noch nicht mal eine Modellbahn besitze (außer dem LGB- Schienen- und Fahrzeugpark, der seit meiner "Jugend" sein Dasein in irgendwelchen Kartons fristet).
Erstes Lauflicht
Zu Beginn fangen wir mal mit einem einfachen, von links nach rechts laufenden Leuchtpunkt an. Dazu müssen wir selbstverständlich alle 5 Portpins(B0- B4) als Ausgänge configurieren. Wenn wir einen gesamten Port als Ausgang definieren können wir uns Schreibarbeit sparen. Wir verwenden einfach: PORTB= Output. Als Aliasnamen verwenden wir jetzt nicht "rechts" und "links" sondern 1- 5 von links beginnend.
Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout "verdrahtet" sind. Bei LED 1, 2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0, und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
Als Zeit starten wir mit 200 ms. Vorher stecken wir die Jumper noch einmal für unsere folgenden Versuche um und entfernen die Kabelbrücken, denn diese werden erst einmal nicht benötigt:
Jumperbelegung Lauflicht.jpg
Hier das Programm:
BASCOM-Quellcode
- '************************************************************
- ' Kleiner Mikrocontroller Einsteigerkurs
- ' (c) 2013/2014 ceperiga
- '------------------------------------------------------------
- ' Projektinfos: www.bascomforum.de
- '------------------------------------------------------------
- ' Stufe 1: Attiny 13
- '------------------------------------------------------------
- 'Informationen zur CC-Lizensierung:http://creativecommons.org
- '============================================================
- ' Name:
- ' Unit: 1.1.2
- '------------------------------------------------------------
- 'Beschreibung: Erstes Lauflicht
- '************************************************************
- $regfile = "attiny13.dat" 'verwendeter Controller
- $crystal = 1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerte und Framesize zuweisen
- $swstack = 6
- $framesize = 28
- '==============================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb = Output ' Ganzer Port B als Ausgang
- Led1 Alias Portb.1
- Led2 Alias Portb.2
- Led3 Alias Portb.0
- Led4 Alias Portb.4
- Led5 Alias Portb.3
- ' Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout
- ' "verdrahtet" sind. Bei LED 1,2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0,
- ' und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
- '==============================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Led1 = 1
- Waitms 200
- Led1 = 0
- Led2 = 1
- Waitms 200
- Led2 = 0
- Led3 = 1
- Waitms 200
- Led3 = 0
- Led4 = 1
- Waitms 200
- Led4 = 0
- Led5 = 1
- Waitms 200
- Led5 = 0
- Loop 'Zurück zu Do (Schleifenanfang)
- '==============================================================================
- End 'end program
Und das passiert nach dem Compilieren und Flashen auf unserer Platine:
Erstes Lauflicht ani.gif
Leuchtreklame
Atmel ani kl.gif
Zu Anfang dieses Kapitels habe ich ja die Leuchtreklame bereits erwähnt und mit der Modellbahn habe ich ebenfalls schon gedroht. Wollen wir also eine Leuchtreklame nachbilden, bei der die Leuchtdioden der Reihe nach aufleuchten, eine Weile gemeinsam leuchten und dann gemeinsam verlöschen; nach einer Pause geht´s dann wieder von Vorne los. Hierfür entfernen wir lediglich die Befehle, welche für das Ausschalten der LED´s verantwortlich sind und programmieren die Pausenzeiten. Um alle Ausgänge des Ports abzuschalten verwenden wir den Befehl Portb = 0. Das spart Schreibarbeit und fördert die Übersichtlichkeit bei späteren, komplexeren Programmen.
BASCOM-Quellcode
- '************************************************************
- ' Kleiner Mikrocontroller Einsteigerkurs
- ' (c) 2013/2014 ceperiga
- '------------------------------------------------------------
- ' Projektinfos: www.bascomforum.de
- '------------------------------------------------------------
- ' Stufe 1: Attiny 13
- '------------------------------------------------------------
- 'Informationen zur CC-Lizensierung:http://creativecommons.org
- '============================================================
- ' Name:
- ' Unit: 1.1.2
- '------------------------------------------------------------
- 'Beschreibung: "Leuchtreklame"
- '************************************************************
- $regfile = "attiny13.dat" 'verwendeter Controller
- $crystal = 1200000 'Taktfrequenz
- $hwstack = 6 'Stackwerte und Framesize zuweisen
- $swstack = 6
- $framesize = 28
- '==============================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb = Output ' Ganzer Port B als Ausgang
- Led1 Alias Portb.1
- Led2 Alias Portb.2
- Led3 Alias Portb.0
- Led4 Alias Portb.4
- Led5 Alias Portb.3
- ' Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout
- ' "verdrahtet" sind. Bei LED 1,2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0,
- ' und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
- '==============================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Led1 = 1
- Waitms 500
- Led2 = 1
- Waitms 500
- Led3 = 1
- Waitms 500
- Led4 = 1
- Waitms 500
- Led5 = 1
- Waitms 1300
- Portb = 0
- Waitms 1300
- Loop 'Zurück zu Do (Schleifenanfang)
- '==============================================================================
- End 'end program
Ein Beispiel für eine praktische Anwendung habt Ihr oben ja schon gesehen.Hier folgt noch unsere Experimentierplatine:
Leuchtreklame ani.gif
Leuchtbalken in zwei Richtungen
Mit einem Leuchtbalken, welcher zunächst von links nach rechts durchläuft und anschließend von rechts nach links läuft möchte ich an dieser Stelle die Leuchtdiodenzeile zunächst verlassen. Wenn wir zu einem späteren Zeitpunkt die Verwendung von Variablen und die Timerfunktion kennen gelernt haben, werden wir zu dieser Thematik noch einmal zurückkehren und einige Beispiele ohne den Waitbefehl erneut umsetzen. Auch bieten sich gerade bei Lauflichtern "Schiebefunktionen" an, welche wir ebenfalls später kennen lernen werden.
Hier jetzt erst mal der Code für das oben beschriebene Lauflicht. Ladet dieses auf Euer Experimentierboard und versucht anhand des Leuchtmusters den Code zu analysieren.
Auch wenn wir diesen Bereich jetzt offiziell verlassen könnt Ihr natürlich neue Leuchtmuster entwickeln. Die 5 LED´s des Experimentierboards könnt Ihr fast beliebiebig schalten wobei nur der Speicher des Attiny 13 eine Grenze darstellt.
BASCOM-Quellcode
- '************************************************************
- ' Kleiner Mikrocontroller Einsteigerkurs
- ' (c) 2013/2014 ceperiga
- '------------------------------------------------------------
- ' Projektinfos: www.bascomforum.de
- '------------------------------------------------------------
- ' Stufe 1: Attiny 13
- '------------------------------------------------------------
- 'Informationen zur CC-Lizensierung:http://creativecommons.org
- '============================================================
- ' Name:
- ' Unit: 1.1.2
- '------------------------------------------------------------
- 'Beschreibung: Leuchtbalken rechts / links
- '************************************************************
- $regfile = "attiny13.dat" 'verwendeter Controller
- $crystal = 1200000 'Taktfrequenz
- $hwstack = 6 'Stackwerte und Framesize zuweisen
- $swstack = 6
- $framesize = 28
- '==============================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb = Output ' Ganzer Port B als Ausgang
- Led1 Alias Portb.1
- Led2 Alias Portb.2
- Led3 Alias Portb.0
- Led4 Alias Portb.4
- Led5 Alias Portb.3
- ' Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout
- ' "verdrahtet" sind. Bei LED 1,2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0,
- ' und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
- '==============================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- ' Von links nach rechts
- Led1 = 1
- Waitms 200
- Led2 = 1
- Waitms 200
- Led3 = 1
- Waitms 200
- Led4 = 1
- Waitms 200
- Led5 = 1
- Waitms 200
- Led1 = 0
- Waitms 200
- Led2 = 0
- Waitms 200
- Led3 = 0
- Waitms 200
- Led4 = 0
- Waitms 200
- Led5 = 0
- Waitms 200
- ' Von rechts nach links
- Led5 = 1
- Waitms 200
- Led4 = 1
- Waitms 200
- Led3 = 1
- Waitms 200
- Led2 = 1
- Waitms 200
- Led1 = 1
- Waitms 200
- Led5 = 0
- Waitms 200
- Led4 = 0
- Waitms 200
- Led3 = 0
- Waitms 200
- Led2 = 0
- Waitms 200
- Led1 = 0
- Waitms 200
- Loop 'Zurück zu Do (Schleifenanfang)
- '==============================================================================
- End 'end program
Rchts-linkslauflicht ani.gif
Tips für eigene Experimente
Baustellensicherung.jpg
Quelle: Internet sos24h.de
Mir fällt dabei sofort wieder etwas zum Thema Modellbahn ein. Zum ersten ein abgewandeltes "normales" Lauflicht als Baustellenabsicherung. Dabei können wir das mit dem Mikrocontroller auch leicht so programmieren, dass die einzelnen LED´s der Reihe nach aufblitzen. Dies ist mit konventioneller Elektronik erheblich aufwendiger.
Darüber hinaus könnt Ihr als Übung ja auch mal den Lichteffekt einer Autobahnwanderbaustelle nachstellen (blinkender Pfeil und blitzende Warnleuchten, siehe oben) Hier kann die mittlere "Würfel-LED" den Pfeil symbolisieren. An Anschluß W2 könnt Ihr die beiden mittleren "Würfel-LED´s" gleichzeitig ansteuer
Weiter geht es mit der Ampelsteuerung
13.660 mal gelesen