7-Segmentanzeige (1)

Hier stelle ich 2 Varianten vor, wo ich eine 4-stellige 7-Segmentanzeige seriell ansteuere.

Natürlich können Schaltungen und Libraries auch für die Ansteuerung von 4 x 8 = 32 LEDs verwendet werden. Gegebenenfalls sind zusätzliche Treiberbausteine erforderlich, falls LEDs mit höherer Stromaufnahme verwendet werden sollen.


Variante 1:

7-Segmentanzeige (4-stellig) Variante mit 74HC595 - Schieberegister

Für die Ansteuerung der 4-stelligen 7-Segmentanzeige werden am Arduino nur 3 Digitalausgänge benötigt.

Testaufbau:

Für den Testaufbau habe ich folgende Teile verwendet:

  • 1 Arduino Uno
  • 4 Schieberegister 74HC595
  • 32 Widerstände 220 Ohm
  • 4 7-Segmentanzeigen z.B. HDSP5503 (mit gemeinsamer Kathode)


Variante 2:

7-Segmentanzeige (4-stellig) Variante mit 74HC595-Schieberegister und I2C-Porterweiterung PCF8574

Die obige Schaltung wurde mit der I2C-Porterweiterung PCF8574 erweitert, für die Ansteuerung sind nur mehr 2 Leitungen erforderlich.

Die I2C-Adresse ist hardwaremäßig über die Adresseingänge A0 - A2 an der Porterweiterung von 0x20 bis 0x27 einstellbar.

Testaufbau:


Library My7Segment und My7SegI2C:

Für beide Schaltungsvarianten habe ich zwei Libraries My7Segment und My7SegI2C geschrieben, die folgende Funktionen enthalten:

  • Abfrage, ob die Anzeige ansprechbar ist (nur für My7SegI2C-Library)
  • Dunkelsetzen der gesamten Anzeige
  • Abfrage ob Anzeige dunkel gesetzt ist
  • Anzeigen eines gerundeten Fließkommawertes (angezeigt werden immer 4 Digits)
  • Beliebige Anzeige von Ziffern und Komma
  • Anzeigen eines Festkommawertes, mit Angabe der Anzahl der Kommastellen und mit oder ohne Vornullenunterdrückung. Rundung muss im aufrufenden Programm erfolgen.
  • Anzeigen einzelner Segmente


Leider können derzeit bei der Anzeige von Fließkomma- und Festkommawertzahlen nur positive Zahlen ausgegeben werden. Die Ausgabe von negativen Zahlen werde ich irgendwann einmal noch ergänzen.


Meine Library-Dateien "My7Segment" und "My7SegI2C" schicke ich gerne auf Anfrage per Email.


Programmbeispiel My7Segment:

//Beispiel My7Segment.cpp


#include <My7Segment.h>


//My7Segment Name(SRClockPin,RCLKPin,DataPin)

//byte SRClockPin - Arduino-Pin verbunden mit 74HC595 Pin 11

//byte RCLKPin - Arduino-Pin verbunden mit 74HC595 Pin 12

//byte DataPin - Arduino-Pin verbunden mit 74HC595 Pin 14

My7Segment My7S(8,9,10);


void setup()

{

  My7S.sendBlank() //Dunkelsetzen der Anzeige

}

 

void loop()

{

  float FloatWert = 43.45

  My7S.sendFloatVal(FloatWert) //Ausgabe der Float-Zahl "FloatWert"

}


Programmbeispiel My7SegI2C:

Neben der Standard-Library Wire wird hier auch noch zur Ansteuerung des Portexpanders PCF8574 meine Library MyI2CExp benötigt, die hier heruntergeladen werden kann: Portexpander PCF8574


//Beispiel My7SegI2C.cpp


#include <Wire.h>
#include <MyI2CExp.h>
#include <My7SegI2C.h>

My7SegI2C My7S(0x20);


void setup()
{
  if (My7S.isReady()) My7S.sendBlank(); //Dunkelsetzen der Anzeige
}


void loop()
{
  float FloatWert = 43.45;
  My7S.sendFloatVal(FloatWert); //Ausgabe der Float-Zahl "FloatWert"

  delay(1000);
}