Forum: Mikrocontroller und Digitale Elektronik Pollin LCD SC1604A - gotoxy()


von Stefan R. (lenox)


Angehängte Dateien:

Lesenswert?

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 */
26
#endif
27
...

LCD-Ausgabe siehe Dateianhang.

Link zum Display:
http://www.pollin.de/shop/dt/NzI0OTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_SC1604A.html

Hat jemand eine Vermutung bzgl. der Adressierung? Ich habe schon 
erfolglos diverse Adressierungen ausgetestet.

Vielen Dank.

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

1
#define LCD_START_LINE1  0x14     /**< DDRAM address of first char of line 2 */
2
#define LCD_START_LINE3  0x3c     /**< DDRAM address of first char of line 3 */
?

Die anderen beiden Zeilen müsstest du noch herausfinden

von Stefan R. (lenox)


Angehängte Dateien:

Lesenswert?

ändert leider auch nicht viel

von Max H. (hartl192)


Lesenswert?

Schreib einfach mal in die ersten 62 Adressen
1
ABC...XYZabc...xyz012...789
Dann solltest du die Startadressen der Zeilen ablesen können.

: Bearbeitet durch User
von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Oh, bin durcheinander gekommen, weil Deine Zeile3 wohl Row 4 oder y = 3 
ist.
Also müsste ja eigentlich
LCD_START_LINE1 0x54 sein?!

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

und
LCD_START_LINE_3 0x10

für zwei und vier musst du noch herausfinden. Z.B. wie Max das schon 
schrieb

von Stefan R. (lenox)


Angehängte Dateien:

Lesenswert?

Hier wieder die LCD-Ausgaben. Ich verstehe den Controller einfach nicht.

von Max H. (hartl192)


Lesenswert?

Dass in der lcd_gotoxy() ein Fehler ist kannst du ausschleißen?

von Stefan R. (lenox)


Lesenswert?

Ja, es handelt sich um die original Lib!

Die Funktion setzt ja nur die definierten Offsets.

lcd.c
1
...
2
#if LCD_LINES==4
3
    if ( y==0 )
4
        lcd_command((1<<LCD_DDRAM)+LCD_START_LINE1+x);
5
    else if ( y==1)
6
        lcd_command((1<<LCD_DDRAM)+LCD_START_LINE2+x);
7
    else if ( y==2)
8
        lcd_command((1<<LCD_DDRAM)+LCD_START_LINE3+x);
9
    else /* y==3 */
10
        lcd_command((1<<LCD_DDRAM)+LCD_START_LINE4+x);
11
#endif
12
...

hmm

von 4x16 (Gast)


Lesenswert?

Mmh,probier mal
#define   LCD_LINE_LENGTH   0x40
Und dann
Line1 0x00
Line2 0x40
Line3 0x10
Line4 0x50

4x16

von c-hater (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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.

von Max D. (max_d)


Lesenswert?

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.

von Stefan R. (lenox)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Stefan R. (lenox)


Angehängte Dateien:

Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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...

von c-hater (Gast)


Lesenswert?

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?

von holger (Gast)


Lesenswert?

#define LCD_LINES           2     /**< number of visible lines of the 
display */

Ich würde da mal ne 4 eintragen.

von c-hater (Gast)


Lesenswert?

holger schrieb:
> #define LCD_LINES           2     /**< number of visible lines of the
> display */
>
> Ich würde da mal ne 4 eintragen.

Da steht im OP eine 4.

von holger (Gast)


Lesenswert?

>> Ich würde da mal ne 4 eintragen.
>
>Da steht im OP eine 4.

In der ZIP Datei steht eine 2.

von Stefan R. (lenox)


Lesenswert?

ne 4 hatte ich selbstverständlich auch mal probiert ;)

von holger (Gast)


Lesenswert?

>ne 4 hatte ich selbstverständlich auch mal probiert ;)

Und für welche Zahl entscheidest du dich jetzt?

von spess53 (Gast)


Lesenswert?

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

von Stefan R. (lenox)


Lesenswert?

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.

von Stefan R. (lenox)


Lesenswert?

Jetzt funktioniert es nicht mehr.. grml

von spess53 (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.