- osiem wyprowadzeń IO,
- wyjścia uzupełnione o układ sterowania diodą sygnalizacyjną LED,
- możliwość ustawienia dwóch niezależnych częstotliwości sprzętowego migania w zakresie od 0,59 do 152 Hz,
- sterowanie poprzez interfejs I2C,
- możliwość zastosowania do 8 układów na jednej magistrali.
Schemat wewnętrzny układu PCA9531 został pokazany na rysunku 1. Wyjścia IO układu są typu otwarty dren i mogą być obciążone prądem do 25 mA w stanie niskim. To umożliwia bezpośrednie sterowanie diodą LED, oczywiście z odpowiednio dobranym rezystorem szeregowym. Całkowity prąd wyprowadzeń nie może przekraczać 100 mA. Układ może być zasilany napięciami z zakresu 2,3...5,5 V. Po włączeniu zasilania wszystkie IO ustawione są w stan wysokiej impedancji. Wyprowadzenia niewykorzystane do sterowania LED, po odpowiedniej konfiguracji układu, mogą zostać użyte jako uniwersalne linie IO.
Budowa i działanie
Schemat ekspandera IO został pokazany na rysunku 2. Zawiera układ U1 typu PCA9531 połączony z trzema zworkami A0...A2 umożliwiającymi ustalenie adresu, zgodnie z tabelą 1. Dzięki temu możliwe jest zastosowanie do 8 układów na jednej magistrali. Zwora PU umożliwia aktywację rezystorów podciągających magistralę I2C.
Sygnały portów GPIO wraz z zasilaniem i magistralą I2C doprowadzone są do złączy J1 i J2. Na złączu J2 dostępny jest też sygnał sprzętowego resetu układu U1. Magistrala I2C wyprowadzona jest dodatkowo na złącza I2C (EH4), I2C1 (JST 1 mm).
Układ PCA9531 ma siedem rejestrów sterujących – tabela 2.
Procedurę zapisu do układu PCA9531 ilustruje 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).
Procedura odczytu z układu PCA9531 została pokazana na rysunku 4.
Montaż i uruchomienie
Ekspander IO jest zmontowany na dwustronnej płytce drukowanej, której schemat został pokazany na rysunku 5. Sposób montażu jest klasyczny i nie wymaga szczegółowego opisu.
Dla sprawdzenia modułu można użyć Raspberry Pi. Po podłączeniu modułu do zasilania 3,3 V i magistrali I2C sprawdzamy obecność układu na magistrali poleceniem: i2cdetect -y 1. W modelu ustawiony jest adres 0x67 – wszystkie zwory A2, A1, A0 =1 i pod takim adresem powinien być widoczny. Dla odczytu stanu wejść konieczny jest zapis do rejestrów 0x05/0x06 wartości 0x00, odpowiadającej ustawieniu wyjść w stan wysokiej impedancji. Wpisujemy polecenia:
i2cset -y 1 0x67 0x05 0x00
Następnie należy odczytać rejestr wejściowy INPUT (0x00) po uprzednim ustaleniu stanów 0/1 wyprowadzeń IO:
Dla prostego sterowania wyjść wystarczająca jest ich odpowiednia konfiguracja w rejestrach LS0/LS1, zgodnie z tabelą 3.
Przypisanie LED do rejestrów LS jest następujące:
LS1 [0x06, B7..0] : LED7|LED6|LED5|LED4
Po podłączeniu diod LED dla sprawdzenia ustawiamy wyjścia w stan niski (załączenie LED):
i2cset -y 1 0x67 0x06 0x55
Następnie ustawiamy stan wysoki (wyłączenie LED), konieczne są zewnętrzne rezystory podciągające linie IO:
i2cset -y 1 0x67 0x06 0x00
w celu konfiguracji migania konieczne jest ustawienie rejestrów PSCx, PWMx, okres migania określony jest wzorem:
BLINK0 = (PSC0 + 1) / 152
BLINK1 = (PSC1 + 1) / 152
a wypełnienie:
BLINK0 = PWM0 / 256
BLINK1 = PWM1 / 256
Dla przykładu ustalamy okres BLINK0 na 1,5 Hz (0xE3), BLINK1 na 0,75 Hz (0x71) oraz wypełnienie na 50% (0x80). Dla sprawdzenia podłączamy diody LED do wyprowadzeń IO0, IO4 i konfigurujemy układ:
i2cset -y 1 0x67 0x02 0x80
i2cset -y 1 0x67 0x03 0x71
i2cset -y 1 0x67 0x04 0x80
Wyjście IO0 ustawiamy na sterowanie z BLINK0, a IO4 na BLINK1:
i2cset -y 1 0x67 0x06 0x03
Diody powinny migać z określonymi parametrami. 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 rejestrów LS0/LS1, bez potrzeby ponownej konfiguracji układu.
Jeżeli wszystko działa, można układ zastosować we własnych projektach.
Adam Tatuś, EP
- R1, R2, R4: 10 kΩ 5% (SMD0805)
- R3: 2,2 kΩ 5% (SMD0805)
- C1: 0,1 μF ceramiczny (SMD0805)
- LD: dioda LED (SMD0805)
- U1: PCA9531PW (SSOP16)
- A0, A1, A2: listwa 1×3, 2,54 mm + zwory
- I2C1: złącze JST 1 mm
- I2C: złącze EH kątowe
- J1: listwa 1×8, 2,54 mm
- J2: listwa 1×9, 2,54 mm
- PU: listwa 2×2, 2,54 mm + zwory