Christians Webseite        << zurück        vor >>

Handy Display als µC-Anzeige

Bei vielen Mikroprozessor-Projekten ist ein LCD-Display zur Anzeige von Daten notwendig. Displays aus Handys sind leicht verfügbar und preiswert. Leider sind die zugehörigen Datenblätter und Programmiersequenzen nur schwer zu finden. Nachfolgend eine Auswahl einiger Display-Typen zu denen ich Informationen gefunden habe.

Rückmeldungen sind willkommen! Wer Infos oder Code zum weitergeben hat kann ihn mir gerne zuschicken, ich werde ihn dann zu der jeweiligen Beschreibung hinzufügen.

Die Verwendung eines Farb-Displays scheint auf den ersten Blick mehr Optionen zu bieten als reine S/W-Displays. Und für z.B. die Anzeige von Farbbildern ist der Einsatz sowieso keine Frage. Es gibt jedoch auch einige gravierende Einschränkungen die bedacht werden sollten:

Die Darstellung von "echten" Farben ist sehr schwierig und erfordert die gesamte Farb-Kette des Fotos einzubeziehen. Das Farbraum des Displays ist zudem relativ gering und diverse Umrechnungen sind unvermeidbar. Eine (sehr) gute Farbdarstellung ist daher mit diesen einfachen Displays prinzipiell nicht möglich.

Viele Farbdisplays arbeiten transmissiv, d.h. die LED-Hintergrundbeleuchtung wird durch vorgesetzte Farbfilter pixelweise moduliert. Für eine gute Darstellung muss die Hintergrundbeleuchtung immer stärker sein als das Umgebungslicht. Bei Aussenanwendungen, besonders wenn die Sonne scheint, versagt dieses Prinzip sehr schnell. Die Reflektivität des Displays liegt bei nur wenigen Prozent und die Farben gehen verloren. Das Ergebnis ist ein "grauer, kontrastarmer Matsch".

Manche Leute sind mit zu vielen Darstellungs- und Formatierungsmöglichkeiten "überfordert". Weniger ist manchmal Mehr. Der sparsame und überlegte Einsatz von Farbe kommt Ästhetik und Ergonomie zu Gute.

Nicht zuletzt ist es eine Frage des verfügbaren RAM-Speichers. Der Bildschirminhalt eines 101x64 Pixel S/W Displays kann leicht im internen RAM eines z.B. ATmega128 abgelegt werden. Diese Daten werden zu definierten Zeiten am Stück in das Display geschrieben wodurch eine sehr ruhige Darstellung erreicht wird. Bei Farbdarstellung ist das nicht mehr so direkt möglich da der Speicherbedarf durch die Farbtiefe enorm ansteigt.

Ansteuerung und Bildschirmspeicher

Viele Displays haben bereits einen sog. Display-Controller eingebaut. Der übernimmt die komplette low-level Ansteuerung des eigentlichen LCD. Ein "nacktes" LCD-Glas anzusteuern ist sehr aufwändig und auch nicht das Thema dieser Seite. Hier geht es um graphische LCD Displays ohne Zeichengenerator.

Die meisten Display-Controller werden über ein serielles 3-Wire oder 4-Wire Interface angesteuert. Für erste Versuche würde ich empfehlen die Sequenzen ganz rudimentär durch Port-"Klappern" (Bit-Bang) zu erzeugen.

Häufig wird bei der Ansteuerung/Adressierung zwischen Kommandos und Bildschirmspeicher unterschieden. Entweder durch eine dedizierte Leitung (C/D = command/data), oder durch ein spezielles Bit im Datenwort.

Alle LCDs benötigen nach dem Aufstarten zuerst eine spezielle Sequenz zur Initialisierung. Wenn die nicht genau passt, oder fehlt, wird nichts angezeigt.

Die Pixel-Daten im Bildschirmspeicher des Display-Controllers korrespondieren direkt mit den Pixeln, jedes Bit enspricht einem Pixel.
Dies gilt genaugenommen nur für reine S/W-Display. Sobald Graustufen oder Farben hinzukommen wird es komplexer.
Wegen der Byte-Organization ist der Bildschirmspeicher häufig etwas grösser als die Anzahl an Pixel.

Eine populäre SW-Bibliothek für monochrome Displays ist U8g2. Sie enthält Routinen für praktisch alle gängigen LCD und OLED Displays.

Siemens Mobile

Die Firma Siemens hat bis Herbst 2005 Handys unter eigenem Namen entwickelt, gebaut und vertrieben. Danach wurden sie noch kurze Zeit weiter unter dem Namen "BenQ" verkauft. Ersatzteile sind weiterhin z.B. über Ebay zu bekommen.

Siemens A70

Besonders praktisch und vielseitig finde ich das Display aus dem Siemens-Handy A70, A71. Es zeigt 101x64 Punkte in 1 Bit S/W Darstellung. Die Verbindung zum Mikroprozessor ist z.B. mit einem SPI-Interface oder direkt über Ports einfach zu realisieren.

LCD Display LCD Display
LCD Display LCD Display

Das Modul umfasst folgende Teile:

  • Das eigentliche LCD-Display-Glas mit integriertem Controller (COG)
  • Einen lightguide und 2 LEDs für die Hintergrundbeleuchtung (amber)
  • Eine Flex-Folie mit allen Bauteilen und Kontaktpads
  • Ein Plastikgehäuse dass alle Teile mechanisch trägt
Abmessungen (ca.): 37.3 x 35 x 4.5 mm
Aktive Anzeigefläche (ca.): 29.3 x 20 mm
Die Betriebsspannung beträgt 3V. Ab 3.5V wird das Display geschädigt!!
Alle Logik-Spannungen müssen ebenfalls 3V betragen.
Der Controller ist unbekannt. Er arbeitet vom Konzept her aber offensichtlich ähnlich wie ein PCF8812/13 von Philips. Sehr verwandt sind z.B. auch die Displays von Nokia aus den Geräten 3210 und 3310 (mit Philips PCD8544).
Die Versorgung der LEDs ist elektrisch völlig getrennt vom Controller. Die Farbe der LEDs ist amber (~orange/gelb).

Siemens A55/C55/A52/A57

Siemens hat das gleiche Display-Glas ebenfalls in den Modellen C55, A55 und A52 verwendet. Dort ist es in den Keypad-Block eingebaut, hat aber keine eigene Beleuchtung. Es existieren unterschiedliche Versionen von mindestens 4 Herstellern mit unterschiedlichen Controllern (Dialog D0986, Rohm BU97865, Philips 8813, ..) die nicht direkt SW-kompatibel sind. Beim A70 scheint es nur einen Hersteller zu geben.

LCD Display LCD Display
LCD Display

Die Beschaltung ist ähnlich wie beim A70, man muss aber noch einen Kondensator für die LCD-Spannung hinzufügen. Die LEDs zur Beleuchtung werden in den Ausschnitten des Light-guide positioniert.
Ein Vorteil dieses Moduls sind die 4 Befestigungsbohrungen in den Ecken. Den Tastatur-Block kann man abtrennen.

Programmierung

Das A70-Display besitzt keinen eingebauten Character-Generator, es ist ein reines Grafik-Display. Um Texte dazustellen benötigt man daher entsprechende Schriftsatz-Daten. Die im Web verfügbaren Programme und Sourcen für die Nokia-LCDs sind eine gute Basis.

Im folgenden die wichtigsten Funktionen zur Ansteuerung. Es wird zwischen COMMANDS (Signal "C/D"=0) und DATA (Signal "C/D"=1) unterschieden. Im DATA-Modus wird der Bildschirminhalt geschrieben.
(ChipSelect = CE active low; Clock=CLK; Reset = active low)

Ein Reset sollte nach jedem Einschalten zuerst gemacht werden.
Die Signalleitungen müssen entsprechend der folgenden Sequenz gesetzt werden.

 
Reset_LCD
{
	Data=0;
	Clock=0;
	Control=0;
	Data=0;
	Reset=1;
	ChipSelect=0;
	Reset=0;
	Reset=1;
	ChipSelect=1;
{

Das Übertragen von Daten und Kommandos erfolgt üblicherweise im seriellen 8-Bit-Format.
 
SendCommand(Command)
{
	Data=0;
	Clock=0;
	Control=0;
	ChipSelect=0;
	i = 0;
	do {
		Data = (((1 << (7-i))& Command) > 0);
		Clock=1;
		Clock=0;
		i++;
	} while (i = 7);
	ChipSelect=1;
}

Nach einem Reset ist das Display nicht in der Lage etwas anzuzeigen. Es muss zuerst die folgende INI-Sequenz gesendet werden.
 
Init_LCD
{
	SendCommand(0b00100001);
	SendCommand(0b11011010);
	SendCommand(0b00010100);
	SendCommand(0b00001011);
	SendCommand(0b00000101);
	SendCommand(0b00100000);
	SendCommand(0b00010001);
	SendCommand(0b00001100); // Display normal
	// SendCommand(0b00001101); // Display inverse
}

Der Kontrast muss eingestellt werden. Ein guter Startwert ist 70dez.
 
SetContrast(Value)
{
	SendCommand(0b00100001);
	SendCommand((Value+128));
	SendCommand(0b00100000);
}

Das normalerweise aktive auto-increment sorgt dafür das beim Schreiben der Bildschirmdaten die Adresse automatisch hochgezählt wird. Den Startpunkt legt man mit der folgenden Funktion fest.
Die 64 vertikalen Punkte sind in 8er-Gruppen (=1 Byte) zusammengefasst, die Zählung der Linien geht daher nur von 0 bis 7.
 
GotoLineRow(Line, Row)
{ // Line: 0..7, Row 0..101;
	SendCommand((0b01000000 + Line));
	SendCommand((0b10000000 + Row ));
}

Das Schreiben der eigentlichen Display-Daten erfolgt analog zu den Commands, mit dem Unterschied dass "Control/Data" auf "1" gesetzt wird.
 
WriteDisplay(Value)
{
	Data=0;
	Clock=0;
	Control=1;
	ChipSelect=0;
	j = 0;
	do {
		Data = (((1 << (7-j))& Value) > 0);
		Clock=1;
		Clock=0;
		j++;
	} while (j <= 7);
	ChipSelect=1;
}

Für eine komplette Grafik-Lib empfehle ich die verfügbaren Sourcen für die Nokia-Displays zu benutzen und entsprechend anzupassen.
Ein Forum mit weiterführenden Informationen ist z.B.:
http://lcdhype.condense.de/

Siemens S55

In den Baureihen S55, M55, C60 und MC60, SL55(?) kam ein Farbdisplay mit 101x80 Pixel und 4096 Farben zum Einsatz. Es gibt mindestens 3 Herstellern:

LCD Display LCD Display LCD Display

Vermutliche Kombinationen:
1.) Philips: LPH8731; Controller EPSON S1D15G14; Controller NJU6821 (256 Farben only)
2.) Sharp LM15SGFNZ04; Controller LH15AB?
3.) Sharp LM15SGFNZ07; Controller Hynix HM17CM4101

Dieses Display wurde in den Elektor-Heften vom April 2007 und Dezember 2008 vorgestellt. Elektor bietet die Software dazu als (kostenlosen) Download an.

Einige Links:
http://www.module.ro/siemens_lcd.html
http://www.mikrocontroller.net/topic/70449#new
http://www.mikrocontroller.net/attachment/88953/s55Display.zip

Siemens CF62

Dieses Display stammt aus dem Klapp-Handy CF62. Es ist ein Doppel-Display: aussen S/W, 95x64 Pixel, innen Farbe, 130x130 Pixel, 65k Farben. Es existieren 2 unterschiedliche Versionen.

LCD Display LCD Display

Der aussen liegende S/W-Teil des Displays ist sehr ähnlich zum A55-Display. Die Controller sind identisch, nur das Glas wurde geschrumpft. In einer der beiden Versionen ist das Displays über einen ZIF-Konnektor verbunden und leicht vom Rest zu trennen. Es kann dann wie ein A55/A70-Display benutzt werden.

Siemens S65

Ein weit verbreitetes Display ist das Farb-LCD aus dem S65, CX65, CX70, CX75, SK65, A65, C62, ... Es besitzt 132x176 Pixel und kann 65535 Farben darstellen. Es existieren mindestens 3 Versionen von unterschiedlichen Herstellern.

LCD Display LCD Display

Die notwendigen Ansteuersequenzen und Libraries sind in praktisch jedem Elektronik-Forum verfügbar.

Siemens S75

Im S75 wurde ein ähnliches Display wie im S65 verbaut. Die Auflösung beträgt 132x176 Pixel mit 262k Farbtiefe. Der grosse Unterschied besteht im parallelen 8bit-Inferface im Vergleich zum seriellen Interface beim S65. Es besitzt deshalb deutlich mehr Kontaktpads. Es existieren mindestens 4 Versionen von unterschiedlichen Herstellern.

LCD Display LCD Display
LCD Display LCD Display
Die eingesetzten Controller, und damit die Ansteuersequenzen, sind weitgehend identisch zum S65-Typ. Leider sind die vielen Anschlüsse recht lästig zu verdrahten, mancher µC hat nicht mal so viele freie Anschlüsse.

Nokia 1200

Nokia 1200 S/W Display, 96 x 68 Pixel. Controller PCF 8814
Vermutlich baugleich mit den Typen : 1110, 1112
LCD Display LCD Display LCD Display

LCD Display LCD Display

Nokia 1202

Nokia 1202 S/W Display, 96 x 68 Pixel. Controller STE2007
LCD Display LCD Display

Dieses Display wurde in den Telefonen der Baureihen 1202/1203/1280 verwendet. Es ist ähnlich zum 1200er, nur etwas kleiner. Die Anschlüsse sind etwas leichter zu kontaktieren, aber auch recht fummelig. Es enhält eine weisse LED für die Hintergrundbeleuchtung. Die Ausleuchtung ist nicht toll (nur 1 LED), aber akzeptabel.

Das Display wird auch als Modul unter der Bezeichung HX1230 für Arduino und Co angeboten angeboten. Sehr zu empfehlen weil damit das Problem der Kontaktierung elegant gelöst wird. SW-Bibliotheken und Demos sind z.B. hier zu finden:
bitbank2/hx1230
cbm80amiga/HX1230_SPI
cbm80amiga/HX1230_FB

Es scheint (mindestens) 2 Varianten zu geben die sich in der Belegung und Ausführung der Kontakte unterscheiden. Oder sie stammen aus unterschiedlichen Geräten und der Verkäufer hat es mit den Bezeichnungen nicht so genau genommen..

  • Pin #1: nicht belegt oder Reset
  • Pin #3: nicht belegt oder GND
LCD Display

Weitere kleine Abweichungen gibt es bei der Programmierung. Bei einigen Exemplaren ist eine gespiegelte Ausgabe nicht möglich und der Kontrast ist nicht veränderbar. Entweder bin ich zu blöd oder Nokia hat sich spezielle Kontroller einbauen lassen die nur das nötigste können..

Die Ansteuerung erfolgt über 9-Bit Worte. Das erste Bit gibt an ob der Bildschirmspeicher beschrieben oder ein Kommando gesendet wird. Nokia hat damit die Command/Data-Leitung eingespart.

Der Bildschirmspeicher hat eine Grösse von 864 Byte, organisiert in 9 Zeilen und 96 Spalten. Er ist somit grösser als die Anzahl der darstellbaren Pixel. Von der letzen Zeile werden nur 4 Bit auf dem LCD angezeigt (96 x 68 Pixel).

 
Init_LCD
{
	SendCommand_LCD(0xE2);  	// Soft RESET
	SendCommand_LCD(0x24);  	// V0R (Default 0x24)
	SendCommand_LCD(0xE1);  	// V0P (Default 0xE1)
	SendCommand_LCD(0x90);  	// EV, Electronic Volume = Contrast Setting (Default 0x90)
	SendCommand_LCD(0xA4); 		// Powersave ALLPOINTS-ON mode turned ON
	SendCommand_LCD(0x2F); 		// Power control set to max
	SendCommand_LCD(0xAF); 		// Display ON
	SendCommand_LCD(0xC0);		// Column Direction normal
	SendCommand_LCD(0xA6);		// display control, normal
	//SendCommand_LCD(0xA7); 	// display control, inverse
}
 

Nokia 5110

Dieses Display wird oft in "Arduino-Shops" als Modul angeboten. Es wurde im Nokia 5110 Handy verwendet.
LCD Display LCD Display
Auflösung 84 x 48 Pixel, 3.3V, weisse Hintergrundbeleuchtung.
Kontroller Philips PCD8544.
Durch die Hilfsplatine ist es sehr leicht kontaktierbar.

 
Init_LCD
{
	SendCommand_LCD(0x21);	//Tell LCD that extended commands follow
	SendCommand_LCD(0xBF);	//Set LCD Vop (Contrast): Try 0xB1(good @ 3.3V) or 0xBF if your display is too dark 
	SendCommand_LCD(0x04);	//Set Temp coefficent
	SendCommand_LCD(0x13);	//LCD bias mode 1:48: Try 0x13 or 0x14. Mine works best with 1:65/1:65
	SendCommand_LCD(0x20);	//We must send 0x20 before modifying the display control mode
	SendCommand_LCD(0x0C);	//Set display control, normal mode. 0x0D for inverse
}
 

Sonstige Displays


DOGS102x-6 Electronic Assembly

Die Firma Electronic Assembly bietet eine ganze Serie von sehr schönen Grafik-LCD-Displays an. Als Beispiel das DOGS102W-6 mit 102x64 Pixel, S/W, transflektiv, Kontroller UC1701, weisse Beleuchtung:
LCD Display LCD Display
Die Serie ist sehr umfangreich und bietet diverse Pixel-Auflösungen und Farb-Optionen an. Es gibt rein reflektiv arbeitende Typen (ohne Hintergrundbeleuchtung) und transmissive mit Hintergrundbeleuchtung.
Die weisse Beleuchtung (LED39X41-W) sitzt in einem extra Träger, beides wird Huckepack montiert.
LCD Display LCD Display
Zwei wichtige Dinge sollte man bei der Montage beachten!:

  • Die 3 Schutzfolien vorher entfernen! Eine sitzt auf dem Beleuchtungsträger, zwei weitere auf Ober- und Unterseite des LCD
  • Die 4 Beinchen für die LEDs enden blind auf dem LCD und dienen nur zur mechanischen Fixierung. Sie müssen aber unbedingt auf der Beleuchtungsplatte verlötet werden. Nur Durchstecken macht keinen sicheren Kontakt.

Electronic Assembly liefert umfangreiche SW-Unterstützung und die Serie wird auch von vielen (Arduino-)Bibliotheken unterstützt. Wie bei dieser Art von Display üblich muss man auch hier mit separaten Zeichensätzen arbeiten.

Bei den Programmier-Kommandos wird zwischen "Basic" und "Extended" unterschieden, je nach Pegel des Control-Bits.
  • "Basic" sendet Befehle an den Kontroller
  • "Extended" schreibt die Display-Daten

 
void SendByteBasic_LCD(unsigned int Daten)		
{   // ControlBit low: Basic Instruction, send Commands
 uint16_t i;
 P_Data = 0;
 P_Clock = 0;
 P_Control = 0;
 P_ChipSelect = 0;
 i = 0;
 do {
	if (((1 << (7-i))& Daten) > 0) P_Data = 1; else P_Data = 0;
	P_Clock = 1;
	P_Clock = 0;
	i++;
 } while (i <= 7);
 P_ChipSelect = 1;
}
 
 
void SendByteExtended_LCD(unsigned int Daten)	
{   // ControlBit high: Extended Instruction, write Display Data
 uint16_t i;
 P_Data = 0;
 P_Clock = 0;
 P_Control = 1;
 P_ChipSelect = 0;
 i = 0;
 do {
	if (((1 << (7-i))& Daten) > 0) P_Data = 1; else P_Data = 0;
	P_Clock = 1;
	P_Clock = 0;
	i++;
 } while (i <= 7);
 P_ChipSelect = 1;
}
 
Eine funktionierende Init-Sequenz ist die folgende:
 
Init_LCD
{
	SendByteBasic_LCD(0x40); //Startline 0
	SendByteBasic_LCD(0xA0); //SEG reverse
	SendByteBasic_LCD(0xC0); //Set COM direction (COM0-COM63)
	SendByteBasic_LCD(0xA4); //Set all Pixel to on
	SendByteBasic_LCD(0xA6); //Display normal
	SendByteBasic_LCD(0xA2); //Set bias 1/9
	SendByteBasic_LCD(0x2F); //Booster, regulator, follower on
	SendByteBasic_LCD(0x27); //Set contrast
	SendByteBasic_LCD(0x81); //Set contrast
	SendByteBasic_LCD(0x10); //Set contrast
	SendByteBasic_LCD(0xFA); //Temperature compensation
	SendByteBasic_LCD(0x93); //Temperature compensation
	SendByteBasic_LCD(0xAF); //Display on
}
 
Das Display benötigt insgesamt 816 Byte an Display-Daten. Die vertikalen Pixel sind in 8er Gruppen organisiert. Mit jedem Byte werden 8 vertikale Pixel gleichzeitig gesetzt. Eine Zeile besteht somit aus 8 Bits * 102 Spalten ( = 816 Bits = 102 Byte). Das ganze mal 8 Zeilen.
Dies gilt für die "normale" Einbaulage (Kontroller oben, der schwarz vergossene Bereich). Bei umgedrehter Einbaulage müssen zuerst 30 Dummy-Bytes gesendet werden weil der Bildspeicher im Kontroller intern mit einigen nicht sichtbaren Pixeln arbeitet.

DEM 128064P

Dieses Display ist von der Firma Display Elektronik. Es hat ein 128 x 64 Pixel LCD und einen ST7567 Controller von Sitronix. Es ist Teil einer Familie von ähnlichen Modulen mit unterschiedlichen Grössen, Farben und Beleuchtungsarten.
LCD Display LCD Display
LCD Display LCD Display

Die Stromversorgung der Hintergrundbeleuchtung ist etwas unüblich, 2 Kontaktzungen auf der Rückseite.
Im Modul-Datenblatt fehlen leider die Angaben für die Beschaltung der Kondensatoren, man findet sie aber im Datenblatt des Controllers oder bei den "Geschwister"- Modulen.
LCD Display

Eine funktionierende Init-Sequenz ist die folgende:

 
Init_LCD
{
	LCD_SendCommand(0xE2);  	// (14) Software Reset 0b1110 0010
//	LCD_SendCommand(0xA2);  	// (11) Bias Select 0b1010 0010	1/9 (Duty = 1/65), contrast -> 34
	LCD_SendCommand(0xA3);  	// (11) Bias Select 0b1010 0011	1/7 (Duty = 1/65), contrast -> 20

//  Upside Down Orientation
//	LCD_SendCommand(0xA1);		// (8) SEG Direction 0b1010 0001	Reverse Direction
//	LCD_SendCommand(0xC0);		// (15) COM Direction 0b1100 0000	Normal Direction

//  Normal Orientation
	LCD_SendCommand(0xA0);		// (8) SEG Direction 0b1010 0000	Normal Direction
	LCD_SendCommand(0xC8);		// (15) COM Direction 0b1100 1000	Reverse Direction
	
	LCD_SendCommand(0x40);		// (2) Set Start Line
	LCD_SendCommand(0xA4);		// (10) All Pixel ON, normal display
	
	LCD_SendCommand(0xA6);		// (9) Display Color Normal 0b1010 0110
//	LCD_SendCommand(0xA7);		// (9) Display Color Inverse 0b1010 0111
		
	LCD_SendCommand(0x24);  	// (17) Regulation Ratio 0b0010 0100 -> 5.0
	LCD_SendCommand(0x81);  	// (18) Set EV 0b1000 0001 (double byte instruction)
	LCD_SendCommand(0x14);  	// (18) Set EV 0b0000 1000 (value 20)
	LCD_SendCommand(0x2F);  	// (16) Power Control 0b0010 1111 -> all circuits ON
	LCD_SendCommand(0xAF);		// (1) Display ON/OFF  0b1010 0111
}
 


Der Controller hat einen internen Pixel-Speicher (Display-Data-RAM) von 132 x 65 Bits. Verwendet werden eber nur 128 x 64 (= Anzahl Pixel des LCD).
Beim Schreiben des DDRAM wird der Pointer automatisch inkrementiert, aber nur bis zum Ende einer Zeile (genannt Page). Danach muss per Command die nächste Page angewählt werden. Diese Verhalten ist etwas ungewöhnlich. Üblicherweise kann man das DDRAM "in einem Rutsch" linear beschreiben.

Densitron PC-6749-AA

Dieses Modul fand ich bei Pollin in der "Restekiste". Es hat ein HTN, transflektives/positive Glas mit 3 Hex-Ziffern, Hintergrundbeleuchtung und ein HT1621 als Treiber-IC. Abmessungen 27.40 x 21.90 x 5.50mm.

LCD Display LCD Display
Der HT1621 ist ein universeller LCD-Controller ohne Character-Generator. Er wird über einen 3-Draht-Bus programmiert. Die passenden Treiber-Sourcen fand ich dankenswerterweise in einem Forum:
https://www.mikrocontroller.net/topic/380929
Die Darstellungsmöglichkeiten sind leider sehr begrenzt und der Kontrast ist auch nicht so super. Aber völlig ausreichend um ein paar Ziffern oder Hex-Symbole darzustellen.

DE 112-RS

Dies ist ein sog. "Digital"-Display aus der DE 112 Serie von "Display Elektronik GmbH". Es besteht nur aus einem Glas, ohne Treiber-Elektronik. In dieser Serie gibt es noch andere Varianten in transflektiver Ausführung für den Betrieb mit Hintergrundbeleuchtung. Ich suchte eins mit maximalem Kontrast und habe deshalb die reflektive Ausführung gewählt.
LCD Display LCD Display LCD Display

Diese Art von Displays benutzt kein Multiplexing und liefert dadurch einen besseren Kontrast als die oben gezeigten Grafik-Displays.

Für die Ansteuerung muss man leider "alles selbst machen". Um ein Segment sichtbar zu schalten muss es gegenphasig zur Backpanel-Elektrode angesteuert werden. Das ganze im Wechseltakt mit ~60Hz. Takt und Pegel müssen genau eingehalten werden um im Mittel gleichspannungsfrei zu bleiben. Der erlaubte Gleichanteil liegt bei nur max 50uV.

Für die Ansteuerung gibt es auch eine Application Note von Atmel:
AVR241: Direct driving of LCD display using general IO

Im Atmel habe ich Timer 0 als normalen, durchlaufenden Zähler für den Takt benutzt, mit aktiviertem Überlauf-Interrupt.

 
{
	TCCR0B = 0b00000011;
	TIMSK0 = (TIMSK0 | (1 << TOIE0)); // Overflow-Interrupt enabled
}						
 
Bei jedem Überlauf-Interrupt wird die Polarität des Backpanel-Signals umgeschaltet, gleichzeitig die Segmente. Ein Segment im Gleichtakt bleibt unsichtbar, im Gegentakt wird es sichtbar. Mit einer Tabelle und ein bischen XOR Rechnung werden die Zeichen zusammengebaut.

Wichtig ist dabei dass der Interrupt möglichst ungestört ablaufen kann. Ein zu grosse Unsymmetrie verursacht gemittelt eine Gleichspannungskomponente, die unbedingt vermieden werden muss.

Links

Einige generell Links zum Thema:
http://www.mikrocontroller.net/articles/Kategorie:LCD
http://www.mikrocontroller.net/articles/LCD#Weblinks
http://lcdhype.condense.de/

Der folgende Bastler verwendet gerne Bauteile und Module aus der "Reste-Ecke" von Pollin und Co. Dazu gibt er viele praktische Hinweise und Tipps. Eine sehr schön gemachte und übersichtliche Seite.
Homepage Steppi
Er hat mit Erfolg diverse Displays zum Laufen gebracht:
Steppi Steppi
Steppi