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

Touch panel i kalibracja

Ajatol 02 Maj 2009 15:16 2429 4
REKLAMA
  • #1 6481626
    Ajatol
    Poziom 15  
    Nadszedł czas na poznanie paneli dotykowych. Kupiłem panel rezystancyjny 4 końcówki i napisałem program do obsługi małego wyświetlacza 128/64 pikseli.
    Na wyświetlaczu wyświetlam 8 kwadratowych przycisków 32/32 piksele każdy po naciśnieciu których mają być wywołane dalsze podmenu.

    Program działa ale nie tak jak powinien. Problem leży w nieliniowej charakterystyce napięcia odczytywanego z panelu przez ADC z Atmegi w związku z czym przydzielanie koordynat przyciskom to naprawde nieciekawe zajęcie (szczególnie w przypadku skomplikowanego systemu menu). Naciśnięcie panelu w połowie nie daje połowy napięcia nawet w przybliżeniu. Trzeba by to pewnie jakoś skalibrować i tu moja prosba o jakieś porady lub sugestie jak to sie robi i czy to normalna żecz że charakterystyka jest tak nieliniowa.
  • REKLAMA
  • #2 6481654
    Dar.El
    Poziom 41  
    Witam
    Może najpierw podziel się schematem. W moich układach jest liniowo.
  • REKLAMA
  • #3 6481716
    Ajatol
    Poziom 15  
    Posiadam development board z takim podłączeniem no i chyba potwierdziłeś moje mgliste przypuszczenie że to wpływ tych tranzystorów.
    Wogóle te podłączenie nie jest dla mnie dokońca jasne niestety nie mogę w prosty sposób zmienic podłączeń.
  • REKLAMA
  • #4 6482835
    Ajatol
    Poziom 15  
    A więc wylutowałem te tranzystory z rezystorami i podłączyłem bezpośrednio do wyprowadzeń procesora. Niestety nic to nie zmieniło i liniowość jest dalej bardzo zła. Przyciski mam 32/32 piksele i na jednym od początku do końca wartość odczytana z ADC jest około 100 jednostek podczas gdy na innym wynosi już 200 a jeszcze na innych jeszcze inaczej.

    Odczyt jest wykonywany według następującej procedury z internetu.
    Aby odczytać koordynate X
    Podłączam X1 do masy a X2 do VCC.
    Napięcie odczytuje z Y1 można również z Y2 (i jest to moja koordynata X)
    Aby odczytać koordynate Y
    Podłączam Y1 do masy a Y2 do VCC.
    Napięcie odczytuje z X1 można również z X2 (i jest to moja koordynata Y)

    Moje podłączenie
    PF0 = Y1
    PF1 = X1
    PF2 = Y2
    PF3 = X2

    A oto procedura odczytu koordynat.

    
    Readtouch:
    Config Pinf.0 = Output                                      'Y1
    Config Pinf.2 = Output                                      'Y2
    Set Portf.2                                                 ' Sets port F.2 High Y2 do VCC
    Reset Portf.0                                               ' Sets port F.0 Low  Y1 do masy
    Ddrf.1 = 0                                                  ' Sets port F.1 as input (X1)
    Ddrf.3 = 0                                                  ' Sets port F.3 as input (X2)
    Waitms 20                                                   ' Wait until the port is stable
    Y = Getadc(1)                                               ' Read X1 moja koordynata Y
    Config Pinf.1 = Output                                      ' Makes port F.1 output (X1)
    Config Pinf.3 = Output                                      ' Makes port F.3 output (X2)
    Reset Portf.1                                               ' Sets port F.1 Low (X1)
    Set Portf.3                                                 ' Sets port F.3 High (X2)
    Ddrf.0 = 0                                                  ' Sets port F.0 as input (Y1)
    Ddrf.2 = 0                                                  ' Sets port F.2 as input (Y2)
    Waitms 20                                                   ' Wait until the port is stable
    X = Getadc(0)                                               ' Read Y1 moja koordynata X
    Return
    


    Co jest złego w tym kodzie oto jest pytanie.

    Dodano po 2 [godziny] 46 [minuty]:

    Problem został rozwiązany. Miałem włączone diody led (podgląd stanu portów na development board co było przyczyna całego zamieszania. Po wyłączeniu ich liniowośc jest na poziomie 2-3 %.
  • #5 6658412
    przemo.t
    Poziom 27  
    Powinno być:
    
    Config Portf.x = output
    

    x - numer pinu


    jeśli nie pomoże to piny z których nie odczytujesz wartości z ADC a jednocześnie na których dajesz "1" podciągnij do "+", czyli F.1 i F2 podciągnij do +5V przez np 10k
REKLAMA