Hallo zusammen
Ich habe hier ein 3.2Zoll TFT mit SSD1289 Controller.
Inzwischen habe ich diverse Initialisierungen im Internet gefunden uns
ausprobiert.
Leider scheint irgendwo der Fehler zu sein.
Denn ich kann nie den Gesamten Displaybereich beschreiben.
Anbei ein Foto!
Hat jemand eine Idee, woran dies liegen könnte oder hatte jemand
schonmal das selbe Problem?
Das Display wird mit 3.3V versorgt und hängt an einem STM32
Der Display Port ist 1:1 mit PortC verbunden.
Die Steuerleitungen sind anderweitig verteilt.
Mein Code ist ebenfalls im Anhang...
Hier noch jener Code-Teil mit welchem ich die Farben ausgebe:
1
LCD_ResetDevice();
2
3
LCD_SetCursor(0,0);
4
LCD_WriteCommand(0x22);
5
while(1)
6
{
7
LCD_WriteData(0xE534);
8
}
Mir ist bewusst, dass man normalerweise nach 240*320 Pixel stoppt.
Aber wenn nichtmal der gesammte bereich mit "while(1)" beschrieben wird,
dann stimmt ja was nicht.
Das ganze Display hat entweder mehrere Chipselects, oder mehrere
Adressen. Ich tippe auf letzteres. Steht im Datenblatt. Also nicht
einfach planlos initialisierungen runterladen, sondern Datenblatt
studieren. Das ganze Datenblatt vom Hersteller, nicht das abgespeckte
von einem Trittbrettfahrer.
zB mehrere
LCD_SetCursor();
und/oder mehrere
LCD_WriteCommand();
Ich habe jetzt die Verdrahtung 2 mal geprüft, ausgeläutet und optisch
kontrolliert.
Es stimmt alles!
Ich habe den Code von hier getestet:
http://forum.arduino.cc/index.php?topic=183302.0
Ich habe das exakt identische Display!
Doch es funktioniert einfach nicht korrekt.
Wenn ich die Orientation ändere, dann wird der fehlende Balken
beschrieben
dafür halt jener gegenüber nicht.
Hallo,
mein Display läuft schon eine Weile, von daher kenne ich inzwischen
nicht mehr jedes Register - anbei mal mein Init, sollte aber soweit ich
sehe auch mit deinem gehen.
1
.dw 0x00 , 0x0001 ;Start Oscillation
2
.dw 0x03 , 0x6664 ;A8A4 ;Power Contol
3
.dw 0x0c , 0x0000
4
.dw 0x0d , 0x080C
5
.dw 0x0e , 0x2B00
6
.dw 0x1e , 0x00B0
7
.dw 0x01 , 0x2B3F ;Driver output Control 2b3f
8
.dw 0x02 , 0x0600
9
.dw 0x10 , 0x0000
10
.dw 0x11 , 0x6050 ;Entry Mode 6050
11
.dw 0x05 , 0x0000 ;Compare register
12
.dw 0x06 , 0x0001
13
.dw 0x16 , 0xEF1C ;Horizontal Porch
14
.dw 0x17 , 0x0003 ;Vertical Porch
15
.dw 0x07 , 0x0233 ;Display Control
16
.dw 0x0b , 0x0000 ;Frame cycle control 5312
17
.dw 0x0f , 0x0000 ;Gate Scan Position
18
.dw 0x41 , 0x0000 ;Vertical scroll
19
.dw 0x42 , 0x0000
20
.dw 0x48 , 0x0000 ;Start Position screen driving
21
.dw 0x49 , 0x013F ;End Position 319
22
.dw 0x4a , 0x0000
23
.dw 0x4b , 0x0000
24
.dw 0x44 , 0xEF00 ;Source Ramm adresse 239 to 0
25
.dw 0x45 , 0x0000 ;Vertical Start
26
.dw 0x46 , 0x013F ;Vertical end
27
.dw 0x30 , 0x0707 ;Gamma contol
28
.dw 0x31 , 0x0204
29
.dw 0x32 , 0x0204
30
.dw 0x33 , 0x0502
31
.dw 0x34 , 0x0507
32
.dw 0x35 , 0x0204
33
.dw 0x36 , 0x0204
34
.dw 0x37 , 0x0502
35
.dw 0x3a , 0x0302
36
.dw 0x3b , 0x0302
37
.dw 0x23 , 0x0000
38
.dw 0x24 , 0x0000
39
.dw 0x25 , 0x8000
40
.dw 0x4f , 0x0000
41
.dw 0x4e , 0x0000
Zum Füllen mal noch angemerkt - das Display lässt auch eine Einstellung
des "Arbeitsbereichs" zu (0x44 & 0x46), so das Ausgaben in das
Displayram auch nur auf den Bereich Auswirkung haben. (0xef00 & 0x013f)
selektieren aber den kompletten Bereich.
Sascha
Lothar Miller schrieb:> Holger Krähenbühl schrieb:>> Anbei ein Foto!> Was sieht man darauf und was sollte man stattdessen sehen?
Es sollte alles weiss sein.
Man sieht oben den nicht beschrieben Balken...
Weshalb dieser nicht beschrieben wird ist das Rätsel...
Sascha Weber schrieb:> mein Display läuft schon eine Weile, von daher kenne ich inzwischen> nicht mehr jedes Register - anbei mal mein Init,
Vielen Dank!
Habe ich mal übernommen. Leider das selbe ergebnis!
Nun ist einfach die Füllrichtung anderst. Aber der fehlende Balken
bleibt.
Wie füllst du dein Display?
Holger Krähenbühl schrieb:> Mir ist bewusst, dass man normalerweise nach 240*320 Pixel stoppt.
Und was passiert, wenn du, sagen wir mal nach einem viertel der Pixel
stoppst? Oder nach der Hälfte?
Lothar Miller schrieb:> Und was passiert, wenn du, sagen wir mal nach einem viertel der Pixel> stoppst? Oder nach der Hälfte?
Sehr merkwürdig...
Hier mein Code zum Bild:
Meiner Meinung nach, müsste auf dem Display 500Pixel erscheinen.
Zuerst in Weiss, dann dieselbe Fläche in schwarz.
Beim Durchsteppen fiel mir auf, dass ich zweimal
1
LCD_Write_Data(0xFFFF);
senden muss, damit ein Pixel eingefärbt wird.
Zudem beginnt das Pixel bei der linken äussersten Spalte und wechselt
dann
auf die rechte Spalte und füllt dann von rechts nach links auf.
Im Anhang ein Bild!
Die Initialisierung entspricht nun jener von Sascha welche hier zuvor
gepostet wurde!
Holger Krähenbühl schrieb:> Wie füllst du dein Display?
320*240 (76800) mal den Farbwert ausgeben
zeig mal den Code deiner LCD_Write_Data
wie schnell läuft dein Controller?
Sascha
Sascha Weber schrieb:> Holger Krähenbühl schrieb:>> Wie füllst du dein Display?> 320*240 (76800) mal den Farbwert ausgeben>> zeig mal den Code deiner LCD_Write_Data>> wie schnell läuft dein Controller?>> Sascha
Hallo Sascha
Leider habe ich den Code nicht mehr zur Hand.
Werde deisen morgen früh hier posten...
Danke für eure Unterstützung!
Problem gelöst!!!
Sehr sehr ärgerlich!
Mein Board war falsch beschriftet...
Ich habe sehr wohl DB13 mit PC13 verbunden.
Die Verbindung konnte ich auch ausläuten...
Nur war der mit PC13 angeschriebene Pin nicht PC13 sondern VBAT.
PC13 war nebendran.
Nun läuft das ganze wie gewünscht!!!
Vielen Dank :)