- umożliwia monitorowanie stanów wejść lub sterowanie do 40 wyjść cyfrowych o napięciu 3,3 V,
- każde z wyprowadzeń może niezależnie pełnić funkcję wejścia lub wyjścia,
- dzięki prostej adresacji możliwa jest realizacja systemu do 320 linii GPIO,
- zgodny mechanicznie z Raspberry Pi Zero.
Nakładka umożliwia rozszerzenie liczby GPIO przy użyciu magistrali I2C. Pozwala na monitorowanie stanów wejść lub sterowanie do 40 wyjść cyfrowych o napięciu 3,3V. Porty GPIO pogrupowane są w pięć ośmiobitowych banków 0...4, w których każde z wyprowadzeń może pełnić dowolną funkcję wejścia lub wyjścia, co zapewnia sporą elastyczność aplikacji. Dzięki prostej adresacji możliwa jest realizacja systemu do 320 punktów GPIO.
Budowa i działanie
W module zastosowano układ PCA9506BS firmy NXP, którego schemat wewnętrzny został pokazany na rysunku 1. Wyprowadzenia PCA9506BS w trybie wejścia przeznaczone są do współpracy z układami sterującymi typu push-pull. W przypadku monitorowania stanu wyjść typu „suchy” styk lub otwarty kolektor/dren konieczne jest zastosowanie zewnętrznych rezystorów podciągających. Wejścia tolerują napięcia do 5 V.
Wyprowadzenia układu PCA9506BS w trybie wyjściowym przy zasilaniu 3,3 V mogą być źródłem prądu o wartości ok. 8 mA lub pochłaniać prąd ok. 12 mA, o ile nieprzekroczona jest moc strat i sumaryczny prąd wyprowadzeń zasilania (max. 500 mA). Pozwala to na bezpośrednie podłączenie i sterowanie diodami lub wyświetlaczami LED.
Schemat ideowy modułu został pokazany na rysunku 2. Został wyposażony w zwory adresowe dla PCA9506BS, umożliwiające ustawienie ośmiu adresów na magistrali I2C zgodnie z tabelą 1. Sygnały GPIO U1 wraz z zasilaniem 3,3 V wyprowadzone są na złącza szpilkowe IDC10 oznaczone I\O0...4. Ze względu na możliwy duży pobór prądu przy sterowaniu wskaźników LED, moduł wyposażony jest w niezależną od systemu zasilania Pi przetwornicę obniżającą U3 typu ADP2108 dostarczającą napięcia 3,3 V.
Dioda LD1 sygnalizuje obecność zasilania. Układ U2 typu MCP100T-3.00 odpowiada za poprawny reset U1 po włączeniu zasilania. Rezystory R1 i R2 polaryzują magistralę I2C. Układ U1 ma możliwość opcjonalnego generowania sygnału przerwania, który poprzez rezystor R3 doprowadzony jest do GPIO4 Raspberry Pi. Jeżeli nie przewidujemy korzystania z przerwania, to nie montujemy na płytce rezystora R3.
Montaż i uruchomienie
Moduł jest zmontowany na dwustronnej płytce drukowanej, której schemat i rozmieszczenie elementów zostało pokazane na rysunku 3. Sposób montażu jest klasyczny i nie wymaga opisu. Zmontowany moduł został pokazany na fotografii tytułowej oraz na fotografii 1 od strony bottom.
Po montażu należy ustalić kroplą cyny adres modułu na zworach A2, A1, A0 zgodnie z tabelą 1. PCA9506BS ma pod adresami 0x00..0x27 pięć grup rejestrów IO oraz ustalających tryb pracy układu i konfigurujących przerwania. Skrócony opis rejestrów pokazano w tabeli 2, pełny opis dostępny jest w karcie katalogowej.
Do szybkiego przetestowania działania modułu podłączonego do Pi użyjemy bibliotekę i2ctools. Po ustawieniu adresu bazowego zworami A2, A1 i A0, moduł powinien być widoczny po odczycie magistrali poleceniem:i2cdetect -y 1
tak, jak pokazano na rysunku 4 (ustawiony adres bazowy 0x27). Sterowanie portami i odczyt stanów może być wykonywany przy pomocy prostych komend:
Stan wejść banków GPIO0...4 może być odczytany bez dodatkowej konfiguracji przy ustawieniach domyślnych PCA9506BS:i2cget -y 1 0x27 0x00
..
i2cget -y 1 0x27 0x04
Stany wejść mogą zostać zanegowane:i2cset -y 1 0x27 0x10 0xFF
..
i2cset -y 1 0x27 0x14 0xFF
Ustawienie GPIO jako wyjście wykonujemy poleceniem:i2cset -y 1 0x27 0x18 0x00
..
i2cset -y 1 0x27 0x1C 0x00
Stan wyjść zmieniamy poleceniem:i2cset -y 1 0x27 0x08 0xXX
...
i2cset -y 1 0x27 0x1C 0xXX
Odblokowanie przerwań wykonujemy poleceniem:i2cset -y 1 0x27 0x20 0x00
...
i2cset -y 1 0x27 0x24 0x00
Ustawione przerwanie jest kasowane odczytem banku wejściowego 0x00...0x04 lub po przywróceniu stanu wyprowadzenia, które przerwanie wygenerowało. Jeżeli wszystko działa poprawnie można moduł zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1, R2: 4,7 kΩ (SMD0603, 1%)
- R3: 330 Ω (SMD0603, 1%)
- R4: 2,2 kΩ (SMD0603, 1%)
- C1…C5, C9, C10, C11: 0,1 µF (SMD0603)
- C6…C8: 10 µF (SMD0603)
- LD1: LED czerwony SMD0603
- U1: PCA9506BS (HVQFN56)
- U2: MCP100T300/TT (SOT-23)
- U3: ADP2108AUJZ SOT-23-5
- L1: 1 µH dławik WE-MAPI3020 (WE 74438336010)
- A0…A2: zwora PCB
- GPIO: złącze IDC 2×20 pin żeńskie
- IO0…IO4: listwa IDC 2×5 2,54 mm