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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.