Heute gibt es mal ein Tutorial, wie ihr mit Schieberegistern 7 Segment Anzeigen befüllen könnt. Dafür haben wir vier 7 Segment Anzeigen hintereinander, um z.b. einen vierstelligen Code ausgeben zu können.
Material
Für diese Tutorial benötigen wir die folgenden Teile:
- Arduino UNO R3 (Link zum Shop)
- Breadboard
- 4x 7 Segment Display Größe 13mm
- 4x 74HC595
- 8x 1.5k Ω Widerstand
- diverse Kabel
Aufbau:
Wir beginnen damit, den Arduino mit dem Breadboard zu verbinden. Anschließend stecken wir die 74HC595 und die Anzeigen auf des Breadboard. Nun werden die 74HC595 untereinander und mit dem Arduino verbunden. Zu guter letzt müssen wir noch die Widerstände auf das Board stecken, damit die Segment Anzeigen nicht die vollen 5V abbekommen.
Nun werden die 74HC595 mit den 7 Segment Anzeigen verbunden.
Für alle, die nicht gerne mit den Zeichnungen von Fritzing arbeiten, habe ich hier auch noch einen normalen Schaltplan.
Damit hätten wir dann den Aufbau schon einmal abgeschlossen.
Code:
Hier nun der Code, auf den Anzeigen auch Zahlen auszugeben. Der Code ist nicht von mir selber und der Ersteller wollte anonym bleiben.
Aber falls es fragen gibt könnt ihr diese gerne unter den Artikel schreiben oder die Mailadresse verwenden die im Quellcode angegeben ist.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | /* Schieberegister 74HC595 Campers death o.t.h.campers-death@gmx.net */ const unsigned int clockPin = 12; // toggeln während der Datenübertragung const unsigned int latchPin = 13; // vor dem Senden der Daten an den IC auf LOW ziehen, danach wieder HIGH const unsigned int dataPin1 = 11; // an den seriellen Eingang des IC; jeweils 1 Byte übertragen /*Segments - a - | | f b | | - g - | | e c | | - d - dp Bit-order for shift register: dp g f a b c d e */ //definition of displayable numbers: byte number[]={0b00111111,0b00001100,0b01011011,0b01011110,0b01101100,0b01110110,0b01110111,0b00011100,0b01111111,0b01111110}; //definition of special states byte cycle[] ={0b00010000,0b00001000,0b00000100,0b00000010,0b00000001,0b00100000,}; byte waiting = 0b00010010; byte zero = 0b00111111; byte one = 0b00001100; byte two = 0b01011011; byte three = 0b01011110; byte four = 0b01101100; byte five = 0b01110110; byte six = 0b01110111; byte seven = 0b00011100; byte eight = 0b01111111; byte nine = 0b01111110; byte dec = 0b10000000; void setup() { pinMode(clockPin, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(dataPin1, OUTPUT); } void loop() { for(int i = 0; i <= 5; i++){//for loop to count up to 9 from zero digitalWrite(latchPin, LOW); // Datenübertragung: das Byte wird von rechts 2^0 nach links 2^7 codiert (least significant bit first) shiftOut(dataPin1, clockPin, MSBFIRST, number[1]); shiftOut(dataPin1, clockPin, MSBFIRST, number[1]); shiftOut(dataPin1, clockPin, MSBFIRST, number[1]); shiftOut(dataPin1, clockPin, MSBFIRST, number[1]); delay(80); digitalWrite(latchPin, HIGH); } //shiftOut(dataPin2, clockPin, MSBFIRST, three); //shiftOut(dataPin1, clockPin, MSBFIRST, four); } |
Sehr gute Anleitung!
Für wie viel Volt muss die Segment Anzeige sein? Ich finde welche mit 4.7V, 2.1V, 1.95,…
Hallo,
in diesem Beispiel werden 7-Segementanzeigen von Knightbright verwendet (genauer die sc65-11). Die haben eine Nennspannung von 3,3V und eine Maximalspannung von 4,7V.
Empfehlen würde ich dir die mit 4,7V wenn du keine mit 5V findest. Wichtig ist das die eine gemeinsame Kathode haben, sonst wird die Schaltung wie oben so nicht funktionieren.
Kann man damit auch Uhr machen?