Grafik-LCD 64128-LED

Gast #3420906
Lesenswert?

Guten Morgen,
ich habe von Reichelt ein Grafik-LCD mit der Bezeichnung "LCD 64128A 
LED"
( 
http://www.reichelt.de/LCD-Module-Grafik/LCD-64128A-LED/3//index.html?ACTION=3&GROUPID=3008&ARTICLE=31672&SHOW=1&OFFSET=500&; 
) und wundere mit gerade, daß die Ansteuerung wie im Datenblatt vom 
KS0108 kein richtiges Bild liefert. Weiß jemand, welcher Controller-IC 
dort eingesetzt wird?

Vom Pinout paßt das Modul (fast) zum TG12864B-Footprint (bis auf die 
Bohrungen, die sind nur 2,5mm), und zwei unterschiedliche TG12864B 
funktionieren auch zuverlässig. Im Unterschied zu diesem scheint das 
LCD-64128A aber kein Busy-Signal auszugeben.

Viele Grüße
Nicolas
Gast #3420949
Lesenswert?

Hi

>Unter "kein richtiges Bild" verstehe ich, da"s auf einer Displayseite
>teilweise Pixelmuster - die Teile eines Piktogrammes sind, das
>dargestellt werden soll - über den Bildschirm huschen und auf die andere
>Hälfte leer bleibt.

Da würde ich nochmal die Verkabelung überprüfen.

Der Displaycontroller ist übrigens ein S6B0108 von Samsung.

MfG Spess
Gast #3420963
Lesenswert?

spess53 schrieb:
> Da würde ich nochmal die Verkabelung überprüfen

Die Verkabelung ist in Ordnung. Das Display ist gesockelt und im 
gleichen Sockel läuft ein TG12864B (dann natürlich ohne 
Displaybeleuchtung) einwandfrei.

spess53 schrieb:
> Der Displaycontroller ist übrigens ein S6B0108 von Samsung

Danke, das habe ich gesucht.

Viele Grüße
W.T.
Gast #3421019
Lesenswert?

Pete K. schrieb:
> Ohne Deine Schaltung und Software zu kennen können wir Dir kaum
> weiterhelfen...

Kein Problem, ich habe ja auch erst einmal nur nach dem Datenblatt 
gefragt - weiter kann eh erst heute abend vorgegangen werden, wenn ich 
Schaltung, Quelltext und Oszilloskop vor mir habe.

Pete K. schrieb:
> Wartest Du 50ms, bevor das LCDInit loslegt?

Woher kommen die 50ms? Im S6B0108-Datenblatt finde ich nirgendwo Zeitem 
im ms-Bereich.

P.S.: Und ich habe gerade gesehen: die TG12864B haben auch einen 
S6B0108, keinen KS0108.
Gast #3421567
Lesenswert?

Hi

>Woher kommt eigentlich diese Information? Hast Du irgendein Datenblatt
>gefunden, was ich nicht gefunden habe?

Kein Datenblatt. Aber beim Hersteller

http://www.edtc.com/edt/Products/graphic.asp?search=graphic&page=2

gibt es für das EW13B30 ein Outline Drawing:

http://www.edtc.com/edt/Products/specs/EW13B30.pdf

Im Block Diagram, unten rechtes, findet man den Hinweis.

MfG Spess
#3421784
Lesenswert?

Pete K. schrieb:
> Ohne Deine Schaltung und Software zu kennen können wir Dir kaum
> weiterhelfen...

...und jetzt bin ich auch wieder an Quelltext, Schaltung und Oszi habe 
alles da. Nur am Timing kann es schon einmal nicht liegen, da mit 
CKDIV/8-Fuse (AVR) sich am Ergebnis nichts ändert.

Pete K. schrieb:
> Wartest Du 50ms, bevor das LCDInit loslegt?

Daran kann es auch nicht liegen, weil ich den Soft-Reset über den ISP 
mache und das GLCD die ganze Zeit versorgt wird.

P.S.: Pete K.: Das könnte sich jetzt so lesen, daß es gegen speziell 
gegen Deine Anmerkungen geht - geht es aber nicht. Ich schließe nur 
gerade diese Punkte systematisch aus.
Angehängte Dateien:
#3421815
Lesenswert?

Walter Tarpan schrieb:
> Nur am Timing kann es schon einmal nicht liegen, da mit
> CKDIV/8-Fuse (AVR) sich am Ergebnis nichts ändert.

Lass mal an den Spareports zur Probe eine LED mit delay_ms(500) blinken, 
dann siehst Du, ob der AVR richtig eingestellt ist.

Schon mal eine andere KS00108 Lib ausprobiert?
JTAG aus?

Und vielleicht mal die 1k8 herausnehmen, das ist etwas viel, wie sehen 
die Flanken auf dem Oszi aus?
Gast #3421853
Lesenswert?

>Also ist es (mal wieder) das kitzlige busy-Flag.

Die Abfrage von Busy habe ich schon vor langer Zeit beim KS00108
aufgegeben;)

Du nimmst aber ziemlich lange Delays. 4us hat bei mir bisher gereicht.
Je nachdem mit welchem Takt das Display läuft.

#define KS108_E_DELAY    2     // Pollin Display TG12864B 596kHz FCLK
//#define KS108_E_DELAY    4    // Displaytech 64240A 395kHz FCLK.
#3421866
Lesenswert?

holger schrieb:
> Du nimmst aber ziemlich lange Delays.

Da liegt wohl ein Mißverständlich vor: Mit 10ms Wartezeit läuft das 
Display sicher. Und jetzt geht es daran
 a) entweder die Busy-Flag-Geschichte wieder in den Griff zu bekommen 
oder
 b) durch eine passende Wartezeit, entsprechend dem vorausgehenden 
Befehl zu ersetzen.

Alles vorher war Ursachensuche.

holger schrieb:
> Die Abfrage von Busy habe ich schon vor langer Zeit beim KS00108
> aufgegeben

P.S.: Wir wissan ja jetzt: Es ist gar kein KS0108, sondern ein S6B0108 
;-)
Gast #3421921
Lesenswert?

Hi

>P.S.: Wir wissan ja jetzt: Es ist gar kein KS0108, sondern ein S6B0108

Na und. Hast du mal die Datenblätter verglichen? Sämtliche Spannungen, 
Ströme, das Timing (nicht nur Bus), ca. 95% der Texte der Datenblätter 
und sogar der Hersteller sind identisch.

Für mich gibt es zwischen beiden Controllern keinen Unterschied.

MfG Spess
#3421942
Lesenswert?

spess53 schrieb:
> Für mich gibt es zwischen beiden Controllern keinen Unterschied.

Für mich auch nicht. Deswegen ja auch der Smiley.

Aber alles halb so wild: Es geht schon wieder alles. Mit der folgenden 
kleinen Modifikation:
1
static void glcd_waitWhileBusy(void) {
2
  
3
  GLCD_DATA_DDR = 0x00;  
4
  GLCD_DATA_PORT= 0xFF;
5

6
  
7
  GLCD_CTRL_PORT &= ~(1<<GLCD_DI);
8
  GLCD_CTRL_PORT |=  (1<<GLCD_RW);
9
  
10
  _delay_us(1);
11

12
  do {
13
    GLCD_CTRL_PORT &= ~(1<<GLCD_ECLK);
14
    _delay_us(0.450);
15
    GLCD_CTRL_PORT |= (1<<GLCD_ECLK);
16
    _delay_us(0.450);
17
  } while((GLCD_DATA_PIN & 0x80)!=0);  // poll busy flag
18

19
  GLCD_CTRL_PORT &= ~((1<<GLCD_ECLK)|(1<<GLCD_RW));
20
  GLCD_DATA_DDR = 0xFF;
21
}
Funktionieren jetzt alle Displays und die Abfrage ist sogar ein Stück 
schneller.
#3422058
Lesenswert?

holger schrieb:
> Kannst du das   _delay_us(1); vor dem BusyCheck
> mal kürzer machen? Laut Datenblatt sollten 140ns reichen.

Ich hab's mal gerade ausprobiert: Ich kann es ganz weglassen. Nur 
momentan nicht mehr mit mehreren Displays testen, da der Apparat schon 
wieder zusammengebaut ist (das GLCD war nur ein "mal eben" von einem 
ATmega32 bei 16 Mhz auf ATmega644 bei 20MHz wechseln, weil ich mehr SRAM 
brauchte und dann, wenn schon alles gerade aufgeschraubt ist ein Display 
mit mehr Kontrast einbauen).

spess53 schrieb:
> Weil das vom Takt des Controllers abhängt. Im zulässigen Bereich dieses
> Taktes liegt die Busy-Zeit zwischen 2,5 und 60µs

Das heißt er ist zumindest bei jedem Befehl gleich? Nicht, daß ich 
motiviert wäre, beim Zeit vertrödeln besonders effizient zu sein, aber 
dann wären Refresh-Zeiten plötzlich deterministisch.
Gast #3422080
Lesenswert?

>Das heißt er ist zumindest bei jedem Befehl gleich?

Sieht nicht so aus.
Laut Datenblatt müsstest du aber nach einer fallenden Flanke
von E pollen können ohne E zu toggeln.

Geht das?
1
static void glcd_waitWhileBusy(void) {
2
  
3
  GLCD_DATA_DDR = 0x00;  
4
  GLCD_DATA_PORT= 0xFF;
5

6
  
7
  GLCD_CTRL_PORT &= ~(1<<GLCD_DI);
8
  GLCD_CTRL_PORT |=  (1<<GLCD_RW);
9
  
10
  _delay_us(0.14);
11
  GLCD_CTRL_PORT |= (1<<GLCD_ECLK);
12
  _delay_us(0.450);
13
  GLCD_CTRL_PORT &= ~(1<<GLCD_ECLK);
14
  _delay_us(0.450); // ist das nötig?
15

16
  do {
17
  } while((GLCD_DATA_PIN & 0x80)!=0);  // poll busy flag
18

19
  GLCD_CTRL_PORT &= ~(1<<GLCD_RW);
20
  GLCD_DATA_DDR = 0xFF;
21
}
#3422363
Lesenswert?

holger schrieb:
> Laut Datenblatt müsstest du aber nach einer fallenden Flanke
> von E pollen können ohne E zu toggeln

Stimmt. War auch mein erster Versuch. Hat nur nicht funktioniert. Mit 
Weitertakten funktioniert es.

spess53 schrieb:
> Die Busy-Zeit wird mit 1/fCLK <= T Busy <= 3/fCLK angegeben.

Ah, ich habe mich immer gefragt, wie dieses "Diagramm" zu lesen ist. 
Andersherum heißt das, daß ich bei einer Messung von fCLK das Warten 
sehr genau einstellen kann. Hmmm....mal sehen. Ein Controllerpin ist 
dazu noch frei.

CLK1 und CLK2 sind im S6B0108 Eingänge. Wer stellt den Takt bereit?
Gast #3422430
Lesenswert?

kurze Frage zum Thema:
>  _delay_us(0.450);

Als C-Hobbyprogrammierer stellt sich mir folgende Frage:

ich kenne _delay_us nur mit ganzen Zahlen (_delay_us(10);). Was passiert 
(im Listing), wenn man der _delay_us "0.450" übegibt? Sieht mir nach 
"float" aus? Dauert float nicht immer übelst lange? Am Ende länger, als 
die 0.45µs?
Danke
Klaus
Gast #3422476
Lesenswert?

Klaus auffa Arbeit schrieb:
> Dauert float nicht immer übelst lange?

Wenn denn mit float/double gerechnet würde, ja. Aber bei _delay_us 
muss man den Optimierer einschalten und die Takt-Frequenz kennen. Dann 
wird ein Aufruf mit Konstanten Wartezeiten in eine entsprechend lange 
Code-Sequenz "ausgerollt" (z.B. 437 * "NOP" o.ä.)

Sie die Doku zu der 
Funktion:http://nongnu.org/avr-libc/user-manual/group__util__delay.html

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren