Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

LPC4088 - emWIN - nie można poprawnie skalibrować panela dotykowego

03 Wrz 2014 13:04 1518 13
  • Poziom 19  
    Cześć wszystkim!

    Udało mi się w końcu uruchomić przykład do obsługi biblioteki emWIN na mojej płycie uruchomieniowej pod LPCXpresso.
    W końcu chciałem uruchomić poprawnie obsługę panela dotykowego. Bez jego kalibracji miałem problemy, oś Y była odwrócona itp. Korzystałem z jakiegoś przykładowego kodu do kalibracji. W końcu znalazłem w katalogu z przykładami biblioteki emWIN plik do kalibracji ekranu. Wszystko się fajnie skompilowało tylko jest teraz dziwny problem.
    Na LCD wyświetlane są punkty które muszą dotknąć aby skalibrować TP. Jednak nie mogę ich dotknąć w tych miejscach w których są wyświetlane. Całość zachowuje się tak jakby pole które można było wcisnąć jest mniejsze niż obszar roboczy LCD. Aby funkcja pobierająca współrzędne zadziałała, muszę się oddalić znacznie od krawędzi LCD.

    Czy ktoś wie gdzie leży problem? Dodam tylko, że chciałbym zostać przy tej procedurze kalibracji bo nawet przy złym wykalibrowaniu kursor działa jak powinien, tzn. osie nie są odwrócone.

    Dzięki.
  • Poziom 23  
    Bez kodu ciężko cokolwiek wydumać. Pokaż kod lub wrzuć projekt tylko wcześniej daj make clean.
  • Poziom 23  
    Nie jestem specem pd emWin ale wygląda na to, że wstępnie należy użyć funkcji GUI_TOUCH_Calibrate z wartościami parametrów odczytanych przez ADC w dwóch przeciwległych rogach ekranu dotykowego.
    Dla mojego wyświetlacza 4,3" 480x272 to:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Skąd wsiąść te powyższe dane dla Twojego ekranu ?
    W przykładach masz plik Touch_Sample.c, dodaj go tymczasowo do projektu. Niech "tylko" uruchomi się funkcja MainTask właśnie z tego pliku. Kiedy uruchomisz program dotykając ekranu dotykowe w odpowiednich rogach ekranu będziesz miał wartości których szukasz. Poźniej możesz usunąć z projektu Touch_Sample.c. Zauważyłem, że wiele kodu w projekcie jest zbędnego np.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Skoro pomiarem napięcia wyjścia ekranu dotykowego zajmuje się TSC2046 możesz wszystkie funkcje związane z pomiarem napięcia przez ADC mikrokontrolera usunąć

    --EDIT
    Ustaw tylko odpowiednimi wartościami makra podane wyżej, ponieważ funkcja _InitController m.in. wywołuje GUI_TOUCH_Calibrate.
  • Poziom 19  
    Nic to nie daje. Czy to nie jest tak, że ma to znaczenie ale dla pomiaru bezpośrednio przed ADC?

    Jeśli chodzi o plik LCDConf.C to dokonałem w nim nastepujących edycji:

    1.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Funkcja sprawdza czy jest dotyk, więc skorzystałem z innego przykładu który właśnie tak działa(jeden z pinów TSC).

    2. Zakomentowałem funkcje: void GUI_TOUCH_X_ActivateX(void) oraz void GUI_TOUCH_X_ActivateY(void) . Z tego co widzę na 1 rzut oka obsługują ADC który mnie przecież nie obchodzi.

    3. Zmodyfikowałem funkcję następujące:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    oraz

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Odczyt X czyta tak na prawdę Y i z kolei Y czyta X. Zamieniłem to na szybkiego ponieważ gdybym to poprawnie (X-X, Y-Y) Osie były odwrócone.

    Fragmenty kodu które wkleiłem do tych funkcji pochodzą z pliku TouchPanel.C i wygląda na to, że działają bo jakieś współrzędne zwracają.

    I muszą też być przekazywane do funkcji kalibracyjnej więc nie wiem dlaczego jest problem :cry: Chyba, że powinienem użyć innych funkcji do odczytu ?
  • Pomocny post
    Poziom 23  
    Jestem aktualnie poza kompem. Ja zrobilem tak jak wczesniej napisalem czyli ustawilem odpowiednie wartosci dla funkcji GUI_TOUCH_Calibrate, poza tym ustawilem tylko rozmiary mojego wyswietlacza, nic poza tym. Po wczytaniu do mcu dokonalem kalibracji dotykajac tych 2 rysowanych na ekranie punktow po czym kursor pojawial sie dokladnie w tym miejscu gdzie dotykalem ekranu...
  • Poziom 19  
    A jak masz podpięty touchpanel? Też przez układ TSC?
  • Pomocny post
    Poziom 23  
    paavo91 napisał:
    A jak masz podpięty touchpanel? Też przez układ TSC?

    Tak, dokładnie przez taki.

    paavo91 napisał:
    Nic to nie daje. Czy to nie jest tak, że ma to znaczenie ale dla pomiaru bezpośrednio przed ADC?

    Jeśli chodzi o plik LCDConf.C to dokonałem w nim nastepujących edycji:

    1.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Funkcja sprawdza czy jest dotyk, więc skorzystałem z innego przykładu który właśnie tak działa(jeden z pinów TSC).

    2. Zakomentowałem funkcje: void GUI_TOUCH_X_ActivateX(void) oraz void GUI_TOUCH_X_ActivateY(void) . Z tego co widzę na 1 rzut oka obsługują ADC który mnie przecież nie obchodzi.

    3. Zmodyfikowałem funkcję następujące:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    oraz

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Odczyt X czyta tak na prawdę Y i z kolei Y czyta X. Zamieniłem to na szybkiego ponieważ gdybym to poprawnie (X-X, Y-Y) Osie były odwrócone.


    Ad. 1. W zupełności wystarcza, zwyczajne badanie stanu pinu.
    Ad. 2. Tak mierzenie napięcia z panelu dotykowego przez mikrokontroler odpada ponieważ zajmuje się tym specjalizowany układ TSC2046 lub podobny. Co do funkcji GUI_TOUCH_X_ActivateX i GUI_TOUCH_X_ActivateY nie wypowiadam się, należy porzytać w UM od emWin.
    Ad. 3. Rzecz względna, bo powiedz mi gdzie w wyświetlaczu jest np. góra / dół :)
    Sadzę, że można by zamienić CHX na CHY i odwrotnie w/w funkcjach ponieważ jak się domyślam odpowiednia modyfikacja poniższego kodu odpowiednio "zorientuje" TP.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czy skorygowałeś tak jak wcześniej pisałem TOUCH_AD_LEFT, TOUCH_AD_RIGHT, TOUCH_AD_TOP, TOUCH_AD_BOTTOM ?
  • Poziom 19  
    Właśnie sprawdziłem to jeszcze raz. Wcześniej musiałem coś pominąć. Po zmianie tych makr wygląda na to, że jest dobrze ale jeszcze nie najlepiej. Wartości chyba są troszkę wpisane "na pałe" :) Jak to zrobić, żeby zbadać skrajne punkty i np. wypluć je na UART? Twoje wartości nie pozwalają dokładnie wcisnąć tam gdzie są punkty pomiarowe.
  • Pomocny post
    Poziom 23  
    Przecież napisałem :)
    Badmaneq napisał:

    Skąd wsiąść te powyższe dane dla Twojego ekranu ?
    W przykładach masz plik Touch_Sample.c, dodaj go tymczasowo do projektu. Niech "tylko" uruchomi się funkcja MainTask właśnie z tego pliku. Kiedy uruchomisz program dotykając ekranu dotykowe w odpowiednich rogach ekranu będziesz miał wartości których szukasz. Poźniej możesz usunąć z projektu Touch_Sample.c.

    Wartości podane w makrach odnoszą się do mojego wyświetlacza 4,3", a Ty jak widzę w kodzie masz 7". Jak się uruchomi kod zawarty MainTask pliku Touch_Sample.c na ekranie będziesz miał wyświetlone wartości dla przyciskanych punktów na TP, nie jest potrzebny UART.
  • Poziom 19  
    Przepraszam, faktycznie mi to napisałeś wcześniej :) Odczytałem jak mówiłeś, kalibracja działa rewelacyjnie, można używać biblioteki :)

    Dzięki Badmaneq !
  • Poziom 19  
    Ale kompiluje ją dla M4 oraz FPU Soft-ABI. Próbowałem podmienić pliki z biblioteki obsługującej sprzętowy FPU, niestety miałem masę błędów i nie mogłem skompilować. Na razie zostanę przy tej wersji.
  • Poziom 23  
    Zajrzałem jeszcze do projektu nanieś poniższe poprawki w pliku SDRAM_K4M563233G_32M_32BIT.h pozwoli pamięci SDRAM poprawnie działać jesli będziesz chciał mikrokontroler taktować inną częstotliwością niż 120 MHz.

    Kod: c
    Zaloguj się, aby zobaczyć kod