Ich versuche ein 4x16 LCD mit KS0066 kompatiblen Controller mit der
Libary von Peter Fleury via 4-Bit anzusteuern. Bis auf die
Positionierung der Curser funktioniert soweit alles. Ich vermute ein
Problem bei der Adressierung.
main.c
1
...
2
lcd_gotoxy(0,0);
3
lcd_puts("Zeile0");
4
lcd_gotoxy(0,1);
5
lcd_puts("Zeile1");
6
lcd_gotoxy(0,2);
7
lcd_puts("Zeile2");
8
lcd_gotoxy(0,3);
9
lcd_puts("Zeile3");
10
...
lcd.h
1
...
2
3
#ifndef LCD_LINES
4
#define LCD_LINES 4 /**< number of visible lines of the display */
5
#endif
6
#ifndef LCD_DISP_LENGTH
7
#define LCD_DISP_LENGTH 16 /**< visibles characters per line of the display */
8
#endif
9
#ifndef LCD_LINE_LENGTH
10
#define LCD_LINE_LENGTH 0x20 /**< internal line length of the display */
11
#endif
12
#ifndef LCD_START_LINE1
13
#define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */
14
#endif
15
#ifndef LCD_START_LINE2
16
#define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */
17
#endif
18
#ifndef LCD_START_LINE3
19
#define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */
20
#endif
21
#ifndef LCD_START_LINE4
22
#define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */
23
#endif
24
#ifndef LCD_WRAP_LINES
25
#define LCD_WRAP_LINES 0 /**< 0: no wrap, 1: wrap at end of visibile line */
Stefan R. schrieb:> Hier wieder die LCD-Ausgaben. Ich verstehe den Controller einfach nicht.
Ich würde zuerst vermuten, daß es schlicht zwei Controller sind. Der
eine steuert die Zeilen eins und drei und die Adressmappings für diese
beiden Zeilen sind offensichtlich 0x00 und 0x10. Der andere Controller
wird dann höchstwahrscheinlich dasselbe Mapping verwenden. Du müsstest
ihn nur ansteuern, dazu muß es dann eine zweite "E"-Leitung am Display
geben. Typisch sind die "E"-Leitungen solcher Displays dann mit "E1" und
"E2" oder sowas in der Art bezeichnet.
Alternativ könnte man auch vermuten, daß es sich in Wirklichkeit
garnicht um ein vierzeiliges Display handelt, von den "fehlenden" beiden
Zeilen ist nämlich nicht einmal ein Schatten zu erkennen. Bei einem
(nicht initialisierten) hypothetischen zweiten Controller sollte aber
dann Zeile zwei komplett schwarz sein, und wenn es wirklich nur ein
Controller ist, dann müßten die zwei Zeilen zumindest als Schatten
sichtbar sein, ungefähr wie die Leerzeichen der Zeilen, in die du Text
reinbekommen hast.
Ich würde also eher auf die zweite Vermutung tippen.
Hi
>Ich würde zuerst vermuten, daß es schlicht zwei Controller sind.
Dafür fehlen die passende Signale.
Aber wie 4x16 (Gast) schon bemerkte, ist die übliche Zeilenaufteilung
bei 4x16 Displays:
0 1 2 4
4x16 $00-$0F $40-$4F $10-$1F $50-$5F
MfG Spess
Ich meine diese Adressierung schon getestet zu haben, werde sie aber
heute Abend nochmal testen.
Anbei: Eigentlich schließe ich ein Hardware Problem aus, da dass Display
schonmal in dem Gerät lief. DB0-DB3 auf GND, DB4-DB7 an einen Port. RS,
R/W, E seperat.
Probier mal das Display kontinuierlich mit Daten zu füttern.
Dann sieht man ja ob sich in den Zeilen was tut.
Wenn man das füllen ein bißchen bremst, dann kann mit einer Stoppuhr
sogar die Adressen schätzen.
Ich habe mal eine Ausgabe in eine Schleife gesetzt, ich erreiche nur
Zeile1 und Zeile3. Nach ca. 70 Zeichen wiederholt sich die Ausgabe.
Die Bezeichnung des LCDs lautet SC1604ASLB-SO-GB.
HI
>Ich habe mal eine Ausgabe in eine Schleife gesetzt, ich erreiche nur>Zeile1 und Zeile3.
Bist du sicher, das das Display zweizeilig initialisiert ist (Bi3 in
Funktion Set gesetzt)?
MfG Spess
Ich vermute das Problem auch aus der Richtung. Evtl. verstehe ich auch
irgendeine Definition falsch. Ich habe jetzt schon diverse
Konkigurationen durchgetestet. Ich habe den Code mal auf ein
Minimalbeispiel reduziert vielleicht siehst du ja noch was. Falls das
Display läuft, würde ich mich gerne mit einem neuen 4x20 revangieren. Da
bei meinem Gerät die Frontblende bereits gefräst ist, würde ich es gerne
bei dem 4x16 Display belassen.
Gruß Stefan
spess53 schrieb:>>Ich würde zuerst vermuten, daß es schlicht zwei Controller sind.>> Dafür fehlen die passende Signale.
Nunja, ich habe nirgendwo im Thread lesen können, welche Signale das
Display nun tatsächlich hat und die angegebene Bezeichnung ist ja ganz
offensichtlich auch vom TO gefälscht worden. Könnte also sehr gut sein,
daß der Typ ein Troll ist...
> Aber wie 4x16 (Gast) schon bemerkte, ist die übliche Zeilenaufteilung> bei 4x16 Displays:>> 0 1 2 4> 4x16 $00-$0F $40-$4F $10-$1F $50-$5F
Ja, und wenn die zutreffen würde, hätte bereits der erste Versuch des TO
ein sichtbares Ergebnis liefern müssen. Hat er aber eben nicht...
Also ich würde daraus ganz sicher den Schluß ziehen wollen, daß es sich
wohl eben NICHT um die angeblich "übliche" Aufteilung handeln kann...
Zumal es nach meiner Erfahrung sowieso Quatsch ist, bei den vierzeiligen
Displays irgendeine "Üblichkeit" anzunehmen. Die gibt es nämlich de
facto nicht. Nur für Schmalspur-Extrapolierer, die irgendein "Gesetz"
auf der Basis von drei oder vier Samples postulieren, von denen dann
auch noch drei untereinander baugleich sind...
Stefan schrieb:> Anbei: Eigentlich schließe ich ein Hardware Problem aus, da dass Display> schonmal in dem Gerät lief.
Elektronik kann auch mal kaputt gehen. Hat dir das noch niemals jemand
erzählt?
Hi
>Nunja, ich habe nirgendwo im Thread lesen können, welche Signale das>Display nun tatsächlich hat und die angegebene Bezeichnung ist ja ganz>offensichtlich auch vom TO gefälscht worden.
Datenblatt gibt es hier:
http://www.pollin.de/shop/dt/NzI0OTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_SC1604A.html
Und da steht die Standardanschlussbelegung drin. Displays mit zwei
Controllern sollten mindestens zwei E, CE oder sonst etwas doppelt
haben.
>> 4x16 $00-$0F $40-$4F $10-$1F $50-$5F>Ja, und wenn die zutreffen würde, hätte bereits der erste Versuch des TO>ein sichtbares Ergebnis liefern müssen. Hat er aber eben nicht...
Diese Zeilenaufteilung hatte ich auch in einem anderen Forum gefunden.
Wenn ich mich nicht irre war das das C-Control-Forum (nicht das ich die
ernst nehme).
>ne 4 hatte ich selbstverständlich auch mal probiert ;)
Bei einem Controller gibt aber nur 1- und 2-Zeilige Displays.
Vielleicht solltest du mal eine Lib hier aus den Forum ausprobieren.
MfG Spess
Das Display funktioniert! Es war ein Hardwareproblem. DB0-DB3 lagen auf
GND anstelle von floating. Warum das früher mal funktioniert hat, weiß
ich nicht. Ich melde melde mich heute Abend nochmal, muss jetzt los
schaffen.
Hi
>Es war ein Hardwareproblem. DB0-DB3 lagen auf GND anstelle von floating.
Das war mit Sicherheit nicht das Problem. Wenn du D0..D3 auf GND legst
zieht das Display wegen der integrierten Pull-Up-Widerstände eine
höheren Strom. Aber mehr nicht.
>Jetzt funktioniert es nicht mehr.. grml
Dann weiter suchen.
MfG Spess