ILI9325 Partial Image nutzen

OP #4770411
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
Gast #4770876
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
OP #4771373
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren