
Die 8 LEDs eignen sich mit dem Schieberegister perfekt dazu um die Informationen Binär zu übergeben. Dazu zeige ich dir einen Befehl, der die Verwendung von Schieberegistern vereinfacht.
Was benötigst du?
- 1 x Arduino Uno
- 1 x USB Kabel
- 1 x Steckbrett
- 1 x Schieberegister (Typ 74HC595)
- 8 x LED
- 8 x Ohmscher Widerstand (220 Ohm)
- Jump Wire (Männlich)
Wie sieht die Schaltung aus?
Wir verwenden die selbe Schaltung aus dem letzten Kapitel.

Der Code
int sh = 8; // SH_CP Pin
int st = 9; // ST_CP Pin
int ds = 10; // DS Pin
byte daten = B10101010; // Variable für die LEDs
// ( 0 = LOW = aus, 1 = HIGH = an)
void setup() {
pinMode(sh, OUTPUT); //
pinMode(st, OUTPUT); // Pins für Schieberegister als Ausgang definieren
pinMode(ds, OUTPUT); //
}
void loop() {
digitalWrite(st,0);
shiftOut(ds, sh, MSBFIRST, daten);
digitalWrite(st, 1); // Wenn for- Schleife beendet wurde, ST_CP Pin auf 1
// (HIGH) setzen damit
// die gespeicherten Daten ausgegeben werden.
// (Erst dann leuchten die LEDs)
}
Code- Review
Schauen wir uns an was im Code passiert.
byte daten = B10101010; // Variable für die LEDs ( 0 = LOW = aus, 1 = HIGH = an)
Der Variablentyp "byte" formt die gespeicherte Zahl in eine Binärzahl um. Das gängige Zahlensystem mit dem wir Rechnen ist das Dezimalsystem (10er- System). Ein Computer oder ein Mikrocontroller rechnet aber immer binär. Wie funktioniert nun das Binärsystem?
Das Binärsystem rechnet mit der 2 als Basis und einem zugehörigen Exponenten.

In dem Beispiel auf dem Bild wird die 2 drei mal mit sich selber multipliziert also 2*2*2=8. Im Binärsystem kommt es nun darauf an wie groß die Zahl ist. Je größer die Zahl ist umso höher ist der größte Exponent. Wir haben 8 LEDs, also benötigen wir 8 Bits. Jeder Bit steht für einen Exponenten und der kleinste Exponent ist 0. Also ist der größte Exponent 7.

Die größte Zahl die man hier ausrechnen kann ist 255. Dazu addiert man die einzelnen Bits zusammen.

Das ist der Fall, wenn wir alle LEDs auf 1 stellen. Z.B, wenn alle LEDs an wären. Wir haben nun die Bit- Reihenfolge 10101010. Man rechnet es folgendermaßen.

Um das Thema wird man nicht herum kommen, wenn man sich mit dem Arduino näher beschäftigen möchte.
Das war unsere Einführung in das Binärsystem.
byte daten = B10101010; // Variable für die LEDs
Hier haben wir in unsere byte- Variable die Zahl direkt Binär angegeben. Wichtig ist das B vor der Binärzahl sonst denkt der Mikrocontroller du hättest ihm eine Dezimalzahl übergeben. Für die Binärzahl kannst du auch die entsprechende Dezimalzahl eingeben, also:
byte daten = 170; // Variable für die LEDs
Kommen wir zu unserer neuen Methode.
shiftOut(ds, sh, MSBFIRST, daten);
Hier wird die Information der byte- Variable an dein Schieberegister übergeben. Deine for- Schleife aus dem vorherigen Kapitel benötigst du hier nicht mehr. Das alles übernimmt die Methode. in den Klammern gibst du erst mal die Pin Nummer an mit der, der DS Pin des Schieberegisters an dein Arduino verbunden ist. Dann gibst du die Pin Nummer des SH_CP Pins an. Dann gibst du an wie herum deine Binärzahl gelesen werden soll. Wir haben die Binärzahl 10101010. Geben wir MSBFIRST ein, wird die Binärzahl von links eingegeben, also die 1 zuerst. Wenn wir LSBFIRST eingeben, wird die Binärzahl von rechts eingegeben, also die 0 zuerst.

Zum Schluss gibst du noch die Binärzahl an, die dem Schieberegister übergeben werden soll.
Jetzt bist du dran
1. Rechne die folgenden Binärzahlen in ihre Dezimalzahl um.
a) 00000001
b) 01010101
c) 11001100
d) 10101010 10101010 (16- Bit)
e) 11001100 11001100 (16- Bit)
2. Versuche den Beispielcode so zu verändern, sodass wieder ein Lauflicht entsteht.
Die Lösungen findest du hier.
Wenn du hier irgendetwas vermisst, bessere Ansätze hast oder dir etwas nicht klar ist, zögere nicht einen Kommentar zu hinterlassen.
Kommentar schreiben