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:16 1772 4
REKLAMA
  • #1 5804001
    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
  • REKLAMA
  • REKLAMA
  • #3 5804030
    robiw
    Poziom 26  
    Chodzi Ci zapewne o filtr ze średnią kroczącą? Wykonanie kilkunastu, kilkudziesięciu pomiarów, przefiltrowanie a następnie przepuszczenie przez warunki obliczające położenie. W takim razie po spolaryzowaniu jednej osi i po ustawieniu wejść na drugiej osi a przed wykonaniem pomiaru ADC należałoby odczekać nie 20ms a 500us lub mniej aby wykonanie wielu pomiarów nie zajęło zbyt dużo czasu. W takim wypadku otrzymuje się jednak bardziej dryfujące wyniki... robiw

    PS.
    Tyle, że w wyniku działania takiego filtra otrzymam tablicę wyników a ja potrzebuję przecie jedną wartość
  • REKLAMA
  • #4 5804050
    Freddie Chopin
    Specjalista - Mikrokontrolery
    to co przedstawiles nie bedzie wlasnie srednia biezaca. w koncu zbierasz kilka-kilkanascie probek i dopiero po tym je przeliczasz.

    srednia biezaca bylaby gdybys do jakiejs zmiennej ciagle dodawal probke, jednoczesnie usuwajac z niej probke dodana jako pierwsza. takie fifo. dla przykladu dla dlugosci 10 probek - pierwsze 10 pomiarow byloby schrzanione, ale potem juz byloby lekko usrednione.

    anyłej - jesli ze swoimi pomiarami musisz czekac tak bardzo dlugo, to cos tu musi byc nie tak - przeciez touch panel rezystancyjny nie powinien miec jakiejs wielkiej pojemnosci ktora musialbys przez te 20ms ladowac, tak samo pojemnosc przetwornikow atmegi jest malutka (klilka-kilkanascie piko). dodales jakies filtry analogowe? moze ich stala czasowa jest zbyt dluga i przez to nie mozesz mierzyc czesciej? jesli chcesz usredniac w sposob sensowny (tak aby nie bylo zauwazalnego opoznienia oraz tak aby wyniki byly precyzyjne i stabilne, to niestety musisz probkowac nieco szybciej niz 50Hz.

    zas co do PSa - wcale nie otrzymasz tablicy jest wykonasz usrednianie! a co usrednisz to juz zalezy od ciebie - najprosciej usrednic sam wynik pomiaru ADC, jednak nic nie stoi na przeszkodzie aby usrednic dopiero koncowy wynik (jesli masz tyle mocy, bo to troche marnowanie mocy obliczeniowej [; )

    4\/3!!
  • #5 5804099
    robiw
    Poziom 26  
    Pisałem o średnie kroczące nie bieżącej choć może to być zbliżone. Średnią kroczącą możesz obliczyć korzystając z metody rekursywnej liczenia tej średniej dysponując tablicą pomiarów - podstawa DSP.

    Co zas się tyczy przetwornika: algorytm jest prosty:
    1. Oś X - ustawiam porty jako wyjściowe
    2. Oś X - jeden z portów ->1, drugi ->0 (oś spolaryzowana)
    3. Oś Y - ustawiam porty jako wejściowe (jeden można podpiąć pull-up'em do Vcc -> bardziej stabilny pomiar)
    4. Czekam 10ms
    5. Dokonuje pomiaru ADC na jednym z portów osi Y
    6. Odwracam sytuację i robię pomiar dla drugiej osi

    Gdy czas potrzebny na ustabilizowanie się portów zmniejszę powiedzmy do 500us -> pomiar jest bardziej niestabilny.

    Problemem nie jest jednak sama stabilność pomiaru tylko fakt, iż naciskanie panela opuszką palca trwa chwilę i w tym czasie odczytane mogą być różne pomiary a zatem zinterpretowane jako różne położenia - czym mocniej dociskasz, tym mniejsza wartość odczytujesz co oczywiste - i tu tkwi problem; no i jeszcze powierzchnia styku jest większa. Przy obsłudze za pomocą rysika czy też paznokcia - jest OK... robiw
REKLAMA