logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Wyświetlacz z ili9325 - błąd w obsłudze czcionek

resonator 06 Lip 2016 22:36 957 9
REKLAMA
  • #1 15791554
    resonator
    Poziom 7  
    Posty: 27
    Witam męczę się z tym problemem od kilku dni, bezskutecznie, więc postanowiłem wreszcie poprosić o pomoc z zewnątrz. Co do samego mechanizmu rysowania to nie mam zarzutów, aczkolwiek problem tkwi w tym, że znak z czcionki da się narysować jedynie na współrzędnych gdzie x==y !!! Jeśli nie są sobie równe to znak jest dziwnie przesunięty.

    Tu jest poprawnie narysowany znak na współrzędnych 100;100:
    Wyświetlacz z ili9325 - błąd w obsłudze czcionek

    A tu już źle na współrzędnych 105;100:
    Wyświetlacz z ili9325 - błąd w obsłudze czcionek

    Funkcja wygląda tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Może ktoś z was już spotkał się z czymś takim? Będę wdzięczny za każdą wskazówke.

    PS Fonty generuje w PixeLab.
  • REKLAMA
  • #2 15791846
    excray
    Poziom 41  
    Posty: 5500
    Pomógł: 739
    Ocena: 656
    Pokaż jaką masz konfigurację wyświetlacza, a w szczególności rejestr Entry Mode. Pokaż pozostałe funkcje a w szczególności Lcd_SetArea. Wyświetl na ekranie jakąś niesymetryczną literę i wrzuć zdjęcia. Orientacja bajtów wygenerowanych fontów jest pionowa czy pozioma?
  • REKLAMA
  • #3 15792484
    resonator
    Poziom 7  
    Posty: 27
    Konfiguracja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Orientacja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    LCD_SetArea():
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 15792746
    excray
    Poziom 41  
    Posty: 5500
    Pomógł: 739
    Ocena: 656
    I jak rozumiem, znowu muszę Cię prosić abyś dołączył mi kolejny ochłapek kodu w którym ukryte są funkcje i definicje które widzę w tych ochłapkach? Wiesz co. Sprawdzaj sobie sam gdzie jest błąd. Kod z pierwszego postu jest poprawny więc pewnie masz coś zwalone w konfiguracji albo innej części kodu której nie chcesz pokazać.
  • #5 15794144
    starob
    Poziom 29  
    Posty: 1088
    Pomógł: 128
    Ocena: 137
    excray napisał:
    Kod z pierwszego postu jest poprawny więc pewnie masz coś zwalone w konfiguracji albo innej części kodu której nie chcesz pokazać.

    Racja :) ...ciekawe jak wygląda funkcja GRAM Horizontal/Vertical Address Set (R20h, R21h) ?
    Z drugiego obrazka widać, że zaczyna zapisywać do pamięci z niewłaściwej pozycji.
    SetArea() ma zamienione X-Y mam nadzieje, że tak ma być?
    Tak samo po sobie LCD_SetOrientation(_orientation) i LCD_WrCmd(0x0003); LCD_WrDat(0x1028);?
  • REKLAMA
  • #6 15794222
    resonator
    Poziom 7  
    Posty: 27
    starob napisał:
    excray napisał:
    Kod z pierwszego postu jest poprawny więc pewnie masz coś zwalone w konfiguracji albo innej części kodu której nie chcesz pokazać.

    Racja :) ...ciekawe jak wygląda funkcja GRAM Horizontal/Vertical Address Set (R20h, R21h) ?
    Z drugiego obrazka widać, że zaczyna zapisywać do pamięci z niewłaściwej pozycji.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    starob napisał:
    SetArea() ma zamienione X-Y mam nadzieje, że tak ma być?

    Działam w trybie odwróconym (landscape), więc chyba musi byc?


    starob napisał:
    Tak samo po sobie LCD_SetOrientation(_orientation) i LCD_WrCmd(0x0003); LCD_WrDat(0x1028);?

    Rzeczywiście, masz sokole oko :D
  • #7 15794237
    starob
    Poziom 29  
    Posty: 1088
    Pomógł: 128
    Ocena: 137
    resonator napisał:
    LCD_SetCursor(unsigned int x, unsigned int y)

    .. co z tego, że masz :) .. czy używasz jej właściwie przed rozpoczęciem wpisywania znak - czy w ogóle jej używasz?
    Musisz ustawić na pozycję lewy górny róg "area" znaku.
  • REKLAMA
  • #8 15794332
    resonator
    Poziom 7  
    Posty: 27
    Źle zrobiłem, że nie wstawiłem od razu całego kodu... Żeby uniknać niejasności tu jest wszystko w jednym ;)

    Init:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Orientacja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ustawienie kursora:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ustawienie aktywnego obszaru:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Rysowanie znaku:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I główna funkcja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #9 15794443
    starob
    Poziom 29  
    Posty: 1088
    Pomógł: 128
    Ocena: 137
    resonator napisał:
    Działam w trybie odwróconym (landscape), więc chyba musi byc?


    ..to dlaczego
    resonator napisał:
    LCD_SetCursor(x1, y1)
    a nie dodwrotnie?

    Dla x=y działa prawidłowo więc to jest przyczyna.

    if(_orientation == LANDSCAPE)
    {
    LCD_WrCmd(0x0020);LCD_WrDat(x);
    LCD_WrCmd(0x0021);LCD_WrDat(y);
    }

    usystematyzuj i właściwie zainicjuj "orientation", nie chce mi się analizować poprawności
  • #10 15794466
    excray
    Poziom 41  
    Posty: 5500
    Pomógł: 739
    Ocena: 656
    resonator napisał:
    Działam w trybie odwróconym (landscape), więc chyba musi byc?

    Chyba nie musi. Nie wiem skąd wziąłeś ten pomysł aby przy tym grzebać. Testowałeś to w jakikolwiek sposób czy na pewno jest to potrzebne? Ja mam wyświetlacz z ILI9341 i tam wystarczy w konfiguracji zmienić orientację. Funkcje SetCursor i SetArea w niczym się nie różnią dla tych dwóch orientacji i wszystko działa perfekcyjnie. Jedyne co trzeba uwzględnić to to, że po zmianie orientacji z pionowej na poziomą X zwiększa swój rozmiar z max 239 do max 319 i analogicznie Y zmniejsza.

Podsumowanie tematu

✨ Użytkownik zmaga się z problemem wyświetlania znaków na wyświetlaczu ILI9325, gdzie znaki są poprawnie rysowane tylko na współrzędnych, gdzie x==y, a w innych przypadkach są przesunięte. W odpowiedziach poruszono kwestie konfiguracji wyświetlacza, w tym rejestru Entry Mode oraz funkcji LCD_SetArea i LCD_SetCursor. Zwrócono uwagę na konieczność poprawnej inicjalizacji orientacji wyświetlacza oraz na różnice w obsłudze orientacji w zależności od modelu wyświetlacza. Użytkownicy sugerują, aby sprawdzić, czy funkcje są używane w odpowiednich miejscach oraz czy kod jest kompletny, aby zidentyfikować źródło problemu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA