Forum: Mikrocontroller und Digitale Elektronik ILI9341 Display SPI Speed


von Problembär (Gast)


Lesenswert?

Hallo

ich habe folgendes Display von Amazon:
https://www.amazon.de/QVGA-Display-SD-Karten-Slot-Arduino-Raspberry/dp/B01E0MGZU2/ref=sr_1_2?ie=UTF8&qid=1467992269&sr=8-2&keywords=ili9341

Wenn ich das Display mit 3-Wire-SPI@500khz betreibe, geht alles prima. 
Text, Füllen, an/abschalten.

Wenn ich den SPI-Speed aber erhöhe, z.B. auf 2Mhz, dann geht nichts 
mehr. Das Display gibt dann nur noch Müll aus ... Laut einiger Foren 
sollen aber bis zu 40 Mhz möglich sein!

Muss ich da in der Initialisierung etwas ändern? Oder wo stelle ich das 
ein?

Datenblatt:
https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf

Grüße
der norddeutsche Problembär

von Frickelfritze (Gast)


Lesenswert?

Problembär schrieb:
> Laut einiger Foren
> sollen aber bis zu 40 Mhz möglich sein!

Das tut es auch (fast). Zumindest bis 10 Mhz laufen diese Displays
bei mir zuverlässig, fehlerfrei. Das ist die maximale Datenrate
bei 20MHz AVRs.

Problembär schrieb:
> Oder wo stelle ich das ein?

An deinem physikalischen Schaltungsaufbau.

von Spannungsteiler (Gast)


Lesenswert?

Hallo!
Deine Infos sind zu wenig, um weiterhelfen zu können!

...wo betreibst Du das Display, welcher Hardware, mit welchem
Programm, Lib usw.?
Wie sieht es mit Hardwarebeschaltung aus?
Hast Du 5V oder 3,3V Logik?

Bisschen mehr Informationen würden uns dem Rätsel näherbringen :-)

von Spannungsteiler (Gast)


Lesenswert?


von Frickelfritze (Gast)


Lesenswert?

Spannungsteiler schrieb:
> ....
> Beitrag "2.2" GLCD 320x240 mit ILI9341"

Was soll das dem TO helfen?

von Spannungsteiler (Gast)


Lesenswert?

Frickelfritze schrieb:
> Was soll das dem TO helfen?

????? zum Beispiel diesen Zitat hier;

Die Pegelwandlung vom 5V-Arduino zum nicht-5V-toleranten Display soll
man laut elecfreaks einfach mit einem Serienwiderstand von 20...30 kOhm
erreichen.
Bastleralarm! Das muss einem doch auffallen, dass man 10 MHz Rechteck
nicht durch einen 30k-Widerstand schicken kann. Mit 30k und einer
angenommenen Eingangskapazität von 10 pF (das Datenblatt schweigt dazu)
beträgt die -3dB-Grenzfrequenz 1/(2*Pi*R*C) gerade noch 500 kHz. Wenn es
nur 5pF sind liegen wir immer noch eine Dekade unter der Taktfrequenz.

Anderswo schlägt jemand einen mit 3,3V betriebenen Uralt-Buffer CD4050
vor. Der stammt aus der Zeit, als CMOS-Flipflops bei 5V gerade noch 2,5
MHz teilen konnten. Wenn schon aktiv, dann einen zeitgemäßeren 3,3V-Chip
einer 5V-toleranten Familie, oder vielleicht auch die
MOSFET-Serienschaltung nach Philips-Applikation - kann die eigentlich 10
MHz?

Zitat Ende.

von Problembär (Gast)


Lesenswert?

Oh, sry. 3v3 logik von einem PIC16@32mhz (intern), direkt verdrahtet mit 
2cm leiterbahn - hardwaremäßig also alles im Lot.

Ich vermute eher, dass bei der Initialisierung was im argen ist. Hab 
diese copy/paste aus einer arduinolib...

    lcd_send(LCD_REG,  0xCB);
    lcd_send(LCD_DATA, 0x39);
    lcd_send(LCD_DATA, 0x2C);
    lcd_send(LCD_DATA, 0x00);
    lcd_send(LCD_DATA, 0x34);
    lcd_send(LCD_DATA, 0x02);

    lcd_send(LCD_REG,  0xCF);
    lcd_send(LCD_DATA, 0x00);
    lcd_send(LCD_DATA, 0XC1);
    lcd_send(LCD_DATA, 0X30);

    lcd_send(LCD_REG,  0xE8);
    lcd_send(LCD_DATA, 0x85);
    lcd_send(LCD_DATA, 0x00);
    lcd_send(LCD_DATA, 0x78);

    lcd_send(LCD_REG,  0xEA);
    lcd_send(LCD_DATA, 0x00);
    lcd_send(LCD_DATA, 0x00);

    lcd_send(LCD_REG,  0xED);
    lcd_send(LCD_DATA, 0x64);
    lcd_send(LCD_DATA, 0x03);
    lcd_send(LCD_DATA, 0X12);
    lcd_send(LCD_DATA, 0X81);

    lcd_send(LCD_REG,  0xF7);
    lcd_send(LCD_DATA, 0x20);

    lcd_send(LCD_REG,  0xC0); // Power control
    lcd_send(LCD_DATA, 0x23); // VRH[5:0]

    lcd_send(LCD_REG,  0xC1); // Power control
    lcd_send(LCD_DATA, 0x10); // SAP[2:0];BT[3:0]

    lcd_send(LCD_REG,  0xC5); // VCM control
    lcd_send(LCD_DATA, 0x3e);
    lcd_send(LCD_DATA, 0x28);

    lcd_send(LCD_REG,  0xC7); // VCM control2
    lcd_send(LCD_DATA, 0x86);


    lcd_send(LCD_REG,  0x36); // Memory Access Control
    lcd_send(LCD_DATA, 0x48); // C8

    lcd_send(LCD_REG,  0x3A);
    lcd_send(LCD_DATA, 0x55);

    lcd_send(LCD_REG,  0xB1);
    lcd_send(LCD_DATA, 0x00);
    lcd_send(LCD_DATA, 0x18);

    lcd_send(LCD_REG,  0xB6); // Display Function Control
    lcd_send(LCD_DATA, 0x08);
    lcd_send(LCD_DATA, 0x82);
    lcd_send(LCD_DATA, 0x27);

    lcd_send(LCD_REG,  0xF2); // 3Gamma Function Disable
    lcd_send(LCD_DATA, 0x00);

    lcd_send(LCD_REG,  0x26); // Gamma curve selected
    lcd_send(LCD_DATA, 0x01);

    lcd_send(LCD_REG,  0xE0); // Set Gamma
    lcd_send(LCD_DATA, 0x0F);
    lcd_send(LCD_DATA, 0x31);
    lcd_send(LCD_DATA, 0x2B);
    lcd_send(LCD_DATA, 0x0C);
    lcd_send(LCD_DATA, 0x0E);
    lcd_send(LCD_DATA, 0x08);
    lcd_send(LCD_DATA, 0x4E);
    lcd_send(LCD_DATA, 0xF1);
    lcd_send(LCD_DATA, 0x37);
    lcd_send(LCD_DATA, 0x07);
    lcd_send(LCD_DATA, 0x10);
    lcd_send(LCD_DATA, 0x03);
    lcd_send(LCD_DATA, 0x0E);
    lcd_send(LCD_DATA, 0x09);
    lcd_send(LCD_DATA, 0x00);

    lcd_send(LCD_REG,  0xE1); // Set Gamma
    lcd_send(LCD_DATA, 0x00);
    lcd_send(LCD_DATA, 0x0E);
    lcd_send(LCD_DATA, 0x14);
    lcd_send(LCD_DATA, 0x03);
    lcd_send(LCD_DATA, 0x11);
    lcd_send(LCD_DATA, 0x07);
    lcd_send(LCD_DATA, 0x31);
    lcd_send(LCD_DATA, 0xC1);
    lcd_send(LCD_DATA, 0x48);
    lcd_send(LCD_DATA, 0x08);
    lcd_send(LCD_DATA, 0x0F);
    lcd_send(LCD_DATA, 0x0C);
    lcd_send(LCD_DATA, 0x31);
    lcd_send(LCD_DATA, 0x36);
    lcd_send(LCD_DATA, 0x0F);

    lcd_send(LCD_REG,  0x11); // Sleep out
    __delay_ms(120);
    //msDelay(120);
    lcd_send(LCD_REG, 0x2c);
    lcd_fill(global_bg_color);

    lcd_send(LCD_REG, 0x29); // Display on
    lcd_send(LCD_REG, 0x2c);

zuvor vergessen. Sry! ;)

von Kujan (Gast)


Lesenswert?

> Muss ich da in der Initialisierung etwas ändern? Oder wo stelle ich das
> ein?

Zeige deinen Aufbau, die Initialisierung der SPI-Schnittstelle und die 
Writefunktion.

von Frickelfritze (Gast)


Lesenswert?

Problembär schrieb:
> zuvor vergessen. Sry! ;)

Wichtige Regeln - erst lesen, dann posten!
.........
.........
Formatierung (mehr Informationen...)
1
[c]C-Code

von holger (Gast)


Lesenswert?

>Laut einiger Foren sollen aber bis zu 40 Mhz möglich sein!

Laut Datenblatt min. 100ns Clockcycle beim Schreiben und 150ns
beim Lesen. Also maximal 10MHz wenn du nur schreibst.
Und initialisieren muss man dazu im Display nichts.

von Problembär (Gast)


Lesenswert?

@holger danke, ich hab das kapitel einfach übersehen. Das war die 
grundfrage, ob das display es kann.

nachdem es auch an der initialisierung ich mal einen Schritt 
zurückgemacht.

Fehler gefunden: ich hole das Display aus dem Reset und hab den Delay 
vergessen - blöder Fehler.

Danke allen Helfern!

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.