Forum: Projekte & Code XMega & SSD1289 Display Controller


von Raphael B. (farin_94)


Angehängte Dateien:

Lesenswert?

Hei Leute

Im Zuge eines Projektes habe ich für einen XMega128A3 eine Library für 
den Display Controller SSD1289 geschrieben. Diese möchte ich gerne mit 
euch teilen unter anderem auch um den verzweifelten Seelen zu helfen die 
mit Xmegas arbeiten wollen/müssen/dürfen.

Wenn ihr Fehler oder Erweiterungen für den Code gefunden habt, teilt mir 
diese doch bitte mit, ich werde sie alsbald einfügen bzw. verbessern.

Gruss Farin

von Rolf D. (rolfdegen)


Angehängte Dateien:

Lesenswert?

Hallo Leute von Heute :)

Ich verwende das 3.2' TFT von SainSmart mit SSD1289 in meinem 
Synthesizer Projekt 
(http://www.cczwei-forum.de/cc2/thread.php?postid=86323#post86323). 
Ansteuerung und Initialisierung sowie Grafik und Textausgabe 
funktionieren mit der Eingebunden Library wunderbar und problemlos. Jetz 
möchte ich aber ein digitalisiertes Audio-Signal als Wellenform in einem 
Gitterraster wie zB auf einem Oszilloskop darstellen. Der 
Display-Controller SSD1289 bietet dafür die Möglichkeit zwei 
Windowsbereiche zu definieren und irgendwie übereinander zu legen 
(Picture in Picture Mode). Das 1.Windows wäre dann mein Raster und das 
2.Windows wäre meine digitalisierte Audio-Wellenform. Leider schaffe ich 
es nicht, beide Windows übereinander zu legen und gleichzeitig 
darzustellen. Hab diverse Register-Settings ausprobiert, aber keine 
funktionierte.

Aktuell verwende ich einen Windowsbereich im Ram des Displays. Darin 
werden Raster und Wellenform immer wieder neu gezeichnet was viel Zeit 
kostet (siehe Video).

Youtube: https://www.youtube.com/watch?v=cNkAbWzbGfE&feature=youtu.be

Im Bild 2 ein Auszug aus dem Manuel des Controllers SSD1289 in Bezug auf 
den Picture in Picture Modus. Vielleicht hat jemand eine Idee.

Vielen Dank für Eure Hilfe. Gruß Rolf

: Bearbeitet durch User
von Felix H. (Gast)


Lesenswert?

Hallo probiere gerade deine lib aus.
Hast du vielleicht noch irgendwo eine bespiel main liegen?
Bei meinem Display tut sich einfach nichts :(

Etwa dieses display habe ich:
http://www.ebay.de/itm/3-2-240x320-TFT-Screen-Touch-Screen-PCB-Board-Driver-IC-SSD1289-16BIT-TE175-/261952673671?hash=item3cfd989787:g:VYwAAOSwDNdVlVyY

Beste Grüße

Felix H.

von Rolf D. (rolfdegen)


Angehängte Dateien:

Lesenswert?

Hi Felix

Bin gerade dabei meine Lib fürs das LCD zu optimieren. Wenns überhaubt 
nicht funktioniert, liegts meistens an der falschen Initialisierung. 
Wichtig ist die Reset Phase am Anfang der Initialisierung.

Hab dir mal meine Init angehängt. Das CS-Signal vom LCD hab ich mir 
gespart und permanent auf Low liegen. Für die Steuerung des LCDs reicht 
das WR-Signal und das RS-Signal. Das LCD ist mit einem (Virtuellen) 8Bit 
Datenport am Xmega128 verbunden. Das erlaubt mir sehr schnelle (1 Clock) 
Schreibcyklen. Laut Datenblatt des SSD1289 muss der WR-Puls min. 50ns 
lang sein. Da der WR-Puls am Xmega 32ns lang ist musste ich einen nop 
Befehl zwischen den Schreibimpulsen einfügen. Um das LCD im 16Bit 
Datenmodus anzusteuern verwende ich für die Datenleitung D8-D15 ein 
Latch als Zwischenspeicher. Die Daten D8-D15 werdem mit dem LE-Signal 
ins Latch geschrieben und stehen gleichzeitig am Ausgang zum LCD an.

Bei der LCD Orientierung habe ich noch ein kleines Problem. Bei 
schnellen Schreibvorgängen im Landscape Mode kommt es zum flackern des 
LCDs. Das liegt vermutlich an den vertauschten XY Koodinaten und dem 
Überlauf der Schreibregister 0x4E und =x4F im LCD.

TFT Demo (fast draw): https://youtu.be/T4p6Wr_8Pcc

SSD1289 Lib: http://www.rinkydinkelectronics.com/library.php?id=51

Gruß Rolf

: Bearbeitet durch User
von Rolf D. (rolfdegen)


Angehängte Dateien:

Lesenswert?

Hallöchen..

Hab den Fehler gefunden und für mein Projekt eine brauchbare Lösung 
gefunden. Wie schon vermutet, liegt der Fehler an einer falschen 
Berechnung der XY Koordinate wenn das Display im Landscape Mode 
betrieben wird. Um die Display Störungen zu beheben habe ich einfach das 
Low-Byte in Register 0x44 gelöscht. Jetzt läuft das MiniScope 
störungsfrei. Im Anhang meine LCD Routinen und Schaltpläne.

//********************************************************************** 
***
// set cursor for SainSmart 3.2 TFT
//********************************************************************** 
***
void set_Cursor(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
  // swap xy for landscape mode 320x240
  swap(uint16_t, x1, y1);
  swap(uint16_t, x2, y2)
  y1=320-y1;
  y2=320-y2;
  swap(uint16_t, y1, y2)

  //write_com_data(0x44, (x2 << 8) + x1);  // verursacht Störungen im 
Screen
  write_com_data(0x44, (x2 << 8));
  write_com_data(0x45, y1);
  write_com_data(0x46, y2);

  write_com_data(0x4E, x1);
  write_com_data(0x4F, y1);
  write_com(0x22);
}



TFT ohne Störungen: https://www.youtube.com/watch?v=VXPNqAjtjhM
TFT mit  Störungen: https://www.youtube.com/watch?v=gpzXowpXnCU

Gruß Rolf

: Bearbeitet durch User
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.