Hi Leute,
ich arbeite nun seit ca 1 Woche an einem Display von Powertip aber komme
einfach net weiter.
Bezeichnung: PG240128A
Ich schaffe es nicht etwas auf dem Display anzuzeigen. Ich habe auch
keine weiteren Datenblätter, nur das von Toshiba zum T6963C und das von
Powertip (nur eine Seite).
Ich habe alle hier veröffentlichen Source Codes getestet und alle
Threats zu diesem Theam durchgelesen, leider ohne Erfolg. In einer Woche
hat man halt viel Zeit ;)
Ich fang mal von vorne an, ich sehe wenn ich den Reset auslöse einen
schwarzen waagerechten Balken, welcher sporadisch seine Position
wechselt bei jedem auslösen. Und das wars auch schon, sobald ich den
reset wieder weg nehme kommt nichts mehr ... Alle Signale kommen beim
GLCD an und er antwortet anscheind auch mit dem Statusbyte ... zumindest
empfange ich dieses. Meine Initroutine läuft auch ohne Probleme durch
... wenn ich versuch einzelne Pixel zu schreiben oder Buchstaben,
funktioniert nichts ... der Display bleibt immer leer.
Meine Taktfrequenz ist 175kHz ... und ich habe zusätzlich noch eine
menge nop s eingefügt ... weil ich erst an ein problem mit dem timing
dachte.
Der Diplay besitzt unteranderem auch noch einen weiteren Pin, der hier
im Forum nie erwähnt wurde. MD2 ... habe damit auch schon rumgespielt,
ohne Erfolg, im Datenblatt (wenn man das ding von Powertip so nennen
darf) steht da nur "select number of columbs" ... laut T6963C kann man
mit MD2,3 die Anzahl der Spalten festlegen. Jedoch geht MD2 nicht an den
T6963C MD2 Pin ... aber eigentlich denke ich ist der Pin auch egal, der
Display müsste trotzdem was anzeigen, wenn auch verschoben oder schief
oder unlesbares zeug. aber meiner bleibt immer leer :(
Der Code ist von einem User, der auch Renesas nutzt ... vom Prinzip aber
nicht anders als die Atmel.
1
2
voidlcd_init(void)
3
{
4
unsignedintt;
5
6
pd1=0xf8;// Port 1 als Ausgang
7
pd2=0x00;// Port 2 als Eingang
8
// pur1 = 0xff; // Pull-Up's an
9
// pur2 = 0xff; // Pull-Up's an
10
pu00=1;
11
pu01=1;
12
pu04=1;
13
pu05=1;
14
15
p1=0xf8;// Port Pin's P1 auf High
16
LCD_RESET=0;// Display Reset
17
for(t=0;t<2000;t++);
18
LCD_RESET=1;// Display Reset fertig
19
20
LCD_DATA=0x00;// Text Home Adress setzen
21
lcd_send_data();// Auf 0000H setzen
22
LCD_DATA=0x00;
23
lcd_send_data();
24
LCD_CMD=0x40;
25
lcd_send_cmd();
26
27
LCD_DATA=0x28;// Text AREA Adress setzen
28
lcd_send_data();// 28H = 40 Zeichen 1EH = 30
29
LCD_DATA=0x00;
30
lcd_send_data();
31
LCD_CMD=0x41;
32
lcd_send_cmd();
33
34
LCD_DATA=0x00;// Grafik Home Adress setzen
35
lcd_send_data();// Auf 0200H setzen
36
LCD_DATA=0x02;
37
lcd_send_data();
38
LCD_CMD=0x42;
39
lcd_send_cmd();
40
41
LCD_DATA=0x28;// Grafik AREA Adress setzen
42
lcd_send_data();// 28H = 40 Zeichen 1EH = 30
43
LCD_DATA=0x00;
44
lcd_send_data();
45
LCD_CMD=0x43;
46
lcd_send_cmd();
47
48
LCD_DATA=0x02;// Offset Pointer setzen
49
lcd_send_data();
50
LCD_DATA=0x00;
51
lcd_send_data();
52
LCD_CMD=0x22;
53
lcd_send_cmd();
54
55
LCD_CMD=0x80;// OR-Mode
56
lcd_send_cmd();
57
58
LCD_DATA=0x01;// Cursor Pointer setzen
59
lcd_send_data();
60
LCD_DATA=0x01;
61
lcd_send_data();
62
LCD_CMD=0x21;
63
lcd_send_cmd();
64
65
LCD_CMD=0x9F;// Text an Grafik an cursor an blinken an
66
lcd_send_cmd();
67
68
LCD_CMD=0xA7;// Cursor Pattern 8Line
69
lcd_send_cmd();
70
71
LCD_DATA=0x00;// Adress Pointer setzen
72
lcd_send_data();// 0000H
73
LCD_DATA=0x00;
74
lcd_send_data();
75
LCD_CMD=0x24;
76
lcd_send_cmd();
77
78
lcd_clear_ram();// zum Schluß noch das Ram des
79
}// Display's löschen
80
81
voidlcd_status(void)
82
{
83
pd2=0x00;// Port 2 als Eingang
84
LCD_CD=1;// Commando High
85
LCD_RD=0;// Read Low
86
LCD_CE=0;// Chip Enable Low
87
asm("NOP");
88
asm("NOP");
89
asm("NOP");
90
asm("NOP");
91
asm("NOP");
92
asm("NOP");
93
asm("NOP");
94
asm("NOP");
95
asm("NOP");
96
LCD_STATUS=LCD_PORT;// Status lesen
97
LCD_CE=1;// Chip Enable High
98
LCD_RD=1;// Read High
99
LCD_STATUS&=(0x03);// Bits ausmaskieren
100
}
101
102
voidlcd_status_am(void)
103
{
104
pd2=0x00;// Port 2 als Eingang
105
LCD_CD=1;// Commando High
106
LCD_RD=0;// Read Low
107
LCD_CE=0;// Chip Enable Low
108
asm("NOP");
109
asm("NOP");
110
asm("NOP");
111
asm("NOP");
112
asm("NOP");
113
asm("NOP");
114
asm("NOP");
115
asm("NOP");
116
asm("NOP");
117
LCD_STATUS=LCD_PORT;// Status lesen
118
LCD_CE=1;// Chip Enable High
119
LCD_RD=1;// Read High
120
LCD_STATUS&=(0x08);// Bits ausmaskieren
121
}
122
123
voidlcd_send_cmd(void)// Commando an Display senden
124
{
125
do
126
{
127
lcd_status();
128
}
129
while(LCD_STATUS!=0x03);
130
pd2=0xff;// Port 2 als Ausgang
131
asm("NOP");
132
asm("NOP");
133
asm("NOP");
134
asm("NOP");
135
LCD_PORT=LCD_CMD;
136
LCD_CD=1;// Commando High
137
LCD_WR=0;// Write Low
138
LCD_CE=0;// Chip Enable Low
139
asm("NOP");
140
asm("NOP");
141
asm("NOP");
142
asm("NOP");
143
asm("NOP");
144
asm("NOP");
145
asm("NOP");
146
asm("NOP");
147
asm("NOP");
148
LCD_CE=1;// Chip Enable High
149
LCD_WR=1;// Write High
150
}
151
152
voidlcd_send_data(void)// Daten an Display senden
153
{
154
do
155
{
156
lcd_status();
157
}
158
while(LCD_STATUS!=0x03);
159
pd2=0xff;// Port 2 als Ausgang
160
LCD_PORT=LCD_DATA;
161
LCD_CD=0;// Daten Low
162
LCD_WR=0;// Write Low
163
LCD_CE=0;// Chip Enable Low
164
asm("NOP");
165
asm("NOP");
166
asm("NOP");
167
asm("NOP");
168
asm("NOP");
169
asm("NOP");
170
asm("NOP");
171
asm("NOP");
172
asm("NOP");
173
LCD_CE=1;// Chip Enable High
174
LCD_WR=1;// Write High
175
}
176
177
voidlcd_send_data_am(void)// Daten an Display senden
Hallo,
so auf die Schnelle sieht es eigentlich ok aus.
MD2 ist mir bei meinen T6963C-Displays mehrere anderer Hersteller noch
nicht begegnet.
Auf die Kontrasteinstellung reagiert es?
Scheint ja Vee selbst zu erzeugen und an 17 auszugeben.
Also hast Du vermutlich ja nur Einstellregler von Vee nach GND und
Schleifer an V0?
Gruß aus Berlin
Michael
Kontrast funktioniert, das kann ich zumindest wenn ich Reset auslöse
testen udn auch verstellen :)
negativ Spannung erzeugt er selber ... und gibt er wie du schon sagtest
noch zusätzlich nach draußen ...
Hat den sonst keiner eine Idee, was mein fehler sein könnte, oder hat
jemand diesen GLCD schonmal benutzt?
Ich weiß ... T6963C ist ein leidiges Thema ... aber ich würde mich
trotzdem über ein paar Infos freuen ... falls es ncoh weiter hilft, ich
habe mal die Statusbytes gespeichert und folgende Bytes bei der
Initialiesierung empfangen:
0x2B
0xA3
0x0B
0x23
da ich immer nur auf die ersten beiden Bits prüfe springt meine
Warteschleife weiter ... nur frage ich mich was ide anderen Bits
bedeuten. Im Datenblatt steht ja leider nicht viel da drüber ... z.B.:
ist bei mir oft STA5 gesetzt und STA3 ...
aber was bedeutet STA5? - Check controller operation capability enable -
ich kann es zwar übersetzen ins Deutsche verstehe aber den Hintergrund
nicht.
Das selbe für STA3? - Check auto mode data write capability enable - ich
habe ja Automode garnicht eingeschaltet (erst am Ende der Init, fürs
löschen des Speichers)
Ich hoffe ihr könnt mir ein wenig weiterhelfen, das Geheimis zu lüften
:)
Hallo,
ich weiß zwar nicht, ob er Dir viel weiter hilft, unter
Beitrag "LCD mit T6963C in ASM"
liegt ein AVR-Assemblercode für den T6963C.
Vielleicht kannst Du da ja etwas vergleichen.
Timing ist recht unkritisch, das Dung geht bei 8MHz auch im
MemoryMapped-Mode bei mir ohne Probleme.
Ich hab gerade nochmal ins Datenblatt geschaut, in freier Übersetzung
die Bedeutung:
STA0 = 1 bereit um Kommandos zu empfangen
STA1 = 1 bereit um Daten zu schreiben/lesen
STA2 = 1 bereit um Daten im Automode zu lesen
STA3 = 1 bereit um Daten im Automode zu lesen
STA0 und STA1 werden normalerweise vom T6963C wohl immer gleichzeitig
gesetzt,
Bei STA3 und STA4 darf nur das Bit ausgewertet werden, daß zum
bestellten Automode passt, also nur Lesen oder Schreiben
STA5 sollte eigentlich immer 1 sein, wenn das Teil initialisiert hat,
habe ich wohl nie ausgewertet,
genauso STA6 und STA von mit nicht benutzt.
Deine Statusworte sind ja nicht so unsinnig, immer Ready für normales
Schreiben und Lesen, beim ersten auch Auto-Write gesetzt.
Das Problem ist, daß die Gültigkeit vom Kommandozustand abhängt, ob also
STA0 und STA1 oder STA3 oder STA4 der richtige Zustand ist.
Die jeweils anderen Bits können dann sein, wie sie wollen.
Also normales Schreiben/Lesen -> nur STA01 und STA1, der Zustand von
STA3 und STA4 ist undefiniert usw.
Gruß aus Berlin
Michael
Hallo,
hast Du mal in meinen ASM-Source aus dem Link geschaut, so zum
Vergleich?
Muß doch zum Spielen zu bekommen sein, das Teil...
Ich habe so eine Sammlung diverser Ausbau-Displays mit fast allen
Controllern, die so üblich waren. Bisher hat sich noch jedes gemeldet,
wenn auch oft nicht auf Anhieb. ;)
Gruß aus Berlin
Michael
Sorry, dass ich mich erst heute melde ...
nach der ganzen Erfolgslosigkeit habe ich mich zwischendurch noch
anderen Themen gewidmet ... diese sind nun aber Erfolgreich beendet ...
und ich habe wieder das dumme Display auf dem Tisch liegen.
Den ASM Code habe ich mir bereits vor längerer Zeit angeschaut, ist auch
gleich aufgebaut wie all die anderen ...
Ich habe nach einigen Tests noch herausgefunden, dass ich beim auslesen
des Statusbytes STA0 und STA1 gesetzt sind (so wie es ja auch sein
sollte) und STA7 in einem 1Hz Takt (500ms High, 500ms Low) blinkt.
Natürlich nur, wenn ich die Statusbyteauslesung anhalte mit einem
Breakpoint.
Ich bin mir nicht 100% sicher ob dies so sein sollte?! Kann es
vielleicht auch sein, das ich die Homeaddresses für den Grafik und
Textbereich falsch setze? Oder ist dies egal? Im Datenblatt steht nur,
dass man einen Bereich angeben muss, aber nicht welcher.
Was ist das einfachste zum darstellen/testen?
ich mache derzeit folgendes:
Init:
Grafikhomeadresse setzen (0x0400)
Grafikarea setzen (0x1E = 30)
Texthomeadresse setzen (0x0000)
Textarea setzen (0x1E = 30)
Mode setzen (0x81 = XOR Mode / internal CGRAM)
Display Mode setzen (0x9F = Text und Grafik an, Cursor und blinken an)
Cursorpattern (0xA7 = 8 Lines)
Adresspointer setzen (0x0000)
Cursorpointer setzen (0x0000)
Write:
lcd_set_data(0x23); (sollte C sein, laut Datenblatt))
lcd_set_command(0xC0); (Data Write and increment ATP)
Das sollte doch nun eigentlich einen Buchstaben anzeigen lassen oder?
Ich hoffe mir kann da einer Helfen ... ich verzweifel langsam aber
sicher. Den Cursorpointer habe ich zum testen bereits in einer
Endlosschleife an alle Positionen gesetzt die es angeblich gibt und
immer danach einmal versucht das C auszugeben ... aber natürlich ist
nichts passiert ... wie immer bleibt mein Display durchgehend leer.
Hallo,
ich müßte jetzt bei mir selbst nachschauen gehen... ;)
Sieht aber passend aus.
Das Ding sollte doch nach Text+Grafik on eigentlich Pixelmüll anzeigen,
ich meine, der Display-Ram wurde nicht automatisch gelöscht.
STA7 war wohl Blinkstatus, daß dürfte bei Deiner Init dann ja stimmen.
Irgendwie habe ich das Gefühl, daß Deine Kontrasteinstellung nicht
stimmt...
Gruß aus Berlin
Michael
Ja das stimmt ... ich lösche das Ram nicht.
Aber Anzeigen tut er auch nicht, wenn ich das Display Mode cmd schicke.
Kontrast war ja auch am Anfang meine erste Vermutung, deswegen habe ich
ein 5k Poti angeschloßen, mit dem ich zwischne GND und 5V an V0 regeln
kann. Wenn ich den Reset auslöse habe ich ja meinen schönen Balken,
welcher sich dann auch vom Kontrast her mit diesem Poti regeln lässt.
Dies schließt wohl den kontrast aus. Was hast du den da angeschloßen?
Mir ist gerade noch eine Idee gekommen, man kann ja auch ein Byte
auslesen aus dme RAM ... vielleicht lese ich einfach mal ein paar Bytes
aus und schaue, was da drin steht ... vllt ist der RAM ja defekt.
Leider kann ich dies erst am Dienstag machen, weil ich morgen Prüfung
habe und die restlichen Tag sind ja Feiertage, also komme ich da net in
die Firma.
MFG
Hallo,
Moment mal... Poti zwischen GND und 5V?
Der will -5...-15V je nach Displaygröße, Poti 20k oder 50k zwischen Vee
oder wie der Ausgang heißt und Schleifer an VO.
Gruß aus Berlin
Michael
Hi
Wo Martin es so sagt: Das Poti muss zwischen Pin17 und Masse. Schleifer
an Kontrasteingang. Die Streifen beim Einschalten sind nicht als Zeichen
für funktionierende Kontrasteinstellung zu werten. Bei funktionierender
Kontrastreglung muss das Display komplett 'abgedunkelt' werden können.
MfG Spess
Hallo,
>Den Cursorpointer habe ich zum testen bereits in einer>Endlosschleife an alle Positionen gesetzt die es angeblich gibt und>immer danach einmal versucht das C auszugeben ... aber natürlich ist>nichts passiert ... wie immer bleibt mein Display durchgehend leer.
Das ist völlig normal, denn du musst den Adresspointer setzen. Der
Cursorpointer gibt nur an, wo sich der angezeigte Cursor befinden soll.
Setze mal den Curser auf x=0 und y=0. Lasse den ganzen
Statusabfrage-Mist weg und schalte nur Cursor und Text ein. Lasse auch
die Grafik weg und nutze den internen CGRAM.
Hallo,
nun warten wir mal ab, bis der arme Oliver F. die Kontrastspannung
umgelötet hat und mit Schrecken feststellt, daß alle seine
Programmvarianten schon lange gespielt haben und er es nur nicht sah...
PS: ich wünsche Dir Erfolg und nimm es nicht zu tragisch, wenn das die
Ursache ist.
Gruß aus Berlin
Michael
Na das wäre ja was ...
zum Glück bezahlt man mich nicht nach Erfolg ;)
So etwas könnte ja auch mal im Datenblatt stehen ^^ In einem anderen
Datenblatt habe ich diese 5 Volt sache gefunden, was ich auch von den
Textdisplays immer so kannte ... Ich werde es schnellstmöglich testen
...
Irgendwie hoffe ich, dass es aber nicht der Grund ist, weil es zu
stupide wäre ... und dann müsste ich meinem Chef erklären, wie ich es
geschaft habe mich 2 wochen an diesem dummen Fehler aufzuhalten ;)
Werde euch dann alles berichten.
MFG
Hallo,
naja, zum Thema Datenblatt: ich habe im Netz nur ein einseitiges
Datenblatt gefunden. Wenn man keine Erfahrung mit LCD-Displays hat, ist
das immer schwer zu lesen.
Die Betriebsspannung der LCD-Treiber bezieht sich immer* auf Vdd, also
die +5V. Auf diesen Punkt bezogen ist sie immer* negativ. Bei den
üblichen Textdisplays normalerweise -3...-4,5V, Da stimmt dann ein Poti
zwischen +5V (Bezuhspunkt für Vee) und GND. Eingestellt wird damit dann
-3...-4,5V oder gegen GND +0,5...2V.
Bei Displays für erweiterten Temperaturbereich sind bei Textdisplays
-5...-8V üblich, also gegen GND -3...-5V.
Bei den Grafikdisplays ist diese Spannung generell* höher, meist so ab
-7V...-20V.
Sind dann gegen GND -2...-15V.
Bei Deinem sagt das Datenblatt bei LCD operating voltage normal typisch
12,3V, da fehlz dann schon Bezuhspunkt und das Minuszeichen...
Gemeint sind -12,3V gegen Vdd, also -7,3V gegen GND.
Erweiterter Temperaturbereich sagt typisch 18,1V, gemeint -18,1V gegen
Vdd, also -13,1V gegen GND.
Das Display erzeugt maximal 22V gegen Vdd, fehlt wieder das Minus, also
-22V gegen Vdd oder -17V gegen GND, die kommen an Pin 17 raus, mit Vee
bezeichnet. Eigentlich auch falsch, Vee ist üblicherweise der
LCD-Betriebsspannungseingang. Das ist aber Pin3, hier mit Vo bezeichnet
und mit Contrast Adjust beschriftet.
Die Kontrastreglnung ist eigentlich der Nebeneffekt, der Kontrast hängt
einfach von der Höhe der LCD-betriebsspannung ab...
* Ausnahmen bestätigen die Regel, bei den üblichen Txt/Grafikdisplays
paßt das aber so zu 99%.
Alle Unklarheiten beseitigt? ;-)
Gruß aus Berlin
Michael
Hi
Powertip neigt bei seinen Datenblättern stark zum Minimalismus. Andere
Hersteller sind da etwas freigiebiger. Eine ganze Reihe von
Grafikdisplays verschiedener Hersteller besitzen bei gleicher Grösse
eine identische Anschlussbelegung (siehe Anhang). Da lohnt es sich schon
mal über den Zaun zu schauen. Das Datenblatt des verwendeten
Displaycontrollers ist natürlich auch immer hilfreich.
Nur fürs nächste mal.
MfG Spess
Hallo,
ich gehe sogar noch weiter. Ich habe hier etliche Ausbau-Displays, die
keine Sau mehr kennen will. ;)
Controllerdatenblatt ist sowieso Pflicht, die sind da ja meist zu
finden.
T6963C, HD61830 sind am meisten vertreten. Die Hersteller benutzen
eigentlich immer die gleichen Pin-Belegungen, wenn der gleiche
Controller drauf ist.
Betriebsspannung und Daten/Steuerleitungen sind schnell zu den
Cotrollerpins ausgeprüft, Vee kann man eigentlich gut an der Größe
abschätzen, bis -5V bei Textdisplays hat auch nie geschadet, Vee ist
meist nax. 10-12V, auch bei Normal-Displays. Bei Grafikdisplays meist
max. 15-20V, mit -10V bei 128x128 und -15V bei 240x128 ist auch kaum ein
Risiko. Notfalls kann man ja noch die Datenblätter der Treiber bemühen.
Das hilft aber offenbar vielen nicht weiter, denen die Erfahrung fehlt.
Normalerweise melden sich solche Displays bei mir in spätestens einer
halben Stunde. Ich habe noch nie erlebt, daß eine Ansteuerung 100% nach
Controllerdatenblatt unter Beachtung der Timingdiagramme nicht ging.
Mein erstes T6963C wollte mit schnell gesuchten Sourcen auch nicht
reden,
letztlich habe ich dann schnell die kommetierte Z80-Source aus dem
Datenblatt genommen, 1:1 auf den AVR getragen und lief sofort.
Naja, gut daß ich Z80 noch nicht ganz vergessen habe. ;-)
Gruß aus Berlin
Michael
Hi
>letztlich habe ich dann schnell die kommetierte Z80-Source...
kommt mir sehr bekannt vor.
Allerdings gibt es auch eine Reihe von Exoten. Ich habe noch ein 240x128
mit Touchscreen und T6963 von ALPS zu liegen. Da stimmt gar nichts.
Selbst die Anschlüsse sind im metrischen 2,5mm Raster!!!
MfG Spess
Hi Leute,
ich habe gerade alles umgelötet ... mit Hilfe eines 25kOhm funktionierte
es nicht, aber nachdem ich einmal die Schaltung im Datenblatt von
Michael getestet habe (4,7kOhm und 5kOhm Poti) hat es funktioniert. Ich
teste mich gerade langsam durch, aber bisher scheint alles gut zu
funktionieren.
Ich Danke euch für eure Tips ... auf jedenfall bin ich jetzt wesentlich
schlauer für das nächste mal, wenn mir so ein Ding wieder über den Weg
läuft.
Wenn man alles schon ausprobiert hat und gar nicht weiter weiß, hier
noch eine Anregung: Man kann im Sekundentakt das Display löschen (00)
und füllen (FF).
Damit bin ich schon Problemen mit dem Kontrast auf die Spur gekommen,
weil man so doch eine kleine Veränderung im Display gesehen hat
(Ablesewinkel verändern).
Rick