de de de de de en de de de de nl de en de de de de de de de en de de de es de de en de nl en de en de de it de de de en de de de de de de de de de de de de de de de de de de de de de de de de de de de de en en en fr de nl nl en nl fr de de de nl en en nl de en es es de en ro en fr de de nb en de
Zur Funktion eines Schieberegisters sei auf Wikipedia verwiesen. Die Anwendung dieses Bauteils ist sehr gut im AVR-Tutorial auf mikrocontroller.net beschrieben.
Im Umfeld des Arduinos und der ATtiny-Mikroprozessoren dient das Schieberegister vom Typ 74HC595 vor allem zur Erweiterung der Ausgabe-Ports, von denen man auch im Modellbahnumfeld nie genug hat. Mit drei Leitungen lassen sich die 8 Ausgänge des Schieberegisters ansteuern. Außerdem sind die Schieberegister kaskadierbar, so dass sich z.B. mit einer Kette von 10 Schieberegistern über die drei Leitungen 80 Ausgänge adressieren lassen.
Um dies zu testen und zur einfacheren Software-Entwicklung habe ich mir eine „Test- und Entwicklungsumgebung“ mit allen nötigen Komponenten zusammengestellt.
Das Grundmodul besitzt 5 Schieberegister und zwei Potis. Letztere werden auf zwei analoge Eingänge des Mikroprozessors gelegt. In der Praxis könnten statt dessen später natürlich auch andere Sensoren zum Einsatz kommen (Helligkeitsmessung über LDR wäre wohl naheliegend).
Die ersten beiden Schieberegister nutze ich zur Ausgabe der Poti-Stellungen, d.h. das Eingangspotential der analogen Eingänge wird auf die Werte 0 bis 9 (bzw. bis E) gemappt und dann auf der 7-Segment-Anzeige passend ausgegeben. Dies ist für die Modellbahnbeleuchtung natürlich nicht nötig, aber zum Testen praktisch und belegt schon mal zwei Schieberegister (es geht hier ja auch um den Test der möglichen Zahl von Ausgängen). Gleichzeitig ist es ein Beispiel für sensorabhängige Lichtmuster ohne Zeitfaktor.
An das dritte Schieberegister habe ich einen LED-Balken angeschlossen, welcher im oben gezeigten Video als Lauflicht angesteuert wird (Beispiel für zeitabhängiges Lichtmuster).
Das vierte und fünfte Schieberegister haben noch ein Transistor-Array erhalten, um mehr als 5V/20mA gegen Masse schalten zu können (z.B. direkter Anschluss von fertig konfektionierten Modellbahnleuchten oder Lichtsignalen).
Dazu habe ich mir dann noch drei Erweiterungsmodule gebastelt (genau genommen waren die zuerst da – aus heutiger Sicht würde ich direkt eine zweite 5er-Einheit dransetzen) – damit sind´s dann 8 Schieberegister.
Diese Erweiterungsmodule erlauben – wie z.B. bei der Ampel ganz rechts – auch eine der späteren Anwendung ähnliche LED-Anordnung, was den Funktionstest wesentlich vereinfacht.
Für größere Stückzahlen lohnt sich die Anfertigung professioneller Platinen. In Zusammenarbeit mit einem Modellbahn-Kollegen entstanden die beiden Platinen (eine Basis-Platine für Stromversorgung und Prozessor und eine Schieberegister-Platine mit Transistor-Array) als Fritzing-Projekte – auf dem Bild in verschiedenen Stadien der Bestückung:
Der Verbindungsbus zwischen den Platinen wurde auf die notwendigen 6 Pins reduziert und die Basisplatine erhielt einen zweiten Spannungsregler, um neben 5V für die Elektronik auch eine definierte Versorgungsspannung für die LEDs liefern zu können (z.B. 9V, 12V oder 15V).
Die Platinen-Fertigung ist zwar nicht ganz billig, aber die Bestückung geht wesentlich schneller und einfacher. Und besser aussehen tut´s auch.
Binäre Rechenoperationen für einfache Programmlogik
Einen zusätzlichen Vorteil gegenüber einem Mikroprozessor mit mehr Ports (z.B. Arduino Mega 2560) sehe ich in der Möglichkeit, die Ausgänge über binäre Rechenoperationen zu verknüpfen. So ist z.B. ein Lauflicht sehr einfach zu realisieren, indem des Ausgabewert für das Schieberegister beginnend bei 1 sieben mal mit 2 multipliziert wird … also 1 – 2 – 4 – 8 usw. entspricht dem binären Muster 00000001 – 00000010 – 00000100 – 00001000 usw. wie es im Video am dritten Schieberegister von links zu sehen ist.
Zur stimmungsvollen und realistischen Beleuchtung von Modellgebäuden dient die Anwendung Gebäudebeleuchtung. Sie läuft sowohl auf dem ATtiny85 als auch auf dem Arduino. Lediglich die Ports sind im Programm anzupassen.