Obsługa kontrolera klawiatur pojemnościowych w mikrokontrolerach Freescale Kinetis
Cechy TSI
W module TSI zaimplementowano funkcjonalności umożliwiające prosty i zarówno wydajny odczyt stanów przycisków klawiatur pojemnościowych. Główne cechy modułu TSI to:
- Możliwość odczytu stanu przycisków we wszystkich trybach pracy mikrokontrolera,
- Automatyczny cykliczny odczyt stanu przycisków z konfigurowalnym czasem przerwy między odczytami lub pojedynczy odczyt,
- Tryb działania z obniżonym poborem prądu (poniżej 1 µA),
- Współpraca z wieloma przyciskami (do 16 niezależnych elektrod z oddzielnymi rejestrami),
- Automatyczna detekcja zmiany pojemności z konfigurowalnym górnym i dolnym poziomem pojemności oddzielnie dla każdej z elektrod,
- Praca w trybie przerwań – generowanie przerwania po każdym zakończonym procesie skanowania elektrod,
- Wykrycie zwarcia elektrody do napięcia zasilania lub masy,
- Wykrycie przekroczenia czasu konwersji.
Tryby pracy TSI
Moduł TSI może pracować w trzech różnych trybach: tryb ciągły aktywny (continuous active mode), tryb aktywny wyzwalany programowo (software triggered active mode), tryb ciągły o obniżonym poborze prądu (continuous low power mode).
Tryb ciągły aktywny
Cechy trybu ciągłego aktywnego:
- Wszystkie włączone elektrody są skanowane w sposób ciągły,
- Okres skanowania jest określany przez wartość rejestru SMOD,
- Tryb dedykowany do pracy mikrokontrolera w trybie aktywnym.
Tryb aktywny wyzwalany programowo
Cechy trybu aktywnego wyzwalanego programowo:
- Wszystkie elektrody są skanowane jeden raz,
- Brak okresu skanowania.
Tryb ciągły o obniżonym poborze prądu
Cechy trybu ciągłego o obniżonym poborze prądu:
- Tylko jedna elektroda jest skanowana w sposób ciągły,
- Elektroda może zostać użyta do wybudzenia mikrokontrolera z trybu uśpienia,
- Okres skanowania jest niezależny od okresu skanowania w trybie ciągłym aktywnym,
- Tryb jest aktywowany gdy mikrokontroler przechodzi do trybu uśpienia (bit STPE musi być ustawiony),
- Tryb umożliwia obniżenie poboru prądu pobieranego przez moduł TSI.
Konfiguracja TSI
Przykładowy kod źródłowy do konfiguracji modułu TSI przedstawiono w listingu:
SIM_SCGC5 |= (SIM_SCGC5_TSI_MASK); SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK); PORTA_PCR4 = PORT_PCR_MUX(0); //Enable ALT0 for portA4 //Configure the number of scans and enable the interrupt TSI_GENCS |= ((TSI_GENCS_NSCN(10))|(TSI_GENCS_TSIIE_MASK)|(TSI_GENCS_PS(3))); TSI_SCANC |= ((TSI_SCANC_EXTCHRG(3))|(TSI_SCANC_REFCHRG(31))| (TSI_SCANC_DELVOL(7))|(TSI_SCANC_SMOD(0))|(TSI_SCANC_AMPSC(0))); //Enable the channels desired TSI_PEN |= (TSI_PEN_PEN5_MASK|TSI_PEN_PEN7_MASK| TSI_PEN_PEN8_MASK|TSI_PEN_PEN9_MASK); TSI_THRESHLD5 = (uint32)((TSI_CHAN5_OFFSET)); TSI_THRESHLD7 = (uint32)((TSI_CHAN7_OFFSET)); TSI_THRESHLD8 = (uint32)((TSI_CHAN8_OFFSET)); TSI_THRESHLD9 = (uint32)((TSI_CHAN9_OFFSET)); //Enable TSI module TSI_GENCS |= (TSI_GENCS_TSIEN_MASK); //Enables TSI
Przedstawiony kod można podzielić na kilka podpunktów:
- Na początku odbywa się włączenia zegarów – dla modułu TSI oraz portu PORTA. Włączenie sygnału zegarowego dla portu PORTA jest wymagane, gdyż jeden z konfigurowanych kanałów TSI (channel 5) jest dołączony do wyprowadzenia PORTA 4, którego podstawową funkcją nie jest praca jako wejście modułu TSI.
- W kolejnym etapie konfigurowany jest rejestr kontrolny (control register) i statusowy (status register) GENCS. Ustawiana jest liczba procesów skanowania i preskaler. Dodatkowo skonfigurowany może zostać tryb pracy, przerwania, wykrywanie błędów oraz możliwość generowania przerwania po każdorazowym zakończeniu skanowania elektrod. Jeśli używany jest tryb o niskim poborze prądu, konieczne jest wskazanie zegara referencyjnego (LPCLKS) oraz interwał skanowania (LPSCNITV).
- Następnie konfigurowany jest kontrolny rejestr skanowania (scan control register) (SCANC). Określa on parametry elektryczne ładowania i rozładowywania kondensatora elektrody, w tym prąd ładowania i źródło odniesienia (EXTCHRG, REFCHRG) oraz parametry czasowe jak okres skanowania, który zależny jest od zegara (AMCLKCS), preskalera (AMPSC) i dzielnika zegara (SMOD).
- Kolejny krok polega na ustawieniu rejestru PEN (pin enable register) włączającego piny TSI. 16 najmniej znaczących bitów 32-bitowego rejestru odpowiada za aktywowanie 16 wyprowadzeń elektrod. Tryb o obniżonym poborze prądu konfigurowany jest przez bity 16 – 19.
- Następnie konfigurowane są poziomy pojemności: maksymalny i minimalny. Wartości poziomów przechowywane są w rejestrach THRESHLDx. Każda elektroda ma przyporządkowany jeden rejestr. 16 najmniej znaczących bitów rejestru określa poziom wysoki pojemności, natomiast kolejne 16 najbardziej znaczących bitów określa poziom niski pojemności.
- Ostatnim etapem konfiguracji jest włączenie modułu TSI (ustawienie bitu TSIEN).
Przykładowe oprogramowanie
Firma Freescale przygotowała przykładowe oprogramowanie dla modułu TSI (zostało ono zamieszczone w załączniku do artykułu). Jest ono przeznaczone na platformę Freescale Tower. Jej działanie polega na odczycie stanu czterech przycisków klawiatury pojemnościowej i sygnalizacji wciśnięcia lub braku wciśnięcia przycisków za pomocą diod LED. Schemat konfiguracji modułu TSI przedstawiono na rysunku 4.
Rys. 4. Przykładowa procedura inicjalizacji modułu TSI