Powrót

Mikroprocesorowa ośla łączka, część 15

Proste klawiatury są czasami za proste (mają zbyt mało przycisków) i wymagają rozbudowy. Wiąże się ona często z większą komplikacją sprzętową i często z bardziej rozbudowanym programem obsługi. Zróbmy więc coś ciekawego: przejście od prostej realizacji algorytmu do bardziej złożonego.

W tej części cyklu poświęconego mikrokontrolerom przedstawię „technikę” projektową, gdzie metodą kolejnych przybliżeń oprogramowanie będzie ulegało ewolucji. Pewne elementy, które będą wykorzystane są już znane, jak obsługa klawiatury w przerwaniach od upływu czasu. Drugim elementem jest obsługa kolejek FIFO, która doskonale radzi sobie z buforowaniem danych uzyskanych z obsługi klawiatury. Jednak najważniejszym celem jest uzyskanie takiej wersji, która jest sama w sobie niezależna od środowiska.

Działanie klawiatur matrycowych

To rozwiązanie pozwala znacząco zwiększyć liczbę obsługiwanych przycisków przy jak najmniejszej liczbie pinów niezbędnych do jej obsługi. Zbiór przycisków należy połączyć zgodnie z koncepcją pokazaną na rysunku 1 – można tu wyróżnić rzędy oraz kolumny tak utworzonej matrycy.

Rysunek 1

Naciśnięcie jakiegokolwiek przycisku łączy jedną linię rzędu z jedną linią kolumny. Obsługa tego typu klawiatur polega na przyłączeniu do portu wyjściowego wszystkich linii będących rzędami oraz do portu wejściowego wszystkich linii będących kolumnami klawiatury. Łatwo zauważyć, że zagadnienie jest symetryczne, toteż znaczenie rzędów oraz kolumn jest umowne (w dalszych rozważaniach mikrokontroler będzie sterował liniami rzędów oraz odczytywał linie kolumn), jak pokazuje rysunek 2. Istotnym elementem jest zespół rezystorów „podciągających” linie wejściowe do jedynki logicznej w porcie wejściowym. Obecnie mikrokontrolery są produkowane na bazie tranzystorów CMOS, więc nie mogą występować wejścia „wiszące w powietrzu”, gdyż daje to nieokreślony stan logiczny (gdy żaden przycisk nie jest naciśnięty jedynym elementem determinującym stabilny stan logiczny jest drabinka rezystorów).

Rysunek 2

Obsługa takiej klawiatury sprowadza się do odpowiedniego sterowania liniami rzędów. Jeżeli nie jest naciśnięty żaden przycisk, to bez względu na stan występujący na liniach rzędów, mikrokontroler odczyta z linii kolumn jako same jedynki (rysunek 3a).

Rysunek 3

By wykryć naciśnięcie jakiegokolwiek przycisku należy na liniach rzędów „wyprodukować” jedno zero na tle samych jedynek logicznych oraz wczytać stan kolumn. Tej operacji cyklicznie musi zostać poddana każda linia rzędów (rysunek 3b). W przypadku, gdy jest naciśnięty przycisk łączący linię rzędu, na której panuje zero logiczne, to ten sygnał zostanie przekazany do odpowiedniej linii kolumny. Odczytując stan wszystkich kolumn na odpowiedniej pozycji pojawi się zero (rysunek 3 c). Naciśnięcie przycisku, który jest przyłączony do linii rzędu, na której panuje jedynka logiczna, nie jest sygnalizowane w danych z portu wejściowego (rysunek 3 d), taki przypadek nie jest wykrywany. Podsumowując, obsługa programowa sprowadza się do stwierdzenia, czy w danym rzędzie jest naciśnięty przycisk. Jeżeli ten warunek nie jest spełniony, należy zmienić ustawienia linii rzędów i powtórzyć operacje (znaleźć taki rząd, w którym wykrywany jest naciśnięty przycisk). Analizując dokładniej, można dostrzec, że mikrokontroler odczyta identyczne dane dla kilku różnych przycisków (przyciski z tej samej kolumny i różnych rzędów). To oznacza, że do identyfikacji naciśniętego przycisku należy brać pod uwagę informacje wynikające z odczytania stanu linii kolumn oraz dane określające jaka linia rzędu została aktywowana (na której występuje zero logiczne).
(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w sierpniowym numerze czasopisma Zrozumieć Elektronikę (ZE 8/2025). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 8/2025 znajduje się tutaj.

Andrzej Pawluczuk
apawluczuk@vp.pl

Uwaga! Wskazówki, jak nabyć archiwalne numery ZE znajdują się na stronie:
https://piotr-gorecki.pl/n11.