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

Stabilizacja odczytów napięcia-położenia z touchpanela?

robiw 01 Gru 2008 10:15 924 0
REKLAMA
  • #1 5803999
    robiw
    Poziom 26  
    Witam,
    Zrobiłem na Atmedze16 prosty układzik do obsługi touchpanela rezystancyjnego, którego końcówki X1, Y1, X2, Y2 podpiąłem pod wejścia przetwornika ADC i polaryzując jedną oś odczytuję napięcie na drugiej (z jednego z portów, drugi pozostawiając wiszący lub podciągnięty pull-up'em) i na odwrót. Do odczytania położenia używam procedury, która "dzieli" ekran na pola o rozmiarze 16x16 pikseli zachowując pasma nieaktywne pomiędzy polami i przekładając to na poziomy napięcia dokonuję obliczenia położenia. Przetwornik zasilam z Vcc, obwody LC na zasilaniu, preskaler 128, fosc=12MHz. Wszystko chodzi fajnie dopóki elementy nie są małe lub dopóki nie obsługuję panela za pomocą opuszka palca. Występuje taki problem, iż jeśli chcesz wybierać pola palcem (nie jakimś rysikiem) to siła nacisku zmienia się w czasie przyciskania i co za tym idzie odczytywane wartości, które powodują zwracanie różnych wartości położenia. Po polaryzacji każdej z osi i ustawieniu drugiej jako wejścia odczekuję ok.10ms na ustabilizowanie się portów a następnie robię odczyt. Tak samo dla drugiej osi. Dodatkowo po ustawieniu flagi, że przyciśnięto panel, odczekuję 20ms i robię ponowny pomiar. Niestety to nie pomaga gdy naciska się palcem (ale z paznokciem jest już OK). Ustawienie krótszych delayów i zrobienie większej liczby pomiarów oraz ich uśrednienie niczego nie zmienia; wybranie największej wartości z paczki pomiarów też nic nie daje. Zresztą przy krótszych delayach pomiary strasznie skaczą - to pewnie wpływ przestawiania trybu pracy portów. Zastanawiam się jaki algorytm (filtr cyfrowy) zastosować by opanować ten problem. Uprzejmie proszę o sugestie... robiw

    PS.
    Mógłbym zrobić serię pomiarów a następnie używając filtra ze średnią kroczącą, przefiltrować tablicę ale ja potrzebuję jednej wartości jako efekt działania procedury nie zaś całej tablicy. Liczenie średniej nie zdaje rezultatu.
  • REKLAMA
REKLAMA