Hallo Forumgemeinde.
nachdem ich bei Pollin das E0855-2 GLCD bestellt habe und nach langem
Suchem im Netz nichts, aber auch garnichts, gefunden habe, habe ich
beschlossen, einen eigenen Treiber zu schreiben (AVR-GCC).
Ich möchte diesen allen zur Verfügung stellen, weshalb der nun hier in
der Codesammlung erscheint.
Bitte seid nicht zu streng was meinen Code angeht, es war für mich das
erste mal.
Folgendes kann der Treiber:
-das LCD über SPI (Hardware-SPI) ansteuern, also genügt ein Port bei
weitem
-SPI wird über die Initroutine des GLCD mit-initialisiert
-display löschen
-page löschen
-newline
-beliebig alle Pages und Spalten setzen
-ein Zeichen darstellen
-einen String darstellen
-numerische Integer-Werte darstellen
-bis zu 10 Grafiken darstellen
-auf alle Symbole des E0855-2 zugreifen und diese darstellen
Was der treiber (noch) nicht hat oder kann:
-einen Cursor
-pixel direkt setzen
-irgendwelche Grafikfunktionen (Kreise, Striche etc)
-Scrollen
Was man damit (schon) machen kann:
- 16x4 Textdarstellung
- Einrückungen von Text
- automatischer Zeilenumbruch
- max. 10 (in der PICS.c gespeicherte) Grafiken anzeigen
- Zugriff auf alle Symbole
Über (hoffentlich positive) Kommentare von Euch freue ich mich natürlich
Viel Spass.
Ich habe den Font umgebaut damit man sich das "ReverseBitorder()" in
"SED_putc()" sparen kann.
Zusätzlich noch die Umlaute "ÄÖÜäöüß" an das Ende gehängt.
Die Font Tabelle ist um überflüssige 25*6 Bytes gekürzt.
Un noch eine kleines Goody. Die 7-Segmentanzeige...
@Werner B.
Vielen Dank fürs Weiterentwickeln!
Der treiber ist IMHO alles andere als fertig, genügte aber für meine
Zwecke (zumindest bisher).
Als (noch) Student mit chronischer Geldknappkeit und Bastelleidenschaft
ist genau dieses Display recht optimal als ein 16x4 mit
Grafikmöglichkeit @ very low cost.
Ich würde mich sehr freuen, wenn noch viele (da draussen) den Treiber
weiterentwickeln würden...
Grüße
Ok, hier ist ein Update des Treibers etwas mehr Funktionalität:
- Ich habe das berichtigte und erweiterte Fontfile von Werner
eingebunden. (Danke nochmal an Werner :-)
- Der Kontrast lässt sich nun in 32 Stufen ein- bzw. umstellen.
Funktion: SED_contrast
- Es gibt nun eine einfache Grafikfunktion mit der Bytemuster
dargestellt werden können ( Funktion: SED_pixel)
- Wenn CS und /CS "hartverdrahtet" sind, kann dies kann dies nun unter
den "Portdefinitions" eingestellt werden.
Damit sind insgesamt nur noch 4 Port-Leitungen zur Ansteuerung des
Displays notwendig: Reset, A0, MOSI und SCK
Der Treiber müsste auch mit Displays auf Basis eines SED1530,
1531,1532,1533 und 1534 klarkommen, ebenso mit GLCDs, die größer als das
E0855-2 (96x32) sind.
Hier noch ein Update!
Eigentlich hatte ich wenig Lust dazu, aber jetzt ist eine Software-SPI
implementiert worden (Hurra, freie Pinwahl).
Mit dem Schalter SOFT_SPI=0 oder 1 kann zwischen Hardware -oder
Software-SPI geschaltet werden.
Getestet habe ich das mit einem MEGA8...
Have Fun
Hallo Marc,
ich wollte dein aktuellstes SED1530.ZIP laden, leider gehen mur die vor
dem 5.12., bei denen vom 5.12. kommt bei WINZIP die Fehlermeldung:
Datei liegt micht im ZP2.0 Standardformat vor
kannst du da was machen?
Besten Dank
Walter
@Walter
Bitte schön - nochmal gepackt.
Hoffe, es läuft jetzt - lass was hören, wenn's probleme gibt.
Bei der Gelegenheit:
Ich habe den Treiber aktualiert, etwas erweitert und entwanzt :-)
Der Treiber sollte auch mit dem LCD-Modul ALPS LSU7S1011A (auch Pollin)
laufen, sogar mit mit dem obigen Schaltplan:
Der PIN 41 vom ALPS LSU muss dazu nur auf den PIN 37 gelötet werden.
Dann der Reihe nach (nach richtung PIN 1 der Platine) anlöten.
Die Pins, die dann überstehen werden eh nicht verwendet, also einfach
floaten lassen.
Link zum Datenblatt des ALPS:
http://www.pollin.de/shop/downloads/D120215S.ZIP
Achtung: Das ALPS hat keine Hintergrundbeleuchtung...
Have Fun!
@Marc
>Bitte schön - nochmal gepackt.>Hoffe, es läuft jetzt - lass was hören, wenn's probleme gibt.
Danke für deine Mühe, ging aber leider immer noch nicht.
Habe mir jetzt ultimatezip installiert da es das aktuelle WINZIP nicht
mehr für W98 gibt. Ich kann zwar jetzt die Datei lesen, bin also soweit
glücklich, aber vielleicht kannst du ja dein ZIP Programm so einstellen
das es nicht das neue 2.0 Format verwendet.
Ich denke das sonst auch andere Schwierigkeiten beim entzippen haben
werden.
Schönes Wochenende
Walter
@Werner
Du hst schon recht, dass die SED_set_XY eigentlich viel zu kompliziert
ist.
Ich habe sie entsprechend geändert, bzw. gekürzt.
Deinen Code habe ich auch ausprobiert - funktioniert bei mir nicht
wirklich gut.
Die SED_pixel Routine ist als eine vorbereitende Funktion gedacht, die
später einmal die Vermischung von Text und Grafik ermöglichen soll.
Das dumme mit der SPI-Geschichte ist, dass ich nicht aus dem
SED-Speicher lesen kann. Wenn jetzt also ein Buchstabe spaltenmäßig
aufgebaut werden soll und zusätzlich eine Grafik, dann habe ich mit der
direkten Adressierung so meine Probleme, daher die Aufteilung in Page,
Column und Bitmuster.
CU
Hier nun ein Update zum Treiber:
-Fix: Hardware-SPI-Prescaler und andere Kleinigkeiten
-neue Funktion: SED_7segment(Segment[0..3],Nummer[0..9]):
Ansteuerung für das kleine integrierte7-Segment Display
-wieder verkürzte Fonttabelle
-Fonttabelle und Definitionen für die 7-Segmentanzeige sind ins EEPROM
gewandert. Passen jetzt ins EEPROM z.B. eines Mega8 (standard ASCII).
-Notes.txt mit Bemerkungen
viel Spass
Klaus W. wrote:
> Ok:>> // It is suitable to use Holger-Klabunde's "BMP2C" image converter to> receive an image as a hex-string.> // http://www.holger-klabunde.de
Äh, ja, das ist aber nur ein binary ohne Source. Und wie bekomme ich das
jetzt auf Linux zum laufen?
Also da ich auf die schnelle nichts gefunden habe, hier ein kleines
C-Programm, das PBM Dateien der richtigen Größe so umformatiert, dass
die Bitanordnung für das Display angepasst wird.
Anschließend kann man dann einfach mit pbmtoxpm in C-Code convertieren.
1
#include<stdio.h>
2
3
main()
4
{
5
chargfx[3072];
6
intx,y;
7
8
dofscanf(stdin,"%d %d\n",x,y);
9
while(x==96&&y==32);
10
11
fprintf(stdout,"P1\n#Vertical aligned for GLCD\n96 32\n");
Hallo,
da ich noch nicht so viel Erfahrung mit habe dem µC habe ich den
Stromlaufplan vom 23.10.2007 14:56 Versucht nachzubauen.
Bin jedoch nicht sehr weit gekommen, da einiges nicht ganz klar ist. Die
Anschlüssen an den Mega16/32 lassen mir keine Ruhe.
Die Anschlüsse
PB7
PB5
PB3
konnte ich nicht so ganz zuordnen.
Auch mit Anschlüssen
TP10 -> X1-10
TP9 -> X1-9
kann ich nicht viel mit anfangen, außer dass diese auf dem Printerport
liegen
Währe prima wenn ihr mich in dieser Richtung aufklären könntet.
Danke, schon mal.
Viele Grüße
Ralf
PS: Anbei ein nachgezeichneter Plan um daraus eine Platine zu erstellen.
@Ralf Franz
Der Schaltplan vom 23.10.07 ist ein möglicher Aufbau zum Anschluss des
Displays an ein STK500 (oder in meinem Fall an das Kanda STK200) über
einen 10-poligen Stecker, mehr nicht.
Zu Deinen Fragen:
PB7 => SCK - Clock-Leitung
PB5 => MOSI - Master-Out-Slave-In Leitung
Diese beiden Leitungen sind die eigentlichen Steuerleitungen des SPI für
das Display.
Mit dem aktuellen Treiber (23.01.08) ist es völlig egal, wo Du das SPI
hinlegst: entweder auf die dafür vorgesehen Portpins des MEGAxxxx
(Hardware SPI) oder sonstwo (Software-SPI).
PB3 => Reset - Reset Leitung, um das Display zurückzusetzen.
TP10 liefert die Betriebsspannung des Displays (5V)
TP9 ist das Ground (GND) (minus-Pol)
Mit Printerport hat diese Zeichnung überhaupt nichts zu tun!
Die Ansteuerung des Displays erfolgt über SPI und benötigt folgende
Leitungen:
MOSI, SCK, RST, A0 als minimale Konfiguration.
Evtl. ein Portpin mehr um die Hintergrundbeleuchtung anzusteuern (TP7).
Im Anhang ist eine Schaltung des Displays an einen MEGA8.
Um 2 weitere Portpins einzusparen könnte man auch /CS1 auf GND und CS2
auf +5V legen.
Das entstandene Veruchsboard wurde dann meiner Freundin vermacht als
"Hab' Dich Lieb" Geschenk mit Grafik und Text (da bleibt kein Auge
trocken- kann ich nur empfehlen :-)
Hallo Marc,
danke für Deine Hilfe.
Marc Meise wrote:
> Das entstandene Veruchsboard wurde dann meiner Freundin vermacht als> "Hab' Dich Lieb" Geschenk mit Grafik und Text (da bleibt kein Auge> trocken- kann ich nur empfehlen :-)
Wolle so etwas ähnliches machen.
Viele Grüße
Ralf Franz
Hallo, alle zusammen.
Ich habe das Display Epson E0855-2 soweit im Betrieb.
Allerdings habe ich noch Probleme mit der Kontrastregelung.
Möglicherweise habe ich etwas übersehen:
Ich habe das Display laut der Sequenz im bereitgestellten Datenblattes
in Betrieb genoemmen, und die Hardware ebenso laut Datenblatt.
Weiterhin habe ich von links nach rechts auf den Seiten 0-3 als Patter
0xAA ausgegeben, was dünne, waagerechte Linen auf dem Display
hinterläßt.
Das passiert schrittweise in kurzen Intervallen.
Es sollte nichts weiter zur Sache tun, wenn ich erwähne, das ich das
Display über einen PIC18F4550 ansteuere, desweiten via serieller
Schnittstelle (SPI).
Das Problem:
Je weiter das die Linien von links nach rechts geschieben werden, desto
krontrastärmer wird das Display.
Dieser Kontrast kann via Software nachgeregelt werden.
Meine Frage:
Kann es sein, das dieses Verhalten nicht normal ist?
Ich kann es zwar technisch nachvollziehen, aber in der Praxis sollte
doch der Inhalt des Displays nichts mit dem Kontrast zu tun haben...
Das Display sollte den Kontrast doch nachregeln.
Habe ich irgendwo einen Schalter vergessen?
Oder waren die Displays aus diesen Grund so preiswert?
Ich bitte um Austausch von Erfahrungen mit Leuten, die dieses Display
ebenso in Betrieb genommen haben.
Danke im Vorraus.
> Kann es sein, das dieses Verhalten nicht normal ist?
Ich kenne zwar gerade dieses LCD von Pollin nicht, allerdings fast alle
anderen :-)
Normal ist so ein Verhalten sicher nicht da es wohl daher kommt das
da eine Betriebsspannung zusammenbricht wenn die Belastung steigt.
Der Controller benoetigt ja eine externe Beschaltung zur
Spannungsvervielfachung. Ist die bereits auf dem LCD vorhanden, oder
musst
du die, wie bei den anderen, durch anschalten von Kondensatoren
erzeugen?
Eventuell hast du da was falsch gemacht?
Ausserdem konnte man die bei manchen ICs als 2x oder 3x beschalten.
Eventuell gibt es da noch einen Unterschied in der Programmierung.
Ich wuerd uebrigens nicht soviel auf den Beispielsource von Pollin
geben. Der ist sicherlich auch nur von einem Studenten im Nebenjob auf
die
schnelle Zusammengehackt um die Funktion zu demonstrieren. Da koennen
auch noch grobe Fehler drin sein.
Olaf
> Das Problem:> Je weiter das die Linien von links nach rechts geschieben werden, desto> krontrastärmer wird das Display.
Hm, also das kann ich so nicht bestätigen.
Die Hintergrundbeleuchtung des Displays scheint nicht besonders
hochwertig, weshalb der Gesamteindruck etwas "fleckig" ist, wenn die
Beleuchtung an ist. Aber das von Dir beschriebene Verhalten kann ich
nicht reproduzieren.
Ich hätte jetzt auch am ehesten vermutet, dass mit der externen
Beschaltung
etwas nicht stimmt. Speziell die Kondensatoren zur Erzeugung der
Betriebsspannungen. Man müsste sich mal überlegen, wie das Display
eigentlich das Bild aufbaut, möglicherweise könnte man daraus
Rückschlüsse auf die Art des Fehlers ziehen. Hast du die Spannungen denn
mal nachgemessen? Evtl. Mit dem Oszilloskop?
Mir ist jedoch auch aufgefallen, das der Kontrast des Matrixdisplays
insgesamt etwas schlechter ist als bei den speziellen Segmenten
drumherum.
Vermutlich hängt das aber mit der Ansteuerung zusammen.
Du schreibst, dass Du das Muster in "kurzen Intervallen" ausgibst. Wäre
es denkbar, dass die Intervalle so kurz sind, dass die scheinbare
Kontrastverringerung nach rechts einfach daher kommt, dass Du das Muster
dort "kürzer" darstellst? Aber wenn das dann noch flimmerfrei passiert,
müsste es schon sehr schnell sein. Wäre aber ein Ansatz für
Graustufendarstellung :-).
Hast du denn schon mal ein anderes Muster dargestellt? (0xFF/0x00)
Vielleicht ist es eine Unzulänglichkeit des Controllers, die NUR bei
diesem Muster auftritt? Na, auch eher unwahrscheinlich, aber man muss ja
alles mal ausprobieren :-).
Viel Erfolg!
Klaus
Danke Klaus und Olaf.
Ja, ich habe auch andere Muster ausprobiert z.B. Schriftzeichen.
Da sieht es noch merkwürdiger aus.
Also: In der ersten, sichtbaren Seite(3) stelle ich Schriftzeichen dar.
in den unteren drei Seiten (0,1,2) jeweils die Muster 0x00, 0xff, und
0xaa.
Sieht dann sehr hübsch aus, weil die dunklen Balken dadrunter dann wie
Barcodes ausehen.
Lustig, aber nicht Ziel des Entwurfs.
Ja, Klaus, ich denke auch das es an den 5 Kondensatoren liegt, die
Datenblatt auf Seite 5-16, darstellung oben/links als C2 gekennzeichnet
sind.
Ich habe dafür Tantal-Elkos benutzt, und es ist denkbar, das es dort zu
Spannungen kommt, die die Tantals nicht vertragen.
Die werde ich nochmal nachmessen, oder direkt austauschen.
Laut Datenblatt kann an den Punkten V1-V5 Spannungen im Bereich von +0,3
bis -18V auftreten.
Gut ist, das ich nun weiß, da es sich um einen Fehler handelt, und das
soetwas bei euch noch nicht aufgetreten ist.
Demnach sollte ich den Fehler finden.
Edit:
Ich werde die Tantals gegen keramische Vielschichtkondensatoren
austauschen.
Zu den Mustern @Klaus:
kurze Intervalle ^= 0,5 Sekunden
Ich habe es nicht genau nachgerechnet.
Aber ich habe mir dabei Zeit gelassen, um nicht einen Timingfeler zu
provozieren.
Die Muster werden immer am Ende angefügt.
Siehe auch SED1530.text weiter oben.
Im übrigen vielen Dank an Marc Meise.
Ich habe mich auf das Datenblatt und seinen Quellcode gestützt um
meinen eigenen Code zu schreiben.
Hallo Forumgemeinde,
ich war zwischenzeitlich fleißig, aber leider ohne Erfolg.
Mein Problem (s.o) besteht immer noch.
Ich habe mir erlaubt, euch davon ein Foto schicken, und hoffe, das ihr
damit etwas anfangen könnt.
Foto: Display SED1530 auf Entwurfsplatine
Fehlerbschreibung: Kontrastregelung oder Spannungsversorgung arbeiten
nicht richtig, daher senkrechte Schlieren auf dem Display
@Markus
kontrollier' mal, ob alle kontakte vom Folienleiter auch richtig sitzen
und keine (fast) kalten Lötstelle vorhanden sind.
Du könntest auch während des Betriebs des LCD mit einer Stecknadel mal
auf die Solpads der einzelnen kontakte des floienleiters leicht drücken.
Vielleicht ist ja einfach nur ein Übergangswiderstand (durch eine
schlechte Lötstelle) zu hoch....
Grüße
Es war etwas ähnliches:
Zwischen dem Kontakt V1 und dem benachbarten Kontakt Vdd(+5V) war
offenbar ein winziger Metallspan.
Ich hatte vorher über die Kondensatoren gemessen, und da hätte es
eigentlich auffallen müßen.
gemerkt habe ich es, weil halt der Kontakt V1 gegenüber +5V (als
Referenzpunkt) 0V anzeigte.
Konnte nicht sein.
Jetzt klappt es! Blöder Fehler.
Gibt es für das Display auch einen Steckverbinder (Wäre mir lieber als
ihn anzulöten)? Wenn ja, kann mir jemand Hersteller und Bezeichnung
nennen?
Danke
Gruß
Daniel
Marc Meise wrote:
> Hier nun ein Update zum Treiber:>> -Fix: Hardware-SPI-Prescaler und andere Kleinigkeiten> -neue Funktion: SED_7segment(Segment[0..3],Nummer[0..9]):> Ansteuerung für das kleine integrierte7-Segment Display> -wieder verkürzte Fonttabelle> -Fonttabelle und Definitionen für die 7-Segmentanzeige sind ins EEPROM> gewandert. Passen jetzt ins EEPROM z.B. eines Mega8 (standard ASCII).> -Notes.txt mit Bemerkungen>> viel Spass
Kleiner Fehler:
In SED_putc() muss der columncounter auch die Trennspalten zwischen den
Zeichen mitzählen, sonst kommt newline zu spät!
Danke Werner für den Hinweis.
Der Fehler ist mir nicht aufgefallen.
Ich habe die Veränderungen soweit eingebaut :-) und noch eine kleine
itoa-Funktion dazu.
Parallel dazu gib es das ganze auch aktualisiert für den LPC210x unter
Beitrag "SED1530 Treiber für ARM"
Grüße
weil ReverseBitorder die Reihenfolge der Bits umdreht. Deine Version mit
~Bits bildet dagegen das Zweierkomplement der Zahl - das ist was ganz
anderes.
Hi,
Kurze Frage von mir.. hat jemand einen Schaltplan, wie man dieses
Display seriell anschliessen kann? Hab jetzt schon des oefteren in
Datenblaettern etc gelesen, dass dies moeglich sein soll.. aber nichts
gefunden, was einem Schlatplan oder so aehneln wuerde, der dies genauer
beschreibt ><
(Hab im endefekkt vor das Display an einen Arduino anzuschliessen),
Danke schonmal.
Martin
Ich habe noch einen Fehler gefunden.
Init_SPI: Das SPI2X Bit ist im SPSR Register, nicht in SPCR.
Setzen mit "SPSR = (1<<SPI2X);" statt "|=", löschen mit "SPSR = 0;".
@Christian
> Und warum verwenden alle uint8_t? Ist unsigned char nicht eindeutiger?
Im Gegenteil. Mit uint8_t ist genau definiert wie viele Bits verwendet
werden sollen. Bei "unsigned char" kann/darf das auch anders sein, je
nach Compiler und Zielprozessor.
Wie schon durch meine Vorredner festgestellt wurde, ist das E0855-2
nicht mehr bei Pollin erhältlich. Der Nachfolgetyp LSU7S1011A läuft zwar
auch mit dem SED1520-Chip verhält sich aber ganz anders. Wenn man sich
näher damit beschäftigt fällt auf, dass dieses Display intern anders
verschaltet sein muss. Das zeigt sich darin, dass die Pages anderen
physischen Zeilen zugeordnet sind und teilweise auch die Bit-Anordnung
vertauscht wurde. Das heißt, bei manchen Pages steht der Inhalt quasi
auf dem Kopf. Es gibt auch eine Verschiebung des angezeigten Bereiches
im Bezug auf den Display-RAM, der korrigiert werden musste. Ich habe den
Ursprungscode von Marc Meise deshalb für das LSU7S1011A angepasst und
einige Features hinzugefügt. Hier eine kurze Zusammenfassung:
-vollständige Umsetzung des Projekts auf die Entwicklungsumgebung
WinAVR- 20100110
-Anpassung des Makefiles für diese Umgebung
-Pagezuordnung an reale Anordnung angepasst
-Beschränkung auf die physisch vorhandenen Pages 0-4
-richtungsgesteuerte Byteausgabe unter Beachtung der aktuellen Page
-Verschiebung des sichtbaren Bereichs, relativ zum Zeich-RAM nach rechts
-Durch Wegfall der Spezialsymbole und der 7-Segment-Anzeige konnte das
Zeichensatz-Array so gestrafft werden,
dass es mit Umlauten und "ß" auch in den EEPROM passt, wenn man das so
will.
-Umkodierungstabelle zur Zeicherkennung implementiert, sodass die
Umlaute direkt als Zeichen eingegeben werden können.
-Codestraffung bzw. Wegfall einzelner Routinen.
-Implementierung von 8 benutzerdefinierten Zeichen
In beiliegendem Zip-File ist die aktuelle Version 2.0 des
Displaytreibers LSU7S1011A enthalten. Nähere Informationen stehen im
Projektfile.txt. Zusätzlich habe ich auch noch die Bauunterlagen für ein
solches Display-Modul mit eingepackt. Sie stehen im TARGET3001-Format,
zu öffnen mit der PCB-POOL-Version von TARGET, zur Verfügung. Diese kann
bei Bedarf als freie Version bei pcb-pool.com, dort im Downloadbereich
gesaugt werden. Wer das nicht möchte, kann die Entwicklungsunterlagen
auch im PDF-File einsehen.
Viel Spaß