- moduł z czterema przyciskami z niezależnie sterowanym podświetlaniem,
- komunikacja poprzez interfejs I2C,
- zasilany napięciami z zakresu 3,0...5,5 V.
Za obsługę miniklawiatury odpowiada ekspander I/O – układ typu PCA9531, który oprócz obsługi dwukierunkowych portów I/O jest rozbudowany o dwa konfigurowane generatory umożliwiające sterowanie częstotliwością migania podłączonych diod LED. Schemat wewnętrzny układu PCA9531 został pokazany na rysunku 1. Takie rozwiązanie umożliwia sprzętowe sterowanie diodami LED bez zbędnego obciążenia procesora sterującego.
Budowa i działanie
Schemat modułu został pokazany na rysunku 2. Porty ekspandera zostały podzielone na dwie grupy. Pierwsza zawiera wyprowadzenia oznaczone LED0...LED3, które zostały skonfigurowane jako wejścia i służą do odczytu stanu przycisków SW1...SW4. Przyciski uzupełnione są w proste filtry RC eliminujące zakłócenia z drgań styków. Wyprowadzenia oznaczone LED4...LED7 sterują wbudowanymi w przyciski diodami LED. W układzie zastosowano popularne przyciski typu TACT-24N-F-Ix firmy NINIGI. W zależności od typu możemy wybrać, odpowiednio do aplikacji, jeden z pięciu kolorów podświetlenia (czerwony, zielony, żółty, niebieski, biały).
Zasilanie i magistrala I2C doprowadzone są do złącza I2C w standardzie Grove. Trzy zworki A0...A2 służą do ustawienia adresu bazowego na magistrali, co pozwala na dołączenie ośmiu układów klawiatury na jednej magistrali (tabela 1). Moduł może być zasilany napięciami z zakresu 3,0...5,5 V. Po włączeniu zasilania wszystkie wyprowadzenia I/O są ustawione w stan wysokiej impedancji.
Układ PCA9531 posiada siedem rejestrów sterujących, które zestawiono w tabeli 2.
Zapis do rejestrów odbywa się w taki sposób, jak obrazuje to rysunek 3. Po adresie slave zapisywany jest bajt sterujący, adresujący rejestr do zapisu (B2, B1, B0) oraz określający tryb autoinkrementacji adresu AI (AI=1). Sposób odczytu rejestrów został pokazany na rysunku 4.
Montaż i uruchomienie
Moduł został zmontowany na dwustronnej płytce drukowanej, której schemat wraz z rozmieszczeniem elementów został pokazany na rysunku 5. Sposób montażu jest klasyczny i nie wymaga dokładnego opisu.
Do sprawdzenia modułu można użyć Raspberry Pi. Po podłączeniu modułu do zasilania 3,3 V i magistrali I2C należy wpisać polecenie
którym sprawdzamy obecność układu na magistrali (w modelu został ustawiony adres 0x60 – wszystkie zwory A2, A1, A0=0). Efekt został pokazany na listingu 1.
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Dla odczytu stanu przycisków należy w rejestrze LS0 ustawić wyjścia LED0...LED3 (SW1...SW4) w stan wysokiej impedancji LS0=00, za pomocą polecenia
Odczyt stanu klawiszy z rejestru INPUT wykonujemy poleceniem
Naciśnięty przycisk sygnalizowany jest stanem niskim odpowiadającego bitu 3...0.
Dla sterowania wyjściami z diodami LED (LED7...4) wystarczająca jest ich odpowiednia konfiguracja w rejestrze LS1, tabela 3. Przypisanie diod LED do rejestrów LS jest następujące:
Dla sprawdzenia działania ustawiamy wyjścia w stan niski (załączenie LED) poleceniem:
oraz stan wysoki (wyłączenie LED) poleceniem:
W celu konfiguracji migania konieczne jest ustawienie rejestrów PSCx, PWMx, okres migania określony jest wzorem:
BLINK0=(PSC0+1)/152 oraz BLINK1=(PSC1+1)/152
Wypełnienie określa wzór:
BLINK0=PWM0/256 oraz BLINK1=PWM1/256
Dla przykładu ustalamy częstotliwość BLINK0 na 1 Hz (0x97) oraz wypełnienie na 50% (0x80), dla testu konfigurujemy układ następującymi poleceniami:
i2cset -y 1 0x60 0x02 0x80
Ustawiamy sterowanie diod LED z BLINK0:
Diody powinny migać z częstotliwością 1 Hz. Bez zmiany parametrów PSC/PWM diody można wyłączyć (LSx=00), załączyć (LSx=01) lub zmienić częstotliwość migania (LSx=10/11) tylko przez zapis rejestru LS1, bez potrzeby ponownej konfiguracji układu. Stan LED można sprawdzić podczas odczytu rejestru INPUT na bitach B7...B4.
Adam Tatuś, EP
- R1, R2: 4,7 kΩ
- R3, R4, R6, R7, R9…R11, R13…R15, R17, R18: 470 Ω
- R5, R8, R12, R16, R19: 47 kΩ
- C1: 0,1 µF SMD0603
- C2, C3, C4, C5: 1 nF SMD0603
- CE1: 10 µF/10 V tantalowy SMD3216
- U1: PCA9531PW (SSOP16)
- SW1, SW2, SW3, SW4: przycisk z podświetleniem TACT-24N-F-Ix Ninigi