MCK 1.1.2 Experimente mit der Leuchtdiodenzeile

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!

  • Weiter geht es mit der kompletten Leuchtdiodenzeile
    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:

    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.2
    13. '------------------------------------------------------------
    14. 'Beschreibung: Doppelblitzer mit 2 Leuchtdioden
    15. '************************************************************
    16. $regfile = "attiny13.dat" 'verwendeter Controller
    17. $crystal = 1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerte und Framesize zuweisen
    19. $swstack = 6
    20. $framesize = 28
    21. '==============================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.1 = Output 'Port b.1 als Ausgang
    25. Config Portb.3 = Output 'Port b.3 als Ausgang
    26. Led_links Alias PortB.1 'Umbenennen von PortB.1
    27. Led_rechts Alias PortB.3 'Umbenennen von PortB.3
    28. '==============================================================================
    29. 'Hauptprogramm
    30. '------------------------------------------------------------------------------
    31. Do 'Schleifenanfang
    32. Led_links = 1 'Port B.1 einschalten
    33. Waitms 50 '50 ms warten
    34. Led_links = 0 'Port B.1 ausschalten
    35. Waitms 50 '50 ms warten
    36. Led_links = 1 'Port B.1 einschalten
    37. Waitms 50 '50 ms warten
    38. Led_links = 0 'Port B.1 ausschalten
    39. Waitms 50 '50 ms warten
    40. Led_rechts = 1 'Port B.3 einschalten
    41. Waitms 50 '50 ms warten
    42. Led_rechts = 0 'Port B.3 ausschalten
    43. Waitms 50 '50 ms warten
    44. Led_rechts = 1 'Port B.3 einschalten
    45. Waitms 50 '50 ms warten
    46. Led_rechts = 0 'Port B.1 ausschalten
    47. Waitms 150 '150 ms warten
    48. Loop 'Zurück zu Do (Schleifenanfang)
    49. '==============================================================================
    50. End 'end program
    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:

    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.2
    13. '------------------------------------------------------------
    14. 'Beschreibung: Doppelblitzer mit Warnblinker
    15. '************************************************************
    16. $regfile = "attiny13.dat" 'verwendeter Controller
    17. $crystal = 1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerte und Framesize zuweisen
    19. $swstack = 6
    20. $framesize = 28
    21. '==============================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.1 = Output 'Port b.1 als Ausgang
    25. Config Portb.3 = Output 'Port b.3 als Ausgang
    26. Config Portb.2 = Output 'Port b.2 als Ausgang
    27. Config Portb.4 = Output 'Port b.4 als Ausgang
    28. Led_links Alias Portb.1 'Umbenennen von PortB.1
    29. Led_rechts Alias Portb.3 'Umbenennen von PortB.3
    30. Blinker_links Alias Portb.2 'Umbenennen von PortB.2
    31. Blinker_rechts Alias Portb.4 'Umbenennen von PortB.4
    32. '==============================================================================
    33. 'Hauptprogramm
    34. '------------------------------------------------------------------------------
    35. Do 'Schleifenanfang
    36. Led_links = 1 'Port B.1 einschalten
    37. Waitms 50 '50 ms warten
    38. Led_links = 0 'Port B.1 ausschalten
    39. Waitms 50 '50 ms warten
    40. Led_links = 1 'Port B.1 einschalten
    41. Waitms 50 '50 ms warten
    42. Led_links = 0 'Port B.1 ausschalten
    43. Waitms 50 '50 ms warten
    44. Led_rechts = 1 'Port B.3 einschalten
    45. Waitms 50 '50 ms warten
    46. Led_rechts = 0 'Port B.3 ausschalten
    47. Waitms 50 '50 ms warten
    48. Led_rechts = 1 'Port B.3 einschalten
    49. Waitms 50 '50 ms warten
    50. Led_rechts = 0 'Port B.1 ausschalten
    51. Waitms 150 '150 ms warten
    52. 'Warnblinker toggeln
    53. Toggle Blinker_links
    54. Toggle Blinker_rechts
    55. Loop 'Zurück zu Do (Schleifenanfang)
    56. '==============================================================================
    57. End 'end program
    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:

    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.2
    13. '------------------------------------------------------------
    14. 'Beschreibung: Erstes Lauflicht
    15. '************************************************************
    16. $regfile = "attiny13.dat" 'verwendeter Controller
    17. $crystal = 1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerte und Framesize zuweisen
    19. $swstack = 6
    20. $framesize = 28
    21. '==============================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb = Output ' Ganzer Port B als Ausgang
    25. Led1 Alias Portb.1
    26. Led2 Alias Portb.2
    27. Led3 Alias Portb.0
    28. Led4 Alias Portb.4
    29. Led5 Alias Portb.3
    30. ' Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout
    31. ' "verdrahtet" sind. Bei LED 1,2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0,
    32. ' und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
    33. '==============================================================================
    34. 'Hauptprogramm
    35. '------------------------------------------------------------------------------
    36. Do 'Schleifenanfang
    37. Led1 = 1
    38. Waitms 200
    39. Led1 = 0
    40. Led2 = 1
    41. Waitms 200
    42. Led2 = 0
    43. Led3 = 1
    44. Waitms 200
    45. Led3 = 0
    46. Led4 = 1
    47. Waitms 200
    48. Led4 = 0
    49. Led5 = 1
    50. Waitms 200
    51. Led5 = 0
    52. Loop 'Zurück zu Do (Schleifenanfang)
    53. '==============================================================================
    54. End 'end program
    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.


    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.2
    13. '------------------------------------------------------------
    14. 'Beschreibung: "Leuchtreklame"
    15. '************************************************************
    16. $regfile = "attiny13.dat" 'verwendeter Controller
    17. $crystal = 1200000 'Taktfrequenz
    18. $hwstack = 6 'Stackwerte und Framesize zuweisen
    19. $swstack = 6
    20. $framesize = 28
    21. '==============================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb = Output ' Ganzer Port B als Ausgang
    25. Led1 Alias Portb.1
    26. Led2 Alias Portb.2
    27. Led3 Alias Portb.0
    28. Led4 Alias Portb.4
    29. Led5 Alias Portb.3
    30. ' Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout
    31. ' "verdrahtet" sind. Bei LED 1,2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0,
    32. ' und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
    33. '==============================================================================
    34. 'Hauptprogramm
    35. '------------------------------------------------------------------------------
    36. Do 'Schleifenanfang
    37. Led1 = 1
    38. Waitms 500
    39. Led2 = 1
    40. Waitms 500
    41. Led3 = 1
    42. Waitms 500
    43. Led4 = 1
    44. Waitms 500
    45. Led5 = 1
    46. Waitms 1300
    47. Portb = 0
    48. Waitms 1300
    49. Loop 'Zurück zu Do (Schleifenanfang)
    50. '==============================================================================
    51. End 'end program
    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.

    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.2
    13. '------------------------------------------------------------
    14. 'Beschreibung: Leuchtbalken rechts / links
    15. '************************************************************
    16. $regfile = "attiny13.dat" 'verwendeter Controller
    17. $crystal = 1200000 'Taktfrequenz
    18. $hwstack = 6 'Stackwerte und Framesize zuweisen
    19. $swstack = 6
    20. $framesize = 28
    21. '==============================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb = Output ' Ganzer Port B als Ausgang
    25. Led1 Alias Portb.1
    26. Led2 Alias Portb.2
    27. Led3 Alias Portb.0
    28. Led4 Alias Portb.4
    29. Led5 Alias Portb.3
    30. ' Wir müssen hier die Aliasnamen so zuordnen, wie die Controllerausgänge im Layout
    31. ' "verdrahtet" sind. Bei LED 1,2 und 4 stimmt ja alles noch aber LED 3 liegt an PortB.0,
    32. ' und LED 5 an Port B3 (vergleiche mit dem Bestückungsdruck)
    33. '==============================================================================
    34. 'Hauptprogramm
    35. '------------------------------------------------------------------------------
    36. Do 'Schleifenanfang
    37. ' Von links nach rechts
    38. Led1 = 1
    39. Waitms 200
    40. Led2 = 1
    41. Waitms 200
    42. Led3 = 1
    43. Waitms 200
    44. Led4 = 1
    45. Waitms 200
    46. Led5 = 1
    47. Waitms 200
    48. Led1 = 0
    49. Waitms 200
    50. Led2 = 0
    51. Waitms 200
    52. Led3 = 0
    53. Waitms 200
    54. Led4 = 0
    55. Waitms 200
    56. Led5 = 0
    57. Waitms 200
    58. ' Von rechts nach links
    59. Led5 = 1
    60. Waitms 200
    61. Led4 = 1
    62. Waitms 200
    63. Led3 = 1
    64. Waitms 200
    65. Led2 = 1
    66. Waitms 200
    67. Led1 = 1
    68. Waitms 200
    69. Led5 = 0
    70. Waitms 200
    71. Led4 = 0
    72. Waitms 200
    73. Led3 = 0
    74. Waitms 200
    75. Led2 = 0
    76. Waitms 200
    77. Led1 = 0
    78. Waitms 200
    79. Loop 'Zurück zu Do (Schleifenanfang)
    80. '==============================================================================
    81. End 'end program
    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

    13.576 mal gelesen