Alias: Unser Portpin bekommt einen eindeutigen Namen
Unser im ersten Programm verwendeter Portpin wird in BASCOM korrekter Weise mit B.0 angesprochen. Immer wenn wir eine Veränderung an diesem Pin erreichen möchten, fügen wir diese Pinbezeichnung in unser Programm ein. Das ist nicht weiter schwierig und selbst bei Verwendung aller Controllerpins wird es uns sicher gelingen diese in korrekter Weise anzusprechen, auch wenn man dabei schon einmal schnell durcheinander kommen kann.
Wie erwähnt gibt es jedoch auch Controller, welche über wesentlich mehr I/O- Pins (Input / Output; also Eingänge und / oder Ausgänge) verfügen. Hier den Überblick zu wahren erfordert nicht nur einiges an Übung sondern auch viel Disziplin.
Es gibt in BASCOM aber einen viel einfacheren Weg. Wir können jedem beliebigen Pin einen frei wählbaren Namen zuweisen. Danach ersetzt BASCOM intern im Hintergrund und ohne das wir etwas davon sehen,wann immer diese "Ersatzbezeichnung" auftaucht diesen Bezeichner durch den zugewiesenen Portpin. Der entsprechende BASCOM- Befehl hierzu lautet: Alias
Wenn wir einem Portpin im Laufe unseres Programms mit dem Befehl Alias einen anderen, frei definierbaren Namen zuweisen, so ersetzt BASCOM intern an jeder Stelle im Programm, an welcher wir den Ersatznamen einfügen diesen durch den definierten Portpin. Ausnahmen bilden nur die von BASCOM verwendeten Schlüsselwörter, die nicht verwendet werden dürfen. Wir dürfen beispielsweise nicht das Wort "Timer" als Alias verwenden, da BASCOM dieses selber nutzt.
Wie sieht das jetzt in unserem Programm aus? Wir sprechen mit dem PortB.0 die mittlere LED auf unserem Experimentierboard an. Insgesamt haben wir auf der Platine fünf rote Leuchtdioden in einer Reihe, die eine logische Einheit bilden. Die mittlere LED ist also die dritte LED von links, sodass die Bezeichnung LED_3 schlüssig erscheint. Also werden wir die mittlere LED ab sofort LED_3 nennen und teilen dies BASCOM folgendermaßen mit:
Led_3 Alias Portb.0
Jetzt weiß BASCOM das wir mit LED_3 die mittlere rote LED meinen, die an PortB.0 angeschlossen ist. Wichtig ist, dass wir im Alias keine Leerzeichen verwenden dürfen. Zur optischen Trennung verwenden wir im Bedarfsfall den Unterstrich.
Hier folgt unser geändertes Programm als Ganzes. Die Definitionen der Ein- und Ausgänge, sowie die Aliasvergabe trennen wir wieder mit Kommentarzeilen. Dies erhöht bei umfangreicheren Programmen die Übersichtlichkeit erheblich, weshalb wir uns das gleich zu Beginn angewöhnen sollten.
Alles anzeigen
Ihr seht (hoffentlich) dass das Programm jetzt viel leichter zu lesen ist, da wir sofort erkennen, was wir schalten und nicht erst umständlich prüfen müssen an welchem Port unsere LEDangeschlossen ist.
Änderung des Portzustands mit Set und Reset
Als nächstes lernen wir eine weitere Möglichkeit kennen, die Zustände der Portpins zu ändern. Wir haben diesen bisher immer die Werte "0" und "1" zugewiesen und damit die beiden binären Möglichkeiten bestimmt.
Um einen binären Wert auf "1" zu setzen können wir auch den BASCOM- Befehl "Set" verwenden. Analog hierzu setzt der Befehl "Reset" einen binären Wert auf "0"
In einem Programm sieht die Nutzung der Befehle folgendermaßen aus:
Alles anzeigen
Die Verwendung von Reset und Set in Zusammenhang mit anderen Programmiertechniken folgt zu einem spätesren Zeitpunkt.
Änderung des Ausgangszustands mit Toggle
Wenn wir einen binären Ausgangszustand, also 0 oder 1 (LED ein oder LED aus) von dem einen in den anderen Zustand wechseln möchten, so können wir auf den BASCOM- Befehl Toggle zurückgreifen.
Den Toggle- Befehl interessiert dabei nicht, ob beispielsweise unsere LED im Programmablauf gerade eingeschaltet oder ausgeschaltet ist. Der vorhandene Zustand wird als Ausgangszustand verwendet und mit dem Toggle- Befehl ins Gegenteil umgekehrt. Das liest sich vielleicht kompliziert, ist in der Praxis aber ganz einfach:
Änderungen bei Verwendung von Toggle
LED ist eingeschaltet => Toggle => LED ist ausgeschaltet
LED ist ausgeschaltet => Toggle => LED ist eingeschaltet
Wir verwenden Toggle also immer, wenn wir den bestehenden (binären) Zustand umkehren möchten.
Da ein Blinker nichts anderes als eine ständige Umkehrung des Ausgangszustandes ist, bietet sich Toggle gut für die Umsetzung bei einem Blinker an, insbesondere wenn wir gleiche Impuls- und Pausenzeiten verwenden. Unser Programm verkürzt sich dabei in der Do- Loop- Schleife erheblich. Es sind nur noch zwei Anweisungen erforderlich:
Alles anzeigen
Erhöhung der Blinkfrequenz
In unserem Beispiel blinkt die LED eher gemächlich vor sich hin. Für Warnzwecke wäre es hilfreich, wenn dies schneller gehen würde. Da der Wait- Befehl aber nur ganzzahlige Werte annehmen kann, hilft dieser uns hier nicht weiter. Wie zuvor schon angedeutet gibt es in BASCOM aber verwandte Befehle und genau diese ermöglichen uns kürzere Schaltzeiten.
Mit dem Befehl Waitms haben wir die Möglichkeit die Waitzeit in Millisekunden anzugeben. Da 1.000 Millisekunden 1 Sekunde entsprechen könnten wir in unserem Progamm die Zeile:
Wait 1
auch durch die Zeile
Waitms 1000
ersetzen, ohne das sich irgend etwas am Programm selber ändert.
Versuchen wir unsere LED im Sekundenzyklus, also 0,5 Sekunden "an" und 0,5 Sekunden "aus" zu schalten. Die Zeile, in der zur Zeit noch "Wait 1" steht ändern wir also in "Waitms 500". Wir speichern,compilieren und flashen die Änderungen und sehen uns das Ergebnis auf dem Experimentierboard an.
Hier der Code:
Alles anzeigen
Der Vollständigkeit halber sei hier noch erwähnt, dass es auch den Befehl Waitus gibt, der Waitzeiten in Microsekunden ermöglicht, mögliche Werte: 1-65535 (16 Bit)
So sollte jetzt Eure Platine blinken:
Blinker Mitte waitms 500.gif
Vom Blinker zum Blitzer - nur ein kleiner Schritt
Wenn wir jetzt aus dem Blinker einen Blitzer machen möchten, müssen wir nur das Impuls- Pausenverhältnis ändern. Zum Beispiel 100 ms eingeschaltet und 900 ms ausgeschaltet.
Also, frisch an´s Werk, das können wir ja jetzt schon ganz schnell umsetzen. Da wir hier ungleiche Impuls- und Pausenzeiten haben, geht hier der Toggle- Befehl nicht:
Alles anzeigen
Wir übertragen jetzt das Programm in den Controller und vergleichen unser Ergebnis.
Blitzblinker.gif
So geht es weiter
Wir haben das Ende des ersten Abschnitts erreicht. Wir haben gelernt BASCOM und PonyProg zu Installieren und für unsere Nutzung vorzubereiten. Wir wissen jetzt, wie man ein Programm auf den Mikrocontroller übertägt und welche Schritte zur Inbetriebnahme des Experimentierboards notwendig sind.
Erste Experimente mit der mittleren Leuchdiode haben wir inzwischen mehrfach durchgeführt. Ihr habt jetzt die Gelegenheit nach Euren Vorstellungen verschiedene Leuchtmuster für diese LED zu programmieren und dabei Euer erworbenes Wissen zu testen.
Belasst es aber erst einmal bei dieser einen LED, auch wenn Euch die anderen 4 LED´s reizen. Im nächsten Abschnitt werden wir diese gemeinsam behandeln.
Hier geht´s weiter:1.1.2 Experimente mit der Leuchtdiodenzeile
Unser im ersten Programm verwendeter Portpin wird in BASCOM korrekter Weise mit B.0 angesprochen. Immer wenn wir eine Veränderung an diesem Pin erreichen möchten, fügen wir diese Pinbezeichnung in unser Programm ein. Das ist nicht weiter schwierig und selbst bei Verwendung aller Controllerpins wird es uns sicher gelingen diese in korrekter Weise anzusprechen, auch wenn man dabei schon einmal schnell durcheinander kommen kann.
Wie erwähnt gibt es jedoch auch Controller, welche über wesentlich mehr I/O- Pins (Input / Output; also Eingänge und / oder Ausgänge) verfügen. Hier den Überblick zu wahren erfordert nicht nur einiges an Übung sondern auch viel Disziplin.
Es gibt in BASCOM aber einen viel einfacheren Weg. Wir können jedem beliebigen Pin einen frei wählbaren Namen zuweisen. Danach ersetzt BASCOM intern im Hintergrund und ohne das wir etwas davon sehen,wann immer diese "Ersatzbezeichnung" auftaucht diesen Bezeichner durch den zugewiesenen Portpin. Der entsprechende BASCOM- Befehl hierzu lautet: Alias
Wenn wir einem Portpin im Laufe unseres Programms mit dem Befehl Alias einen anderen, frei definierbaren Namen zuweisen, so ersetzt BASCOM intern an jeder Stelle im Programm, an welcher wir den Ersatznamen einfügen diesen durch den definierten Portpin. Ausnahmen bilden nur die von BASCOM verwendeten Schlüsselwörter, die nicht verwendet werden dürfen. Wir dürfen beispielsweise nicht das Wort "Timer" als Alias verwenden, da BASCOM dieses selber nutzt.
Wie sieht das jetzt in unserem Programm aus? Wir sprechen mit dem PortB.0 die mittlere LED auf unserem Experimentierboard an. Insgesamt haben wir auf der Platine fünf rote Leuchtdioden in einer Reihe, die eine logische Einheit bilden. Die mittlere LED ist also die dritte LED von links, sodass die Bezeichnung LED_3 schlüssig erscheint. Also werden wir die mittlere LED ab sofort LED_3 nennen und teilen dies BASCOM folgendermaßen mit:
Led_3 Alias Portb.0
Jetzt weiß BASCOM das wir mit LED_3 die mittlere rote LED meinen, die an PortB.0 angeschlossen ist. Wichtig ist, dass wir im Alias keine Leerzeichen verwenden dürfen. Zur optischen Trennung verwenden wir im Bedarfsfall den Unterstrich.
Hier folgt unser geändertes Programm als Ganzes. Die Definitionen der Ein- und Ausgänge, sowie die Aliasvergabe trennen wir wieder mit Kommentarzeilen. Dies erhöht bei umfangreicheren Programmen die Übersichtlichkeit erheblich, weshalb wir uns das gleich zu Beginn angewöhnen sollten.
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.1
- '------------------------------------------------------------
- 'Beschreibung: Aliasvergabe
- '************************************************************
- $regfile ="attiny13.dat" 'verwendeter Controller
- $crystal =1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerteund Framesize zuweisen
- $SWSTACK=6
- $FRAMESIZE=28
- '========================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb.0 =Output 'Port b.0 als Ausgang
- Led_3 AliasPortB.0 'Umbenennen von PortB.0
- '========================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Led_3 =1 'Port B.0 einschalten
- Wait 1 '1 Sekunde warten
- Led_3 =0 'Port B.0 ausschalten
- Wait 1 '1 Sekunde warten
- Loop 'Zurück zu Do (Schleifenanfang)
- '=========================================================================
- End 'end program
Ihr seht (hoffentlich) dass das Programm jetzt viel leichter zu lesen ist, da wir sofort erkennen, was wir schalten und nicht erst umständlich prüfen müssen an welchem Port unsere LEDangeschlossen ist.
Änderung des Portzustands mit Set und Reset
Als nächstes lernen wir eine weitere Möglichkeit kennen, die Zustände der Portpins zu ändern. Wir haben diesen bisher immer die Werte "0" und "1" zugewiesen und damit die beiden binären Möglichkeiten bestimmt.
Um einen binären Wert auf "1" zu setzen können wir auch den BASCOM- Befehl "Set" verwenden. Analog hierzu setzt der Befehl "Reset" einen binären Wert auf "0"
In einem Programm sieht die Nutzung der Befehle folgendermaßen aus:
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.1
- '------------------------------------------------------------
- 'Beschreibung: Aliasvergabe
- '************************************************************
- $regfile ="attiny13.dat" 'verwendeter Controller
- $crystal =1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerteund Framesize zuweisen
- $SWSTACK=6
- $FRAMESIZE=28
- '========================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb.0 =Output 'Port b.0 als Ausgang
- Led_3 AliasPortB.0 'Umbenennen von PortB.0
- '========================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Set Led_3 'Port B.0 einschalten
- Wait 1 '1 Sekunde warten
- Reset Led_3 'Port B.0 ausschalten
- Wait 1 '1 Sekunde warten
- Loop 'Zurück zu Do (Schleifenanfang)
- '=========================================================================
- End 'end program
Die Verwendung von Reset und Set in Zusammenhang mit anderen Programmiertechniken folgt zu einem spätesren Zeitpunkt.
Änderung des Ausgangszustands mit Toggle
Wenn wir einen binären Ausgangszustand, also 0 oder 1 (LED ein oder LED aus) von dem einen in den anderen Zustand wechseln möchten, so können wir auf den BASCOM- Befehl Toggle zurückgreifen.
Den Toggle- Befehl interessiert dabei nicht, ob beispielsweise unsere LED im Programmablauf gerade eingeschaltet oder ausgeschaltet ist. Der vorhandene Zustand wird als Ausgangszustand verwendet und mit dem Toggle- Befehl ins Gegenteil umgekehrt. Das liest sich vielleicht kompliziert, ist in der Praxis aber ganz einfach:
Änderungen bei Verwendung von Toggle
LED ist eingeschaltet => Toggle => LED ist ausgeschaltet
LED ist ausgeschaltet => Toggle => LED ist eingeschaltet
Wir verwenden Toggle also immer, wenn wir den bestehenden (binären) Zustand umkehren möchten.
Da ein Blinker nichts anderes als eine ständige Umkehrung des Ausgangszustandes ist, bietet sich Toggle gut für die Umsetzung bei einem Blinker an, insbesondere wenn wir gleiche Impuls- und Pausenzeiten verwenden. Unser Programm verkürzt sich dabei in der Do- Loop- Schleife erheblich. Es sind nur noch zwei Anweisungen erforderlich:
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.1
- '------------------------------------------------------------
- 'Beschreibung: Aliasvergabe
- '************************************************************
- $regfile ="attiny13.dat" 'verwendeter Controller
- $crystal =1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerteund Framesize zuweisen
- $SWSTACK=6
- $FRAMESIZE=28
- '========================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb.0 =Output 'Port b.0 als Ausgang
- Led_3 AliasPortB.0 'Umbenennen von PortB.0
- '========================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Toggle Led_3 'Port B.0 umschalten
- Wait 1 '1 Sekunde warten
- Loop 'Zurück zu Do (Schleifenanfang)
- '=========================================================================
- End 'end program
Erhöhung der Blinkfrequenz
In unserem Beispiel blinkt die LED eher gemächlich vor sich hin. Für Warnzwecke wäre es hilfreich, wenn dies schneller gehen würde. Da der Wait- Befehl aber nur ganzzahlige Werte annehmen kann, hilft dieser uns hier nicht weiter. Wie zuvor schon angedeutet gibt es in BASCOM aber verwandte Befehle und genau diese ermöglichen uns kürzere Schaltzeiten.
Mit dem Befehl Waitms haben wir die Möglichkeit die Waitzeit in Millisekunden anzugeben. Da 1.000 Millisekunden 1 Sekunde entsprechen könnten wir in unserem Progamm die Zeile:
Wait 1
auch durch die Zeile
Waitms 1000
ersetzen, ohne das sich irgend etwas am Programm selber ändert.
Versuchen wir unsere LED im Sekundenzyklus, also 0,5 Sekunden "an" und 0,5 Sekunden "aus" zu schalten. Die Zeile, in der zur Zeit noch "Wait 1" steht ändern wir also in "Waitms 500". Wir speichern,compilieren und flashen die Änderungen und sehen uns das Ergebnis auf dem Experimentierboard an.
Hier der Code:
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.1
- '------------------------------------------------------------
- 'Beschreibung: Aliasvergabe
- '************************************************************
- $regfile ="attiny13.dat" 'verwendeter Controller
- $crystal =1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerteund Framesize zuweisen
- $SWSTACK=6
- $FRAMESIZE=28
- '========================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb.0 =Output 'Port b.0 als Ausgang
- Led_3 AliasPortB.0 'Umbenennen von PortB.0
- '========================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Toggle Led_3 'Port B.0 umschalten
- Waitms 500 '1 Sekunde warten
- Loop 'Zurück zu Do (Schleifenanfang)
- '=========================================================================
- End 'end program
Der Vollständigkeit halber sei hier noch erwähnt, dass es auch den Befehl Waitus gibt, der Waitzeiten in Microsekunden ermöglicht, mögliche Werte: 1-65535 (16 Bit)
So sollte jetzt Eure Platine blinken:
Blinker Mitte waitms 500.gif
Vom Blinker zum Blitzer - nur ein kleiner Schritt
Wenn wir jetzt aus dem Blinker einen Blitzer machen möchten, müssen wir nur das Impuls- Pausenverhältnis ändern. Zum Beispiel 100 ms eingeschaltet und 900 ms ausgeschaltet.
Also, frisch an´s Werk, das können wir ja jetzt schon ganz schnell umsetzen. Da wir hier ungleiche Impuls- und Pausenzeiten haben, geht hier der Toggle- Befehl nicht:
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.1
- '------------------------------------------------------------
- 'Beschreibung: Aliasvergabe
- '************************************************************
- $regfile ="attiny13.dat" 'verwendeter Controller
- $crystal =1200000 'Taktfrequenz
- $HWSTACK=6 'Stackwerteund Framesize zuweisen
- $SWSTACK=6
- $FRAMESIZE=28
- '========================================================================
- 'Ausgänge / Eingänge deklarieren / Aliasvergabe
- '------------------------------------------------------------------------------
- Config Portb.0 =Output 'Port b.0 als Ausgang
- Led_3 AliasPortB.0 'Umbenennen von PortB.0
- '========================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do 'Schleifenanfang
- Led_3=1 'Port B.0 einschalten
- Waitms 100 '0,1 Sekunde warten
- Led_3=0 'Port B.0 ausschalten
- Waitms 900 '0,9 Sekunde warten
- Loop 'Zurück zu Do (Schleifenanfang)
- '=========================================================================
- End 'end program
Blitzblinker.gif
So geht es weiter
Wir haben das Ende des ersten Abschnitts erreicht. Wir haben gelernt BASCOM und PonyProg zu Installieren und für unsere Nutzung vorzubereiten. Wir wissen jetzt, wie man ein Programm auf den Mikrocontroller übertägt und welche Schritte zur Inbetriebnahme des Experimentierboards notwendig sind.
Erste Experimente mit der mittleren Leuchdiode haben wir inzwischen mehrfach durchgeführt. Ihr habt jetzt die Gelegenheit nach Euren Vorstellungen verschiedene Leuchtmuster für diese LED zu programmieren und dabei Euer erworbenes Wissen zu testen.
Belasst es aber erst einmal bei dieser einen LED, auch wenn Euch die anderen 4 LED´s reizen. Im nächsten Abschnitt werden wir diese gemeinsam behandeln.
Hier geht´s weiter:1.1.2 Experimente mit der Leuchtdiodenzeile
5.020 mal gelesen
ledblu -
Jawohl so ist es toll danke Christian es ist ein sahnenstück wie du Schreibst und Erklärst toll so macht Spass zu Experimentieren und lese danke ( bitte eine kl. korrektur - LED_3 nennenund ) bis bald. Antonio