Forum: Mikrocontroller und Digitale Elektronik ILI9341: 4 Fragen zum ansteuern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bryan (Gast)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Hey ich hätte mal ein paar Fragen zur Ansteuerung des ILI9341 Drivers.
Ich möchte ihn per SPI mit nem atxmega128 ansteuern, um letztendlich 
einen Display anzusteuern. Um der Frage einiger zuvorzukommen: Ja ich 
hab schon im Forum nach ähnlichen Fragen geschaut :D
Das ganze soll über den 3-line Modus mit getrennter SDI/SDO Leitung 
geschehen (3-line Serial Interface II).

Frage 1 : Um diesen Übertragungsmodus auszuwählen, muss ich die vier 
Bits IM[3:0] setzen. Wo bzw. über welche Leitung setze ich diese? Das 
geht nicht so wirklich aus dem Datenblatt hervor. Ich bin also mit dem 
setzen der Bits etwas überfragt.

Frage 2: Ich weiß, dass ist eine ziemlich dumme Frage aber:
Bin ich richtig in der Annahme, dass wenn ich einen roten Pixel haben 
möchte die Bits für die Farbe rot High setzen muss? Das wird leider aus 
dem Datenblatt nicht so ganz klar. Zu sehen ist die Botschaft im Anhang.

Frage 3: Das d/cx bit wurde im Datenblatt wie folgt beschrieben:

"If the D/CX bit is “low”, the
transmission byte is interpreted as a command byte. If the D/CX bit is 
“high”, the transmission byte is stored as
the display data RAM (Memory write command), or command register as 
parameter."

Wie kann ich mir das vorstellen? Mit "1" sage ich, dass ich schreiben 
möchte und mit "0" dass ich lesen möchte?

Frage 4: Wenn ich mich doch für den 4line Modus entscheiden sollte: 
Welchen PIN des ILI9341 benutze ich für das d/cx bit?



Den ILI mit der PIN-Beschriftung habe ich noch schnell ausm Netz gesucht 
und als Bild in Anhang gepackt. Datasheet: 
https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf

Über schnelle Fragen wäre ich sehr dankbar :) Danke im Voraus, Bryan

von Arduinoquäler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bryan schrieb:
> Frage 1 :

Ich habe jetz keine Lust nachzuschauen aber soviel ich
mich erinnere muss man diese Bits statisch (am Controller
als Leitungen vorhanden, nich am Board) richtig setzen.

Bryan schrieb:
> Frage 3:

Üblicherweis ist das das C/D Bit, ausgeschrieben
Command / Data. Will heissen es signalsiert ob gerade
Ein Befehl oder eine Datum geschrieben werden soll.


Bryan schrieb:
> Frage 4:

Das Bit wäre herausgeführt, es heisst hier LCD_RS.


Aber ich bezweifle dass du an die richtigen Leitungen
für SPI herankommst. Dazu müsstest du an die flexible
Verbindung zu Controller kommen. Und das geht nur wenn
du das TFT vom Board abhebst. Fiel Fergnügen.

(die an den Steckverbindungen verfügbaren seriellen
Leitungen sind für die SD-Karte ....)

von Arduinoquäler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn du SPI machen willst dann nimm das hier:

Ebay-Artikel Nr. 301943931277

oder eines von den vielen Raspberry-Displays bis 3.5", die
werden alle über SPI betrieben und sie haben auch noch den
Touch-Controller on Board.

z.B.

Ebay-Artikel Nr. 231762343195

von Arduinoquäler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bryan schrieb:
> Das ganze soll über den 3-line Modus mit getrennter SDI/SDO Leitung
> geschehen (3-line Serial Interface II).

Auch das noch zur Klärung:

Für alle diese SPI Displays gilt: sie brauchen zur Steuerung
mindestens CS (Chip Slect), SCLK, MOSI und C/D, für das Lesen
ausserdem noch MISO (MOSI-> Data in am Display, MISO-> Data out
am Display). Eine Reset-Leitung wäre auch nicht schlecht damit
da nichts in der Luft hängt ....

von Bryan (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ahh Mist stimmt. Ich erinnere mich dunkel, dass dort ein SD vor SDI und 
SDO stand :D hab den controller leider nicht parat im moment, deshalb 
auch ein Bild ausm Netz.

Guter Tipp danke, dann werd ich mir eventuell das SPI-Display bestellen.



Frage 2 bleibt noch offen.. Ich setze die Bits, für die Farbe die ich 
will jeweils auf HIGH richtig??

Die Antwort auf die Frage 1 verstehe ich nicht ganz..



Aufjedenfall schonmal danke für deine Tipps ;)

von Arduinoquäler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bryan schrieb:
> Die Antwort auf die Frage 1 verstehe ich nicht ganz..

Es gibt Konfigurations-Bits am Controller (die man auf
dem Board nicht sieht) die man auf "SPI" oder auf andere
Modi stellen kann/muss. Steht der Controller auf einer
bestimmten Konfiguration kann man ihn nicht in einer
anderen betreiben. Das Display ist im Lieferzustand auf
"8 Bit parallel" eingestellt.

von Bryan (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ah ok alles klar verstanden, danke :D
mit der nicht beantwortung der frage 2 gehe ich mal davon aus, dass ich 
richtig in der Annahme bin ^^

von Bryan (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So hab mich nun vor einigen Tagen mal ran gesetzt und wollte das Display 
parallel ansteuern. Durch das Datenblatt und die komplette Methode des 
Sendens bin ich soweit durchgestiegen und habe das implementiert (siehe 
Anhang). Jedoch tut sich nichts. Jemand eine Idee?

von Spannend (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ohne Initialisierung geht da nichts - schau mal in eine fertige lib für 
den ili9341 (z.B. die Adafruit-Version) nach der Initialisierung.

von Spannend (Gast)


Bewertung
0 lesenswert
nicht lesenswert
so auf die schnelle:

271   if (hwSPI) spi_begin();
272   writecommand(0xEF);
273   writedata(0x03);
274   writedata(0x80);
275   writedata(0x02);
276

277   writecommand(0xCF);
278   writedata(0x00);
279   writedata(0XC1);
280   writedata(0X30);
281

282   writecommand(0xED);
283   writedata(0x64);
284   writedata(0x03);
285   writedata(0X12);
286   writedata(0X81);
287
288   writecommand(0xE8);
289   writedata(0x85);
290   writedata(0x00);
291   writedata(0x78);
292

293   writecommand(0xCB);
294   writedata(0x39);
295   writedata(0x2C);
296   writedata(0x00);
297   writedata(0x34);
298   writedata(0x02);
299
300   writecommand(0xF7);
301   writedata(0x20);
302

303   writecommand(0xEA);
304   writedata(0x00);
305   writedata(0x00);
306
307   writecommand(ILI9341_PWCTR1);    //Power control
308   writedata(0x23);   //VRH[5:0]
309
310   writecommand(ILI9341_PWCTR2);    //Power control
311   writedata(0x10);   //SAP[2:0];BT[3:0]
312
313   writecommand(ILI9341_VMCTR1);    //VCM control
314   writedata(0x3e); //¶Ô±È¶Èµ÷½Ú
315   writedata(0x28);
316
317   writecommand(ILI9341_VMCTR2);    //VCM control2
318   writedata(0x86);  //--
319
320   writecommand(ILI9341_MADCTL);    // Memory Access Control
321   writedata(0x48);
322

323   writecommand(ILI9341_PIXFMT);
324   writedata(0x55);
325
326   writecommand(ILI9341_FRMCTR1);
327   writedata(0x00);
328   writedata(0x18);
329
330   writecommand(ILI9341_DFUNCTR);    // Display Function Control
331   writedata(0x08);
332   writedata(0x82);
333   writedata(0x27);
334
335   writecommand(0xF2);    // 3Gamma Function Disable
336   writedata(0x00);
337
338   writecommand(ILI9341_GAMMASET);    //Gamma curve selected
339   writedata(0x01);
340
341   writecommand(ILI9341_GMCTRP1);    //Set Gamma
342   writedata(0x0F);
343   writedata(0x31);
344   writedata(0x2B);
345   writedata(0x0C);
346   writedata(0x0E);
347   writedata(0x08);
348   writedata(0x4E);
349   writedata(0xF1);
350   writedata(0x37);
351   writedata(0x07);
352   writedata(0x10);
353   writedata(0x03);
354   writedata(0x0E);
355   writedata(0x09);
356   writedata(0x00);
357
358   writecommand(ILI9341_GMCTRN1);    //Set Gamma
359   writedata(0x00);
360   writedata(0x0E);
361   writedata(0x14);
362   writedata(0x03);
363   writedata(0x11);
364   writedata(0x07);
365   writedata(0x31);
366   writedata(0xC1);
367   writedata(0x48);
368   writedata(0x08);
369   writedata(0x0F);
370   writedata(0x0C);
371   writedata(0x31);
372   writedata(0x36);
373   writedata(0x0F);
374

375   writecommand(ILI9341_SLPOUT);    //Exit Sleep
376   if (hwSPI) spi_end();
377   delay(120);
378   if (hwSPI) spi_begin();
379   writecommand(ILI9341_DISPON);    //Display on
380   if (hwSPI) spi_end();

von Bryan (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hmm Mist. Hätte gedacht das wärs. Gibt es ne Beschreibung irgendwo der 
unkommentierten Stellen?

Werd mich dann mal die Tage ans implementieren setzen.

Danke für die schnelle Antwort.

von Vergessen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Datenblatt ILI9341?

von Bryan (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Würde mich wundern. Hab das ziemlich genau durchforstet ;)

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]
  • [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.