- Możliwość podłączenia dwóch układów slave o tym samym adresie do wspólnej szyny I²C.
- Prosta konfiguracja aktywnego kanału za pomocą zapisu pojedynczego rejestru.
- Napięcie zasilania: 2,3...5,5 V.
- Możliwość niezależnego odłączenia lub dołączenia zasilania do złączy obu szyn multipleksowanych.
Moduł bazuje na scalonym multiplekserze magistrali I²C typu PCA9540B, którego schemat wewnętrzny pokazano na rysunku 1. Aktywny spośród dwóch dostępnych kanałów wybierany jest poprzez bezpośrednią konfigurację rejestru 0x70 magistrali I²C, a więc układ nie wymaga przy tym stosowania dodatkowych wyprowadzeń sterujących.
Schemat ideowy modułu pokazano na rysunku 2. Sygnały magistrali I²C wraz z zasilaniem doprowadzone są do złącza I²C. Dwa kanały wyjściowe multipleksera wyprowadzono na złącza I2C0, I2C1. Rezystory R1...R6 podciągają wstępnie sygnały magistral do linii zasilania, ich wartość można zoptymalizować w zależności od docelowego napięcia zasilania układu. Przełącznik DIP (PSB) umożliwia odcięcie zasilania VCC od napięć VCC0, VCC1, wyprowadzonych na złącza I2C0, I2C1. Jest to przydatne, gdy układy po stronie wyjściowej multipleksera mają własne zasilanie (napięciem takim samym lub o innej wartości niż napięcie modułu). W zwartej pozycji PSM do złączy I2C0, I2C1 doprowadzone jest zasilanie pierwotnej strony multipleksera.
Obsługa modułu odbywa się programowo – PCA9540B widoczny jest na magistrali pod adresem 0x70 i ma tylko jeden rejestr konfiguracyjny, który można odczytywać i zapisywać. Domyślnie po włączeniu zasilania obie magistrale wyjściowe pozostają odłączone, a rejestr 0x70 jest zainicjalizowany wartością 0x00. Zapis bajtu 0x04 wybiera magistralę I2C0, a – 0x05 magistralę I2C1. Zapis dowolnej z pozostałych wartości wyłącza obie magistrale.
Moduł zmontowano na dwustronnej płytce drukowanej. Rozmieszczenie elementów pokazano na rysunku 3. Sposób montażu jest klasyczny i nie wymaga opisu. Gotowy moduł zaprezentowano na fotografii tytułowej.
Dla sprawdzenia modułu podłączonego do Raspberry Pi można zastosować narzędzia z pakietu i2ctools. Do wyjść I2C0/I2C1 modułu podłączone są dwa identyczne przetworniki temperatury STS, w których nie ma możliwości zmiany adresu. Poleceniem i2cdetect -y 1 sprawdzamy obecność 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:
Po ponownym skanowaniu magistrali poleceniem:
widoczny jest przetwornik temperatury (dostępny poprzez szynę I2C0) oraz inne układy dostępne po „pierwotnej” stronie multipleksera:
00: 04 -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
Aby wybrać drugi kanał I2C1, wykonujemy polecenie:
i ponownie sprawdzamy magistralę:
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
Tym razem widoczne są czujniki z kanału I2C1. Jeżeli wszystko działa poprawnie, można moduł zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1...R6: 10 kΩ (SMD 0603, 1%)
- C1...C3: 100 nF (SMD 0603, X7R, 10 V)
- U1: PCA9540BDP (TSSOP8)
- I²C: złącze Grove kątowe (110990037)
- I²C0, I²C1: złącze Grove proste (110990030)
- PSW: przełącznik DIP2 Omron (A6H-2101)