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.
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.
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.
Will man alle Segmente einzeln ansteuern und nicht so viele Pins verschleudern, kann man das recht kompfortabel mit Schieberegistern machen. (siehe Porterweiterung)
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.
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
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.
/* 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