- zastosowane różne typy złączy umożliwiają łatwe podłączenie do wielu popularnych grup modułów,
- multiplekser widoczny jest na magistrali pod adresem 0x70 i zapis pod ten adres ustala aktywną magistralę,
- szeroki zakres napięcia zasilania – 2,33...5,5 V, dzięki czemu układ współpracuje poprawnie z Arduino, STM Nucleo, Raspberry PI i nie tylko.
Moduł zawiera układ dwukanałowego multipleksera magistrali I2C typu PCA9540B, którego schemat wewnętrzny został pokazany na rysunku 1. Aktywny kanał jest wybierany poprzez bezpośrednią konfigurację jednego rejestru i nie wymaga dodatkowych wyprowadzeń sterujących.
Budowa i działanie
Schemat ideowy modułu został pokazany na rysunku 2. Sygnały magistrali I2C wraz z zasilaniem części cyfrowej doprowadzone są do złączy I2CA...I2CE umożliwiających podłączenie zgodne ze standardami spotykanymi w najpopularniejszych zestawach uruchomieniowych.
Magistrala I2C doprowadzona jest do wyprowadzeń SCL/SDA, a z multipleksera wyprowadzona jest na dwie grupy złączy I2C0 A...E i I2C1 A...E. Dioda LD sygnalizuje obecność zasilania, rezystory R2...R7 podciągają wstępnie magistralę I2C, ich wartość można zoptymalizować w zależności od docelowego napięcia zasilania układu. Układ PCA9540B widoczny jest na magistrali pod adresem 0x70 i ma tylko jeden rejestr kontrolny, który można odczytywać i zapisywać. Domyślnie po włączeniu zasilania obie magistrale są odłączone i w rejestrze inicjowana jest wartość 0x00, zapis wartości 0x04 wybiera magistralę I2C0, zapis 0x05 magistralę I2C1, zapis pozostałych wartości wyłącza obie magistrale.
Montaż i uruchomienie
Moduł zmontowany jest na dwustronnej płytce drukowanej, której schemat został pokazany na rysunku 3. Sposób montażu jest klasyczny i nie wymaga opisu.
Dla sprawdzenia modułu podłączonego do Raspberry Pi można zastosować narzędzia z pakietu i2ctools. Dla testów do wyjść I2C0/I2C1 modułu podłączone są dwa identyczne multiczujniki środowiskowe, w których nie ma możliwości zmiany adresu. Poleceniem
i2cdetect -y 1 sprawdzamy obecność modułu na magistrali (listing 1).
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
Po włączeniu zasilania PCA9540B widoczny jest pod adresem 0x70 i ma odłączone wyjścia multipleksera. Wybieramy aktywny kanał I2C0 poleceniem: i2cset -y 1 0x70 0x04. Po ponownym skanowaniu magistrali poleceniem i2cdetect -y 1 widoczne są wszystkie zainstalowane na module przetworniki dostępne poprzez I2C0 oraz układy dostępne po „pierwotnej” stronie multipleksera (listing 2).
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- 76 --
Aby wybrać drugi kanał I2C1, wykonujemy polecenie: i2cset -y 1 0x70 0x05 i ponownie sprawdzamy magistralę. Tym razem widoczne będą czujniki z kanału I2C1. Jeżeli wszystko działa poprawnie można modułu użyć we własnej aplikacji.
Adam Tatuś, EP
- R1, R2, R3, R4, R5, R6, R7: 4,7 kΩ 1% (SMD0603)
- C1: 0,1 μF (SMD0603)
- C2, C3: 1 μF (SMD0603)
- LD: LED zielona (SMD0805)
- U1: PCA9540BDP (TSSOP8)
- I2C0E, I2C1E, I2CE: złącze SIP4, 2,54 mm
- I2C0A, I2C1A, I2CA: złącze EH kątowe
- I2C0B, I2C1B, I2CB: złącze JST 1 mm
- I2C0C, I2C1C, I2CC: złącze PH 2 mm
- I2C0D, I2C1D, I2CD: złącze Grove proste