Während herkömmliche 4-stellige Sieben-Segment-Anzeigen zur Ansteuerung 12 Pins belegen und damit an einem kleinen Arduino nur dann betrieben werden können, wenn sonst nur wenige andere Elemente angeschlossen werden sollen, benötigen serielle 7-Segment-Display nur 1 Pin zur Ansteuerung.

Ich habe mir das serielle 7-Segment-Display von Sparkfun etwas genauer angeschaut. Mehrere Anbieter im deutschsprachigen Raum haben das Display ebenfalls für etwa 12 € im Angebot, beispielsweise Watterott (7-Segment LED Anzeige blau (seriell)) in Deutschland oder physicalcomputing.at (7 Segment Display, 4-stellig, seriell, Blau) in Österreich.

Die Ansteuerung erfolgt über die SoftwareSerial-Library des Arduino und benötigt lediglich 1 Ausgangspin zur Datenübermittlung an das Display. Den Anschluß an den Arduino und den benötigten Programmcode zum Test des Displays habe ich im folgenden Video vorgestellt:

Der im Video verwendete Arduino Sketch zur Ansteuerung des seriellen 7-Segment-Display von Sparkfun kann hier über die Zwischenablage in die Arduino IDE kopiert werden:

// SoftwareSerial Library einbinden
#include <SoftwareSerial.h>
 
// Das Lesepin wird nicht verwendet, wir schreiben nur an das Display
const int readPin = 3;
// Schreibpin RX des Display an Pin 2 des Arduino
const int writePin = 2;
 
// Objekt namens ssd erzeugen, Pins übergeben
SoftwareSerial ssd(readPin, writePin);
 
// In diesen String kommt der Inhalt für das Display
char displayString[8];
// Variable für Counter
int displayValue = 0;
 
// setup() wird einmalig zu Programmbeginn ausgeführt
void setup()
{
  // Serielle Kommunikation mit 9600bps starten
  ssd.begin(9600);
  // Display löschen, siehe Funktion weiter unten
  clearDisplay(); 
  // 8888 an Display schicken, damit leuchten alle Ziffernsegmente
  ssd.print("8888"); 
  // Punkte & Doppelpunkte einschalten, siehe Funktion weiter unten
  setDecimals(0b00111111); 
  // Helligkeit auf Maximum
  setBrightness(255);
  // 2 Sekunden warten
  delay(2000);
  // 1234 an Display schicken
  ssd.print("1234"); 
  // Alle Punkte etc. ausschalten
  setDecimals(0b00000000); 
  // 2 Sekunden warten
  delay(2000);
  // Testsequenz beim Boot vorbei, Display löschen
  clearDisplay();
}
 
// loop wird immer wieder ausgeführt, solange der Arduino läuft
void loop()
{
  // sprintf() gibt Eingabewerte formatiert als String zurück
  // %d04 bedeutet: Eingabewert 4-stellig zurückgeben, mit führenden Nullen
  sprintf(displayString, "%04d", displayValue);
  // Wert ans Display schicken  
  ssd.print(displayString);
  // Wert erhöhen
  displayValue++;
  // 1 Sekunde warten, wieder von vorn
  delay(1000);
}
 
// Die folgenden Funktionen sind aus einem Demo-Programm auf arduino.cc
 
// Send the clear display command (0x76)
//  This will clear the display and reset the cursor
void clearDisplay()
{
  ssd.write(0x76);  // Clear display command
}
 
// Set the displays brightness. Should receive byte with the value
//  to set the brightness to
//  dimmest------------->brightest
//     0--------127--------255
void setBrightness(byte value)
{
  ssd.write(0x7A);  // Set brightness command byte
  ssd.write(value);  // brightness data byte
}
 
// Turn on any, none, or all of the decimals.
//  The six lowest bits in the decimals parameter sets a decimal 
//  (or colon, or apostrophe) on or off. A 1 indicates on, 0 off.
//  [MSB] (X)(X)(Apos)(Colon)(Digit 4)(Digit 3)(Digit2)(Digit1)
void setDecimals(byte decimals)
{
  ssd.write(0x77);
  ssd.write(decimals);
}

Damit sollten am Display zuerst für 2 Sekunden alle Segmente leuchten, dann weitere 2 Sekunden die Zahlenfolge 1234 angezeigt werden und darauf hin im Sekundentakt von 0001 hochgezählt werden.

Im zweiten Teil des Tutorials schließen wir dann noch ein Potentiometer und ein Piezo-Element an den Arduino an, damit wir den vom Potentiometer an den analogen Eingangspin gelieferten Wert nicht nur am Display sichtbar, sondern auch als Ton hörbar machen können.

Hier geht es weiter zu Teil 2 des Sieben-Segment-Anzeige Tutorials »

3 thoughts on “Arduino Projekt: 4-stelliges serielles 7-Segment Display am Arduino betreiben – Teil 1

  • Pingback: Arduino Projekt: 4-stelliges serielles 7-Segment Display am Arduino betreiben – Teil 2 | Makerblog.at

  • Pingback: Makerblog.at

  • 20. August 2015 um 20:23
    Permalink

    Hallo,
    danke einmal für die tollen Beschreibungen.

    Habe bereits etliche Projekte Tasternen nach gebaut und getestet.

    Leider stehe ich jetzt etwas an:

    Ich möchte gern einen Timer bauen der was im Sekunden takt abwärts zählt, mit einem Taster dazwischen, wo ich ihn anhalten bzw. wieder aktivieren kann (Pause Taste) . Einen zweiten Taster mit dem ich die Zeit einstellen kann. Wenn die Zeit auf null ist, sollten ein paar LED’s blinken.

    Jetzt das Problem:
    Ich hab mir das selbe 4 stellige 7 Segment display von Sparkfun gekauft, und ich finde es einfach nicht raus wie man es programmiert das es von 1:00 Minute auf 0:59 Sekunden umschaltet. Bzw. bei null stoppt und anfängt zu blinken.

    Könnten Sie mir vielleicht helfen.

    Mit besten dank im voraus
    Mit freundlichen grüßen
    Patrick Lechner

    Antworten

Schreibe einen Kommentar

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

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.