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.

10000110
Pin 7Pin 6Pin 5Pin 4Pin 3Pin 2Pin 1Pin 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:

11110000
Pin 7Pin 6Pin 5Pin 4Pin 3Pin 2Pin 1Pin 0
LED-8LED-7LED-6LED-5LED-4LED-3LED-2LED-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.

Von Torsten