Forum: Mikrocontroller und Digitale Elektronik Display Module CFAF320240F-TS Ansteuerung --- ATMEGA 128 ---- STK600


von Roger P. (presi007)



Lesenswert?

Hallo an alle,

ich bin dabei ein LCD Module (CFAF320240) mit dem Atmega 128 und STK600 
anzusteuern.Mein Display tut nichts wenn ich das test program laufe 
lasse.
Was mache ich falsch ?
Bitte um Hilfe !

Danke im voraus




#include<avr/io.h>
#include <util/delay.h>

// control line pins
#define  LCD_CD  PC7   //  Command (DC for Parallel Interface)
#define  LCD_WR  PC6   //  RW (read an write cycle indicator)
#define  LCD_RD  PC5   //  Enable signal or Read strobe signal
#define  LCD_CS  PC4   //  Chip Select
#define  LCD_RES  PC2   //  RESET

// macros for control lines
#define CLR_CD PORTC &= ~(1<<LCD_CD);
#define SET_CD PORTC |=  (1<<LCD_CD);

#define CLR_CS PORTC &= ~(1<<LCD_CS);
#define SET_CS PORTC |=  (1<<LCD_CS);

#define CLR_RESET PORTC &= ~(1<<LCD_RES);
#define SET_RESET PORTC |=  (1<<LCD_RES);

#define CLR_WR PORTC &= ~(1 << LCD_WR);
#define SET_WR PORTC |=  (1 << LCD_WR);
#define CLR_RD PORTC &= ~(1 << LCD_RD);
#define SET_RD PORTC |=  (1 << LCD_RD);

// color definitions
#define  BLACK    0x0000
#define  BLUE    0x001F
#define  RED     0xF800
#define  GREEN     0x07E0
#define CYAN    0x07FF
#define MAGENTA   0xF81F
#define YELLOW    0xFFE0
#define WHITE    0xFFFF

#define uint8 unsigned char
#define uint16 unsigned int
#define uint32 unsigned long


/*************************************************/
void delay(unsigned int t)
{
  unsigned char t1;
  while(t--)
  for(t1=11;t1>0;t1--)
  {asm("nop");}
}
/*************************************************/
void write_command(unsigned int command)
{
  CLR_CS;
  CLR_CD;
  SET_RD;
  SET_WR;

  PORTA=command;
  PORTE=command>>8;

  CLR_WR;
  SET_WR;
  SET_CS;
}

/*************************************************/
void write_data(unsigned int data)
{
  CLR_CS;
  SET_CD;
  SET_RD;
  SET_WR;

  PORTA=data;
  PORTE=data>>8;

  CLR_WR;
  SET_WR;
  SET_CS;
}
/*************************************************/
void initialization()
{
  SET_RD;
  SET_WR;
  SET_CS;
  SET_CD;
  PORTA=0x00;
  PORTE=0x00;

  CLR_RESET;
  delay(200);
  SET_RESET;
  delay(500);

  write_command(0x0028);    // VCOM OTP
  write_data(0x0006);       // Page 55-56 of SSD2119 datasheet

  write_command(0x0000);    // start Oscillator
  write_data(0x0001);       // Page 36 of SSD2119 datasheet

  write_command(0x0010);    // Sleep mode
  write_data(0x0000);       // Page 49 of SSD2119 datasheet

  write_command(0x0001);    // Driver Output Control
  write_data(0x32EF);       // Page 36-39 of SSD2119 datasheet

  write_command(0x0002);    // LCD Driving Waveform Control
  write_data(0x0600);       // Page 40-42 of SSD2119 datasheet

  write_command(0x0003);    // Power Control 1
  write_data(0x6A38);       // Page 43-44 of SSD2119 datasheet

  write_command(0x0011);    // Entry Mode
  write_data(0x6870);       // Page 50-52 of SSD2119 datasheet

  write_command(0X000F);    // Gate Scan Position
  write_data(0x0000);       // Page 49 of SSD2119 datasheet

  write_command(0X000B);    // Frame Cycle Control
  write_data(0x5308);       // Page 45 of SSD2119 datasheet

  write_command(0x000C);    // Power Control 2
  write_data(0x0003);       // Page 47 of SSD2119 datasheet

  write_command(0x000D);    // Power Control 3
  write_data(0x000A);       // Page 48 of SSD2119 datasheet

  write_command(0x000E);    // Power Control 4
  write_data(0x2E00);       // Page 48 of SSD2119 datasheet

  write_command(0x001E);    // Power Control 5
  write_data(0x00BE);       // Page 53 of SSD2119 datasheet

  write_command(0x0025);    // Frame Frequency Control
  write_data(0x8000);       // Page 53 of SSD2119 datasheet

  write_command(0x0026);    // Analog setting
  write_data(0x7800);       // Page 54 of SSD2119 datasheet

  write_command(0x004E);    // Ram Address Set
  write_data(0x0000);       // Page 58 of SSD2119 datasheet

  write_command(0x004F);    // Ram Address Set
  write_data(0x0000);       // Page 58 of SSD2119 datasheet

  write_command(0x0012);    // Sleep mode
  write_data(0x08D9);       // Page 49 of SSD2119 datasheet

  // Gamma Control (R30h to R3Bh) -- Page 56 of SSD2119 datasheet
  write_command(0x0030);
  write_data(0x0000);

  write_command(0x0031);
  write_data(0x0104);

  write_command(0x0032);
  write_data(0x0100);

  write_command(0x0033);
  write_data(0x0305);

  write_command(0x0034);
  write_data(0x0505);

  write_command(0x0035);
  write_data(0x0305);

  write_command(0x0036);
  write_data(0x0707);

  write_command(0x0037);
  write_data(0x0300);

  write_command(0x003A);
  write_data(0x1200);

  write_command(0x003B);
  write_data(0x0800);

  write_command(0x0007);    // Display Control
  write_data(0x0033);       // Page 45 of SSD2119 datasheet

  delay(150);

  write_command(0x0022);    // RAM data write/read
}
/*************************************************/
void Display_Home()
{
  write_command(0x004E);    // RAM address set
  write_data(0x0000);       // Page 58 of SSD2119 datasheet
  write_command(0x004F);    // RAM address set
  write_data(0x0000);       // Page 58 of SSD2119 datasheet

  write_command(0x0044);    // Vertical RAM address position
  write_data(0xEF00);       // Page 57 of SSD2119 datasheet
  write_command(0x0045);    // Horizontal RAM address position
  write_data(0x0000);       // Page 57 of SSD2119 datasheet
  write_command(0x0046);    // Horizontal RAM address position
  write_data(0x013F);       // Page 57 of SSD2119 datasheet

  write_command(0x0022);    // RAM data write/read
}

/*************************************************/
void LCD_test()
{
  unsigned int i,j;
  Display_Home();

  for(i=0;i<320;i++)
  {
    for(j=0;j<240;j++)
    {
      if(i>279)write_data(BLACK);
      else if(i>239)write_data(BLUE);
      else if(i>199)write_data(GREEN);
      else if(i>159)write_data(CYAN);
      else if(i>119)write_data(RED);
      else if(i>79)write_data(MAGENTA);
      else if(i>39)write_data(YELLOW);
      else write_data(WHITE);
    }
  }
}

/*************************************************/
int main()
{
  PORTD = 0xF8;      // pull-up on switches, all others off
  DDRD  = 0x0F;     // VPP and led pins output

  DDRA = 0xFF;      // low data port, all outputs
  DDRE = 0xFF;      // low data port, all outputs

  PORTC = 0xFE;      // all pins high
  DDRC  = 0xFE;      // all outputs

  delay(0xffff)

  // Initialize the display
  initialization();

  LCD_test();

  delay(0xffff);

while (1)
  {
  }
  return 0;

}

von Benedikt K. (benedikt)


Lesenswert?

Du hast das Display falsch angeschlossen:
Im 16bit Modus kommen D0-15 vom µC nicht an D0-15 vom LCD, sondern an 
D1-8 und an D10-17.
Der Dotclock ist im µC Interface Modus nicht notwendig.
Wie hast du PS0-3 beschaltet?

von Roger P. (presi007)


Lesenswert?

Hallo Benedikt,

danke für dein Antwort.
>>Wie hast du PS0-3 beschaltet?
ich habe PS0-3 noch nicht beschaltet und werde die PIN 15-18 von LCD auf 
low setzen (an die Masse anschließen, siehe Datenblatt CFAF320240 Seite 
5).Ist es so richtig?

>>Der Dotclock ist im µC Interface Modus nicht notwendig
meinst du dass ich hier  das Dot-clock nicht brauche ? dann werde ich 
PIN 40 von LCD einfach frei lassen ?

>>Du hast das Display falsch angeschlossen
Die PORTA und PORTE verwende ich für die Daten.Im Daten Blatt von LCD 
Seite 5 sind die PIN 19 bis 36 für die Daten vorgesehen.Kannst du mir 
genau sagen an welche PIN von LCD ich PA0 - PA7 bzw PE0 - PE7 von MCU 
anschließen soll?
so was : PA0 ---> PIN LCD ??
         .
         .
         PA7 ---> PIN LCD ??


         PE0 ---> PIN LCD ??
         .
         .
         PE7 ---> PIN LCD ??


Danke im voraus

von Benedikt K. (benedikt)


Lesenswert?

Roger Presi schrieb:
> ich habe PS0-3 noch nicht beschaltet und werde die PIN 15-18 von LCD auf
> low setzen (an die Masse anschließen, siehe Datenblatt CFAF320240 Seite
> 5).Ist es so richtig?

Nein, du verwendet den 16bit 8080 Modus.
PS1 muss daher an 3,3V, PS0, PS2, PS3 an GND.

> meinst du dass ich hier  das Dot-clock nicht brauche ? dann werde ich
> PIN 40 von LCD einfach frei lassen ?

Ja, oder an GND legen wie es das Datenblatt empfiehlt.

> Kannst du mir
> genau sagen an welche PIN von LCD ich PA0 - PA7 bzw PE0 - PE7 von MCU
> anschließen soll?

PA0 -> 35
PA1 -> 34
...
PA7 -> 28

PE0 -> 26
PE1 -> 25
...
PE7 -> 19

Pin 36 und 27 kommen an GND.

von Roger P. (presi007)


Lesenswert?

Danke,

ich probiere mal und sage Bescheid.

Viele Grüße
Roger

von Roger P. (presi007)


Angehängte Dateien:

Lesenswert?

Hallo Benedikt,

ich habe die Verkabelung genau nach der Anleitung gemacht und das 
program lafen lassen aber das Display tut immer noch nichts, auch die 
simple backlight leuchten nicht.

Hast du noch eine Idée? ist das Display vielleicht kaputt?
Connections mit MCU (siehe attachment)
Viele Grüße
Roger

von Benedikt K. (benedikt)


Lesenswert?

Roger Presi schrieb:
> ich habe die Verkabelung genau nach der Anleitung gemacht und das
> program lafen lassen aber das Display tut immer noch nichts, auch die
> simple backlight leuchten nicht.

Wenn nichtmal die Hintergrundbeleuchtung leuchtet, hast du irgendwas 
falsch angeschlossen, mehr als normale LEDs sind das nämlich nicht.

> Hast du noch eine Idée? ist das Display vielleicht kaputt?

Unwahrscheinlich.

von Roger P. (presi007)


Lesenswert?

ich habe sogar nur die Backliht angeschlossen und das Display tut auch 
garnichts.kann jemand eine LED falsch anschließen ? glaube ich nicht !!!

PIN  50 --> K1 an die Masse
PIN  49 --> A1 an VGT

PIN  48 --> A2 an VTG also 3,2v
PIN  47 --> K2 an die Masse

PIN 44-45 --> VCC also 3V

ich denke das Display ist kaputt !!!

von Benedikt K. (benedikt)


Lesenswert?

Roger Presi schrieb:
>
> PIN  50 --> K1 an die Masse
> PIN  49 --> A1 an VGT
>
> PIN  48 --> A2 an VTG also 3,2v
> PIN  47 --> K2 an die Masse

Es sind immer 3 LEDs in Reihe geschaltet, du brauchst also mindestens 
10V für das Backlight (Vorwiderstand nicht vergessen!)

> ich denke das Display ist kaputt !!!

Ich denke das Display ist eine Nummer zu groß für dich...

von MagIO (Gast)


Lesenswert?

Hattest Du auch ein Display mit bereits verlötetem Adapter bei LCD-Store 
bestellt?

Das flex-band war da bei mir total schlecht verlötet. Auch bei mir 
gingen nicht mal die LEDs. Nachdem ich nochmal nachgelötet hatte ging es 
dann. Ein einfacher Test ist hier alle prot-pins mal der Reihe nach 
toggeln und messen, ob am Display-Leiterband noch was ankommt. Gute Idee 
nach dem verlöten ist auch auf den Nachbar-pads nachzumessen, dass da 
NICHTS ankommt.

von Roger (Gast)


Angehängte Dateien:

Lesenswert?

Hi  MagIO,
das flex-band ist ok da das Backlight leuchtet.
Das problem liegt am Program.Das Test Program habe ich runtergeladen 
(Hersteller Seite) und dieses scheint nicht zu funktionieren.
Anbei den code:
die Fuktion delay dauert ewig.
void delay(unsigned int t)
{
  unsigned char t1;
  while(t--)
  for(t1=11;t1>0;t1--)
  {asm("nop");}
}
wenn ich die Zeit runter setze , das Program bleibt stehen nach der 
Zeile write_command(0x0028); // VCOM OTP
also die Funktion write_command () wird nur einmal aufgerufen und danach 
bleibt alles stehen.
Kannst du mir sagen woran das liegt ?
hast einen test Code mit dem ich das Display ausprobieren kann?Ein Hallo 
World wurde reichen.

Danke im voraus
Roger

von Benedikt K. (benedikt)


Lesenswert?

Roger schrieb:
> die Fuktion delay dauert ewig.
> void delay(unsigned int t)
> {
>   unsigned char t1;
>   while(t--)
>   for(t1=11;t1>0;t1--)
>   {asm("nop");}
> }

Dem Code nach sollte sie funktionieren.
Funktioniert es mit den in deinem Code auskommentierten _delay_ms(200) 
besser (es reichen eigentlich µs statt ms)?
Falls das auch nicht geht, liegt das Problem wo anders (z.B. an den 
Fusebits).

> wenn ich die Zeit runter setze , das Program bleibt stehen nach der
> Zeile write_command(0x0028); // VCOM OTP
> also die Funktion write_command () wird nur einmal aufgerufen und danach
> bleibt alles stehen.

Das ist dem Code nach unmöglich.
Woher weißt du, dass das Programm dort stehen bleibt?

von Roger (Gast)


Lesenswert?

>>>>Funktioniert es mit den in deinem Code auskommentierten _delay_ms(200)
nein, tut das gleiche
>>>>Falls das auch nicht geht, liegt das Problem wo anders (z.B. an den
Fusebits).
was soll ich and das Fusebits noch einstellen ?
>>>>>Woher weißt du, dass das Programm dort stehen bleibt?
mit F9 bzw F10 kann man das Program im AVR Studion laufen lassen und 
dabei bleibt der Gelbe Zeiger an diese stehen.

Roger

von Benedikt K. (benedikt)


Lesenswert?

Läuft das ganze bei dir im Simulator, oder über einen Debugger in der 
Hardware?
Wie gesagt: Dem Code nach ist es unmöglich, dass er an der Stelle hängen 
bleibt. Der Fehler muss also irgendwo anders liegen (z.B. im 
Simulator/Debugger der ab und zu Probleme hat wenn man die 
Codeoptimierung des Compilers einschaltet). Schließe z.B. mal eine LED 
an den µC an, die am Ende der Init angeht.

von Roger (Gast)


Lesenswert?

>>>Läuft das ganze bei dir im Simulator, oder über einen Debugger in der
Hardware?
über einen Debuger also JTAGIE2
Noch eine Anmerkung: Wenn das Program hängen bleibt,verschwindet der 
Gelbe Zeiger wenn ich das Program manuel laufe lasse um genau jede 
Zeille zu verfolgen

von Roger (Gast)


Lesenswert?

Ich denke,dass Problem liegt an den Fusebits also Program absturtz nach 
abruf von unterprogram.
Kann mir jemand genau sagen wie ich die Fusebits von ATMEGA 128 richtig 
einstellen kann?
Hardware : STK600
Debuger : JTAGICE2
Entwicklungsumgebung : AVR Studio

Danke im voraus.

von Michiel (Gast)


Lesenswert?

I've got the same display from lcd-store.de, and pritty much the same 
problem. The backlight does work, but the display does not give any 
response or what so ever.
A guy in this thread: 
http://www.crystalfontz.com/forum/showthread.php?t=6470 is talking about 
`` a picture that reminds me on a TV without any signal attached '' 
after switching on the VDD. Roger, Do you get something like that on the 
display?

(sorry for not speaking german, please respond in german, I do 
understand the language, but I am not able to create sentences)

von MagIO (Gast)


Lesenswert?

Wie man sich ja denken kann hab ich bei Crystalfontz den Thread 
eingestellt. Das Problem war, wie ja schon geschrieben, der schlecht 
verlötete Anschluss. Nach dem Nachlöten hatte ich ne Brücke mit 
eingearbeitet, die die beschriebenen Probleme verursacht hat. Deshalb 
mein Tipp mit dem Nachmessen. Pins mal der Reihe nach auf 1 legen und 
messen, ob es auch am Flex-Band ankommt. Und zwar ausschließlich da, wo 
erwartet.

Der Demo-Code scheint so ausgelegt zu sein, daß Port A für das low byte 
(DB0-DB7) und Port E für das high byte (DB10-DB17) zuständig ist.

Der Demo-Code sollte eigentlich funktionieren. Den habe ich 1 zu 1 für 
den Propeller umgesetzt und da funktioniert es prima.

Zum stehenbleiben gibt es eigentlich keinen Grund, da der Controller ja 
nicht auf feedback wartet. Funktionieren denn noch andere Programme 
fehlerfrei?

Solltest Du in nächster Zeit aufgeben wollen, dann entsorge ich das 
Display gerne fachmännisch und KOSTENLOS ;o)

von Roger P. (presi007)


Lesenswert?

Das Problem war die Einstellung des FuseBits M103

von mainster (Gast)


Angehängte Dateien:

Lesenswert?

Hallo an alle,
der Thread ist zwar schon paar monate alt, trotzdem ist es der einzige 
wo meine Frage reinpasst.

Ich hab vor einigen Wochen von unseren (un-)beliebten Chinesen ein TFT- 
Modul mit Resistivtouch + controller + SD- Card connector gekauft. Als 
starthilfe für das Display (SSD2119) hat mir die Initalisiserungs- 
routine von Roger Presi (Danke an dieser Stelle) sehr geholfen.
Mittlerweile kann ich 24- Bit Bitmaps von einer SD- karte lesen und auf 
dem TFT anzeigen. Der Touchcontroller spricht auch mit mir. Jetzt geht 
es um die Implementierung von verschiedenen Fonts.

Um die BMP's nicht um 180° verdreht auf dem TFT anzuzeigen hab ich in 
der Init- routine dem Register "Entry Mode" den Wert 0x6850 statt 0x6870 
zugewiesen (Addr. Pointer -> Horizontal: increment / Vertical: 
decrement)

Wenn ich jetzt meine Fonts (Line Scaned, 10x14) auf dem TFT ausgebe 
fängt er immer in der rechten Ecke des LCD an. Hab schon alle 
möglichkeiten der Bits ID1:0 sowie AM (SSD2119 Datasheet S.51) 
ausprobiert aber immer fängt er oben rechts an zu schreiben. Mal mit 
gespiegelten Buchstaben, mal normal, aber ich bekomme es nicht hin als 
erste GDDRAM Adresse die linke obere Ecke festzulegen... Kann mir jemand 
die Augen öfnnen? Ich hoffe es liegt nicht daran dass das Modul aus 
China ist, hehe :-)

von mainster (Gast)


Lesenswert?

Hallo,

nach langem hin und her bin ich selber drauf gekommen. Und wie immer ist 
es viel simpler als man sich vorstellt:

Ich setze das EntryMode register auf 0x6860 damit der AddressCounter mit 
jedem pixel dekrementiert wird. Für die Font- write funktion definiere 
ich einen Wert für die linke TFT- Seite (sozusagen text_adresse_0) und 
zwar ist der genau so groß wie die anzahl der pixel in Horiz- Richtung, 
also 320.

In einer gotoxy(x=10,y=10) - funktion für die textausgabe setze ich dann 
für die X- Adresse = (text_adresse_0 - x) ein und schon funktionierts 
wie ich will.

MFG Mainster

von Matthias K. (matthiask)


Lesenswert?

>aber ich bekomme es nicht hin als
>erste GDDRAM Adresse die linke obere Ecke festzulegen... Kann mir jemand
>die Augen öfnnen?

Ich habe das gleiche Problem. Wie bekommt man den GDDRAM Ursprung in die 
linke oberer Ecke? Standardmäßig ist der Ursprung offenbar rechts oben, 
was ungünstig ist. Div. ENTRY-Mode Einstellungen habe ich schon 
probiert.

Mainsters angebotene Lösung, das per Software zu korrigieren, wäre nur 
eine Notlösung. Im Datenblatt des SSD2119 finde ich bisher keine Lösung.

Hier meine Init:
1
  write_command_tft(0x0028);    // VCOM OTP
2
  write_data_tft(0x0006);       // Page 55-56 of SSD2119 datasheet
3
4
  write_command_tft(0x0000);    // start Oscillator
5
  write_data_tft(0x0001);       // Page 36 of SSD2119 datasheet
6
7
  write_command_tft(0x0010);    // Sleep mode
8
  write_data_tft(0x0000);       // Page 49 of SSD2119 datasheet
9
10
  write_command_tft(0x0001);    // Driver Output Control
11
  write_data_tft(0x32EF);       // Page 36-39 of SSD2119 datasheet 0011 0010 1110 1111
12
13
  write_command_tft(0x0002);    // LCD Driving Waveform Control
14
  write_data_tft(0x0600);       // Page 40-42 of SSD2119 datasheet
15
16
  write_command_tft(0x0003);    // Power Control 1
17
  write_data_tft(0x6A38);       // Page 43-44 of SSD2119 datasheet
18
19
  write_command_tft(0x0011);    // Entry Mode
20
  write_data_tft(0x6870);       // Page 50-52 of SSD2119 datasheet
21
22
  write_command_tft(0X000F);    // Gate Scan Position
23
  write_data_tft(0x0000);       // Page 49 of SSD2119 datasheet
24
25
  write_command_tft(0X000B);    // Frame Cycle Control
26
  write_data_tft(0x5308);       // Page 45 of SSD2119 datasheet
27
28
  write_command_tft(0x000C);    // Power Control 2
29
  write_data_tft(0x0003);       // Page 47 of SSD2119 datasheet
30
31
  write_command_tft(0x000D);    // Power Control 3
32
  write_data_tft(0x000A);       // Page 48 of SSD2119 datasheet
33
34
  write_command_tft(0x000E);    // Power Control 4
35
  write_data_tft(0x2E00);       // Page 48 of SSD2119 datasheet
36
37
  write_command_tft(0x001E);    // Power Control 5
38
  write_data_tft(0x00BE);       // Page 53 of SSD2119 datasheet
39
40
  write_command_tft(0x0025);    // Frame Frequency Control
41
  write_data_tft(0x8000);       // Page 53 of SSD2119 datasheet
42
43
  write_command_tft(0x0026);    // Analog setting
44
  write_data_tft(0x7800);       // Page 54 of SSD2119 datasheet
45
46
  write_command_tft(0x004E);    // Ram Address Set
47
  write_data_tft(0x0000);       // Page 58 of SSD2119 datasheet
48
49
  write_command_tft(0x004F);    // Ram Address Set
50
  write_data_tft(0x0000);       // Page 58 of SSD2119 datasheet
51
52
  write_command_tft(0x0012);    // Sleep mode
53
  write_data_tft(0x08D9);       // Page 49 of SSD2119 datasheet
54
55
  // Gamma Control (R30h to R3Bh) -- Page 56 of SSD2119 datasheet
56
  write_command_tft(0x0030);
57
  write_data_tft(0x0000);
58
59
  write_command_tft(0x0031);
60
  write_data_tft(0x0104);
61
62
  write_command_tft(0x0032);
63
  write_data_tft(0x0100);
64
65
  write_command_tft(0x0033);
66
  write_data_tft(0x0305);
67
68
  write_command_tft(0x0034);
69
  write_data_tft(0x0505);
70
71
  write_command_tft(0x0035);
72
  write_data_tft(0x0305);
73
74
  write_command_tft(0x0036);
75
  write_data_tft(0x0707);
76
77
  write_command_tft(0x0037);
78
  write_data_tft(0x0300);
79
80
  write_command_tft(0x003A);
81
  write_data_tft(0x1200);
82
83
  write_command_tft(0x003B);
84
  write_data_tft(0x0800);     
85
86
  write_command_tft(0x0007);    // Display Control 
87
  write_data_tft(0x0033);       // Page 45 of SSD2119 datasheet
88
89
  delay(20);
90
91
  write_command_tft(0x0022);    // RAM data write/read
92
93
  display_home_tft();

von Matthias K. (matthiask)


Lesenswert?

Hier die nun gefundene Lösung, falls es jemand mal braucht.

Es muss das RL-Bit im Driver-Output-Control Register gesetzt werden. 
Dann stimmen die Koordinaten. 0,0 liegt dann oben links.
1
write_command_tft(0x0001); // Driver Output Control
2
// 0 RL=1 REV=1 GD=1   BGR=0 SM=0 TB=1 0
3
write_data_tft(0x72EF); // Page 36-39 of SSD2119 datasheet 0111 0010 1110 1111

Mit TB=0/1 kann man übrigens den Inhalt auch Vertikal spiegeln.

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.