7-Segmentanzeige

Ich mag 7-Segmentanzeigen. Die leuchten schön, sind gut zu lesen und bringen ein wenig Retrofeeling. Leider ist die Ansteuerung nicht ganz so einfach. Es gibt insgesamt 8 Leuchtdioden, die pro Stelle angesteuert werden wollen. Bei einer Anzeige kann man das einfach machen, indem man die LED's einzeln an einen Pin anschliesst. (Widerstand nicht vergessen)
Naja, leider sind dann schon 8 Pin's weg.

Grundsätzlich unterscheide man zwischen 2 Arten. Einmal Anzeigen mit gemeinsamer Kathode und einmal ANzeigen mit gemeinsamer Anode. Je nach Ansteuerung kann man die eine oder andere Variante benutzen.

Zahlendarstellung

Will man nur Zahlen darstellen, kann man einen der vielen BCD zu 7 Segmentdecoder-Treiberbausteine benutzen. Beispiele hier: 4511 (von diversen Herstellern.)

Hiermit gehen nur die Zahlen 0..9. Der Dezimalpunkt muss extra angesteuert werden.

Zahlendarstellung (HEX)

Will man nur Zahlen Hexadezimal (0..15 als 0..f) darstellen, kann man den V40511 Treiberbaustein benutzen. Der ist Pinkompatible zu dem vorhergenannten 4511.

Auch hier muss der DP extra gesteuert werden.

Einzel-Segment-Ansteuerung

Will man alle Segmente einzeln ansteuern und nicht so viele Pins verschleudern, kann man das recht kompfortabel mit Schieberegistern machen. (siehe Porterweiterung)

SAA 1064

Dieser Chip kann bis zu 4 7-Segmentanzeigen (gemeinsame Anode) inkl. Dezimalpunkt ansteuern. Das Interface ist I2C kompatibel, d.h. der Baustein wird seriell angesprochen. Der Chip ist recht gut zu bekommen und kostet 2€. Pro Segment kann der Chip 10mA liefern. Man kann jedes Segment einzeln steuern. Und man kann den Strom steuern.

Datenblatt

IC 7219

Dieser Chip kann 8(!) 7-Segmentanzeigen (gemeinsame Kathode) inkl. Dezimalpunkt ansteuern. Das Interface ist SPI kompatibel, d.h. der Baustein wird seriell angesprochen. Leider ist der Chip mit 8€ recht teuer. Pro Segment kann der Chip 100mA liefern, pro Digit max. 500mA. Man kann im BCD Modus den Chip die Ansteuerung der richtigen Zahlen überlassen, man kann aber auch jedes Segment einzeln steuern. Für den Arduino gibt es eine Bibliothek. Auf eBay findet man manchmal den Chip mit Platine und 9-stelligen Taschenrecher Display (1. Stelle bleibt dann leer) für ein paar €'s.
Quelle: Maxim Webseite
Datenblatt

Meine Schaltung dazu:

SparkFun 7-Segment Display

Bei SparcFun gibt es ein interessantes 7-Segemnt LED Display.
Es besteht im Grunde aus einem kleinen ATMega, der die Steuerung übernimmt und dem eigentlichen Display.
Als INterface kann man zwischen verschiedenen Optionen wählen, SPI I2C oder seriell. Das Display läßt sich sehr einfach ansteuern und eignet sich für die verschiedensten Anzeigen. Von Uhr bis hin zum Rundenzähler.
Zum Verbinden über I2C braucht man die Standart Wire Bibliothek. Zu benutzen ist das Display auch recht einfach. Hier mal ein bisschen Beispielcode, basierend auf dem 1 Beispiel von SparcFun.

S7SegmentDisplay.ino
/*
 11-2-2012
 Spark Fun Electronics
 Nathan Seidle
 
 This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
 
 Serial7Segment is an open source seven segment display. 
 
 This is example code that shows how to send data over I2C to the display.
 
 Note: This code expects the display to be listening at the default I2C address. If your display is not at 0x71, you can
 do a software or hardware reset. See the Wiki for more info: 
 http://github.com/sparkfun/Serial7SegmentDisplay/wiki/Special-Commands
 
 To get this code to work, attached an Serial7Segment to an Arduino Uno using the following pins:
 A5 to SCL
 A4 to SDA
 VIN to PWR
 GND to GND
 
 */
 
#include <Wire.h>
 
#define DISPLAY_ADDRESS1 0x71 //This is the default address of the OpenSegment with both solder jumpers open
 
int cycles = 0;
 
void setup() 
{
  Wire.begin(); //Join the bus as master
 
  //Send the reset command to the display - this forces the cursor to return to the beginning of the display
  Wire.beginTransmission(DISPLAY_ADDRESS1);
  Wire.write('v');
  Wire.endTransmission();
}
 
void loop() 
{
  // clearing
  Wire.beginTransmission(DISPLAY_ADDRESS1);
  Wire.write(0x76);
  Wire.endTransmission();
  delay(1000);
 
  // simple send
  Wire.beginTransmission(DISPLAY_ADDRESS1);
  Wire.write(0x01);
  Wire.write('2');
  Wire.write(0x0A);
  Wire.write('B');
  Wire.endTransmission();
  delay(1000);
 
  // moving cursor
  Wire.beginTransmission(DISPLAY_ADDRESS1);
  Wire.write(0x79);
  Wire.write(0x01);
  Wire.write('B');
  Wire.endTransmission();
  delay(1000);
 
  // decimal
  for (int i = 0; i < 8; i++) {
    Wire.beginTransmission(DISPLAY_ADDRESS1);
    Wire.write(0x77);
    Wire.write(0x01<<i); 
    Wire.endTransmission();
    delay(200);
  }
 
  // Brightness control
  // clearing
  Wire.beginTransmission(DISPLAY_ADDRESS1);
  Wire.write(0x76);
  Wire.endTransmission();
 
  Wire.beginTransmission(DISPLAY_ADDRESS1);
  Wire.write('L');
  Wire.write('A');
  Wire.write('R');
  Wire.write('S');
  Wire.endTransmission();
 
  for (int i = 0; i <= 255; i=i+10) {
    Wire.beginTransmission(DISPLAY_ADDRESS1);
    Wire.write(0x7A);
    Wire.write(i); 
    Wire.endTransmission();
    delay(10);
  }
  delay(1000);
 
  // direkt segment control
  Wire.beginTransmission(DISPLAY_ADDRESS1);
  Wire.write(0x76);
  Wire.endTransmission();
 
  // decimal
  for (int i = 0; i < 8; i++) {
    Wire.beginTransmission(DISPLAY_ADDRESS1);
    Wire.write(0x7B);
    Wire.write(0x01<<i); 
    Wire.endTransmission();
    delay(200);
  }
}

Hier der Link zu SparkFun https://www.sparkfun.com/products/11442.
Das ganze gibt's auch bei Watterot

arduino/tutorial/anzeigen/7-segment-anzeigen.txt · Zuletzt geändert: 2018/11/04 10:51 von 127.0.0.1
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0