Forum: Mikrocontroller und Digitale Elektronik ILI9325 Partial Image nutzen


von Erik Z. (erik_wolfram)


Lesenswert?

Hallo,

ich habe das Pollin STM32F103VET6 Board mit LCD und einem ILI9325 
Treiber. Mittlerweile bin ich gut voran gekommen und kann halbwegs 
akzeptabel damit arbeiten.
Zu gerne würde ich die Perfomance noch etwas erhöhen und mit "partial 
Image" arbeiten. Leider ist die Beschreibung hierzu mehr als dürftig. 
Vor allem wenn es um die Beschreibung von der Lage der Daten im GRAM und 
der Anzeige im LCD geht. Wenn ich die Daten eines Bildes gezielt in den 
GRAM schreibe werden diese unabhängig von der Position des Partial 
Images immer in Abhängikeit zur GRAM-Adresse angezeigt.
Ich erkenne keinen Einfluss von "Partial Image".

1
    LCD_WriteReg( ILI9328_GRAM_HORZ_AD, 0 );
2
    LCD_WriteReg( ILI9328_GRAM_VERT_AD, 0 );
3
    LCD_WriteRAM_Prepare();
4
    
5
    // Grüner Strich 10px lang:
6
    for( i = 0; i < 10; i++ )
7
      LCD_WriteRAM( Green );
8
9
    LCD_WriteReg( ILI9328_PART_IMG1_DISP_POS, 100 );
10
    LCD_WriteReg( ILI9328_PART_IMG1_START_AD, 0 );
11
    LCD_WriteReg( ILI9328_PART_IMG1_END_AD, 10 );


Gibt es irgendwoe umfangreichere Informationen als in der Anleitung. 
Vielleicht sogar Beispiele für die Verwendung? Das würde mir sehr 
helfen!

Gruß Erik

von STler (Gast)


Lesenswert?

Du hast ja extrem viel Code mitgeliefert...


Im Datenblatt steht:
BASEE
Base image display enable bit. When BASEE = “0”, no base image is 
displayed. The ILI9325 drives liquid crystal at non-lit display level or 
displays only partial images. When BASEE = “1”, the base image is 
displayed. The D[1:0] setting has higher priority over the BASEE 
setting.

PTDE[1:0]
Partial image 2 and Partial image 1 enable bits
PTDE1/0 = 0: turns off partial image. Only base image is displayed.
PTDE1/0 = 1: turns on partial image. Set the base image display enable 
bit to 0 (BASEE = 0).


Hast Du die Bits auch richtig gesetzt?



Erik Z. schrieb:
>     LCD_WriteReg( ILI9328_GRAM_HORZ_AD, 0 );
>     LCD_WriteReg( ILI9328_GRAM_VERT_AD, 0 );
>     LCD_WriteRAM_Prepare();
>
>     // Grüner Strich 10px lang:
>     for( i = 0; i < 10; i++ )
>       LCD_WriteRAM( Green );
>
>     LCD_WriteReg( ILI9328_PART_IMG1_DISP_POS, 100 );
>     LCD_WriteReg( ILI9328_PART_IMG1_START_AD, 0 );
>     LCD_WriteReg( ILI9328_PART_IMG1_END_AD, 10 );
>
> Gibt es irgendwoe umfangreichere Informationen als in der Anleitung.
> Vielleicht sogar Beispiele für die Verwendung? Das würde mir sehr
> helfen!

Erik Z. schrieb:
> Hallo,
>
> ich habe das Pollin STM32F103VET6 Board mit LCD und einem ILI9325
> Treiber. Mittlerweile bin ich gut voran gekommen und kann halbwegs
> akzeptabel damit arbeiten.
> Zu gerne würde ich die Perfomance noch etwas erhöhen und mit "partial
> Image" arbeiten. Leider ist die Beschreibung hierzu mehr als dürftig.
> Vor allem wenn es um die Beschreibung von der Lage der Daten im GRAM und
> der Anzeige im LCD geht. Wenn ich die Daten eines Bildes gezielt in den
> GRAM schreibe werden diese unabhängig von der Position des Partial
> Images immer in Abhängikeit zur GRAM-Adresse angezeigt.
> Ich erkenne keinen Einfluss von "Partial Image".
>
>     LCD_WriteReg( ILI9328_GRAM_HORZ_AD, 0 );
>     LCD_WriteReg( ILI9328_GRAM_VERT_AD, 0 );
>     LCD_WriteRAM_Prepare();
>
>     // Grüner Strich 10px lang:
>     for( i = 0; i < 10; i++ )
>       LCD_WriteRAM( Green );
>
>     LCD_WriteReg( ILI9328_PART_IMG1_DISP_POS, 100 );
>     LCD_WriteReg( ILI9328_PART_IMG1_START_AD, 0 );
>     LCD_WriteReg( ILI9328_PART_IMG1_END_AD, 10 );
>
> Gibt es irgendwoe umfangreichere Informationen als in der Anleitung.
> Vielleicht sogar Beispiele für die Verwendung? Das würde mir sehr
> helfen!
>
> Gruß Erik

von Erik Z. (erik_wolfram)


Lesenswert?

Ja der mitgelieferte Code war knapp, dafür deine Antwort umso 
hilfreicher!

Das mit dem BASEE und PTDE0 bzw PTDE1 habe ich schlicht überlesen...

Mit den entsprechenden Bits wird der oben aufgeführte Code erweitert und 
es klappt:
1
LCD_WriteReg( ILI9328_DISPLAY_CTRL1, 0x0033 );      // BASEE = 0
2
LCD_WriteReg( ILI9325_DRIVER_OUTPUT_CTRL2, 0x2700 );  // NL[5:0] = 0x27
3
LCD_WriteReg( ILI9328_DISPLAY_CTRL1, 0x1033 );      // PTDE0 = 1, BASEE = 0
4
5
LCD_WriteReg( ILI9328_PART_IMG1_START_AD, 0x0000 );    // PTSA0
6
LCD_WriteReg( ILI9328_PART_IMG1_END_AD, 0x000F );    // PTEA0
7
LCD_WriteReg( ILI9328_PART_IMG1_DISP_POS, 0 );
8
9
10
LCD_WriteReg( ILI9328_GRAM_HORZ_AD, 0 );
11
LCD_WriteReg( ILI9328_GRAM_VERT_AD, 0 );
12
LCD_WriteRAM_Prepare();
13
14
    // Grüner Strich 10px lang:
15
    for( i = 0; i < 10; i++ )
16
      LCD_WriteRAM( Green );
17
18
    // Scrollen entlang der Längsachse:
19
    for( i = 0; i < 320; i++ )
20
    {
21
      LCD_WriteReg( ILI9328_PART_IMG1_DISP_POS, i );
22
      for( j = 0; j < 200000; j++ );            // delay
23
    }

Gruß Erik

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.