www.mikrocontroller.net

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


Autor: Roger Presi (presi007)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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;

}

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Roger Presi (presi007)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roger Presi (presi007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,

ich probiere mal und sage Bescheid.

Viele Grüße
Roger

Autor: Roger Presi (presi007)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roger Presi (presi007)
Datum:

Bewertung
0 lesenswert
nicht 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 !!!

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: MagIO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Roger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Roger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michiel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: MagIO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Roger Presi (presi007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem war die Einstellung des FuseBits M103

Autor: mainster (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: mainster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht 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:
  write_command_tft(0x0028);    // VCOM OTP
  write_data_tft(0x0006);       // Page 55-56 of SSD2119 datasheet

  write_command_tft(0x0000);    // start Oscillator
  write_data_tft(0x0001);       // Page 36 of SSD2119 datasheet

  write_command_tft(0x0010);    // Sleep mode
  write_data_tft(0x0000);       // Page 49 of SSD2119 datasheet

  write_command_tft(0x0001);    // Driver Output Control
  write_data_tft(0x32EF);       // Page 36-39 of SSD2119 datasheet 0011 0010 1110 1111

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

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

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

  write_command_tft(0X000F);    // Gate Scan Position
  write_data_tft(0x0000);       // Page 49 of SSD2119 datasheet

  write_command_tft(0X000B);    // Frame Cycle Control
  write_data_tft(0x5308);       // Page 45 of SSD2119 datasheet

  write_command_tft(0x000C);    // Power Control 2
  write_data_tft(0x0003);       // Page 47 of SSD2119 datasheet

  write_command_tft(0x000D);    // Power Control 3
  write_data_tft(0x000A);       // Page 48 of SSD2119 datasheet

  write_command_tft(0x000E);    // Power Control 4
  write_data_tft(0x2E00);       // Page 48 of SSD2119 datasheet

  write_command_tft(0x001E);    // Power Control 5
  write_data_tft(0x00BE);       // Page 53 of SSD2119 datasheet

  write_command_tft(0x0025);    // Frame Frequency Control
  write_data_tft(0x8000);       // Page 53 of SSD2119 datasheet

  write_command_tft(0x0026);    // Analog setting
  write_data_tft(0x7800);       // Page 54 of SSD2119 datasheet

  write_command_tft(0x004E);    // Ram Address Set
  write_data_tft(0x0000);       // Page 58 of SSD2119 datasheet

  write_command_tft(0x004F);    // Ram Address Set
  write_data_tft(0x0000);       // Page 58 of SSD2119 datasheet

  write_command_tft(0x0012);    // Sleep mode
  write_data_tft(0x08D9);       // Page 49 of SSD2119 datasheet

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

  write_command_tft(0x0031);
  write_data_tft(0x0104);

  write_command_tft(0x0032);
  write_data_tft(0x0100);

  write_command_tft(0x0033);
  write_data_tft(0x0305);

  write_command_tft(0x0034);
  write_data_tft(0x0505);

  write_command_tft(0x0035);
  write_data_tft(0x0305);

  write_command_tft(0x0036);
  write_data_tft(0x0707);

  write_command_tft(0x0037);
  write_data_tft(0x0300);

  write_command_tft(0x003A);
  write_data_tft(0x1200);

  write_command_tft(0x003B);
  write_data_tft(0x0800);     

  write_command_tft(0x0007);    // Display Control 
  write_data_tft(0x0033);       // Page 45 of SSD2119 datasheet

  delay(20);

  write_command_tft(0x0022);    // RAM data write/read

  display_home_tft();

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht 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.
write_command_tft(0x0001); // Driver Output Control
// 0 RL=1 REV=1 GD=1   BGR=0 SM=0 TB=1 0
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.