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 :


Arduino-ATmega328p-Grundbeschaltung


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 :

LED Hallo Welt


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:

 Arduino Timer Beispiel



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