KAmod I2C Hub4 (PL): Difference between revisions
From Kamamilabs.com - Wiki
| (7 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
__jzpdf__ | __jzpdf__ | ||
===== Opis ===== | ===== Opis ===== | ||
<b>KAmod I2C | <b>KAmod I2C Hub4 - Przełącznik/rozdzielacz interfejsu I2C z funkcją translacji napięć</b><br> <br> | ||
Moduł KAmod I2C Hub4 umożliwia przekierowanie sygnałów SCL i SDA wejściowego interfejsu I2C do czterech niezależnie aktywowanych wyjściowych interfejsów I2C (4 pary SCL i SDA). Zastosowany w dowolnej aplikacji pozwala na usunięcie konfliktu zduplikowanych adresów układów na magistrali I2C i zapewnia dwukierunkową komunikację. Dodatkowo KAmod I2C Hub4 może działać jako translator napięć magistrali I2C - akceptuje różne poziomy napięć dla każdego wyjścia. | Moduł KAmod I2C Hub4 umożliwia przekierowanie sygnałów SCL i SDA wejściowego interfejsu I2C do czterech niezależnie aktywowanych wyjściowych interfejsów I2C (4 pary SCL i SDA). Zastosowany w dowolnej aplikacji pozwala na usunięcie konfliktu zduplikowanych adresów układów na magistrali I2C i zapewnia dwukierunkową komunikację. Dodatkowo KAmod I2C Hub4 może działać jako translator napięć magistrali I2C - akceptuje różne poziomy napięć dla każdego wyjścia. | ||
<center> | <center> | ||
[[File:KAmod_I2C_Hub4_3d.jpg|none| | [[File:KAmod_I2C_Hub4_3d.jpg|none|900px|thumb|center]] | ||
</center> | </center> | ||
| Line 27: | Line 27: | ||
! style="text-align: center;"|Opis | ! style="text-align: center;"|Opis | ||
|- | |- | ||
| style="text-align: center;"|<b>KAmod I2C | | style="text-align: center;"|<b>KAmod I2C Hub4</b> | ||
| style="text-align: left;"| | | style="text-align: left;"| | ||
* Zmontowany i uruchomiony moduł | * Zmontowany i uruchomiony moduł | ||
| Line 34: | Line 34: | ||
|} | |} | ||
</center> | |||
<center> | |||
[[File:KAmod_I2C_Hub4_3.jpg|none|600px|thumb|center]] | |||
</center> | </center> | ||
<br><br> | <br><br> | ||
| Line 39: | Line 42: | ||
===== Schemat elektryczny ===== | ===== Schemat elektryczny ===== | ||
<center> | <center> | ||
[[File: | [[File:KAmod_I2C_Hub4_sch.jpg|none|900px|thumb|center]] | ||
</center> | </center> | ||
<br> | <br> | ||
| Line 193: | Line 196: | ||
Moduł KAmod I2C Hub4 może być zasilany napięciem stałym o wartości 1,8...5,5V, dołączonym do styków V+ oraz GND na złączu J1. | Moduł KAmod I2C Hub4 może być zasilany napięciem stałym o wartości 1,8...5,5V, dołączonym do styków V+ oraz GND na złączu J1. | ||
<center> | <center> | ||
[[File: | [[File:KAmod_I2C_Hub4_pwr.jpg|none|500px|thumb|center]] | ||
</center> | </center> | ||
| Line 200: | Line 203: | ||
<br> | <br> | ||
<center> | <center> | ||
[[File: | [[File:KAmod_I2C_Hub4_wym.jpg|none|600px|thumb|center]] | ||
</center> | </center> | ||
<br><br> | <br><br> | ||
| Line 361: | Line 364: | ||
===== Linki ===== | ===== Linki ===== | ||
*[Karta katalogowa TCA9546A] | *[https://wiki.kamamilabs.com/images/4/44/Tca9546a.pdf Karta katalogowa TCA9546A] | ||
*[https://github.com/KAMAMI-Labs/KAmod-I2C-Hub4.git Przykładowe programy] | *[https://github.com/KAMAMI-Labs/KAmod-I2C-Hub4.git Przykładowe programy] | ||
*[Model CAD (STEP)] | *[https://wiki.kamamilabs.com/images/b/b2/KAmod_I2C_hub4.zip Model CAD (STEP)] | ||
Latest revision as of 05:38, 17 September 2025

Opis
KAmod I2C Hub4 - Przełącznik/rozdzielacz interfejsu I2C z funkcją translacji napięć
Moduł KAmod I2C Hub4 umożliwia przekierowanie sygnałów SCL i SDA wejściowego interfejsu I2C do czterech niezależnie aktywowanych wyjściowych interfejsów I2C (4 pary SCL i SDA). Zastosowany w dowolnej aplikacji pozwala na usunięcie konfliktu zduplikowanych adresów układów na magistrali I2C i zapewnia dwukierunkową komunikację. Dodatkowo KAmod I2C Hub4 może działać jako translator napięć magistrali I2C - akceptuje różne poziomy napięć dla każdego wyjścia.

Podstawowe cechy i parametry
- Dwukierunkowy przełącznik/rozdzielacz interfejsu I2C z czterema wyjściami
- Dowolna kombinacja przekierowania wejściowego interfejsu I2C do wyjściowych
- Zawiera układ TCA9546A
- Trzy wejścia adresowe – możliwe dołączenie 8 modułów do jednego interfejsu
- Działa z taktowaniem interfejsu I2C do 400 kHz
- Działa z napięciem 1,8...5,5 V na liniach interfejsu I2C
- Zawiera rezystory podciągające (pull-up, 10 kΩ) do zasilania V+ na wszystkich liniach interfejsów wyjściowych I2C
- Umożliwia zastosowanie zewnętrznych rezystorów podciągających
- Umożliwia translację napięć - akceptuje różne poziomy napięć dla każdego wyjścia
- Umożliwia translację napięć – interfejs wejściowy I2C toleruje napięcie wyższe (do 5,5 V) od napięcia zasilającego moduł
- Zasilanie napięciem 1,8...5,5 V
Wyposażenie standardowe
| Kod | Opis |
|---|---|
| KAmod I2C Hub4 |
|

Schemat elektryczny

Sygnały sterujące
| Oznaczenie (J1) | Funkcja |
|---|---|
| SD |
|
| SC |
|
| RST |
|
| A0, A1, A2 |
|
Sterowanie modułem KAmod I2C Hub4 odbywa się poprzez interfejs I2C wyprowadzony na złączu J1. Linie SD i SC wymagają zewnętrznych rezystorów podciągających pull-up. Komunikacja może być taktowana sygnałem zegarowym o częstotliwości do 400 kHz.
Wejścia A0, A1, A2 pozwalają ustawić adres (bity nr 2, 1 i 0), jakim będzie dysponował moduł dołączony do interfejsu I2C. Domyślnie wejścia te są połączone do masy poprzez rezystory (pull-down) i przyjmują wartości logiczne 0. Dołączenie dodatniego bieguna zasilania do wejść A0/A1/A2 ustawia logiczne 1 dla najmłodszych bitów adresu. Wszystkie dostępne adresy interfejsu I2C zawierają się w zakresie 0x70...0x77.
Sygnał zerujący (RST) służy do wyzerowania układu TCA9546A na płytce KAmod I2C Hub4. Podanie logicznego stanu niskiego (L) przywraca wszystkie ustawienia do stanu początkowego – wyjścia I2C będą nieaktywne.

Wyjściowe interfejsy I2C
| Oznaczenie | Funkcja |
|---|---|
|
|
|
|
|
|
|
|
Moduł KAmod I2C Hub4 zawiera 4 wyjściowe interfejsy I2C oznaczone jako I2C0...I2C3. Komunikacja pomiędzy Interfejsem wejściowym, a interfejsami wyjściowymi jest w pełni dwukierunkowa - nazwy „wejściowy” i „wyjściowy są tylko umowne.
Interfejsy I2C0...I2C3 są wyposażone w rezystory podciągające pull-up, o wartości 10 kΩ dołączone do zasilania V+. Rozmieszczenie interfejsów oraz poszczególnych linii SDA i SCL zostało dokładnie oznaczone na płytce modułu oraz na rysunku:

Sterowanie wyjściami I2C
Sterowanie modułem KAmod I2C Hub4 jest możliwe poprzez interfejs I2C na złączu J1 (linie SD i SC). Zastosowany w module układ TCA9546A wymaga wysłania 1 bajtu danych, który ustawia wyjścia I2C0...I2C3 w stan aktywny lub nieaktywny. Podstawowy adres układu to 0x70 i może być zmieniany w zakresie 0x70...0x77 w zależności od stanu wejść A2, A1, A0 na złączu J1. Format ramki sterującej I2C pokazują rysunki.

Szczegółowe informacje dotyczące komunikacji i konfiguracji układu TCA9546A są dostępne w dokumentacji technicznej tego układu.
Rezystory podciągające (pull-up)
| Interfejs I2C | Rezystory podciągające (pull-up) |
|---|---|
|
Sygnały nie mają rezystorów podciągających |
|
Sygnały mają rezystory podciągające do zasilania V+ |
|
Sygnały mają rezystory podciągające do zasilania V+ |
|
Sygnały mają rezystory podciągające do zasilania V+ |
|
Sygnały mają rezystory podciągające do zasilania V+ |
Moduł KAmod I2C Hub4 jest wyposażony w rezystory podciągające pull-up, o wartości 10 kΩ do zasilania V+ dla interfejsów wyjściowych I2C0...I2C3. Jeżeli dany interfejs będzie połączony z układem działającym z innym napięciem, należy odłączyć rezystory podciągające znajdujące się na płytce modułu, a następnie należy dołączyć odpowiednie rezystory poza modułem. Napięcie zasilania modułu musi odpowiadać najniższemu napięciu, spośród napięć panujących na dołączonych interfejsach I2C.
Na dolnej stronie modułu KAmod I2C Hub4 znajdują się zworki SMD, przy każdym sygnale interfejsów I2C0...I2C3, poprzez które dołączane są rezystory podciągające do do zasilania V+. Przecięcie zworek ostrym narzędziem powoduje odłączenie rezystorów. Rozmieszczenie zworek oraz miejsca ewentualnych cięć zostały pokazane na rysunku.

Przykład przeciętych zworek (odłącznych rezystorów podciągających) dla interfejsu I2C1.

Zasilanie
| Oznaczenie (J1) | Funkcja |
|---|---|
|
|
Moduł KAmod I2C Hub4 może być zasilany napięciem stałym o wartości 1,8...5,5V, dołączonym do styków V+ oraz GND na złączu J1.

Wymiary
Wymiary płytki KAmod I2C Hub4 to 27x18,3 mm. Na płytce znajdują się 2 otwory montażowe o średnicy 3,2 mm.

Program testowy
Program testowy został napisany w środowisku Arduino dla płytki KAmodESP32 POW RS485.
//example code for KAmod I2C Hub4
//control 4x MCP23008 with the same I2C address
//ino board: ESP32-WROOM-DA Module
#include <Wire.h>
//#include <Adafruit_MCP23X17.h>
#include <Adafruit_MCP23X08.h>
#define DEBUG False
//LED
#define LED_PIN 2
#define MY_DELAY 2000
#define TEST_LED_ON 1
#define TEST_LED_OFF 0
//I2C
#define I2C_SDA 33
#define I2C_SCL 32
#define I2C_FREQ 100000
#define MCP23008_ARD 0x20
#define TCA9546_ARD 0x70
#define TCA9546_CH0 (1<<0)
#define TCA9546_CH1 (1<<1)
#define TCA9546_CH2 (1<<2)
#define TCA9546_CH3 (1<<3)
TwoWire I2Cbus = TwoWire(0);
Adafruit_MCP23X08 MCPIO;
int i;
int sel;
int success;
//--------------------------------------------------
bool i2cHub(uint8_t ch_mask){
I2Cbus.beginTransmission(TCA9546_ARD);
I2Cbus.write(&ch_mask, 1);
return I2Cbus.endTransmission(true);
}
//--------------------------------------------------
bool i2cCheck(uint8_t adr){
I2Cbus.beginTransmission(adr);
return I2Cbus.endTransmission(true);
}
//--------------------------------------------------
void setup() {
Serial.begin(115200);
while (!Serial) {}
delay(1000); // wait for native usb
Serial.println(); Serial.println(); Serial.println();
Serial.println("Hello. KAmod I2C Hub4 test");
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
delay(500);
while(!I2Cbus.begin(I2C_SDA, I2C_SCL, I2C_FREQ)){
Serial.println("I2C Bus init failed...");
}
success = 0;
sel = 3;
while(1){
sel++;
if (sel > 3) {
sel = 0;
delay(500);
}
i2cHub(1<<sel);
delay(20);
if (!i2cCheck(MCP23008_ARD)){
delay(20);
if (MCPIO.begin_I2C(MCP23008_ARD, &I2Cbus)) {
Serial.print("MCP init OK at channel ");
success++;
} else {
Serial.print("MCP init FAIL at channel ");
}
} else {
Serial.print("MCP Detect Failed at channel ");
}
Serial.print(sel);
Serial.println();
if ((sel == 3) && (success > 0)) break;
}
Serial.println("Setup finished");
sel = 3;
i = 8;
success = 0;
}
//-------------------------------------------------
void loop() {
i++;
if (i >= 8){
i = 0;
Serial.println(); Serial.println();
while(1){
sel++;
if (sel > 3) {
sel = 0;
delay(500);
}
i2cHub(1<<sel);
if (!i2cCheck(MCP23008_ARD)){
Serial.println(); Serial.println("##################");
Serial.print("Select I2C channel ");
Serial.print(sel); Serial.println();
Serial.print("Out: ");
success++;
break;
} else {
Serial.print("MCP Detect Failed at channel ");
Serial.print(sel); Serial.println();
success = 0;
}
delay(50);
}
}
if (i & 1){
digitalWrite(LED_PIN, TEST_LED_ON);
} else {
digitalWrite(LED_PIN, TEST_LED_OFF);
}
Serial.print(i); Serial.print(" ");
MCPIO.pinMode(i, OUTPUT);
MCPIO.digitalWrite(i, TEST_LED_ON);
delay(200);
MCPIO.pinMode(i, OUTPUT);
MCPIO.digitalWrite(i, TEST_LED_OFF);
delay(100);
if (success >= 12) {
Serial.println(); Serial.println(); Serial.println();
Serial.println("### Verify OK 3 times ###");
Serial.println("### THATS ALL ###");
while(1){};
}
}