Articles

Wie Sieben-Segment-Anzeige funktioniert & Schnittstelle mit Arduino

Wie oft haben Sie einen Film gesehen, wo jemand eine Bombe entschärfen muss? Der Held schaut auf die Anzeige, während die Zeit vergeht, jede Sekunde kostbarer als die vorherige. Nun, wenn Sie bemerken, haben alle diese Bomben in Filmen Sieben-Segment-Anzeigen. Das muss so sein! Wie könnte ein Held sonst wissen, wie viel Zeit ihm noch bleibt?

Vielleicht sehen Sie Sieben-Segment-Anzeigen nicht modern genug aus, aber sie sind die praktischste Art, Zahlen anzuzeigen. Sie sind einfach zu bedienen, kostengünstig und sehr gut lesbar, sowohl bei eingeschränkten Lichtverhältnissen als auch bei starkem Sonnenlicht.

Ein Beispiel aus der realen Welt, das Sieben-Segment-Anzeigen verwendet, ist die berühmte Countdown-Uhr in Cape Canaveral, Florida, die die NASA für die Apollo-Landung verwendet hat.

Photo credit: NASA/Jim Grossmann

Hardware-Übersicht

Lassen Sie uns kurz die Eigenschaften und Funktionsweise der 7-Segment-Anzeige besprechen, bevor wir sie an einen Arduino anschließen.

Die 7-Segment-Anzeigen sind eigentlich nur sieben LEDs, die in einem bestimmten Muster aufgereiht sind. In diesem Fall die Form der Zahl „8“, die wir alle kennen. Jede der sieben LEDs wird als Segment bezeichnet, weil das Segment, wenn es leuchtet, einen Teil einer anzuzeigenden numerischen Ziffer (sowohl dezimal als auch hexadezimal) bildet. Eine zusätzliche 8. LED wird manchmal zur Anzeige eines Dezimalpunktes verwendet.

7 Segmente Interner LED-Aufbau und Pinout

Jede der sieben LEDs in der Anzeige erhält ein Positionssegment, dessen Anschlusspins gerade aus dem rechteckigen Kunststoffgehäuse herausgeführt sind. Diese einzelnen LED-Pins sind von a bis g beschriftet, was für jede einzelne LED steht. Die anderen LED-Pins sind miteinander verbunden und zu einem gemeinsamen Pin verdrahtet.

Um einen bestimmten Teil des Displays ein- und auszuschalten, setzen Sie den entsprechenden Pin HIGH oder LOW, genau wie bei einer normalen LED. So werden einige Segmente hell und andere dunkel, so dass das gewünschte Zeichenmuster der Zahl auf dem Display erzeugt werden kann. Dies erlaubt uns dann, jede der zehn Dezimalziffern von 0 bis 9 auf der gleichen 7-Segment-Anzeige darzustellen.

7-Segment-Anzeige Pinout

Nun lassen Sie uns die Segmentkonfiguration durchgehen, damit wir wissen, welche Pins welche Segmente beleuchten. Die Pinbelegung für die 7-Segment-Anzeige ist wie folgt.

7 Segmente Gemeinsame Anode Gemeinsame Kathode Pinout

a-g & DP Von 10, die 8 Pins d.d. h. a, b, c, d, e, f, g und DP-Segment (Dezimalpunkt) mit den digitalen Pins des Arduino verbunden. Durch die Ansteuerung jeder LED am angeschlossenen Segment können Zahlen angezeigt werden.

COM Die Pins 3 und 8 sind intern zu einem gemeinsamen Pin verbunden. Dieser Pin sollte mit GND (gemeinsame Kathode) oder 5V (gemeinsame Anode) verbunden werden, je nach Typ der Anzeige.

Common Cathode(CC) Vs Common Anode(CA)

Sieben-Segment-Anzeigen gibt es in zwei Typen: Common Cathode (CC) und Common Anode (CA).Der interne Aufbau beider Typen ist nahezu identisch. Der Unterschied liegt in der Polarität der LEDs und des gemeinsamen Anschlusses. Wie der Name schon sagt, sind bei der gemeinsamen Kathode alle Kathoden der LEDs eines 7-Segmentes miteinander verbunden und bei der gemeinsamen Anode alle Anoden der LEDs eines 7-Segmentes.

Bei der gemeinsamen Kathodenanzeige werden alle Kathodenanschlüsse der LED-Segmente gemeinsam mit ‚logisch 0‘ / GND verbunden. Die einzelnen Segmente werden dann durch Anlegen eines HIGH / ‚logisch 1‘ Signals an den einzelnen Anodenanschlüssen (a-g) beleuchtet.

Common Cathode 7 Segment Display Internal Working Animation
Common Cathode 7 Segment Working

In der gemeinsamen Anodenanzeige, sind alle Anodenanschlüsse der LED-Segmente zu einer logischen „1“ verbunden. Die einzelnen Segmente werden beleuchtet, indem ein Masse-, logisches „0“- oder „LOW“-Signal an die Kathode des jeweiligen Segments (a-g) angelegt wird.

Gemeinsame Anode 7 Segment Anzeige Intern Arbeitsanimation
Common Anode 7 Segment Working
Im Allgemeinen, gemeinsame Anoden-Displays (die wir in den folgenden Experimenten verwendet haben) beliebter, da viele Logikschaltungen mehr Strom sinken lassen können als sie quellen können.

Auch ist zu beachten, dass eine gemeinsame Kathodenanzeige in einer Schaltung kein direkter Ersatz für eine gemeinsame Anodenanzeige ist und umgekehrt, da es das Gleiche ist, wie wenn man die LEDs verkehrt herum anschließt und somit keine Lichtemission stattfindet.

Wie funktioniert eine 7-Segment-Anzeige?

Abhängig von der anzuzeigenden Dezimalstelle wird der jeweilige Satz von LEDs beleuchtet. Um z. B. die Ziffer 4 anzuzeigen, müssen wir vier der LED-Segmente aufleuchten lassen, die den Buchstaben b, c, f und g entsprechen. So können die verschiedenen Ziffern von ‚0 bis 9‘ und die Zeichen von ‚A bis F‘ mit einer 7-Segment-Anzeige wie gezeigt angezeigt werden.

7-Segment-Anzeige Nummernbildung Segment Contol

Untenstehende Wahrheitstabelle zeigt die einzelnen Segmente, die beleuchtet werden müssen, um Ziffern und Zeichen zu erzeugen. Bitte beachten Sie, dass die Wahrheitstabelle für die 7-Segment-Anzeige mit gemeinsamer Anode genau umgekehrt ist wie die für die 7-Segment-Anzeige mit gemeinsamer Kathode.

Gemeinsame Kathode 7-Segment Anzeige Wahrheitstabelle
Gemeinsame Anode 7-Segment-Anzeige Wahrheitstabelle

Verkabelung – Anschluss der 7-Segment-Anzeige an Arduino UNO

Nun, da wir ein Verständnis dafür haben, wie die 7-Segment-Anzeige funktioniert, können wir damit beginnen, sie mit dem Arduino zu verdrahten!

Beginnen Sie, indem Sie die 7-Segment-Anzeige auf Ihre Lochrasterplatine legen und sicherstellen, dass jede Seite der Anzeige auf einer eigenen Seite der Lochrasterplatine liegt. Mit dem Dezimalpunkt nach unten sind die Pins 1-5 auf der unteren Seite von links nach rechts und 10-6 auf der oberen Seite von links nach rechts, wie in der Abbildung unten zu sehen ist.

Zu Beginn verbinden wir einen der gemeinsamen Pins 3 oder 8 mit dem 5V-Pin am Arduino (wenn Sie eine 7-Segment-Anzeige mit gemeinsamer Anode verwenden) oder mit dem GND-Pin am Arduino (wenn Sie eine 7-Segment-Anzeige mit gemeinsamer Kathode verwenden). Die restlichen 4 Pins an der oberen Position werden mit Digital-Pin 2 bis Digital-Pin 5 verbunden. Die anderen 4 Pins an der unteren Position mit Dezimalpunkt werden mit Digital-Pin 6 bis 9 verbunden.

Während die Anzeige ohne Strombegrenzungswiderstände funktionieren kann, ist es immer eine gute Idee, sie in Ihrer Schaltung zu haben, um ein Durchbrennen der Anzeige zu vermeiden.

Typisch für eine standardmäßige rote 7-Segment-Anzeige kann jedes LED-Segment etwa 15 mA ziehen, um richtig zu leuchten, so dass bei einer digitalen Logikschaltung mit 5 Volt der Wert des Strombegrenzungswiderstands etwa 200Ω (5v – 2v)/15mA oder 220Ω zum nächsthöheren bevorzugten Wert betragen würde.

Wenn Sie fertig sind, sollten Sie etwas haben, das ähnlich wie die unten gezeigte Abbildung aussieht.

Arduino Verdrahtung Fritzing-Anschlüsse mit gemeinsamer Anode Sieben-Segment-Anzeige
Verkabelung der gemeinsamen Anode Sieben-Segment-Anzeige an Arduino UNO
Arduino Verdrahtung Fritzing Anschlüsse mit gemeinsamer Kathode Sieben-Segment-Anzeige
Verkabelung gemeinsame Kathode Sieben-Segment-Anzeige an Arduino UNO

Arduino Code

Nun, ist es an der Zeit, das Display mit etwas Code zum Leuchten zu bringen.

Bevor Sie mit dem Schreiben von Code zur Steuerung der 7-Segment-Anzeigen beginnen können, müssen Sie zunächst die SevSeg Arduino Library herunterladen. Sie können das tun, indem Sie das GitHub Repo besuchen und die Bibliothek manuell herunterladen oder einfach auf diesen Button klicken, um die ZIP-Datei herunterzuladen:

Um sie zu installieren, öffnen Sie die Arduino IDE, gehen Sie zu Sketch > Include Library > Add .ZIP Library, und wählen Sie dann die SevSeg ZIP-Datei, die Sie gerade heruntergeladen haben. Wenn Sie weitere Details zur Installation einer Bibliothek benötigen, besuchen Sie dieses Tutorial Installieren einer Arduino-Bibliothek.

Nachdem Sie die Bibliothek installiert haben, können Sie diesen Sketch in die Arduino IDE kopieren. Der folgende Testsketch zählt von 0 bis 9 hoch. Probieren Sie den Sketch aus; und dann werden wir ihn im Detail erklären.

#include "SevSeg.h"SevSeg sevseg;void setup(){//Set to 1 for single digit displaybyte numDigits = 1;//defines common pins while using multi-digit display. Left empty as we have a single digit displaybyte digitPins = {};//Defines arduino pin connections in order: A, B, C, D, E, F, G, DPbyte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9};bool resistorsOnSegments = true;//Initialize sevseg object. Uncomment second line if you use common cathode 7 segmentsevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);//sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);sevseg.setBrightness(90);}void loop(){ //Display numbers one by one with 2 seconds delay for(int i = 0; i < 10; i++) { sevseg.setNumber(i); sevseg.refreshDisplay(); delay(2000); }}

Code-Erklärung:

Der Sketch beginnt mit der Einbindung der SevSeg-Bibliothek, die die Steuerungen und Signale für das 7-Segment vereinfacht. Als nächstes müssen wir ein SevSeg-Objekt erstellen, das wir dann im gesamten Sketch verwenden können.

#include "SevSeg.h"SevSeg myDisplay;

Als nächstes müssen wir angeben, wie viele Ziffern die Anzeige hat. Da wir ein einstelliges Display verwenden, setzen wir es auf 1. Falls Sie ein vierstelliges Display verwenden, setzen Sie es auf 4.

//Set to 1 for single digit displaybyte numDigits = 1;

Das Array digitPins definiert einfach die ‚gemeinsamen Pins‘, wenn Sie ein mehrstelliges Display verwenden. Lassen Sie es leer, wenn Sie eine einstellige Anzeige haben. Andernfalls geben Sie die Arduino-Pin-Nummern an, mit denen die ‚gemeinsamen Pins‘ der einzelnen Ziffern verbunden sind. Ordnen Sie sie von links nach rechts.

//defines common pins while using multi-digit display//Left empty as we have a single digit displaybyte digitPins = {};

Das zweite Array, das initialisiert wird, ist das Array segmentPins. Dies ist ein Array mit allen Arduino-Pin-Nummern, die mit den Pins auf der LED-Anzeige verbunden sind, die die Segmente steuern; in diesem Fall sind das also diejenigen, die wir direkt vom Breadboard an den Arduino angeschlossen haben. Diese müssen auch in die richtige Reihenfolge gebracht werden, da die Bibliothek davon ausgeht, dass die Pins in der folgenden Reihenfolge sind: A, B, C, D, E, F, G, DP.

//Defines arduino pin connections in order: A, B, C, D, E, F, G, DPbyte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9};

Nachdem wir diese Variablen angelegt haben, übergeben wir sie mit der begin() Funktion an den SevSeg Konstruktor.

//Initialize sevseg objectsevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

Im Abschnitt „Schleife“: Das Programm beginnt, mit der ‚for‘-Schleife und der Variablen ‚i‘ von 0 bis 9 hochzuzählen. Jedes Mal verwendet es die SevSeg-Bibliotheksfunktion setNumber() zusammen mit refreshDisplay (), um die Zahl auf das Display zu setzen.

Dann gibt es eine zweite Verzögerung, bevor ‚i‘ hochgezählt wird und die nächste Zahl angezeigt wird.

for(int i = 0; i < 10; i++){ sevseg.setNumber(i); sevseg.refreshDisplay(); delay(1000);}

Arduino-Projekt

Würfeln

Als Ergänzung hier ein weiteres Projekt, das es Menschen, die auf barrierefreie Technik angewiesen sind, ermöglicht, zu „würfeln“. Sie können damit Spiele wie Yahtzee, Ludo usw. spielen. Es verwendet das gleiche Arduino-Setup, außer dass wir einen taktilen Schalter für schnelles Rollen verwenden.

Rolling Dice Arduino Spiel Verdrahtung Fritzing Verbindungen mit Common Anode 7 Segment
Rolling Dice Arduino Projekt – Verdrahtung Common Anode Sieben-Segment-Anzeige an Arduino UNO

Der ganze Sinn eines Würfels ist es, eine Möglichkeit zu bieten, zufällig eine Zahl von 1 bis 6 zu erhalten. Und der beste Weg, eine Zufallszahl zu erhalten, ist die Verwendung einer eingebauten Funktion random(min,max). Diese benötigt zwei Parameter, wobei der erste die untere Grenze des Zufallswertes angibt (einschließlich dieser Zahl) und der zweite Parameter die obere Grenze des Zufallswertes angibt (ausschließlich dieser Zahl). Das bedeutet, dass die Zufallszahl zwischen min und max erzeugt wird.1

#include "SevSeg.h"SevSeg sevseg; const int buttonPin = 10; // the number of the pushbutton pin// variables will change:int buttonState = 0; // variable for reading the pushbutton statusvoid setup(){ byte numDigits = 1; byte digitPins = {}; byte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9}; bool resistorsOnSegments = true; sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments); sevseg.setBrightness(90);// initialize the pushbutton pin as an input:pinMode(buttonPin, INPUT);}void loop(){// read the state of the pushbutton value:buttonState = digitalRead(buttonPin); if (buttonState == HIGH) {sevseg.setNumber(random(1,7));sevseg.refreshDisplay(); }}

Sieben Segment Arduino Projekt Rolling Dice Ausgabe
Rolling Dice Arduino Projekt Ausgabe

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.