SD-, SDHC- und MMC-Karten an AVR anschließen

SD-Karten (von der SD Association spezifiziert) und die älteren MMC-Karten sind billige Massenspeicher mit geringem Stromverbrauch. Neben einem eigenen Protokoll („native bus“) verstehen MMC- und SD-Karten auch eine Kommunikation mittels SPI. SPI spricht der AVR schon von Hause aus. Es ist daher nicht allzu schwer, eine solche Karte an den AVR anzuschließen.

Neben den SDSC-Karten (SC=Standard Capacity, normalerweise als SD-Karten bezeichnet) gibt es auch die elektrisch gleichen, aber software-technisch unterschiedlichen SDHC-Karten (HC=High Capacity) und seit 2009 SDXC-Karten. SDSC-Karten haben FAT12 oder FAT16-Filesystem. Mit FAT16 kann man bis 2GByte darstellen. Manche Hersteller bieten allerdings auch 4GB mit SD-Karten an. Mehr geht aber nur mit SDHC, die ein FAT32 Filesystem haben. SDHC ist bis 32GB spezifiziert, SDXC dann bis 2TB.

Neben den „normalen“ SD-Karten gibt es auch MicroSD-Karten, die deutlich kleiner sind. Abgesehen von den Abmessungen sind sie aber genauso zu nutzen wie die großen SD-Karten. Mit einem einfachen SD-Adapter können MicroSD-Karten genauso wie SD-Karten verwendet werden.

Für unterschiedliche Anwendungsbereiche gibt es unterschiedliche Geschwindigkeitsklassen, von „Class 2“ bis „Class 10“ (2011). Die Zahl steht für die Transferrate in MByte/s beim Schreiben.

Einige Speicherkarten, von oben links im Uhrzeigersinn: SDHC, SDHC, SD, MMS (8MB), alte SD (16MB). Die beiden SDHC-Karten sind mit dem Symbol für die Geschwindigkeitsklasse „Class 2“ versehen.


Eine MicroSD-Karte mit SD-Adapter

Hardware

Für das mechanische Anschließen der Karte kann man sich einen SD-Kartenslot fertig kaufen. Der Slot besitzt meist auch einen Pin, an dem man eine eingeschobene Karte erkennen kann. SD-Karten besitzen einen Schreibschutzschalter, den man abfragen kann. Wichtig sind die folgenden Pins:

SPI Funktion SD-Karte Pin-Nr. AVR Pin-Nr. (am Beispiel AT Mega 32) (Pin-Nr. Pollin-Board)
CS – Chip Select 1 SS – PB4 muss als Ausgabe-Pin konfiguriert werden, es kann aber ein beliebiger anderer Pin für das CS-Signal genutzt werden. Nur wenn SS aus Ausgabe-Pin konfiguriert ist, läuft der AVR als SPI-Master. z.B. 1 (=Port A, Pin0)
DI – Data In / CMD 2 MOSI – PB5 14
DO – Data Out / DATA 7 MISO – PB6 15
CLK – Clock 5 SCK – PB7 16
Ground 3 und 6 Beide Pins zusammenschalten! 39
Vcc 4 Vcc soll zwischen 2,7 und 3,6V liegen

Nach einem allgemein anerkannten Vorgehen wie bei Ulrich Radig beschrieben, kann die Vcc für die Karte aus 5V über den Spannungsabfall an zwei Dioden (je 0,7V) gewonnen werden. Die Pins CS, DI und CLK müssen über Spannungsteiler an den AVR angeschlossen werden, wenn dieser mit Spannungen >3,6V betrieben wird. Für 5V werden üblicherweise 1,8K Richtung AVR und 3,3K gegen Masse genommen. DO wird direkt auf den AVR-Eingang gelegt.


Pinbelegung, SD (oben) und MMC (unten)

Software

Das Thema SD-Kartenanschluss ist bereits vielfach von Null an angegangen worden. So gibt es fertige Bibliotheken und Anwendungen hierfür. Siehe hierzu ganz unten „Links“.
Ich habe mir mehrere Bibliotheken angesehen und dann mit der Bibliothek von Roland Riegel experimentiert, weil diese gut dokumentiert ist auch schon von vielen Nutzern erfolgreich eingesetzt wurde.

Kommunikationsbetrachtung

Obwohl das Thema also ausführlich beackert ist, habe ich trotzdem ziemlich viel herumprobieren müssen, bis meine Karten liefen. Die Anbindung verhält sich bei unterschiedlichen Karten leider nicht immer gleich. Ich habe mir daher mit dem Logikanalysator die Kommunikation des AVR mit einer funktionierenden Karte mal genau angesehen.

Eine 2G Transcend SD-Karte wurde an einen AT Mega32, der mit 8Mhz Quarz betrieben wird, angeschlossen. Die SPI-Taktfrequenz wurde auf 125Khz eingestellt. Ein Logikanalysator wurde auf 2 Mikrosekunden asynchroner Takt eingestellt. Ein Bit ist dann 8 Mikrosekunden und damit 4 Takte des Analysators lang.
Die Leitungen CS wurde auf Probe A0 („GRPA00“), DI auf Probe A1 („GRPA01“), DO auf Probe A2 („GRPA02“) gelegt. CLK wurde auf Probe A03 („GRPA03“) gelegt.

1. Der AVR möchte die Karte initialisieren.

Die Karte wird während der Initialisierung mit einer SPI-Taktfrequenz von 400Khz angesprochen. Nach der Initialisierung wird üblicherweise auf einen deutlich höheren Takt umgeschaltet. Man muss die 400Khz nicht sklavisch einhalten, ich habe 62,5Khz und 125Khz probiert, beides ging, ich vermute dass man die 400Khz nicht deutlich überschreiten darf. Nach Initialisierung kann man den SPI-Takt z.B. auf 2Mhz hoch schalten.

Der AVR wählt die Karte aus (CS auf 0) und sendet das Kommando „Go Idle State“/“CMD0“ an die Karte.

Auf dem folgenden Bild wurde der Trigger des Analysators auf „CS geht auf 0“ gesetzt. Der Triggermoment t=0 wird durch die gestrichelte rote Linie („CURSOR1“) dargestellt. Man sieht, dass unmittelbar nach dem Trigger Taktsignal vom AVR gesendet werden. Während aller 8 Taktzyklen hält der AVR seinen Ausgang MOSI („GRPA01“) auf 1. Im Ergebnis sendet der AVR ein 0xff. Dies ist korrekt, da vor dem Senden oder Lesen von der SD-Karte ein paar Taktzyklen zur Synchronisation von Master und Slave durch den Master gesendet werden. Im Code von Roland Riegel findet man dies in sd_raw.c, Funktion sd_raw_send_command_r1() wieder:

response = sd_raw_send_command_r1(CMD_GO_IDLE_STATE, 0);

Im Code wird die Synchronisation dadurch erreicht, dass sd_raw_rec_byte() ein 0xff sendet und ein „Dummy Byte“ von der Karte liest. Die Karte hat im Moment nichts sinnvolles zu senden und sendet acht 0-Bits, also 0x00.
Die gültigen Bit-Werte werden übrigens übernommen, wenn die Takt-Flanke von 0 auf 1 geht („rising edge“).

Als nächste Bitfolge wird 0100.0000, also 0x40 an die Karte gesendet. Die durchgezogene Rote Linie („CURSOR2“) steht genau auf dem 8. Bit dieses Bytes.Dies entspricht dem zu sendenden CMD0 (=0x00), geodert mit 0x40. Danach sendet der AVR viermal 0x00. Nur eines dieser vier Bytes ist komplett auf dem Bild zu sehen.

Auf dem folgenden Bild bin ich auf der Zeitachse nach rechts gegangen, man kann nun die letzten zwei 0x00-Bytes ganz sehen. Die 4 Bytes sind übrigens ein 32 Bit Argument zum Kommando CMD0, wobei das Argument den Wert 0 hat.

Nach den vier Argument-Bytes wird ein CRC-Byte gesendet. Dieses hat für die gesendete Bytefolge 0x40,0x00,0x00,0x00,0x00 den Wert 0x95. Tatsächlich lässt sich dieser Wert auch als Bitfolge 1001.0101 aus dem Bild ablesen (dritte komplette 8Bit-Folge im Bild, am Takt leicht erkennbar).

Als Antwort sendet die Karte nun ein 0xff. Der Cursor steht genau auf dem ersten Bit dieses Bytes. Solange die Karte noch keine Antwort komplett hat, sendet sie 0xff als Fülsel. Danach kommt die „echte“ Antwort, eine 0x01. Im Code von Roland Riegel findet man hierzu:

if(!(response & (1 << R1_IDLE_STATE)))
break;

D.h. das Kommando CMD0 wurde von der Karte akzeptiert, wenn sie ein 0x01, wie in unserem Falle, zurücksendet. Nach Verarbeiten von CMD0 ist die Karte nicht mehr im „native“ Mode und benötigt am Ende der Kommandos nun keine CRC-Bytes mehr.

CMD0 mit SPI

2. Der AVR wartet darauf, dass Karte sich initialisiert hat.

Die Karte benötigt eine gewisse Zeit für ihre Initialisierung. Wenn sie fertig ist, antwortet sie auf das Kommando „Send Op Cond“ / CMD1 als Antwort 0x00.

Im folgenden Bild wurde CMD1 gesendet, sowie die folgenden vier Argument-Bytes mit 0x00. Das CRC-Byte entfällt nun. Auch hier kann man erkennen, dass die Karte zunächst ein 0xff-Byte schickt. Danach schickt sie bis die Initialisierung fertig ist, 0x01. Das Ende der Initialisierung, d.h. die abzuwartende Antwort auf CMD1 ist 0x00.

SPI CMD1 command

Im folgenden Bild habe ich das Eintreffen der Antwort 0x00, auf CMD1, abgewartet. Da es etwa 60ms dauerte, bis die Karte die korrekte Antwort schickt, habe ich den Trigger hier anders definiert, somit stimmt die angegebene Zeit (Cursor Delta) von 0,1ms hier nicht mehr. Der Cursor steht direkt auf dem letzten Takt des Bytes 0x00.

SPI CMD1 end of init

3. Die SD-Karte ist fertig initialisiert. Man kann nun Lese- und Schreibkommandos zur Karte schicken.

Hier das Ergebnis des Lesens einer SD-Karte mit FAT16, Sektor 0 (Boot-Sektor):

0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
10 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
20 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
30 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
40 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
50 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
60 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
70 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
80 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
90 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
100 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
110 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
120 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
130 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
140 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
150 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
160 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
170 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
180 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
190 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
1A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
1B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 ................ 
1C0 - 04 00 06 1c dc cc ff 00 00 00 01 d3 3b 00 00 00 ....���....�;... 
1D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
1E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
1F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa ..............U�

Ich kann mit meiner Hardware und Software nicht jede Karte erkennen. Hier eine Aufstellung, was zur Zeit funktioniert:

Typ Hersteller Name Größe Filesystem Lesbar mit simpler Hardware und Roland Riegels FAT16-Bibliothek Speed Faktor Kommentar
MMC Palm PalmPak Card 8M FAT12 Hardwaremäßig erkannt, wegen FAT12 nicht lesbar Karte ist als „Rest“ eines Palms übrig geblieben.
SDSC Palm Palm Backup Card 16M FAT16 Nein, CMD0 wird falsch beantwortet Karte ist als „Rest“ eines Palms übrig geblieben.
SDSC PNY Technologies/
Toshiba
SD-M01G 1G FAT16 Nein, CMD0 wird falsch beantwortet
SDSC Transcend 6451AG 2G 02DS 2G FAT16 Ja
SDHC SanDisk TS4GSDHC6 4G FAT32 Nein, CMD0 wird falsch beantwortet Class 2
SDHC extrememory SDHC4GB 4G FAT32 Nein, CMD0 wird falsch beantwortet Class 2
SDHC Transcend TS4GSDHC6 4G FAT32 Ja Ultraspeed Class 6, MLC
SDHC Transcend TS16GSDHC6-S5W
(TS-RDS5W)
16G FAT32 Ja Ultraspeed Class 6

 

Die fehlerhafte Bearbeitung von CMD0 durch die Karte ist am Beispiel der extrememory-Karte hier zu sehen. Ich habe den Verdacht, dass die Karte zwar die erwartete Antwort schickt, aber vorher 1 Bit verschluckt wird, so dass das Alignment der Bits im Byte falsch ist und so die erwartete Antwort auf CMD0 (0x01) nicht gelesen wird, statt dessen wird 0x03 gelesen. Warum das so sein könnte ist mir aber völlig unklar. An alle Leser: Falls mir da jemand helfen kann, wäre ich glücklich(er)!

FAT32 Bibliothek

Da ich mehr als 2GB Daten verwalten muss (in einem MP3-Player), bin ich später auf SDHC-Karten übergegangen. Die Bibliothek von Roland Riegel unterstützt leider nur FAT16. Ich bin nach Analyse der verfügbaren Bibliotheken auf die FatFs von Elm Chan gegangen. Unterhalb des Filesystem-Layers verwende ich eine Mischung aus der sd_mmc-Schicht von Roland Riegel und der mmc-Schicht von Elm Chan, da Roland Riegels Bibliothek in der von mir genutzten Version keine HDSC unterstützte. Nachteil: Die Bibliothek von Elm Chan unterstützt leider keine langen Dateinamen.

Geschwindigkeit von SD-Karten

Der über die Speed Rate/Class gegebene Wert ist ein Minimalwert, d.h. die Karte kann in vielen Situationen schneller sein. Erst seit der Existenz des Standards SDHC gibt es diese Geschwindigkeitsklassen.

Der AVR schreibt nicht sonderlich schnell auf die Karte, so dass normalerweise  die Geschwindigkeit der Karte „nicht so wichtig“ ist. Trotzdem hier auch ein paar wahllose Messungen, die ich durchgeführt habe.
Unter Linux kann man -wenn der momentane Inhalt der Karte egal ist- mittels

Schreiben:
dd count=1k bs=1M if=/dev/zero of=/media/my-sd-card/test.img

Lesen:
dd count=500 bs=1M  if=/media/my-sd-card/test.img of=/dev/zero

die reale Schreibgeschwindigkeit prüfen. („my-sd-card“ steht dabei für den tatsächlichen Namen der gemounteten Partition der SD Karte. Auf der Karte muss dabei 1GB (1k*1M) frei sein. Vor dem Lesetest muss der Schreibtest ausgeführt werden und die Karte kurz vom Rechner unmounted/entfernt werden).

Karte Speed Rate ClassAufdruck Lesen [MB/s] Schreiben [MB/s]
SDHC extrememory  Allround, 4GB 2 20,1 11,2
SDHC
SanDisk, 4GB
2 10,8 6,1
SD
PNY, 1GB
(ohne) 8,5 2,7
SD
Noname? „SD Platinum „, 1GB
(ohne) 14,9 5,1

Links

Pollin LCD Roundup

Bei Pollin, einem günstigen Anbieter von Restposten elektronischer Bauteile, gibt es auch diverse LCD-Displays. Da ich auf der Suche war nach einem neuen „Standard“-Display für meine Prototypen habe ich einfach mal alle Displaytypen, die Pollin im Januar 2012 anbietet bestellt (Ausnahmen: die ganz teuren und die, welche offensichtlich keinen Controller haben). Ich habe für jedes Display versucht, dieses an einen AVR ATmega Controller anzuschließen. Meine Erfahrungen dazu sind weiter unten dokumentiert.

LCD-Displays

Es gibt unterschiedlichste LCD-Displays. Text-Displays zeigen nur alphanumerische Zeichen an, Grafik-Displays zeigen nur Punkte an. Durch Kombination dieser Punkte kann man tolle Graphiken darstellen. Ein Buchstabe ist auch nichts anderes als eine Menge von Punkten, somit kann man mit einem Grafik-Display natürlich auch Text darstellen.

Hintergrundbeleuchtung

Um Displays auch im Dunkeln lesen zu können, braucht man entweder so etwas wie eine Taschenlampe oder besser, ein LCD-Display mit integrierter Hintergrundbeleuchtung. Diese Beleuchtung kann auf verschiedenen Grundprinzipien beruhen.

LED-Hintergrundbeleuchtungen brauchen eine geringe Spannung von ein paar Volt, die man typischerweise sowieso zur Verfügung hat.

EL-Hintergrundbeleuchtungen erfordern eine hohe Wechselspannung von ein paar dutzend bis ein paar Hundert Volt, die man typischerweise nicht „ohnehin“ in seiner Schaltung zur Verfügung hat. Man muss dann die gewünschte Spannung zusätzlich erzeugen. Für einfache und/oder billige Sachen ist eine LED-Hintergrundbeleuchtung daher besser geeignet.

Textdisplays

Bei Textdisplays spielt die Anzahl der darstellbaren Zeilen und der pro Zeile darstellbaren Zeichen eine Rolle. Diese Displays sind auch festgelegt in Bezug auf die darstellbaren Zeichen (sie haben einen festen Zeichensatz). Oft kann man eigene Zeichen „hochladen“.

Zeichensätze von LCD-Displays

Mangels echter Standardisierung kann jeder Hersteller beliebige Zeichensätze  in seinem Display implementieren.  Für den sehr gängigen Controller HD44780 hat der Produzent Hitachi einen Zeichensatz festgelegt, den man so oder ähnlich in all den Nachbauten auch findet. Daher die Tabelle (von Wikipedia) hier eingefügt:

(Bild anklicken für größere Version)

Grafikdisplays

Bei Grafik-Displays ist die Anzahl der Pixel in X- und Y-Richtung von Bedeutung. Grafik-Displays können auch farbig sein, so dass ein Pixel nicht durch ein Bit sondern durch eine ganze Anzahl von Bits repräsentiert wird. In z.B. 8 Bit kann man so 256 RGB-Werte unterbringen, z.B. nach dem Schema RRRGGBBB, d.h. 3 Bits für Rot und Blau und 2 Bits für Grün.

Ansteuerung

Alle betrachteten Displays  haben einen Display-Controller, der einfache Befehle versteht und die Übersetzung in Pixel an- und ausknipsen-Tätigkeiten vornimmt. Bei Textdisplays kann man beispielsweise den Cursor an eine bestimmte Position setzen („Zeile 2, Zeichenposition 14“) oder ein bestimmtes Zeichen ausgeben.

Die Pin-Belegung aller LCDs folgt meist einem einheitlichen Vorgehen, wie man weiter unten erkennen kann.

Es gibt auch Displays ohne Controller, bei denen man sich um die Ansteuerung selbst kümmern kann. Auch dies ist möglich, aber unbequemer. Ich habe bei meiner Betrachtung nur Displays mit Controller berücksichtigt.

Controller

Bei den Displays hat eine Quasi-Standardisierung auf einige wenige Controller-Typen stattgefunden, so dass man mit einigen wenigen Controllern sehr viele LCDs herstellen kann. Anbei beispielhaft einige Controller, die in den betrachteten Displays eine Rolle spielen

Controller Kompatible Typen
Epson SED1520
Epson SED1530
Hitachi  HD44780 Epson SED1278,
Samsung KS0066, Sitronix ST7066, …
NEC D7228
Sanyo LC7980
Sharp LH155
Samsung KS0108 Samsung S6B0108
Samsung S6B33B2
Sitronix ST7920

Lesenswerte weiterführende Information zum HD47780 bei Wikipedia.

Hinweise zum Test

Da eine größere Menge von Displays in endlicher Zeit durchgetestet werden sollte, wurde folgendes Vorgehen festgelegt:

  • Informationsbeschaffung zu allen Displays aus Internet
  • Keine Eigenimplementierung der Testprogramme und der Ansteuerbibliotheken für die Tests. Verwendung von Sourcecode aus Foren, Websites etc. Ich will mich nicht mit fremden Federn schmücken, die Quellen sind immer zu Beginn der Beschreibung des Displays angegeben.
  • Anpassung der verfügbaren Software soweit erforderlich
  • An die Kandidaten wurden soweit möglich Stiftleisten angelötet, mit denen die Displays dann leicht mit Steckboards verbunden werden können.
  • Die Displays Alps LSU… und das NAN YA LMME… wurden nicht getestet, weil sie mir als nicht sinnvoll verwendbar erschienen. Das Alps-Display hat 41 Kontakte und ist damit in einem Eigenbauentwurf extrem unhandlich wegen der Pin-Anzahl, das NAN YA-Display ist vom Format her sehr groß und für eigene Projekte in vielen Fällen einfach zu groß

Testkandidaten

Die folgenden aufgelisteten Typen wurden untersucht.

Abkürzungen in der Tabelle:
NOK: Not OK, Display konnte nicht in Betrieb genommen werden
TBD: To Be Done, muss noch getestet werden
N.A.: Not Available, Display unbrauchbar

Hersteller Typ Display Werte Bel. Chip Preis 1/2012 Status
Alps LSU7S1011A und Bausatz sowie Beschreibung Controller SED1530 96×32 NEIN SED1530 2,95 zuviele Kontakte (41)
unbekannt C0802-04 2×8, 44x32mm NEIN HD47780 +5V 0,95 OK
Data Vision DG14032 (Pin-Belegung identisch mit DV-20208) 140×32, gelbgrün LED ST7920
+5V / 5,7V
2,95 OK
unbekannt DG016Z 2 bzw. 4  Zeilen zu 24/32 Zeichen 93x17mm NEIN LC7980 2,95 OK
Data Vision DG-12232 mit Adapterboard und Controller SED1520 122×32, 60,5×18,5mm EL SED1520DAA +5V 2,50 NOK
Data Vision DV-20208 2×20, 73×19,8mm, grün LED HD47780 +5V 3,95 OK
NAN YA Plastics Corp. LMMEJS068CDF

Pin-Belegung: Hier

2×20+1×35, 123×35,5mm, gelbgrün LED KS0066F03 (=HD47780) +5V 2,95 Zu groß für Verwendung
Optrex DMC-2047 2×8, 1 Zeile Sonderzeichen, 1x Balkengraph, div. LEDs LED NEC D7228AG 1,95 OK
Orient Display DM19264A-02 und altes Datasheet 192×64, 104x39mm
gelbgrün
LED KS0108 und KS0107
+5V
6,95 OK
Philips LPH 2673-1 50x11mm (ohne) 0,10 N.A.
Samsung UG12D228AA 128×128, 27x27mm, 4096 Farben LED S6B33B2 2,95 TBD
Sharp M078CKA-A3QKLA0057 und Controller LH155 240×64 Pixel, 72x32mm NEIN LH155
+5/+15V
2,95 TBD
Powertip PC1602-E 2×16, 61×15,9mm NEIN HD47780 +5V 2,95 OK
Tinsharp TC1602A-08 2×16, blau LED HD47780
+5V
4,95 OK
Tinsharp TC1604A-01 4×16, 56,2×20,8mm, gelbgrün LED HD47780
+5V
8,95 OK
Wintek WD-G1203T 12×3 bzw. 122×32, 53,5×15,5mm, grün LED D1250D bzw. 2xSED1520 2,50 OK

Pollin Katalogseiten 02/2012 hierzu:

 

Mechanische Aspekte LCD-Anschluss

LCD-Displays sind mit diversen Anschlusstechniken erhältlich.

  • Lötpads mit 2,54mm Abstand: Hier kann man meist eine Stiftleiste einlöten und diese dann z.B. mit einer passenden Buchse auf einem Controller-Board verbinden.
  • Lötpads mit 2mm Abstand: Im betrachteten Testfeld war dies nur 1 Kandidat (Das Wintek LCD)
  • Vorinstallierter Folienleiter: Diese Displays sind meist mit dem Ziel möglichst kleiner Abmessungen gebaut. Der Folienleiter hat am Ende versilberte Leiterbahnen zur Aufnahme in eine spezielle Buchse. Der Folienleiter heißt auf Englisch „Flat Flex(ible) Cable“, abgekürzt FFC. Es wird auch die Bezeichnung „Flexprint“ gebraucht. Diese Kabel gibt es in verschiedenen Rastermaßen („Pitch“), bei den verwendeten Displays ist es immer 1mm.
  • (Im Umfeld FFP kommt auch die Abkürzung FPC vor, die Flexible Printed Circuits“ bedeutet. Dies scheinen mir eine Art „Custom“ Version von FFCs zu sein, also FFCs für genau einen Anwendungszweck). Man braucht also zusammenfassend eine FFC-Buchse mit der passenden Pin-Zahl und dem passenden Pitch.
  • „Sonstige“: Hier fällt mir nur das Optrex ein, welches einfach vergoldete Pins bietet.

Alps LSU7S1011A

Dies ist ein Grafik-Display, 96×32 ohne Hintergrundbeleuchtung.

Zu diesem Display liefert Pollin einen kleinen Adapter-Bausatz mit Platine (extra bestellen, 1,95 Euro), an den das Display angelötet werden kann. Das Alps Display benötigt einige externe Bauteile (z.B. Elkos), die auf der Bausatzplatine mit drauf sind, es macht also Sinn diesen Adapter mitzubestellen.

Controller ist der SED1530.

Controller: Handbuch

Adapter-Bausatz Beschreibung

Anschluss und Pin-Belegung

Der Anschluss erfolgt über einen Folienleiter 1mm Pitch, einseitig 41 Pins.

 

Fazit

Das Alps Display hat m.E. zu viele Kontakte (41 !!!). Es gibt zwar eine Adapter-Platine von Pollin, welche die Anzahl der Kontakte reduziert. Allerdings ist es notwendig, den Folienleiter des Displays an die Adapterplatine anzulöten. Ein Folienleiter verträgt aber die Temperaturen des Lötkolbens nicht oder nur sehr schlecht. Das Anlöten ist daher als kritisch zu betrachten.

Diese ungünstige Situation bringt mich zu dem Schluss, das Display vorerst nicht weiter zu betrachten.

C0802-04

Kleines Text-Display, 2×8 Zeichen, Hersteller war nicht zu ermitteln. Kam mit Pixelfehlern bei mir an, die vermutlich durch Druckstellen beim Transport entstanden waren. Nach einigen Tagen verschwanden die Pixelfehler weitgehend.

Verwendet wird der Controller HD47780. Daher kann dieses Display in der absoluten „Standard-Beschaltung“ und mit der „Standard“-Bibliothek von Peter Fleury verwendet werden.

Handbuch Controller HD47780 oder KS0066.

Besprechung hier : http://www.mikrocontroller.net/topic/176029

Pin-Belegung und Anschluss

Das Display ist mit einem Folienleiter 1mm Pitch, einseitig 10 Pins. versehen.

Um das Display zu testen, wurde ein einfacher Adapter gebaut, der eine FFP-Buchse besitzt, in die der Folienleiter eingeführt werden kann. Die Pins der FFP-Buchse sind auf eine „normale“ 2,54mm Stiftleiste herausgeführt.

Pin Funktion AVR Pin
1 GND
2 VDD +5V
3 Vo Kontrastspannung
4 RS PC0
5 RW PC1
6 E PC2
7 D4 PA0
8 D5 PA1
9 D6 PA2
10 D7 PA3

 

 

 


Die Adapterplatine FFC-Buchse <-> Stiftleiste 2,54mm

 

 


Die FFC-Buchse aus der Nähe. Sie stammt aus einem alten DVD-Player, der zerlegt wurde. FFC-Buchsen sind Bauteile, die für den Endanwender eher schwer erhältlich sind.

 


Das Display im Testbetrieb

 


Der Versuchsaufbau

 

Software

Das Display beherrscht nur den 4-Bit-Modus.

Im Gegensatz zu den im oben erwähnten Foreneintrag Problemen machte die Initialisierung des Displays keinerlei Probleme, es konnte die Implementierung von Peter Fleury ohne jede Änderungen in lcd_init() hergenommen werden.

Link zu Peter Fleurys Bibliothek (LCD library for HD44780 based LCD’s: http://homepage.hispeed.ch/peterfleury/avr-software.html

Fazit

Kleines Display, sehr dünn, einfach anzusteuern. Kein Backlight. Sehr empfindlich beim Abziehen der Schutzfolie (verfärbt sich stark, Verfärbung geht aber wieder weg).
Leider nur 2×8 Zeichen, aber das kann in der einen oder anderen Situation ausreichend sein.
Sehr günstig.

Data Vision DG-12232

Dies ist ein kleineres Grafikdisplay mit 122×32 Punkten, EL-hintergrundbeleuchtet. Zum Display verschickt Pollin ein Adapterboard.

Controller ist SED1520DAA. Ein einzelner SED1520 kann 61×16 Pixelreihen/Zeilen verwalten. („DAA“ bezeichnet *A* die anzulegende externe Frequenz von 2Khz und D*A die Die-Form „Aluminium Pad“).
Dies bedeutet, dass im Display vier Controller verbaut sein müssen !?

Handbuch Controller SED1520

http://www.mikrocontroller.net/topic/171433

http://www.mikrocontroller.net/topic/125454

http://www.mikrocontroller.net/topic/105223

http://en.radzio.dxp.pl/sed1520/



Aus Datenblatt gelesen; das Display darf mit VDD bis zu 8V betrieben werden. Die LCD-Spannung VEE ist negativ und es gilt VDD-VEE<=16,5V. Wenn also z.B. VDD=5V ist, kann  VEE bis zu -11,5V annehmen. Laut Pollin-Datenblatt sind -5V ausreichend.

Backlight

Die Beleuchtung des Displays erfolgt mit einer hohen Wechselspannung von XXX Volt. Die beiden Pins der Beleuchtung sind auf der Adapterplatine als Pins „JP2/JP3“ herausgeführt. Da man eine solch hohe Spannung normalerweise nicht zur Verfügung hat, muss eine solche Spannung erst erzeugt werden. Die Kosten für einen solchen Spannungserzeuger sind zwar nur ein paar Euro, aber so gesehen erhöhen sie den Kaufpreis des Displays deutlich.

Anschluss und Pinbelegung

Das Data Vision DG-12232 wird von Pollin mit einem dazugehörigen Adapter-Board geliefert. Zum Adapter-Board gehören ein paar SMD-Bauteile, die noch anzulöten sind.
Sinn des Adapters: Das Display benötigt zur Funktion an seinem Eingang „CL“ ein Clocksignal von 2Khz. Auf dem Adapterboard ist eine kleine Schaltung mit dem NE555, um diese Frequenz zu erzeugen. Man kann diese Frequenz auch alternativ mit dem AVR erzeugen, aber wenn die Adapterplatine schon dabei ist, empfiehlt sich deren Einsatz. Die Verbindung zwischen Display und Adapter-Platine erfolgt über einen beiliegenden Moosgummi.
Leider folgt die Belegung des Pollin-Adapter-Boards nicht der bei LCDs schon fast üblichen Belegung der Pins.

Adapter Pin Funktion AVR Pin
1 „A0“ (eigentlich: RS) PC0
2 CS2 PC4
3 CS1 PC3
4 Clock
5 80xx: /READ
68xx: E
PC2
6 80xx: /WRITE
68xx: RW
PC1
7 GND GND
8 D0 PA0
9 D1 PA1
10 D2 PA2
11 D3 PA3
12 D4 PA4
13 D5 PA5
14 D6 PA6
15 D7 PA7
16 VDD +5V +5V
17 Res; L=80xx, H=68xx +5V via 10KOhm
18 VEE LCD Kontrastspannung -5..0V

 


Das Display und die Adapterplatine von Pollin, Displayseite.

 


Das Display und die Adapterplatine von Pollin, Bestückungsseite.

 

Status

Das Display konnte unter Verwendung des Pollin-Adapters nicht zum Laufen gebracht werden.
Beobachtung während des erfolglosen Tests:

  • 2Khz-Frequenz wird erzeugt (es sind ca. 1,8xx Khz)
  • Nach Anschluss an AVR und Ansteuerung mit passendem Programm aus Internet werden nur ein paar Linien unten angezeigt
  • Seltsamerweise hat die Einstellung der Kontrastspannung massiven Einfluss auf das was im Display dargestellt wird. Je nach Stellung sind es:
    • Ein paar zusammenhängende ruhigstehende Zeilen am unteren Rand
    • Flimmernde Zeilen unten, abwechselnd unterschiedlich viele
    • Bei bestimmten Einstellungen wird das ganze Display angesteuert, alle Zeilen flimmern
    • Manchmal wird gar nichts angesteuert

Vorgehensoptionen: Entfernen des Pollin-Adapters, anlöten eines Kabels und erneuter Test.

Fazit (vorläufig)

Die EL-Hintergrundbeleuchtung ist ein Nachteil des Displays. Diese erfordert erhöhten Aufwand und erhöhten Stromverbrauch. Das Display ist schon von daher weniger attraktiv und für transportable Geräte weniger geeignet.
Relativ geringe Auflösung.

Data Vision DG-14032

Das Display ist ein Grafik-Display 140×32 Pixel. Es beherrscht einen Text- und einen Grafikmodus, zwischen denen man beliebig hin- und herschalten kann.

Display besprochen in  http://www.mikrocontroller.net/topic/197156

Im Display ist ein Controller Sitronix ST7920 verbaut. Besonderheit dieses Controllers ist, dass er den chinesischen Zeichensatz mit 8192 Zeichen eingebaut hat 🙂

Handbuch Controller ST7920.

Für das Display ist GLCD-Source-Code verfügbar.

Die Pinbelegung dieses Displays ist identisch mit dem Data Vision DV-20208.

Pin Funktion AVR Pin
1 GND GND
2 +5V +5V
3 Kontrastspannung ~+0,7V
4 RS PC0
5 RW PC1
6 E PC2
7 D0 PA0
8 D1 PA1
9 D2 PA2
10 D3 PA3
11 D4 PA4
12 D5 PA5
13 D6 PA6
14 D7 PA7
15 GND
16 N.C.
17 N.C.
18 Metal Frame
19 Led Backlight +5,7V, 30mA +5,7V
20 Led Backlight GND GND

 

 

Am 20-poligen Anschluss lässt sich eine 2,54mm-Stiftleiste leicht anlöten.

Das Display bringt bei mir auch ohne Anlegen einer Kontrastspannung einen guten Kontrast.

Das Backlight leuchtet erst ab ~5,7V (es geht also nicht mit den ohnehin anliegenden 5V).

Software

Beim oben erwähnten Link von Mikrocontroller.net gibt es Software für dieses Display. Diese Software baut auf dem Code von http://en.radzio.dxp.pl/ auf.

Die Software wurde an meine Hardware-Situation (Pinbelegung) angepasst und funktionierte sofort im 4-Bit und im 8-Bit-Modus. Beim 8-Bit-Modus fand ich noch einen Fehler auf meinem AVR-Testboard, ein Kurzschluss zwischen D2 und D3.


Testausgabe im 4-Bit-Modus; Text, zwei Rechtecke, ein Kreis.

 


Erster Test mit dem 8 Bit Modus bringt dieses seltsame Ergebnis. Grund war, dass die Datenbits 2 und 3 durch einen Kurzschluss miteinander verbunden waren. Nach Korrektur verhielt sich das Display auch im 8-Bit-Modus wie gewünscht.

 


Blick auf die Testumgebung.

Fazit

Kleines Display, leider große Platine. Für tragbare Geräte wegen der Größe der Platine nicht optimal. Helles Backlight, guter Kontrast, bei geringem Stromverbrauch.
Kabel oder Stiftleiste sehr gut anlötbar.
Günstiger Preis.

Datavision DV-20208

Dies ist ein kleines Textdisplay mit 2 Zeilenx20 Zeichen. Die Platine ist groß im Verhältnis zum eigentlichen Display.

Verwendet wird der Controller HD47780. Daher kann dieses Display in der absoluten „Standard-Beschaltung“ und der „Standard“-Bibliothek von Peter Fleury verwendet werden.

Handbuch Controller HD47780.

Link zu Peter Fleurys Bibliothek (LCD library for HD44780 based LCD’s: http://homepage.hispeed.ch/peterfleury/avr-software.html

Pinbelegung und Anschluss

Die Pinbelegung dieses Displays ist identisch mit dem Data Vision DG-14032.

Pin Funktion AVR Pin
1 GND GND
2 +5V +5V
3 Kontrastspannung ~+0,7V
4 RS PC0
5 RW PC1
6 E PC2
7 D0 PA0
8 D1 PA1
9 D2 PA2
10 D3 PA3
11 D4 PA4
12 D5 PA5
13 D6 PA6
14 D7 PA7
15 GND
16 N.C.
17 N.C.
18 Metal frame
19 Led Backlight +5,7V, 30mA +5,7V
20 Led Backlight GND GND

Kontrastspannung: Pin 3 geht an Schleifer eines Trimmwiderstands 22K. Die beiden anderen Kontakte des Trimmwiderstands an GND und +5V.

Hinweis zur Pin-Belegung: Wie immer bei der 4-Bit-Ansteuerung sind die Datenleitungen D4..D7 zu verwenden, in Tabelle fett markiert. D4..D7 entsprechen den „logischen“ D0..D3 der 4-Bit-Ansteuerung.

 

 


Gesamtaufbau

 

 

Fazit

Das Display ist durch die Nutzung des Controllers HD44780 softwaretechnisch perfekt unterstützt. Es benötigt minimal 7 Pins vom AVR, ist also sparsam im „Pin-Verbrauch“. Das Backlight ist ausreichend hell und verbraucht sehr wenig Strom. Die Buchstaben sind ziemlich groß geraten, ca 6,5mm hoch, also auch von etwas weiter weg noch lesbar.

Background Beleuchtung benötigt ziemlich genau 5,7 Volt. Bei 5V ist die Beleuchtung nicht zu sehen.

Die Platine ist leider ziemlich groß in Relation zum Display. Dafür existieren dann aber Bohrungen zur Befestigung. Mit einer Dremel lässt sich die Platine oben direkt am Metallrahmen abflexen und wird dadurch etwas schlanker, nur die Backlight-Leiterbahnen werden dabei abgetrennt, was aber kein Problem darstellt, da die Anschlüße direkt am Display rechts nutzbar sind.

Preislich leider relativ teuer, ein Euro weniger wäre m.E. angemessener.

DG016Z

Dieses kleinere Display mit unbekanntem Hersteller ist ein Graphik-Display, 192×32 Pixel, wobei zwischen den oberen und den unteren 16 Pixeln eine einzelne Pixel-Leerzeile existiert. Es ist so gesehen eher ein Display das Graphikausgaben in zwei Zeilen a 192×16 erlaubt. Es ist vorgesehen zur Ausgabe chinesischer? japanischer? Zeichen, hat aber auch „übliche“ Zeichen eingebaut. Die Zeichensätze sind im EPROM untergebracht. Der Nutzen des RAMs ist mir unbekannt. Es gibt mehrere mögliche Zeichensätze:

  • 5×8 bei 32 Zeichen/Zeile, 4 Zeilen
  • 8×16 bei 24 Zeichen/Zeile, 2 Zeilen

Besprochen in : http://www.mikrocontroller.net/topic/235409

Das Display  besteht aus dem eigentlichen Displayboard und einem zweiten Board, auf dem das Display im Huckepack sitzt.
Auf dem zweiten Display findet sich der Controller, ein EPROM Atmel AT27C256 (256KBit) und ein S-RAM-Baustein Sanyo LC3664NML-10 (64KBit).

Controller ist ein Sanyo LC7980. Dessen Character-Speicher ist erweiterbar um ein externes ROM, dies ist das oben erwähnte EPROM.

Handbuch LC7980

Pinbelegung und Anschluss

Doppel-Stiftleiste 2×8 mit 2,54mm Stiftabstand kann eingelötet werden.

Pin Funktion AVR Pin
1 GND GND
2 +5V +5V
3 Kontrastspannung ~-4,1V
4 RS PC0
5 RW PC1
6 E PC2
7 D0 PA0
8 D1 PA1
9 D2 PA2
10 D3 PA3
11 D4 PA4
12 D5 PA5
13 D6 PA6
14 D7 PA7
15 AT27xxx Pin 30 = A13 siehe Text
16 AT27xxx Pin 31 = A14 siehe Text

Kontrastspannung: Pin 3 geht an Schleifer eines Trimmwiderstands 22K. Die anderen beiden Pole gehen an GND und eine negative Spannung von -5V, sie muss extern zugeführt werden.

Hinweis zur Pin-Belegung:

An Pin 15+16 sind die Adresspins A13 und A14 des EPROMS herausgeführt. Somit kann man durch Anlegen von HI/LOW and diesen beiden Anschlüßen 4 Bereiche im EPROM adressieren. Diese Bereiche zeigen auf unterschiedliche Zeichensätze. Folgende Belegungen sind möglich:

A14 A13 Effekt
0 0 Normaler ASCII-Charset+Sonderzeichen; evtl. der im Controller eingebaute?
0 1 ??? jap. Zeichen + ASCII ???
1 0 ??? jap. Zeichen + ASCII ???
1 1 ??? jap. Zeichen + ASCII ???

Alle Zeichensätze im EPROM sind 8×16 Zeichensätze (XXXX stimmt das?)

Möglicherweise kann das Display im 4-Bit-Modus angesteuert werden. Dies wurde nicht ausprobiert, sondern der 8-Bit-Modus verwendet.


 


RAM, Controller LC7980, EPROM. Unten der 2×8 Anschluß,

 


Display wurde bei schrägen Lichteinfall aufgenommen, daher wirkt es etwas verschwommen, ist es aber nicht.

 

Software

Für dieses eher ungewöhnliche Display gibt es keine mir bekannte GLCD-Implementierung. Im oben erwähnten Thread aus mikrocontroller.net finden sich jedoch zwei Implementierungen.

Die optisch ausgereifter aussehende Implementierung wurde als Ausgangsbasis hergenommen. Irritierend war, dass keinerlei Delays in der Display-Ansteuerung vorgesehen waren.

Für erste Tests wird A13=A14 auf LOW gelegt.

Der erwähnte Code funktionierte auf Anhieb. Er implementiert leider nur die Variante „Textmodus, 6×8 Font, 4×32 Zeichen“.

Fazit (vorläufig)

Das Display ist klein für seine 4×32 Zeichen, die es darstellen kann. Es hat leider kein Backlight und ist ziemlich dick, wegen der Huckepack-Platine. Der „normale“ Font sieht gut aus und der Kontrast ist ok, könnte aber stärker sein.

NAN YA LMEEJS068CDF

Dieses Display ist offensichtlich ein Teil eines Gerätes und eigentlich nicht dafür gedacht, in anderen Geräten eingebaut zu werden. Die Platine ist sehr groß.

Das Display ist ein Textdisplay mit 2 Zeilen zu 20 und einer weiteren Zeile mit 35 etwas kleineren Zeichen. Es besitzt LED Hintergrundbeleuchtung.

Verwendet wird der Controller HD47780. Daher kann dieses Display in der absoluten „Standard-Beschaltung“ und der „Standard“-Bibliothek von Peter Fleury verwendet werden.

Handbuch Controller HD47780.

Link zu Peter Fleurys Bibliothek (LCD library for HD44780 based LCD’s: http://homepage.hispeed.ch/peterfleury/avr-software.html

Besprechung hier: http://www.mikrocontroller.net/topic/216474 .

Pinbelegung und Anschluss

Das Display hat einen 40-poligen Wannenstecker (IDE-Buchse). Es hat so viele Anschlüsse, weil die Tasten herausgeführt sind, außerdem sind viele Kontakte mit GND belegt.

Pin Funktion AVR Pin
1 GND
2 GND
3 DB7
4 DB6
5 DB5
6 DB4
7 DB3
8 DB2
9 DB1
10 DB0
11 GND
12 E1 (obere 2 Zeilen)
13 RW
14 E2 (untere Zeile, Pfeile)
15 N.C.
16 N.C.
17 +5V
18 +5V
19 N.C.
20 N.C.
21 RS
24 LED Backlight +
26 LED Backlight –
27 GND
28 GND
29 GND
30-38 (Tastatur)
39 GND
40 GND

 

 

Laut einem Foreneintrag kann das Display direkt unterhalb der Buchse abgesägt werden und so etwas verkleinert werden. Ich habe dies nicht probiert, da das Display selbst dann für meine Zwecke immer noch zu groß wäre.

Von http://www.grassow.de/nan_tec.html: … Pin 26 + Betriebsspannung für Hintergrundbeleuchtung Display (über zwei parallel geschaltete 10 Ohm-Widerstände) …

Software

4 Bit Modus ist möglich.

Die Pfeile werden mit den Daten-RAM-Adressen 0xA3,0xA4,0xA5 und 0xA6
angesprochen. 


XXX

Fazit (vorläufig)

Das Display hat einen sehr ungünstigen Formfaktor, es ist für viele Zwecke einfach zu groß. Daher habe ich den Test mit diesem Display auf einen späteren Zeitpunkt verschoben.

Optrex DMC-2047

Dieses Display hat zwei Textzeilen mit je 8 Zeichen. Außerdem einen Balken mit 40 Punkten sowie eine Zeile mit einigen Sonderzeichen. Es besitzt eine LED Hintergrundbeleuchtung sowie 4 verschiedenfarbige LEDs (und eine IR-Empfangs-Diode).
Es stammt vermutlich aus einem Telefon.

Die Firma Optrex ist im Internet vertreten (http://www.optrex.com/), hier ein Link auf diverse LCD-Anzeigen. Diverse Optrex: LINK

Der verwendete Controller ist der NEC µPD7228A.

Datasheet NEC µPD7228A (nur 10 Seiten)

Nachfolger µPD16434, kompatibel zum 7228: Manual

Diskussion des Displays hier: http://www.mikrocontroller.net/topic/174018

Anschluß und Pinbelegung

Der Display-Anschluß hat 22 Pins im Abstand von 1,5mm.

Das Backlight besteht aus 4 in Serie geschalteten LEDs. Erst bei 10V kommt eine nennenswerte Helligkeit zustande, wirklich hell ist es erst bei 12V. Möglicherweise ist das aber zuviel für die 4 LEDs.

Pin Funktion
Seriell
AVR Pin
1 Backlight – siehe Text
2 Backlight + siehe Text
3 LED yellow1
4 LED yellow1
5 LED green
6 LED green
7 LED IR
8 LED IR
9 LED red
10 LED red
11 LED yellow
12 LED yellow
13 CLOCK Systemtakt  PD7 (siehe Text)
14 RESET PA4
15 CS PA3
16 CD Command / Data Select PA2
17 SCK – Serial Clock Input PA1
18 VSS, GND GND
19 VDD +5V +5V
20 BUSY
21 SI – Serial Input PA0
22 VLC5 GND

 

Software

Der Controller erlaubt sowohl 4-Bit-Parallel als auch serielle Ansteuerung. Leider sind D1,D2 und D3 an der Kontaktleiste nicht verfügbar, so dass mit dem Optrex-Display nur serielle Ansteuerung möglich ist.

Der C Code, der über das oben erwähnte Forum heruntergeladen werden kann (Stand: 02/2012) ist nicht lauffähig. Dort gibt es auch Assembler-Code für PIC-Controller und Basic-Code.

Nach diversem Herumprobieren konnte ich eine Art „Kompilat“ aller erwähnten Codes (Assembler, BASIC, C) erzeugen, die als C Source lauffähig war und das Display korrekt ansteuert. Die verwendete Taktfrequenz zusammen mit der Framesize (SFF-Kommando des upd7228) war kritisch. Bei mir hat ein Wert von 250Khz für den Takt für das Display und eine Framesize von 1 funktioniert. Mit anderen Werten gab es Darstellungsfehler. Das Timing müsste für dieses Display genauer angesehen werden.

Den Systemtakt für das Display habe ich mittels eines Timers des AVRs erzeugt, der selbsttätig einen Pin des AVRs ein und ausschaltet. Dieser Pin war OC2, beim verwendeten ATmega32 identisch mit PD7.


Oben: Bargraph
Mitte Sonderzeichen Zeile
Unten: 2 Zeilen a 8 ZeichenHintergrundbeleuchtung hier nicht angeschlossen. Durch den Betrachtungswinkel haben die Buchstaben eine Art „hellen Hintergrund“.

 

Gesamtaufbau

 

Fazit

Eigentlich witziges Display, Hintergrundbeleuchtung vorhanden. Die LEDs können auch für irgendwas verwendet werden, und der Bargraph ist auch nicht schlecht.

Die einzelnen Zeichen sind ziemlich weit voneinander entfernt.

Ungünstig die Anschlussvariante mit 1,5mm Pitch Platine (nur arbeitsaufwändig durch Handlötung anzuschließen).

Orient Display DM19264A

Shenzhen Orient Display ist im Internet vertreten: http://www.orientdisplay.com/

Das DM19264A-02 ist (Stand 01/2012) noch auf der Website beschrieben.

Verwendete Controller sind 3x KS0108B (Samsung S6B0108) als Segment Driver und 1x KS0107 (Samsung S6B0107) als Common Driver. Somit sind 64+64+64=192 Pixelspalten und 64 Pixelreihen adressierbar.

Im folgenden ist der Schaltplan des Displays -aus dem Datenblatt entnommen- dargestellt.

Manual S6B0107

Manual S6B0108

Bei http://www.mikrocontroller.net/topic/217600 ist das Display ausführlich besprochen, incl. Anschlussplan und Test-Sourcecode.

Polnische Site mit Erstimplementierung einer passenden C-Bibliothek für KS0108: http://en.radzio.dxp.pl/ks0108/ .

Wichtige Hinweise zur Platine

Laut Forenbeitrag sind die Verbindungen der Anschlusspins mit Pin 19 und Pin 20 nicht auf der Platine drauf. Prüfung zeigt dass das auch für mein Exemplar stimmt.

  • Durch vorsichtiges Abkratzen der Isolation am Ende der Leiterbahn und anschließendes Verzinnen kann leicht ein dünner Draht zwischen Pin 19 und der neu geschaffenen Lötstelle verlötet werden. Damit besteht die Verbindung von Pin 19 zu Vee wie im Datenblatt beschrieben.
  • Der masseseitige Anschluss des Backlights ist bei meinem Exemplar auch nicht mit der Masse (Pin 1) verbunden. Somit leuchtet nix, wenn man 4,2V an Pin1 und Pin 20 anlegt. Auch hier kann Abhilfe geschaffen werden: Die Leiterbahn, die dem „K“-Anschluss des Backlights am nächsten liegt, wird freigekratzt und, weil der Abstand so gering ist, mit einer superfetten Lötperle als Verbindung versehen. Danach leuchtet das Backlight, wenn man GND verbunden hat und +4,2V an Pin 20 anlegt.

Pinbelegung und Anschluss

Wenn man die Hinweise zur Platine oben beachtet hat, kann man das Display an seinen Controller anschließen.

Pin Symbol Funktion Etc. AVR
1 Vss Power Supply GND GND
2 Vdd Power Supply +5V +5V
3 Vo Contrast Adjust Coltage
4 RS Instruction/Data Register Select (H: Data; L=Inst.) PC0
5 RW Data Read/Write  (H=R;L=W) PC1
6 E Enable Signal PC2
7 DB0 Data Bus Line 0 PA0
8 DB1 PA1
9 DB2 PA2
10 DB3 PA3
11 DB4 PA4
12 DB5 PA5
13 DB6 PA6
14 DB7 Data Bus Line 7 PA7
15 /CS1 Chip Select 1 active L PC3
16 /RST Reset kann mittels 10 Ohm an Vdd gelegt werden PC6 oder +5V via 10K
17 /CS2 Chip Select 2 active L PC4
18 /CS3 Chip Select 3 active L PC5
19 Vee Negative Voltage Output (-5V or -10V) bei mir sinds -5V. Siehe Kommentar
20 A Power Supply LED Backlight +4,2V <= 300mA 4,2V

An Vdd wird via Poti 10K-22K Vss und Vee geführt, diese Spannung liegt also zwischen +5 und -5V (oder -10V).

 

 


Lötbrücke an Pin 20

 


Lötbrücke (Lötperle) an Kathode des Backlights

 


Gesamtaufbau beim Test

Die Ausgaben des Testprogramms (Text, Linie, Rechteck, Kreis, Graphik)

Fazit

Das Display hat eine relativ hohe Auflösung und einen guten Kontrast. Das Backlight hat, wenn es ausreichend hell sein soll, einen Stromverbrauch zwischen 200 und 300mA. Dies ist ein hoher Stromverbrauch und macht es für externe Geräte fast schon ungeeignet. Hier wird man das Backlight nur auf Knopfdruck zuschaltbar machen.

Ungünstig die notwendigen Nacharbeiten auf der Displayplatine.

Es wird auch über schwachen Kontrast des Displays bei bestimmten Bitmustern (0101010…) gesprochen. Dieser Effekt scheint aber nicht bei allen Displays vorzukommen.

Philips LPH 2673-1

Das LPH 2673-1 von Philips ist ein LCD Display ohne Controller. Man müsste also einen passenden Controller finden oder nachbauen. Das Display ist somit ein Sonderfall und wird hier nicht weiter betrachtet.


Philips LPH 2673-1, Displayseite.

Fazit

Sehr billig, für meine Zwecke aber unbrauchbar-> Mülleimer.

Powertip PC1602-E

Kleines Text-Display, 2×16 Zeichen. Powertip ist im Internet vertreten (http://www.powertip.com.tw/). Man findet das Display noch in der Produktliste des herstellers.

Display-Beschreibung: Datenblatt

Verwendet wird der Controller HD47780. Daher kann dieses Display in der absoluten „Standard-Beschaltung“ und mit der „Standard“-Bibliothek von Peter Fleury verwendet werden.

Controller HD47780 (bzw. kompatibler Chip) .

Besprechung hier : http://www.mikrocontroller.net/topic/44038

Pin-Belegung und Anschluß

Folienleiter 1mm Pitch, einseitig 14 Pins.

Es wurde derselbe Folienleiter<->Stiftleiste Adapter wie beim C0802 Display verwendet.

Pin Funktion AVR Pin
1 VDD +5V
2 Vo Kontrastspannung 0..5V via 10K
3 RS PC0
4 RW PC1
5 E PC2
6 DB0
7 DB1
8 DB2
9 DB3
10 DB4 PA0
11 DB5 PA1
12 DB6 PA2
13 DB7 PA3
14 GND

 

 

 


Display im Test

 


Testaufbau

Software

4- und 8-Bit sind möglich. 4-Bit-Modus wurde ausprobiert.

Link zu Peter Fleurys Bibliothek (LCD library for HD44780 based LCD’s: http://homepage.hispeed.ch/peterfleury/avr-software.html

Fazit

Sehr kleines und flaches Display.  einfach anzusteuern. Kein Backlight.

Samsung UG12D228AA

Grafik-Display 128×128 mit 4096 (?) Farben.

Besprechung hier: http://www.mikrocontroller.net/topic/221289

Controller Samsung S6B33B3

Handbuch Samsung S6B33B3

Pin-Belegung und Anschluß

Folienleiter 0,5mm Pitch, einseitig 20 Kontakte.

 

 

 

Fazit

noch nicht getestet.

Sharp MO78CKA-A3QKLA0057

Dies ist ein ziemlich großes Grafikdisplay mit 240×64 Pixeln ohne Hintergrundbeleuchtung. Der Anschluß erfolgt über einen Folienleiter. Auf dem Folienleiter ist der Controllerchip sowie andere Bauteile mit aufgebracht. Das Display ist demgemäß sehr flach.

Als Controller kommt der LH155 zum Einsatz. Im Datenblatt des LH155BA wird gesagt, dass dieser nur 128×64 Pixel unterstützt, möglicherweise befindet sich also eine erweiterte Version des Controllers im Display oder aber das Display bringt noch eigene Logik mit, um die zusätzlichen Pixel zu adressieren.

Zum Display liefert Pollin eine kleine Adapter-Platine mit, die die Kontrastspannung erzeugt, eine stabilisierte 5V-Spannung bereitstellt und eine Buchse für Parallelportanschluß des Displays an einen PC bietet.

Controller: LH155BA Datenblatt

Pollin-Doku zum Display: hier

Diskussion in Forum : http://www.mikrocontroller.net/topic/46635

Pin-Belegung und Anschluß

Der Folienleiter hat 1mm Pitch , einseitig 22 Pins.
Das Display kann nur den 8-Bit-Modus. Es kann mit 80xx-Mimik und 68xx-Mimik angesteuert werden.

Pin Funktion AVR-Pin
1 N.C.
2 GND GND
3 /RESB
4 /CSB
5 RS
6 M86
6800=HI, 80xx=LO
+5V
7 VDD, +5V +5V
8 6800: RW, 80xx: WE
9 6800: E, 80xx: RE
10 D0 PA0
11 D1 PA1
12 D2 PA2
13 D3 PA3
14 D4 PA4
15 D5 PA5
16 D6 PA6
17 D7 PA7
18 GND
19 VDD, +5V
20 VO, Kontrastspannung 14..17V
21 GND
22 N.C.

 

 

 

Die Adapter-Platine von Pollin

Diese Platine geht davon aus dass a) im 80xx-Modus angesteuert wird und b) die Ansteuerung via Parallelport erfolgt. Die Platine kann aber leicht so abgeändert werden dass sie den 6800-Modus unterstützt (LCD Pin 6 an +5V statt an GND anschliessen). Ausserdem muss man die Parallelport–Buchse nicht einlöten, ich habe Lötstifte eingelötet.


Die Pollin Adapter-Platine. Hier nicht mit Parallelport-Buchse bestückt, sondern mit den benötigten Lötstiften.
Die Adapter-Platine bringt eine eigene Spannungsversorgung mit 7805 mit, die man evtl. auch nicht braucht…

 


Pin 6 statt an GND jetzt an +5V (6800 Modus, Pin 6 wurde einfach durch einen dicken Lötpunkt mit Pin 7 verbunden).
Pin 9 statt „nicht angeschlossen“ an einem Pin für den Microcontroller. Pin 9 ist im 6800-Modus der Enable-Eingang des Displays.

Nach Anpassung der Pollin-Adapter-Platine wurde das Display mit dem AVR verbunden.

Software

Zu diesem Display gibt es zwar einen Thread im oben erwähnten Forum. Allerdings ist nach Eigenaussage keine der dort vorgestellten Software-Ansätze fertig und eher im Experimentierstadium

Fazit

noch nicht getestet.

Tinsharp TC1602A-08

Dies ist ein kleines Textdisplay 2 Zeilen x 16 Zeichen. Blaues LED-Backlight.Die Platine ist klein im Verhältnis zum Display.

Verwendet wird der Controller HD47780 (bzw. kompatibler). Daher kann dieses Display in der absoluten „Standard-Beschaltung“ und der „Standard“-Bibliothek von Peter Fleury verwendet werden.

Handbuch Controller HD47780.

Link zu Peter Fleurys Bibliothek (LCD library for HD44780 based LCD’s: http://homepage.hispeed.ch/peterfleury/avr-software.html

Pin-Belegung und Anschluß

 

Pin Funktion AVR Pin
1 GND, Vss GND
2 +5V +5V
3 Vo Kontrastspannung
4 RS PC0
5 RW PC1
6 E PC2
7 D0 PA0
8 D1 PA1
9 D2 PA2
10 D3 PA3
11 D4 PA4
12 D5 PA5
13 D6 PA6
14 D7 PA7
15 Led Backlight Anode ca. 2.7V, 20mA
16 Led Backlight Kathode GND

Kontrastspannung: Pin 3 geht an Schleifer eines Trimmwiderstands 22K. Die beiden anderen Kontakte des Trimmwiderstands an GND und +5V.

Hinweis zur Pin-Belegung: Wie immer bei der 4-Bit-Ansteuerung sind die Datenleitungen D4..D7 zu verwenden, in Tabelle fett markiert. D4..D7 entsprechen den „logischen“ Do..D3 der 4-Bit-Ansteuerung.

LED Backlight Spannung: Das Backlight ist sehr hell, ich habe mich nicht getraut die Spannung so hoch zu regeln dass wirklich 20mA verbraucht werden. Bei 2,7V ist es schon ausreichend hell und mein Netzteil zeigt da noch keinen nennenswerten Stromverbrauch an. Infos zur korrekten Backlight-Spannung habe ich keine gefunden.

 

 

 

Software

Bei der Verwendung der Bibliothek von Peter Fleury wurden die folgenden #defines verwendet (lcd.h):
#define LCD_LINES           2     /**< number of visible lines of the display */
#define LCD_DISP_LENGTH    16     /**< visibles characters per line of the display */
#define LCD_LINE_LENGTH    16     /**< internal line length of the display    */
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
#define LCD_START_LINE2  0x40     /**< DDRAM address of first char of line 2 */
#define LCD_START_LINE3  0x00     /**< DDRAM address of first char of line 3 */
#define LCD_START_LINE4  0x00     /**< DDRAM address of first char of line 4 */

Fazit

Kleineres Textdisplay, leider nur 16 Zeichen. Font ist für mein Empfinden schön. Sehr helles Backlight, attraktives Blau. Besonderheit ist, dass der Text im Display relativ zu den Anschlußpins „auf dem Kopf“ steht (vgl. mit anderen Textdisplays!).

Kleine Platine, geringer Stromverbrauch des Backlight trotz der großen Helligkeit. Nur 16 Anschlußpins. „Verbraucht“ im 4-Bit-Modus nur 7 Pins des AVRs. Befestigungsbohrungen sind kleiner als M3 (vermutlich M2,5)

Hoher Preis.

Tinsharp TC1604

Dies ist ein kleines Textdisplay 4 Zeilen x 16 Zeichen, der größere Bruder des TC1602. Grünes LED-Backlight. Die Platine ist klein im Verhältnis zum Display.

Verwendet wird der Controller HD47780 (bzw. kompatibler). Daher kann dieses Display in der absoluten „Standard-Beschaltung“ und der „Standard“-Bibliothek von Peter Fleury verwendet werden. Zur Ansteuerung der Zeilen 3 und 4 muss man die richtigen RAM-Adressen eingeben (siehe weiter unten unter „Software“).
Irgendwo habe ich im Zusammenhang mit dem TC1604 den Controller SPLC780D1 erwähnt gesehen, eventuell ist dies der verwendete Controller.

Handbuch Controller HD47780.

Handbuch Controller SPLC780D1.

Link zu Peter Fleurys Bibliothek (LCD library for HD44780 based LCD’s: http://homepage.hispeed.ch/peterfleury/avr-software.html

Pin-Belegung und Anschluß

Pin-Belegung identisch mit Tinsharp TC1602.

Pin Funktion AVR Pin
1 GND, Vss GND
2 +5V +5V
3 Vo Kontrastspannung
4 RS PC0
5 RW PC1
6 E PC2
7 D0 PA0
8 D1 PA1
9 D2 PA2
10 D3 PA3
11 D4 PA4
12 D5 PA5
13 D6 PA6
14 D7 PA7
15 Led Backlight Anode +5V
16 Led Backlight Kathode GND

Kontrastspannung: Pin 3 geht an Schleifer eines Trimmwiderstands 22K. Die beiden anderen Kontakte des Trimmwiderstands an GND und +5V.
Bei meinem Exemplar ist der maximale Kontrast in Nullstellung. Daher kann man den Trimmwiderstand weglassen und Pin 3 direkt mit GND verbinden – zumindest bei meinem Exemplar.

Hinweis zur Pin-Belegung: Wie immer bei der 4-Bit-Ansteuerung sind die Datenleitungen D4..D7 zu verwenden, in Tabelle fett markiert. D4..D7 entsprechen den „logischen“ Do..D3 der 4-Bit-Ansteuerung.

 


Gesamtaufbau

Das Display aus der Nähe

 

Software

Bei der Verwendung der Bibliothek von Peter Fleury wurden die folgenden #defines verwendet (lcd.h):
#define LCD_LINES           4     /**< number of visible lines of the display */
#define LCD_DISP_LENGTH    16     /**< visibles characters per line of the display */
#define LCD_LINE_LENGTH    16     /**< internal line length of the display    */
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
#define LCD_START_LINE2  0x40     /**< DDRAM address of first char of line 2 */
#define LCD_START_LINE3  0x10       /**< DDRAM address of first char of line 3 */
#define LCD_START_LINE4  0x50     /**< DDRAM address of first char of line 4 */

Fazit

Kleineres Textdisplay, leider nur 16 Zeichen. Font ist für mein Empfinden schön. Helles Backlight. Besonderheit ist, dass der Text im Display relativ zu den Anschlußpins „auf dem Kopf“ steht (vgl. mit anderen Textdisplays!).

Kleine Platine. Nur 16 Anschlußpins. „Verbraucht“ im 4-Bit-Modus nur 7 Pins des AVRs. Befestigungsbohrungen sind M3.

Hoher Preis.

Wintek WD-G1203T

Dies ist ein kleines Grafikdisplay mit 122×32 Pixeln. Es ist sehr flach und besitzt eine LED-Hintergrundbeleuchtung bestehend aus 6 grünen LEDs.

Besprechung hier:  http://www.mikrocontroller.net/topic/173195

Verwendeter Controller: 2xSED1520

Handbuch Controller SED1520

Pinbelegung und Anschluß

Stiftleiste 2mm (nicht 2,54!) mit 20 Pins.
Um das Display zu testen wurde ein Adapter gebaut, der die 2mm Stiftleiste auf eine 2,54mm Stiftleiste übersetzt.

Pin Funktion AVR Pin
1 Vss, GND
2 Vcc, +5V
3 N.C.
4 A0 (entspr. RS) PC0
5 /CS1, links PC2
6 /CS2, rechts PC3
7 interner Clock — offen lassen
8 E auf +5V legen
9 RW PC1
10 D0 PA0
11 D1 PA1
12 D2 PA2
13 D3 PA3
14 D4 PA4
15 D5 PA5
16 D6 PA6
17 D7 PA7
18 /Res: HI für 68xx Mode, LO für 80xx Mode auf +5V legen
19 Led Backlight + ~5V
20 Led Backlight –

Die 6 LEDs sind alle parallel geschaltet, jede LED mit einem eigenen Vorwiderstand 150 Ohm.

 


Das Display, hier falsch herum dargestellt („oben“ ist im Bild die untere Kante)

 


Der Adapter

Der Adapter wurde für ein weiteres Display (Optrex DMF 5002) gebaut, so dass er zusätzlich zur 2mm-Stiftleiste in der Mitte auch eine 2×10-polige Stiftleiste oben besitzt.


Der Adapter von unten.

 


Das Display im Betrieb (Textdarstellung)

 


Das Display im Betrieb (Grafikdarstellung, leider fehlerhaft)

 

Software

Bibliothek von hier: http://en.radzio.dxp.pl/sed1520/

Mit dieser Software konnte nach trivialen Anpassungen (Ports/Pins anpassen) Texte ausgegeben werden. Die Grafik-Ausgabe war fehlerhaft.

Fazit

Kleines, schmales Display. Ausreichende Hintergrundbeleuchtung. Es scheint keinen 4-Bit-Modus zu geben, von daher braucht es relativ viele Controller-Pins.

Grafik-Modus nicht nutzbar. Hier wäre noch etwas mehr Zeit in der Analyse des fehlers zu investieren.

Optrex DMF 5002N

Dieses grosse Display habe ich über ebay erstanden, es stammt also nicht aus der Pollin-Tranche.

Grafik-Display 128×112, EL-hintergrundbeleuchtet. Pixelgröße: 0,50 x 0,49 mm
Displaygröße: 75 x 65mm. Älteres Modell, das Datenblatt ist von 1997.

Hintergrundbeleuchtung 100V AC bei 400Hz laut Handbuch, max 12mA.

Controller ist der Toshiba T6963C, ein früher(?) sehr häufiger Chip. Auf der Platine finden sich noch 1x T6961B, 2x T7778A und ein TC5565AFL sowie ein paar kleinere 74xx.

Display Datenblatt und noch ein Datenblatt mit mechanischen Daten und noch ein Datenblatt.

Ausführliche Beschreibung der gesamten DMF500x Baureihe mit sehr guten Informationen und sogar mit Beispiel Source Code.

Controller Handbuch

Writing Software for T6963C based Graphic LCDs“ Application Notes

Fertige Software : http://en.radzio.dxp.pl/t6963/

Pin-Belegung und Anschluß

20-poliger doppelreihige Wannenstecker.

Kontrastspannung: Nach dem Schaltbild im Datenblatt: -21V an Vee. Zwischen Vee und GND ein Trimmer 10-20K in Serie mit einem Widerstand 5-10K. Der Widerstand ist an GND, der Trimmer an Vee. Den Schleifer des Trimmers an Vadj anschliessen.

EL-Spannung: AC 100V (?). Das Handbuch empfiehltz das Inverter-Modul „NEL-D32-49“.

Pin Funktion AVR Pin
1 Frame Ground
2 Vss GND GND
3 Vcc Power Supply Logic +5V
4 Vadj LCD Contrast Adjustment siehe Text
5 Vee Power Supply LCD Drive ~-21V siehe Text
6 /WR
7 /RD
8 /CE
9 C/D
10 /HALT – Stop Clock
11 /RESET – Controller Reset
12 D0
13 D1
14 D2
15 D3
16 D4
17 D5
18 D6
19 D7
20 N.C.
21 EL Backlight AC siehe Text
22 EL Backlight AC siehe Text

 

 

Status

Noch nicht getestet.

Schaltung für eine EL-Hintergrundbeleuchtung

Folgende Schaltung nutzt dem NE555 und einen kleinen Trafo, im Internet gefunden.

http://spurtikus.de/wp-content/uploads/2017/03/LM555-inverter-1.pdf

Es wird ein Transformator benötigt, der 8 Ohm auf 1KOhm übersetzt. Geeignet sind Ausgangsübertrager für Röhrenverstärker oder für 100V-Technik, möglichst winzige Typen suchen.
Beispiel (nicht getestet!): Contrad Teilenr. 516104

Weiterführende Infos

[[[
Intern:
Planung Bearbeitung:

1: Optrex DMF 5002N

2: Sharp M…: keine lauffähige SW vorhanden

3: Samsung: 0.5er Pitch, kein Stecker vorhanden

—: Nan Ya: Größe problematisch, kleinsägen? –> erst mal lassen

—: Alps: 41 Pins, kein FPC vorhanden –> erst mal lassen

]]]