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
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 ....)
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
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 ....
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 ;)
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.
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 ^^
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?
Ohne Initialisierung geht da nichts - schau mal in eine fertige lib für den ili9341 (z.B. die Adafruit-Version) nach der Initialisierung.
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();
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.
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.