Guten Abend, seit einigen Tagen ärgere ich mich mit einem Display herum, auf dem sich einzelne Pixel nicht recht darstellen lassen wollen. Aber beginnen wir von vorn: Display 24TQV058D, 320x240, SPI Ansteuerung Controller: GC9306 Der GC9306 (GalaxyCore Inc.) scheint mir ein Klon des ILI9341 zu sein; jedenfalls sieht das Datenblatt exakt aus wie vom ILI abgeschrieben. Bildschirm löschen: funktioniert. Horizontale Linie: funktioniert. Vertikale Linie: funktioniert. Schräge Linie: funktioniert nicht! Es wird nur das letzte Pixel der Linie gesetzt. Einzelnes Pixel setzen funktioniert. Aber sobald ich ein zweites Pixel setzen will, wird nur das letzte Pixel gezeichnet und das auch noch mit invertierter Farbe!! Ein ganz seltsames Verhalten. Habe alles mögliche ausprobiert. Habe das SPI-Timing x-Mal nachgemessen, habe das Timing drastisch verlangsamt, habe verschiedene Initialisierungen (die hier in diversen Bibliotheken existieren) getestet- keine Änderung. Ist dieses Verhalten jemand bekannt, kann jemand sachdienliche Hinweise geben? Bin auf dem Gebiet kein Neuling, habe div. TFT einfach zum Laufen bekommen; per SPI, parallel und auch RGB, kein Problem. Danke schonmal, Axel F.
Gast
#6588371
Bei der Informationsfülle läßt sich gut raten... - SPI: 4-line oder 3-line - Welches Display - Welcher Rechner/welche CPU/MCU - Wo ist der Code Ohne mehr Infos wird das nur Kaffeesatzleserei. Der Fehler liegt höchstwahrscheinlich in der Software.
Hallo Planloser, danke, dass Du mir helfen willst! -Scchnittstelle ist nicht SPI wie irrtümlich angegeben, sondern 8Bit parallel. Die sog. 8080-I Schnittstelle lt. Datenblatt. - Display ist ein 24TQV058D, stand so aber auch in meinem Post ;-) Darüber läßt sich kaum etwas im Netz finden, aber die Kollegin aus China war so freundlich, mir ein Datenblatt zu schicken. Meiner Meinung kaum die Elektronen wert, aber ich werde es anhängen. - µController ist ein ATSAM4SD16C, also ein Cortex M4. Der relevante Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | |
204 | |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 | |
212 | |
213 | |
214 | |
215 | |
216 | |
217 | |
218 | |
219 | |
220 | |
221 | |
222 | |
223 | |
224 | |
225 | |
226 | |
227 | |
228 | |
229 | |
230 | |
Die Low-Level Routinen haben einige Füll-Befehle, um die Zugriffe einfach mal zu verlangsamen. Aber auch ohne diese Füller werden die Timings eingehalten! Tests, die ich u.a. durchgeführt habe: - Nur Befehl 1: 1 Pixel Orange auf Pos. (20, 25). - Nur Befehl 2: hor. Linie ab (5, 35) , 120 Px lang in Orange. - Befehl 1+2: hor. Linie ab (5, 35) , 120 Px lang in Grün(!), kein weiteres Pixel. - Befehle 1-5: hor. Linie ab (5, 35) , 120 Px lang; dazu 1 Pixel bei (20, 65) beides in Grün. Das Zeichnen auf diesen kleinen Displays geht ja immer nach dem gleichen Prinzip: Fensterbereich setzen, mit Pixel(n) füllen, fertig. Bei einem anderen Display (das mit SPI) ging das ohne Probleme. Selbst Schrift und Bitmaps kein Problem. Aber hier... Meine Hoffnung war, daß jemand schon mal dasselbe Problem hatte.
Gast
#6589361
vielleicht ist die Größe 0 für einen Pixel zu klein? Hier wird für den Pixel x1=x2 und y1=y2 gesetzt, in anderen Libs habe ich sowas: setAddrWindow(x,y,x+1,y+1);
Ja, exakt das Gleiche habe ich mir auch schon überlegt und ausprobiert- selbiger Effekt. Ich hatte auch das Fenster auf (x,y,x+10,y+10), sollte ja nichts schaden, auch wenn nur ein Pixel gezeichnet wird. Bringt nichts. Weiterer Versuch von mir: drawHLine mit Länge 1: nichts wird gezeichnet, drawHLine mit Länge 2: 1 Pixel wird gezeichnet.
Gast
#6589464
ohne alles gelesen zu haben, kann das Display überhaupt 3*8 Bit Farbtiefe? Und ist es dafür initialisiert? Ich habe ein ILI9341 und das wird mit 16 Bit, RGB565, betrieben. Edit: Lt. DB kann der ILI bis 18 Bit Farbtiefe.
Bei mir im init: writeCommand_GC9306(PIXEL_FMT); writeData_GC9306(0x06); // 18 Bits per Pixel Dann wird per Farbe 1 Byte gesendet, wovon der GC9306 die oberen 6 Bit verwendet.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.