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

Atmega328 - ADS7843 zakłócenia odczytu wspołrzędnych

oficerJK 03 Mar 2015 21:12 921 2
REKLAMA
  • #1 14497643
    oficerJK
    Poziom 10  
    Witam Ponownie,
    Problem mam z prawidłowym zaimplementowaniem gotowej biblioteki obsługi dotyku na wyświetlaczu 2,4 " . A mianowicie ustaliłem trzy obszary dotyku równo w odstępach po długości ekranu ale nie do końca po szerokości i jeśli mój palec dotknie jednego z nich w tym miejscu pojawi się zielony prostokąt. Wszystko było fajnie jak był tylko skrajny lewy, wtedy faktycznie dotyk działał tylko tam i nigdzie indziej nie można było zobaczyć tego zielonego prostokąta. W momencie gdy mam już trzy to zdarza się że pomimo że naciskam poza obszarem wskazanym wcześniej to i tak czasem rysują mi się te prostokąty. Wtedy sprawdziłem jakie współrzędne wskazuje punkt dotyku i o dziwo wyszło na to , że były one takie jakbym dotykał w miejscu aktywnym. Tak jakby przetwornik odczytywał zakłócenia z faktu dotyku a poniżej kod w którym to się realizuje:


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

    Wydaję mi się , że za szybko odczytywane są współrzędne dotyku.
    Nie znam się za bardzo na tym układzie, może jakoś da się to uskutecznić ?
    Dotyk jest wykrywany przez program jako sygnał stan niski na pinie PENIRQ.
    ADS7843 działa po SPI programowym , atmega 328P kwarc 16 MHz
    kod obsługi scalaka dotyku poniżej:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 14497940
    BlueDraco
    Specjalista - Mikrokontrolery
    Wydaje mi się, że błędnie czytasz wyniki konwersji - nie te bity, co trzeba (o jeden bit za wcześnie, więc gubisz precyzję).
    Drugi problem - to brak else we fragmencie kodu odpowiedzialnym za interpretację - Jeśli już wiesz, że współrzędne "trafiły" w jakiś prostokąt, to nie ma sensu sprawdzanie, czy przypadkiem nie trafiły w inny, bo nie ma takiej możliwości.
    Kolejny problem - to uśrednianie 12 pomiarów. Po co? Wystarczy stwierdzić, że dwa kolejne nie odbiegają zbytnie od siebie, za to musisz przy każdym pomiarze sprawdzać, czy panel jest naciśnięty, czego nie robisz. Jeśli został zwolniony - dalsze pomiary nie mają sensu.
  • #3 14501408
    oficerJK
    Poziom 10  
    Dziękuję za cenne wskazówki, prawie wszystko rozumuję tylko z tą dokładnością bitową nie bardzo wiem jak to zmienić , proszę o sugestię to sprawdzę czy coś się zmieni. Obecnie się poprawiło po tym jak po zakończeniu dotyku ( bo on też generuje funkcją touch avilable() odczyt z przetwornika ) ponowny odczyt śmieci i i wpisanie do zmiennych x y współrzędnych z aktywnego obszaru w którym dotyk był zrealizowany aby nie dać pożywki do dalszych sprawdzeń if . Ale po cennych uwagach zniosę to spróbuje na warunkach else..
REKLAMA