Wie wäre es mit einer Binärzahlenanzeige aus LEDs oder einem Binärzahlenquiz? Dieser Artikel stellt die zwei ersten Schieberegister Projekte vor…
Vorbereitungen:
Für dieses Projekt brauchen wir folgende Bauteile für den Schaltungsaufbau:
Schaltungsaufbau 1:
Der Arduino Pin für 5 Volt geht an Schieberegister Pin 16 und 10. Arduino Pin D6 geht an den Schieberegister Pin 14. Arduino Pin D8 geht an Schieberegister Pin 12. Arduino Pin D10 geht an Schieberegister Pin 11. Schieberegister Pin 13 geht mit dem Arduino gemeinsam an Ground. Auch Schieberegister Pin 8 geht an Ground. Die Schieberegister Pins 1 bis 7 und 15 gehen über die Widerstände zu den LEDs.
Programmierung 1:
#define DATA 6
#define LATCH 8
#define CLOCK 10
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop()
{
int i;
for ( i = 0; i < 256; i++)
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, i);
digitalWrite(LATCH, HIGH);
delay(200);
}
}
Programmierung 2:
#define DATA 6
#define LATCH 8
#define CLOCK 10
int number =0;
int answer = 0;
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
Serial.begin(9600);
randomSeed(analogRead(0));
displayNumber(0);
}
void displayNumber(byte a)
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, a);
digitalWrite(LATCH, HIGH);
}
void getAnswer()
{
int z = 0;
Serial.flush();
while (Serial.available() == 0)
{
}
while (Serial.available() > 0)
{
answer = answer * 10;
z = Serial.read() -'0';
answer = answer + z;
delay(5);
}
Serial.print("Sie haben eingegeben: ");
Serial.println(answer);
}
void checkAnswer()
{
if (answer ==number)
{
Serial.print("Richtig! ");
Serial.print(answer, BIN);
Serial.print(" entspricht ");
Serial.println(number);
Serial.println();
}
else
{
Serial.print("Falsch! ");
Serial.print(number, BIN);
Serial.print(" entspricht ");
Serial.println(number);
Serial.println();
}
answer = 0;
delay(10000);
}
void loop()
{
number = random(256);
displayNumber(number);
Serial.println("Was ist die dezimale Entsprechung der angezeigten Binärzahl? ");
getAnswer();
checkAnswer();
}
Arduino und Schieberegister:
Bei diesem Schaltplänen wieder die Ausrichtung der LEDs beachten.
- LED Kathode (=kurzes Bein) immer direkt an Ground
- LED Anode (=langes Bein) über einen Widerstand (560 Ohm) an Arduino-Pin.
In diesem Projekt werden acht LEDs verwendet, um die Binärzahlen von 0 bis 255 anzuzeigen.
Die Dezimalzahl 1 entspricht der Binärzahl 1
Die Dezimalzahl 2 entspricht der Binärzahl 10
Die Dezimalzahl 3 entspricht der Binärzahl 11
Die Dezimalzahl 4 entspricht der Binärzahl 100
Die Binärzahl 11111111 (8 Stellen für 8 Datenbytes) entspricht der Dezimalzahl 255.
Der Schieberegister hat also acht digitale Ausgangspins, die durch die Übertragung eines Datenbytes gesteuert werden. Pro Pin ein Bit. Ein Bit kann also immer einen Wertebereich bis 255 darstellen, also 256 Werte mit der Null.
Es werden also 8 Bits an den Schieberegister gesendet. Von links nach rechts gesehen, stehen die Bits für die Pins in der Reihenfolge von der höchsten zur niedrigsten Nummer. Das Bit ganz links stellt also Ausgangspin 7 des Registers dar.
1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
Pin 7 | Pin 6 | Pin 5 | Pin 4 | Pin 3 | Pin 2 | Pin 1 | Pin 0 |
In diesem Beispiel würden die LEDs an Pin 1, Pin 2 und Pin 7 leuchten. Also immer dort, wo der Wert 1 übertragen wird.
Ein Byte Daten kann einen Wert zwischen 0 und 255 haben. Das Bit ganz links wird als “most significant Bit” = MSB bezeichnet. Das Bit ganz rechts wird als “least significant Bit” = LSB bezeichnet. Im Code bzw. Sketch wurde ja bei “shiftOut” MSBFIRST angegeben.
Erweitern wir nun fürs bessere Verständnis die Tabelle:
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
Pin 7 | Pin 6 | Pin 5 | Pin 4 | Pin 3 | Pin 2 | Pin 1 | Pin 0 |
LED-8 | LED-7 | LED-6 | LED-5 | LED-4 | LED-3 | LED-2 | LED-1 |
Übertragen wir den Binärwert 11110000 an das Schieberegister in Verbindung mit LSBFIRST werden die LEDs 1 bis 4 eingeschaltet. In der Tabelle müsste dann der Binärwert genau anders herum eingetragen werden.
Übertragen wir den Binärwert 11110000 an das Schieberegister in Verbindung mit MSBFIRST werden die LEDs 5 bis 8 eingeschaltet.
Arduino Gruppe Peine:
Wer sich für Mikrocontroller Programmierung interessiert ist in der Arduino Gruppe Peine genau richtig. Auch Raspberry Fans und Nutzer anderer Mikrocontroller sind willkommen.
Die Arduino Gruppe Peine trifft sich Dienstags von 18:00 Uhr bis 21:00 Uhr. Die Teilnehmerzahl ist begrenzt und deshalb bitte vorher per Kontaktformular oder Mail an info@fuhselab.de melden. Der Veranstaltungsort wird kurzfristig festgelegt und den Teilnehmerinnen und Teilnehmern per E-Mail mitgeteilt.
Das Angebot “Arduino Gruppe Peine“ kann für einen Jahresbeitrag von 60,- Euro genutzt werden. Für einen Beitrag von 20,- Euro pro Teilnehmer können die Workshops genutzt werden. Materialkosten werden projektabhängig zusätzlich erhoben.
Weitere interessante Webartikel zum Thema Arduino gibt es auf der Fuhselab Webseite und in der Artikelübersicht 2022 und der Artikelübersicht 2023.