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


von Bryan (Gast)


Angehängte Dateien:

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)


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)


Lesenswert?

Wenn du SPI machen willst dann nimm das hier:

http://www.ebay.de/itm/2-2-TFT-LCD-Display-240X320-fur-Arduino-oder-sonstige-Mikrokontroller-SPI-/301943931277?hash=item464d42c18d:g:V84AAOSwEzxYZD~l

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.

http://www.ebay.de/itm/SainSmart-3-5-480-320-TFT-LCD-Display-SPI-Touch-Screen-for-Raspberry-Pi-2-B-/231762343195?hash=item35f61cb51b:g:gpEAAOSwPcVVmkjQ

von Arduinoquäler (Gast)


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)


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)


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)


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:

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)


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)


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)


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)


Lesenswert?

Datenblatt ILI9341?

von Bryan (Gast)


Lesenswert?

Würde mich wundern. Hab das ziemlich genau durchforstet ;)

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.