MCK 1.1.1 Experimente mit unserer blinkenden LED

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

Hinweis kann nach Kenntnisnahme deaktiviert werden!

  • 1.1.1 Experimente mit unserer blinkenden LED
    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.


    BASCOM-Quellcode

    1. '************************************************************
    2. ' Kleiner Mikrocontroller Einsteigerkurs
    3. ' (c) 2013/2014 ceperiga
    4. '------------------------------------------------------------
    5. ' Projektinfos: www.bascomforum.de
    6. '------------------------------------------------------------
    7. ' Stufe 1: Attiny 13
    8. '------------------------------------------------------------
    9. 'Informationen zur CC-Lizensierung:http://creativecommons.org
    10. '============================================================
    11. ' Name:
    12. ' Unit: 1.1.1
    13. '------------------------------------------------------------
    14. 'Beschreibung: Aliasvergabe
    15. '************************************************************
    16. $regfile ="attiny13.dat" 'verwendeter Controller
    17. $crystal =1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerteund Framesize zuweisen
    19. $SWSTACK=6
    20. $FRAMESIZE=28
    21. '========================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.0 =Output 'Port b.0 als Ausgang
    25. Led_3 AliasPortB.0 'Umbenennen von PortB.0
    26. '========================================================================
    27. 'Hauptprogramm
    28. '------------------------------------------------------------------------------
    29. Do 'Schleifenanfang
    30. Led_3 =1 'Port B.0 einschalten
    31. Wait 1 '1 Sekunde warten
    32. Led_3 =0 'Port B.0 ausschalten
    33. Wait 1 '1 Sekunde warten
    34. Loop 'Zurück zu Do (Schleifenanfang)
    35. '=========================================================================
    36. End 'end program
    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:

    BASCOM-Quellcode

    1. '************************************************************
    2. ' Kleiner Mikrocontroller Einsteigerkurs
    3. ' (c) 2013/2014 ceperiga
    4. '------------------------------------------------------------
    5. ' Projektinfos: www.bascomforum.de
    6. '------------------------------------------------------------
    7. ' Stufe 1: Attiny 13
    8. '------------------------------------------------------------
    9. 'Informationen zur CC-Lizensierung:http://creativecommons.org
    10. '============================================================
    11. ' Name:
    12. ' Unit: 1.1.1
    13. '------------------------------------------------------------
    14. 'Beschreibung: Aliasvergabe
    15. '************************************************************
    16. $regfile ="attiny13.dat" 'verwendeter Controller
    17. $crystal =1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerteund Framesize zuweisen
    19. $SWSTACK=6
    20. $FRAMESIZE=28
    21. '========================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.0 =Output 'Port b.0 als Ausgang
    25. Led_3 AliasPortB.0 'Umbenennen von PortB.0
    26. '========================================================================
    27. 'Hauptprogramm
    28. '------------------------------------------------------------------------------
    29. Do 'Schleifenanfang
    30. Set Led_3 'Port B.0 einschalten
    31. Wait 1 '1 Sekunde warten
    32. Reset Led_3 'Port B.0 ausschalten
    33. Wait 1 '1 Sekunde warten
    34. Loop 'Zurück zu Do (Schleifenanfang)
    35. '=========================================================================
    36. End 'end program
    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:


    BASCOM-Quellcode

    1. '************************************************************
    2. ' Kleiner Mikrocontroller Einsteigerkurs
    3. ' (c) 2013/2014 ceperiga
    4. '------------------------------------------------------------
    5. ' Projektinfos: www.bascomforum.de
    6. '------------------------------------------------------------
    7. ' Stufe 1: Attiny 13
    8. '------------------------------------------------------------
    9. 'Informationen zur CC-Lizensierung:http://creativecommons.org
    10. '============================================================
    11. ' Name:
    12. ' Unit: 1.1.1
    13. '------------------------------------------------------------
    14. 'Beschreibung: Aliasvergabe
    15. '************************************************************
    16. $regfile ="attiny13.dat" 'verwendeter Controller
    17. $crystal =1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerteund Framesize zuweisen
    19. $SWSTACK=6
    20. $FRAMESIZE=28
    21. '========================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.0 =Output 'Port b.0 als Ausgang
    25. Led_3 AliasPortB.0 'Umbenennen von PortB.0
    26. '========================================================================
    27. 'Hauptprogramm
    28. '------------------------------------------------------------------------------
    29. Do 'Schleifenanfang
    30. Toggle Led_3 'Port B.0 umschalten
    31. Wait 1 '1 Sekunde warten
    32. Loop 'Zurück zu Do (Schleifenanfang)
    33. '=========================================================================
    34. End 'end program
    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:


    BASCOM-Quellcode

    1. '************************************************************
    2. ' Kleiner Mikrocontroller Einsteigerkurs
    3. ' (c) 2013/2014 ceperiga
    4. '------------------------------------------------------------
    5. ' Projektinfos: www.bascomforum.de
    6. '------------------------------------------------------------
    7. ' Stufe 1: Attiny 13
    8. '------------------------------------------------------------
    9. 'Informationen zur CC-Lizensierung:http://creativecommons.org
    10. '============================================================
    11. ' Name:
    12. ' Unit: 1.1.1
    13. '------------------------------------------------------------
    14. 'Beschreibung: Aliasvergabe
    15. '************************************************************
    16. $regfile ="attiny13.dat" 'verwendeter Controller
    17. $crystal =1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerteund Framesize zuweisen
    19. $SWSTACK=6
    20. $FRAMESIZE=28
    21. '========================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.0 =Output 'Port b.0 als Ausgang
    25. Led_3 AliasPortB.0 'Umbenennen von PortB.0
    26. '========================================================================
    27. 'Hauptprogramm
    28. '------------------------------------------------------------------------------
    29. Do 'Schleifenanfang
    30. Toggle Led_3 'Port B.0 umschalten
    31. Waitms 500 '1 Sekunde warten
    32. Loop 'Zurück zu Do (Schleifenanfang)
    33. '=========================================================================
    34. End 'end program
    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:

    BASCOM-Quellcode

    1. '************************************************************
    2. ' Kleiner Mikrocontroller Einsteigerkurs
    3. ' (c) 2013/2014 ceperiga
    4. '------------------------------------------------------------
    5. ' Projektinfos: www.bascomforum.de
    6. '------------------------------------------------------------
    7. ' Stufe 1: Attiny 13
    8. '------------------------------------------------------------
    9. 'Informationen zur CC-Lizensierung:http://creativecommons.org
    10. '============================================================
    11. ' Name:
    12. ' Unit: 1.1.1
    13. '------------------------------------------------------------
    14. 'Beschreibung: Aliasvergabe
    15. '************************************************************
    16. $regfile ="attiny13.dat" 'verwendeter Controller
    17. $crystal =1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerteund Framesize zuweisen
    19. $SWSTACK=6
    20. $FRAMESIZE=28
    21. '========================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.0 =Output 'Port b.0 als Ausgang
    25. Led_3 AliasPortB.0 'Umbenennen von PortB.0
    26. '========================================================================
    27. 'Hauptprogramm
    28. '------------------------------------------------------------------------------
    29. Do 'Schleifenanfang
    30. Led_3=1 'Port B.0 einschalten
    31. Waitms 100 '0,1 Sekunde warten
    32. Led_3=0 'Port B.0 ausschalten
    33. Waitms 900 '0,9 Sekunde warten
    34. Loop 'Zurück zu Do (Schleifenanfang)
    35. '=========================================================================
    36. End 'end program
    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

    4.969 mal gelesen

Kommentare 1

  • 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