Angepinnt TFT Display ILI9341 2.2" und 2.4"

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Hallo Hkipnik,

      diese Dateien hatte ich auch schon gesehen, aber im Stillen gehofft, dass es noch weitere Ausführungen gegeben hätte. Dennoch danke für Ihre Mühen, auch noch ein solches Display zu beschaffen. Lieferzeit für meine Displays ca. 4 Wochen.
      Mit den besagten Datenblättern können wohl nur Spezialisten wie Sie arbeiten, für normale Hobbyisten zu aufwendig.

      Einzig die Arduino Libraries wären eine Alternative, jedoch ist sowohl C als auch dieser C-Ableger nicht unbedingt mein Fall, da ich mich mit Bascom sehr wohl fühle.

      Gruß
      Ulrich
    • Hallo Hkipnik,

      habe mir auch mal mit Ihre "ILI9341-SPI-M1284.bas" angesehen und wollte diese für einen Atmega 644 anpassen, da dieser die gleiche Portbelegung wie beim m1284 zulässt. Leider steigt der Bascom-Compiler mit "unexpected...SPIF" aus. Offenbar hat der m644 nicht alle diejenigen Register eines m1284.

      Schade, da ich mir für den m644 einige Leiterplatten habe angefertigen lassen. Gibt es einen Work-around?

      Gruß
      Ulrich

      Sehe gerade, dass der m644 pin-kompatibel zum m1284 ist, sodass ich letzteren auch auf den Leiterplatten bestücken kann.
    • Ulrich schrieb:


      Schade, da ich mir für den m644 einige Leiterplatten habe angefertigen lassen. Gibt es einen Work-around?
      Du hast Recht, ist mir noch nicht aufgefallen SPIF fehlt in der m644def.dat
      füge mal an der Stelle const SPIF = 7 ein dann sollte das laufen.

      BASCOM-Quellcode

      1. $regfile = "m644def.dat"
      2. $crystal = 16000000
      3. $hwstack = 150
      4. $swstack = 150
      5. $framesize = 250
      6. Const Spif = 7


      Gruß
      Hkipnik
    • Ulrich schrieb:

      Hallo Hkipnik,

      bin leider zu spät auf diese Informationen gestoßen, hatte schon mehrere ILI9225 Displays beschafft.
      Meine Frage ist, können die ILI9225 Displays auch mit Ihren Routinen, die ja das ILI-9341 Display unterstützen, angesteuert werden? Gibt es einen Unterschied zwischen ILI9341 und ILI9225 in der Ansteuerung, außer der Pixelanzahl?

      Gruß
      Ulrich
      mit dem ILI9225 Display geht es hier weiter
      ILI9225
    • Hallo Fsato,

      Du kannst mal versuchen die Befehle on Fly einzufügen.

      BASCOM-Quellcode

      1. 'für Portrait
      2. Call Lcd_write_command(&H36)
      3. Call Lcd_write_data(&H48)
      4. 'für Portrait 180°
      5. Call Lcd_write_command(&H36)
      6. Call Lcd_write_data(&H88)
      7. 'für Landscape
      8. Call Lcd_write_command(&H36)
      9. Call Lcd_write_data(&He8)
      10. 'für Landscape 180°
      11. Call Lcd_write_command(&H36)
      12. Call Lcd_write_data(&H28)
      Alles anzeigen
      sonst kann ich mir das am Wochenende mal genauer anschauen.
    • Hallo, hkipnik

      Besten Dank. Ich kann es noch nicht testen denn meine platine ist noch nicht fertig
      Bei mir soll alles in portrait funktionieren, doch an eine Stelle möchte ich eine Liste von Texten
      die untereinander dargestellt werden sollen, darstellen, im portrait modus kann ich höchsten 20 Zeichen schreiben
      darum möchte ich an dieser Stelle auf landscape wechseln, danach schalte ich wieder auf portrait

      Vielleicht kannst Du es testen ob es so geht, denn wie gesagt, frühesten in 2 bis 3 Wochen kann ich bei mir testen

      Viele Grüsse
      Fsato
    • Hallo Fsato,

      mit den Änderungen kannst du während der Laufzeit zwischen Hochformat oder Querformat wechseln.

      BASCOM-Quellcode

      1. '****************************************************
      2. 'in ILI9341_declarations_spi.inc
      3. '( diesen Teil löschen
      4. #if Lcd_mode = 1
      5. Const X_size = 239
      6. Const Y_size = 319
      7. #elseif Lcd_mode = 2
      8. Const X_size = 239
      9. Const Y_size = 319
      10. #elseif Lcd_mode = 3
      11. Const X_size = 319
      12. Const Y_size = 239
      13. #elseif Lcd_mode = 4
      14. Const X_size = 319
      15. Const Y_size = 239
      16. #endif
      17. ')
      18. 'das hier neu einfügen
      19. Dim X_size As Word
      20. Dim Y_size As Word
      21. Declare Sub Set_page_mode(byval Page_mode As Byte)
      22. '****************************************************
      23. '****************************************************
      24. 'Die Sub in der ILI9341_routines.inc einfügen
      25. '----------------------------------------------------
      26. 'Mode 1=Portrait 2=Portrait 180° 3=landscape 4=landscape 180°
      27. '----------------------------------------------------
      28. Sub Set_page_mode(byval Page_mode As Byte)
      29. Select Case Page_mode
      30. Case 1:
      31. Call Lcd_write_command(&H36)
      32. Call Lcd_write_data(&H48)
      33. X_size = 239
      34. Y_size = 319
      35. Case 2:
      36. Call Lcd_write_command(&H36)
      37. Call Lcd_write_data(&H88)
      38. X_size = 239
      39. Y_size = 319
      40. Case 3:
      41. Call Lcd_write_command(&H36)
      42. Call Lcd_write_data(&He8)
      43. X_size = 319
      44. Y_size = 239
      45. Case 4:
      46. Call Lcd_write_command(&H36)
      47. Call Lcd_write_data(&H28)
      48. X_size = 319
      49. Y_size = 239
      50. End Select
      51. End Sub
      52. '***************************************************
      53. '***************************************************
      54. 'im Programm kannst du jetzt während der Laufzeit zwischen
      55. 'Portrait und Landscape wechseln.
      56. Set_page_mode 1
      Alles anzeigen
      Gruß
      Hkipnik
    • Besten Dank hkipnik,

      Versucht zu kompilieren, aber es erscheint einige Fehlermeldungen in diesen Teil des code in Ili9341_routines.inc

      habe dies am Anfang des programm auskommentiert
      'Const Lcd_mode = 1 'LCD Mode 1=Portrait 2=Portrait 180° 3=landscape 4=landscape 180°
      'Dim Lcd_mode As Byte

      und die Fehlermeldung bezieht auf dieses code Teil. Habe anstatt #If Lcd_mode = n ---> #if page_mode = n
      aber die Fehlermeldung erscheint immer noch


      #if Lcd_mode = 1
      Call Lcd_write_command(&H36) 'Memory Access Control
      Call Lcd_write_data(&B0100_1000) '0100-1000
      #elseif Lcd_mode = 2
      Call Lcd_write_command(&H36)
      Call Lcd_write_data(&B1000_1000)
      #elseif Lcd_mode = 3
      Call Lcd_write_command(&H36)
      Call Lcd_write_data(&B1110_1000)

      #elseif Lcd_mode = 4
      Call Lcd_write_command(&H36)
      Call Lcd_write_data(&B0010_1000)
      #endif

      Hast die NEUE Funktionalität bei Dir getest?

      Viele Grüsse
      Fsato

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fsato ()

    • Hallo Fsato,

      Fsato schrieb:

      habe dies am Anfang des programm auskommentiert
      'Const Lcd_mode = 1 'LCD Mode 1=Portrait 2=Portrait 180° 3=landscape 4=landscape 180°
      hatte nicht geschrieben das du das machen sollst .

      Fsato schrieb:

      Hast die NEUE Funktionalität bei Dir getest?
      ja habe ich.

      Sonst sag mir für welchem Display du es brauchst SPI - 8Bit - 16Bit - Xmega ?
      dann mach ich dir ein Programm dafür fertig.


      Gruß
      Hkipnik
    • Hallo HKipnik,

      habe mir auch ein ILI9341 beschafft und es an einem Arduino-Mega 2560 in Betrieb genommen. Die Anzeige der voreingestellten Schriften, Bilder und Rahmen ist perfekt.

      Nun wollte ich auch die Touch-Funktion verwenden, habe dabei jedoch ein Problem.

      Die Anzeigen Press 1, Press 2 als auch Press 3 (im LCD-Mode) bei Calibrate erfolgten so schnell nacheinander, dass ich sie nicht „pressen“ konnte. Nach Deaktivierung der Calibrate-Funktion habe ich den Touch-IRQ mit dem Scope überprüft. Da ist zu sehen, dass die Touch-IRQ’s permanent im Abstand von ca. 285ms erscheinen, ohne dass ich irgendeine Berührung am Display vornehme. Bei mehrmaligem „Pressen“ konnte ich auch erreichen, dass das Touch-IRQ Signal auf Dauer auf High-Pegel verblieb, wie es sein soll.

      Bei näherer Betrachtung der Touchfolie sah ich, dass diese etwas bauchig ist, mit einer Wölbung (von ca.0,5 bis 1mm) nach oben, die Ränder liegen dicht auf dem Display auf.

      Ich habe nun die Vermutung, dass mechanische Spannung, basierend auf der Wölbungsdurchbiegung, die permanenten Interrupte auslöst, könnte dies so sein?
      Liegen diesbezüglich eventuell Erkenntnisse vor? Kann dem abgeholfen werden, oder ist diese Touchfolie als nicht brauchbar einzustufen? oder liegt es vielleicht gar an etwas anderem?

      Gruß
      Ulrich
    • hkipnik schrieb:

      Hallo Ulrich,

      Kannst mal versuchen einen 10K Pullup Wiederstand an den IRQ Pin zu legen.
      werde ich gleich mal versuchen, jedoch hatten die Touch-IRQ Signale sehr saubere Pegel, auch nach Low.
      Habe ich gemacht, leider keine Änderung. Anbei das Bild vom IRQ-Input direkt am Mega gemessen.
      Dateien
      • SCR68.PNG

        (17,61 kB, 16 mal heruntergeladen, zuletzt: )
    • six1 schrieb:

      Auf der H-Schulter ist wildes Rauschen zu sehen. Schau dir mal die Stromversorgung deiner Schaltung an, vielleicht fehlen ein paar 100nF oder Stützelkos...
      Nach meinem Verständnis sollte gar keiner der Touch-Interrupte zu sehen sein, da die Touchfolie ja nicht berührt wird. Dennoch werde ich mal schauen wo denn dieses Rauschen bei High-Level herrührt. Abgeblockt ist alles ausreichend mit X7R-C's, teilweise in der Größe von 47uF.

      Generell stelle ich mir die Frage, ob denn eine leicht gebogene Touchfolie auch ohne Berührung allein aufgrund der Wölbungsspannung schon Interrupte generieren kann. Damit habe ich keinerlei Erfahrung.
    • Ulrich schrieb:


      Bei näherer Betrachtung der Touchfolie sah ich, dass diese etwas bauchig ist, mit einer Wölbung (von ca.0,5 bis 1mm) nach oben, die Ränder liegen dicht auf dem Display auf.

      Ich habe nun die Vermutung, dass mechanische Spannung, basierend auf der Wölbungsdurchbiegung, die permanenten Interrupte auslöst, könnte dies so sein?


      Hallo Ulrich,
      ich kann deine Erfahrung bestätigen.
      Ich hatte für das Display einen Rahmen aus einer GFK Platte gefräst, der so eng war, dass der Kabelausgang der Touchfolie in Richtung Platine beim Einbauen nach oben gestaucht wurde.
      Danach funktionierte die Touch Funktion zwar noch, aber die TouchX und TouchY Werte, die ich vorher ausgewertet hatte um festzustellen wo getoucht wurde, waren absolut willkürlich.
      Nach dem Ausbau aus dem Rahmen war dieser Effekt leider nicht mehr weg zu kriegen, irgendetwas scheint dabei passiert zu sein.
      Ich habe nun in dem Rahmen mehr Platz geschaffen und neue Displays bestellt.

      Again what learned.

      Gruß Hans
    • Hallo Hennesf,

      danke für den Hinweis. Das Display mit der gewölbten Touchfolie hatte ich bei Fa. Eckstein bestellt, in der Hoffnung fehlerfreie Ware zu erhalten, vielleicht liegt es aber auch nicht an der Folie.

      Da ich bislang auch keinerlei Erfahrung mit diesen Folien habe, suche ich auch nach möglichen anderen Ursachen.

      Bei der Suche nach solch möglichen Ursachen ist mir aufgefallen, dass immer wenn der AVR-Mega den Clock zum Touch-Display geschickt hatte, unmittelbar nach Ende des letzten Clocks das Display mit einem Interrupt antwortet. Ich suche jetzt nach dem Programmteil im AVT-Mega, welches den Takt ohne eine Ursache mit einer Zyklusdauer von 268ms herausschicken könnte. Im angehängten Bild erkennt man das Clock-Signal als Übersprechen auf die Touch-IRQ Leitung. Mitten in der IRQ-Sequenz habe ich auch die Touchfolie berührt, was man an den längern Low-Signalen erkennt.

      Das geringe Übersprechen des Clocksignals scheint mir durch den ca. 10cm langen Flachkabelanschluß zwischen AVR-Mega und LCD herzurühren.

      Ich werde noch ein wenig testen, wenn sich ein positives Ergebnis herausstellt, melde ich mich wieder.

      Gruß
      Ulrich
      Dateien
      • Touch.jpg

        (224,8 kB, 17 mal heruntergeladen, zuletzt: )