www.kappmeier.net
Elektronik-Basteleien - Arduino
Ausgänge steuern
27. Mai 2025
Ausgänge steuern
Kernkompetenz eines Mikrocontroller ist das lesen oder setzen
seiner Ein- bzw. Ausgänge. Entweder ganz langsam um eine
angeschlossene Komponente ein bzw. auszuschalten. Oder ganz
schnell um mit anderen Komponenten zu kommunizieren.
Die einfachste Form ist das ein bzw. ausschalten einer LED.
Entweder wird eine LED direkt über einen Widerstand
angeschlossen, oder es wird eine Transistorstufe verwendet.
Bei direktem Anschluss ist die Stromaufnahme der LED zu
beachten, die Ausgänge eines ATmega sind nur mit wenigen mA
belastbar.
Hier eine Grundbeschaltung eines Arduino ATmega 328P mit
beiden LED Varianten :
Q1 ist ein NPN Transistor und muss je nach gewünschter
Leistung gewählt werden. Für eine oder mehrere LED
reicht i.d.R. ein einfacher BC548. Soll es kräftiger sein wäre
ein BD238 die Wahl.
Statt einer LED kann natürlich auch ein Relais geschaltet
werden, wie dies beim DEALER der Fall ist.
Hilfreich ist es auch, parallel zum geschalteten Ausgang
dessen Status in einer Variable zu halten. Z.b. im Falle des
Mute-Relais für den Ausgang die Variable 'muteFlag'.
Sobald wir den Ausgang programmiertechnisch anfassen wird dies
in der Variable festgehalten. Somit können wir im weiteren
Verlauf des Programms auf den Status der Mute-Funktion
entsprechend reagieren.
Das "Hallo Welt" eines Mikrocontroller sieht eigentlich so aus
:
Der Ablauf sollte selbsterklärend sein. Beide Ausgänge werden
gesetzt, es wird 500ms gewartet dann werden die Ausgänge
deaktiviert und wieder 500ms gewartet.
Das Verwenden der delay Funktion ist aber nur eine einfache
Form und in diesem Beispiel von unter geordneter Bedeutung.
Ein Delay halt den Prozessor für die angegebene Zeit an und er
tut in diesem Zeitraum quasi gar nichts. Je nach weiteren im
Programm verwendeten Funktionen kann dies zu Problemen führen.
Eleganter ist die Verwendung eines sowieso im Hintergrund
laufenden Zählers. Gemeint ist die Funktion millis(). Dies ist
ein fortlaufender Zähler der in Millisekunden zählt. Wenn
unser Programm zu einem Zeitpunkt X den Wert in einer Puffer
Variable sichert kann diese fortlaufenden mit dem Zähler
verglichen werden. Ist der Unterschied größer als die 500 ms
(aus unserem Beispiel) wird eine Aktion ausgeführt und der
aktuelle Stand des Zählers wieder in der Puffer Variable
gesichert werden.
Für die o.a. Schaltung sähe das so aus:

Dieser Aufbau hat den Vorteil das während der Wartezeit das
Programm weiterläuft und andere Tätigkeiten wahrnehmen kann,
etwa Taster abfragen oder IR-Signale empfangen.
Dies ist beim DELAER z.b. in Form des blinkenden Mute-Status
zu sehen.
Apropos Taster abfragen bzw. IR-Signale verarbeiten, das gibt
es im nächsten Teil.
zurück -
Startseite -
Impressum