Forum: Mikrocontroller und Digitale Elektronik TFT Display erzeugt falsches Farbmuster


von Andre R. (ryan87)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich versuche momentan ein QVGA Display (INT035TFT-TS) per STM32F4 
anzusteuern. Dazu verwende ich den FSMC. Lesen und Schreiben 
funktioniert auch schon wunderbar. Momentan verwende ich ein 8Bit 
Dateninterface zu dem Display. Für ein Pixel werden dazu 3 Bytes 
übertragen (RGB).

Mit den Farben scheint aber etwas nicht so ganz zu stimmen. Ich verwende 
folgenden Code für ein Test Pattern.
1
    for(uint16_t y = 0; y < 240; y++)
2
    {
3
      for(uint16_t x = 0; x < 320; x++)
4
      {
5
        if(y < 80)
6
        {
7
          rgb = x;
8
        }
9
        else if(y < 160)
10
        {
11
          rgb = x << 8;
12
        }
13
        else
14
        {
15
          rgb = x << 16;
16
        }
17
18
        *TFT_DATA_REG = (rgb & 0xFF);
19
        *TFT_DATA_REG = (rgb & 0xFF00) >> 8;
20
        *TFT_DATA_REG = (rgb & 0xFF0000) >> 16;
21
      }
22
    }

Nun sollten eigentlich drei Balken erscheinen (RGB) jeweils von dunkel 
nach hell.
Das tatsächliche Ergebnis gibt es im Anhang.

Scheint als ob bei Blau 1 Bit fehlt, bei Grün 3 und bei Rot 5 Bit 
(jeweils MSBs).

Hat jemand ne Ahnung was da los ist? Bin ein wenig ratlos in welche 
Richtung ich suchen muss.

Der Display Controller ist ein SSD1963.

Grüße
Andre

von Kai S. (kai1986)


Lesenswert?

Hallo,

x ist bei dir eine 16 Bit Variable, die bis 320 läuft, der Farbewert 
aber nur bis 256 gehen darf. Damit hast du eine Überlauf in den 8 Bit 
für die einzelne Farbe.

Gruß Kai

von Andre R. (ryan87)


Lesenswert?

Das stimmt zwar, aber dann sollte das Muster im letzten fünftel nur 
nochmal von vorne beginnen. Das erklärt nicht warum die einzelnen Farben 
unterschiedliche Muster generieren.

von g457 (Gast)


Lesenswert?

Hast Du die Datenpins vertauscht? Das Display (bzw. der Controller) 
nimmt nur 6 Bits entgegen im 8-Bit-Modus und schneidet dabei die LSBs 
ab. Würde zumindest zu Blau passen (5 Überläufe statt einem auf 320 
Spalten). Die "Differenzen" bei Grün und Rot (3 bzw 5) sind auch Sprünge 
von 2.. Bleibt noch der Offset von 1, der versteckt sich womöglch in 
Zeile 42..

HTH

von Andre R. (ryan87)


Lesenswert?

Danke für den Hinweis g457, es ging schonmal in die richtige Richtung.
Der SSD1963 war mit einem 24Bit Interface zum Display-Treiber 
konfiguriert, tatsächlich besteht das Interface aber nur aus 18Bits. So 
fehlten bei jeder Farbe immer 2 Bit mehr, und durch die Verschiebung der 
Bits kamen dann die unterschiedlichen Balken zustande. Dank Murphy stand 
das natürlich auch in keine Doku zu dem Display.

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.