Hallo zusammen, Ich brauche wieder einmal eure Hilfe. Ich versuche derzeit ein TFT Display anzusteuern(http://www.ebay.com/itm/2-4-inch-TFT-LCD-module-Display-with-touch-panel-SD-card-cage-240RGBx320-3v-/300798324584?pt=LH_DefaultDomain_0&hash=item4608fa2f68). Das Display soll einen ILI9325 kompatiblen Controller haben. Leider kriege ich es einfach nicht hin. Ich habe schon verschiedene Bibliotheken aus dem Internet versucht. Jedoch erfolglos. Den Verkäufer habe ich auch schon kontaktiert und nach einem Beispiel Code gefragt. Daraufhin hat er mir die Dateien aus dem Anhang gesendet. Diesen Code bekomme ich aber auch nicht zum laufen. Ich verwende einen PIC18F54K20 mit dem internen Oszillator auf 8MHz. Mein aktueller Code befindet sich im Anhang. Ich wäre sehr dankbar wenn sich jemand kurz die Zeit nehmen würde um mir zu helfen. Eventuell hat jemand sogar einen funktionierenden Code. Grüsse
Ich schätze mal, dass das Display in Wirklichkeit einen S6D1121 Controller hat. Der ist zwar grob mit dem ILI9325 kompatibel, aber ein paar Anpassungen braucht man. Als Startpunkt würde ich diese Seite empfehlen: http://www.elecfreaks.com/wiki/index.php?title=2.4%22_TFT_LCD:_TFT01-2.4 Hierbei würde ich auch kontrollieren, ob du im 16 Bit oder 8 Bit Modus bist. Meine Erfahrungen mit 2 Boards von verschiedenen eBay Verkäufern: - Beide waren S6D1121 Controller - Beide waren default im 8-Bit Modus - Beide passten grob zu der Platine vom obigen Link, das Layout war etwas anders, der Schaltplan war gleich. Ich hab noch Code für das STM32F4 Discovery Board hier irgendwo rumfliegen, aber wenn die ElecFreaks Seite nicht passt, wird der wohl auch nicht funktionieren.
Ging mir bei einem anderen Display ganz ähnlich ... sollte ein HX8347a drin sein ...war aber letztlich ein SSD1289 (oder so) drin. Die Kennung der Displays kann man aber in der Regel unter R00h lesen ... ist aber schon ne Weile her ...
Verwirrter Anfänger schrieb: > Als Startpunkt würde ich diese Seite empfehlen: > http://www.elecfreaks.com/wiki/index.php?title=2.4... Vielen Dank für den Link. Leider aber bleibt mein Display auch bei diesem Code einfach nur weiss. > Hierbei würde ich auch kontrollieren, ob du im 16 Bit oder 8 Bit Modus > bist. Wie kann man das überprüfen? Derzeit habe ich alle 16 Datenleitungen an den Mikrocontroller angeschlossen. ..,- schrieb: > Die Kennung der Displays kann man aber in der Regel unter R00h lesen ... > ist aber schon ne Weile her ... Könntest du etwas genauer erklären wie man herausfindet welcher Controller auf dem Display verbaut ist? Ich denke bei mir stimmt irgendetwas bei der Initialisierung nicht. Den das Display zeigt überhaupt gar nichts an und bleibt nur weiss. Ich denke wenn der Code für eine Schrift oder ein Rechteck falsch wäre, würde es irgendetwas anzeigen nur das falsche. Oder liege ich da falsch?
Dominic A. schrieb: > Wie kann man das überprüfen? Derzeit habe ich alle 16 Datenleitungen an > den Mikrocontroller angeschlossen. Sieht dein Display auf der Rückseite so aus, wie das angehängte Foto? Wenn es wirklich exakt so aussieht, es die Wahrscheinlichkeit hoch, dass J3 den Modus auswählt. Wenn J3 nicht verbunden ist, dann ist es im 8-Bit Modus, sonst ist es im 16-Bit Modus. Wenn dein Display anders aussieht, dann ist es wahrscheinlich am einfachsten, in beiden Varianten zu versuchen die ID auszulesen. Dominic A. schrieb: > Könntest du etwas genauer erklären wie man herausfindet welcher > Controller auf dem Display verbaut ist? Du musst versuchen das Register 0x00 auzulesen. Das Auslesen funktioniert nahezu analog zu dem Schreiben. Als erstes wird der Index gesetzt, so wie sonst auch. Danach werden die Daten eingelesen. Hierbei mus nWR high und nRD low sein, und der Port muss natürlich als Input konfiguriert sein.
Ja mein Display sieht exakt so aus. JP3 ist nicht verbunden somit ist es im 8-Bit Modus. Das Auslesen habe ich soeben probiert mit folgenden Code:
1 | unsigned int Datahi, Datalo; |
2 | LCD_CS = 0; |
3 | LCD_RS = 0; |
4 | LCD_RD = 1; |
5 | |
6 | DBhigh = 0x00; |
7 | LCD_WR = 0; |
8 | LCD_WR = 1; |
9 | |
10 | DBhigh = 0x00; // Index setzen |
11 | LCD_WR = 0; |
12 | LCD_WR = 1; |
13 | |
14 | |
15 | LCD_RS = 1; |
16 | PORTC = 0xFF; //DBhigh Input |
17 | |
18 | LCD_RD = 0; |
19 | Datahi = DBhigh; //high byte read |
20 | LCD_RD = 1; |
21 | LCD_RD = 0; |
22 | Datalo = DBhigh; //low byte read |
23 | |
24 | LCD_RD = 1; |
25 | LCD_CS = 1; |
26 | LCD_WR = 1; |
27 | LCD_RD = 1; |
28 | PORTC = 0x00; //DBhigh Output |
29 | eeprom_write(0x00, Datalo); |
30 | eeprom_write(0x01, Datahi); |
Jedoch bleiben die Wert im EEPROM auf 0xFF. Ich habe versucht das Auslesen nach dem Diagramm auf Seite 49 vom Datenblatt des IL9325 zu programmieren. Ist der Code falsch oder welchen Grund könnte es haben das das Auslesen nicht funktioniert?
Hallo, PORTC = 0xFF; //DBhigh Input .. schaltet den Datenport gewiss nicht auf Input wenn du DBhigh = 0x00 zur Ausgabe verwendest, dann kann Datahi = DBhigh nicht zum Einlesen verwendet werden, da Ausgabe ja über PORTx und Eingabe über PINx läuft! Sascha
Sascha Weber schrieb: > PORTC = 0xFF; //DBhigh Input > .. schaltet den Datenport gewiss nicht auf Input Ach ja klar das sollte TRISC sein. > wenn du DBhigh = 0x00 zur Ausgabe verwendest, dann kann Datahi = DBhigh > nicht zum Einlesen verwendet werden, da Ausgabe ja über PORTx und > Eingabe über PINx läuft! DBhigh ist folgendermassen definiert:
1 | #define DBhigh PORTC //High byte of data
|
Wie liest man den in eine Variable einen Port ein? Bisher habe ich es immer so gemacht. Nach der Änderung von PORT auf TRIS lese ich nun bei Datahi sowie auch bei Datalo 0x00 aus.
ooobs, hab jetzt gerade noch mal oben gesehen das du ja einen PIC verwendest! Ok dann stimmt aber wenigstens die Hälfte meines Posts (der sich auf AVR bezog). Mach mal zwischen RD=low und Einlesen der Daten eine Kurze Pause, da der Displaycontroller erst die Daten anlegen muss. Sascha
Okay alles klar. Selbst bei einem Delay von 5ms zwischen dem RD = 0 und dem Einlesen bekomme ich nur 0x00. Kann es sein das mein Display einfach defekt ist?
Ich kann nichts wirklich Falsches in deinem Code entdecken, aber Ich hab ihn jetzt auch nicht 100% mit meinem abgeglichen. Wenn du Interesse hast, könnte ich nochmal meinen Code posten, allerdings ist der für den STM32F4, benutzt den FSMC (flexible static memory controller) und ist sehr unorganisiert und durcheinander. Falls du im Raum Saarbrücken wohnst, könnte ich auch noch einen Test mit einer auf jeden Fall funktionierenden Schaltung / Display anbieten.
Dominic A. schrieb: > Hat niemand mehr einen Tipp? vielleicht gibts bei dem Contoller im Register 0x0000 nichts zum auslesen beim ssd1289 z.B. ist das das IndexRegister und das hat nach Reset den Wert 0. Lies halt mal 30 Register aus und speichere die Werte oder lass sie über UART (wenn du hast) ausgeben. Sascha
Habe ich nun gemacht: Reg Datahi Datalo 0 0x00 0x00 1 0x01 0x01 2 0x02 0x02 3 0x03 0x03 4 0x04 0x04 5 0x05 0x05 6 0x06 0x06 7 0x07 0x07 8 0x08 0x08 9 0x09 0x09 10 0x10 0x10 Das geht dann so weiter. Ich verstehe es nicht mehr. Scheinbar gibt er einfach den gesetzten Index zurück oder mein Code ist völlig falsch.
Sascha Weber schrieb: > vielleicht gibts bei dem Contoller im Register 0x0000 nichts zum > auslesen beim ssd1289 z.B. ist das das IndexRegister und das hat nach > Reset den Wert 0. # SSD1289 # Device Code Read (R00h) # If this register is read forcibly, 8989h is read. Es ist bei vielen dieser Treiber das (R00h)-Register welches den Device-Code enthält ... Controller Device-ID ILI9320 0x9320 ILI9325 0x9325 ILI9328 0x9328 ILI9331 0x9331 SSD1298 0x8999 SSD1289 0x8989 ST7781 0x7783 LGDP4531 0x4531 SPFD5408B 0x5408 R61505U 0x1505 0x0505 HX8347D 0x0047 HX8347A 0x0047 LGDP4535 0x4535 SSD2119 0x9919 außer beim HX8347A ... da sitzt es bei (R69h). Deinen Code habe ich mir nicht angesehen ... aber meine Erfahrung hat gezeigt, dass man beim Initialisieren des Displays lieber nicht zu geizig mit Delays umgehen sollte. Viel Erfolg
Dominic A. schrieb: > Habe ich nun gemacht: > > Reg Datahi Datalo > 0 0x00 0x00 > 1 0x01 0x01 > 2 0x02 0x02 > 3 0x03 0x03 > 4 0x04 0x04 > 5 0x05 0x05 > 6 0x06 0x06 > 7 0x07 0x07 > 8 0x08 0x08 > 9 0x09 0x09 > 10 0x10 0x10 > > Das geht dann so weiter. > Ich verstehe es nicht mehr. Scheinbar gibt er einfach den gesetzten > Index zurück oder mein Code ist völlig falsch. das sieht so aus, als ob vom Display gar keine Daten kommen, weil die Leitungen noch auf Eingang stehen. Durch die Kapazitäten der Eingänge liest du den Wert den du zuvor ausgegeben hast. Ist deine RD-Leitung auch mit dem richtigen Portpin verbunden? Sascha
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.