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

[AVR/Atmega][C/AVRGCC] Dotykowy czujnik pojemnościowy na AVR

gdL 06 Sty 2011 15:48 3831 2
REKLAMA
  • #1 8966742
    gdL
    Poziom 27  
    Czujnik jest w zasadzie zwykłym kawałkiem folii aluminiowej izolowanym przy pomocy taśmy klejącej. Może przypominać drabinkę jak na schemacie, albo też mieć inny kształt. Istotne są małe odległości pomiędzy ścieżkami i wysoka sumarycznie długość ścieżek. Pojemność zmienia się w zależności od dielektryku pomiędzy okładkami (inny kiedy dotykamy czujnika, inny gdy nie). Drugim czynnikiem jest działanie ciała samego w sobie jako dodatkowego kondensatora połączonego równolegle z kondensatorem ze ścieżek. Można zobaczyć prezentację microchip'a : Link

    Cykl zbierania danych rozpoczyna naładowanie kondensatora (port jako wyjście - DDR =1, w stanie wysokim, PORT = 1) przez 20ms. Czas należy dobrać indywidualnie, ten jest aż nadto wystarczający. Następnie pin przełącza się jako wejście trójstanowe (DDR = 0; PORT = 0). W tym czasie następuje rozładowanie przez upływność układu. Jest to mierzone w cyklach. Koniec mierzenia stanowi moment przejście PINu procesora z 1 w 0. Dołożenie palca sprawia, że rozładowanie jest szybsze (zajmuje mniej cykli).

    Nie rozumiem tylko jednej rzeczy. W/g prezentacji microchip'a dodatkowy kondensator (ciało) powinno zapewniać wolniejsze rozładowanie. A jest dokładnie odwrotnie. Mniej cykli zajmuje rozładowanie podczas dotykania czujnika! Wydłużenie czasu ładowania ponad 20ms, nic nie zmienia Wydumałem sobie, że chodzi tu o upływność ciała człowieka. Tzn ciało jest nie tylko kondensatorem włączonym równolegle do układu, ale też rezystorem.

    Tu macie wynik mojej pracy w filmiku : Link.
    Zapraszam też na bloga, gdzie jest też schemat podłączenia i kod w C : Link
  • REKLAMA
  • #2 8966774
    oskar777

    Poziom 26  
    Ciekawe rozwiązanie jak dla mnie, chciałem takie coś zastosować do maty a widzę, że jest tu wersja bez ADC. Wiesz może przypadkiem jak powierzchnia czujnika / wielkość wpływa na czas reakcji ?
  • #3 8967058
    gdL
    Poziom 27  
    Czas reakcji jest w pewien sposób determinowany przez powierzchnię, ale sądzę, że spokojnie można wszystko dobrać używając zewnętrznych rezystorów. Zawsze jest balans pomiędzy częstotliwością odświeżania, a rozdzielczością pomiaru, przy założonej częstotliwości taktowania procesora. Jeśli masz tylko dwustanową detekcję, to możesz spokojnie zwiększyć częstotliwość odświeżania, a nawet zastosować uśrednianie kilku pomiarów.

    Narazie cały czas zastanawiam się skąd rozbieżność pomiędzy filmikiem instruktażowym Microchip i wykonanym przeze mnie "doświadczeniem". W drugą stronę to rzeczywiście działa. Jeśli mierzę czas ładowania, tj. czas przejścia ze stanu 0 do stanu 1, to czas ten jest dłuższy w przypadku dotknięcia palcem, niż w stanie jałowym.

    A robię to tak :
    
    ////// inicjacja
    DDR = 1, PORT = 0; 
    czekaj(20ms);
    ////// zmienne
    int licznik=0;
    ///
    while(PIN = 0) {
    DDR = 0, PORT = 1;
    czekaj(1us);
    DDR = 0, PORT = 0;
    PIN = stan portu;
    licznik++;
    }
    ////// 
    


    Ładowanie jest więc przez pullup. Zajmuje 3 cykle bez dotykania i około 5 cykli z dotknięciem. To jest spójne z moją "teorią" upływności.
REKLAMA