- 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).
Listing 1. Sprawdzenie obecności modułu na magistrali
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).
Listing 2. Widoczne wszystkie zainstalowane na module przetworniki dostępne poprzez I2C0 oraz układy dostępne po „pierwotnej” stronie multipleksera
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