LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Implementacja obsługi klawiatur pojemnościowych w LPC17xx firmy NXP

Wartości napięcia przetwarzane są następnie przez funkcję _processAdcReading(). Jeśli odczytany poziom napięcia jest większy niż wartość uzyskana podczas kalibracji powiększona o 6% przyjmuje się, że przycisk został naciśnięty (listing 8).

 

Listing 8.

/* process of adc reading */
/* readings are ordered per channel */
/* kpresses are ordered per kbd values */
#define UPPER_THR 8
#define LOWER_THR 3
static void _processAdcReading(ChannelIdType chNum)
{
    uint32_t currentAvg = average[chNum];
    uint32_t upperThreshold = currentAvg + (currentAvg*UPPER_THR)/100;
    uint32_t lowerThreshold = currentAvg + (currentAvg*LOWER_THR)/100;

    if (reading[chNum] > upperThreshold) //above(average+6%)->press condition
    {
        if (debounce[chNum] > 8)       //debounce, 8 successive triggers for press
        {
            kbdPress[Ch2KpadMap[chNum]] = 1;      //reached max, indicate pressed
         kPressCntr++;
            debounce[chNum] = 0; // now it is pressed
    }
        else debounce[chNum] ++;                  // still going toward max    
    }
    else if(reading[chNum]not detected condition
    {
            debounce[chNum] --;                           
    }

}

Przedstawiona powyżej idea jest bardzo prostą i wygodną metodą realizacji interfejsów użytkownika z klawiaturami pojemnościowymi. Implementacja sprzętowa wymaga minimalnej ilości elementów zewnętrznych, natomiast implementacja programistyczna wykorzystuje podstawowe peryferia mikrokontrolera oraz nie wymaga skomplikowanych obliczeń i przetwarzania danych w celu uzyskania informacji o stanie przycisków.
Omówiony kod źródłowy przeznaczony jest dla mikrokontrolerów NXP LPC17xx, jednak ze względu na swoją uniwersalność algorytm może zostać łatwo przeniesiony na inne platformy sprzętowe.

 

Literatura

[1] www.nxp.com AN11023 – Capacitive touch sensing using the LPC11xx, Rev. 1, 3 February 2011

SZYMON PANECKI urodził się 17 lutego 1985 roku w Milanówku. Tytuł inżyniera Elektroniki i Telekomunikacji, a następnie magistra inżyniera na Wydziale Elektroniki Politechniki Wrocławskiej uzyskał kolejno w roku 2008 i 2010. Ponadto tytuł inżyniera Informatyki na Wydziale Elektroniki Politechniki Wrocławskiej uzyskał w roku 2011. Szymon Panecki jest doświadczonym elektronikiem-konstruktorem, który w trakcie swojej zawodowej kariery koncentruje się na definiowaniu i projektowaniu (zarówno w warstwie sprzętowej jak i programowej) systemów wbudowanych opartych na mikrokontrolerach z rdzeniem ARM od różnych producentów, w tym przede wszystkim Infineon Technologies (rodzina XMC1000 i XMC4000), STMicroelectronics (STM32 i STR7), Freescale Semiconductor (Kinetis L) oraz Silicon Labs (EFM32 i Precision32). Obszarem jego szczególnego zainteresowania są systemy wykorzystujące czujniki środowiskowe (wilgotności, ciśnienia, temperatury) oraz przemysłowe i motoryzacyjne interfejsy komunikacyjne, głównie CAN. Szymon Panecki od wielu lat współpracuje z czasopismem "Elektronika Praktyczna" oraz portalem Mikrokontroler.pl, na łamach których publikuje liczne artykuły dotyczące swoich projektów, jak również nowości produktowych firm z branży półprzewodnikowej.