Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

stm32F429 Disco - Rotacja na Lcd o 90 stopni

09 Dec 2013 10:53 3027 10
  • Level 20  
    Witam
    Używają stm32 i FSMC + LCD +GUI segger chcąc obrócić obraz wystarczy:
    Code: c
    Log in, to see the code


    Sprawa się komplikuje używając stm32F429 + LTDC, LCD-ILI9341
    Próbowałem modyfikować rejestry:
    0x36 /* Memory Access Control register*/
    0xB6 /* Display Function Control register*/

    efekty są takie że obraz się obraca ale jest obcięty
    tak jak by pole było 240x320 a nie 320x240, ale ustawiam xSize =320 ySize =240;
    Code: c
    Log in, to see the code

    Wie może ktoś jak ustawić tą rotację

    Mój driver do wyświetlania to GUIDRV_LIN_32... ma swoje odpowiedniki do rotacji np: GUIDRV_LIN_OSX_32 (32bpp, X axis mirrored, X and Y swapped)
    ale z tych funkcji działają tylko te co obracają o 180 stopni GUIDRV_LIN_OXY_32
    jak użyje tej o 90 to na wyświetlaczu są "krzaczki"

    Pozdrawiam
  • Level 11  
    zainicjuj wyświetlacz z takimi parametrami dwa razy tzn od reset (0x01). Nie znalazłem prostego rozwiązania.
  • Level 20  
    Witam
    kisiel291 wrote:
    zainicjuj wyświetlacz z takimi parametrami dwa razy tzn od reset (0x01)

    Nie rozumie mam zainicjować, wyświetlacz zrobić Software Reset (01h)... a potem zrobić to jeszcze raz, czyli zainicjować i znowu Software Reset?
    to ma pomóc i zmienić rotację?

    Pozdrawiam
  • Level 11  
    Napisałem że od resetu. Masz procedure inincjalizacyjną powiedzmy taką:
    case ILI9341_S4P:
    LCD_Write_COM(0x01); //reset
    delay(15);
    LCD_Write_COM(0x11);//sleep out
    delay(20);
    .
    .
    .
    LCD_Write_COM(0x29); //display on
    delay(5);

    w procedurze inincjalizacji masz ustawienia np. MX ras cas itp.
    Wywołaj to dwa razy.
  • Level 20  
    Witam
    Init Lcd wygląda tak (konfiguracja po SPI):
    Code: c
    Log in, to see the code
    Zmieniam rotacje
    Code: c
    Log in, to see the code

    Ten rejestr jak by nie przyjmował więcej niż 255
    Code: c
    Log in, to see the code

    Wpisuje tak :
    Code: c
    Log in, to see the code

    Ale obraz jest taki sam czyli obcięty (z prawej strony jest pasek z góry na dół)
    Mogę pokazać zdjęcie
    A u ciebie to działa?

    Pozdrawiam
  • Level 11  
    U mnie działa to co napisałem. Za pierwszą inicjalizacją mam obcięty ekran do formatu 200x200 za drugą procka od wypełniania tła przy inicjalizacji wypełnia cały ekran.
    Nie znalazłem lepszego rozwiązania, teoretycznie z podwójnej inicjalizacji wynika że kolejność wpisywania rejestrów jest ważna.
    Może trzeba pomęczyć kilku krotnie sekwencję ustawienia obrotu z ustawieniami ras cas.
    Ja zostawiłem to tak, ekran "blinka" na starcie i jest git.
  • Level 20  
    Witam
    zrobiłem to w inny sposób użyłem funkcji:
    Code: c
    Log in, to see the code

    Tylko żeby to działało trzeba w GUIConf.c ustawić
    Code: c
    Log in, to see the code

    i zrobić sekcje w linkerze adres 0xD0100000 (zewnętrzy SDram)
    Jak pamięć będzie za mała GUI_SetOrientation zwraca błąd i rotacja nie działa

    Pozdrawiam
  • Level 9  
    @Smashing, możesz dokładnie opisać jak to zrobić, bo rozumiem, że po prostu nie ma pamięci. Zrobiłem za pomocą
    Code:
    GUI_SetOrientation(GUI_SWAP_XY | GUI_MIRROR_Y);
    , ale poprzez zmianę wartosci na (1024 * 128 * 8), build zwraca błąd
    Code:
    STM32F429I_DISCO_MB1075\STM32F429I_DISCO_MB1075.axf: Error: L6406E: No space in execution regions with .ANY selector matching guiconf.o(.bss).

    I nie wiem, gdzie zmienić w tym linkerze. Dziekuję za pomoc.
  • Level 20  
    Witam
    w pliku GUIConf.c mam to co pisałem u góry ale żeby to zrobić
    musisz mieć 1Mega ramu, czyli użyłem Sdramu dorabiając sekcje HeapMemSection w skrypcie linkera.
    Sekcje zrób podobnie jak np robi się sekcje data w skrypcie linkera, lub na elektrodzie znajdziesz wiele postów jak to zrobić,
    jak byś jednak nie znalazł napisz to coś się wymyśli....

    Pozdrawiam
  • Level 27  
    Jest taki wpis w LCDConf.c który decyduje o prawidłowej orientacji wyświetlacza

    Config.RegEntryMode =

    ..trzeba wpisać właściwą dla danego wyświetlacza wartość i sztuczki z podwójnym init są zbędne. Ta wartość jest przepisywana do rejestrów sterownika
  • Level 20  
    Witam
    starob wrote:
    Jest taki wpis w LCDConf.c który decyduje o prawidłowej orientacji wyświetlacza

    Config.RegEntryMode =

    ..trzeba wpisać właściwą dla danego wyświetlacza wartość i sztuczki z podwójnym init są zbędne. Ta wartość jest przepisywana do rejestrów sterownika


    Ale tak jest jak używasz GUIDRV_FlexColor_Config
    Code: cpp
    Log in, to see the code
    Jak używasz LCD-TFT controller (LTDC) to tak się nie da zrobić...
    może się da ale ja nie wiem jak

    Pozdrawiam