KAmod I2C Hub4 (PL): Difference between revisions
From Kamamilabs.com - Wiki
| Line 87: | Line 87: | ||
! style="text-align: center;"|<b>Funkcja</b> | ! style="text-align: center;"|<b>Funkcja</b> | ||
|- | |- | ||
| style="text-align: left;"|<b>SD0</b> | | style="text-align: left;"| | ||
| style="text-align: left;"| Sygnał SDA (dane) interfejsu I2C – wyjście I2C 0 | *<b>SD0</b> | ||
*<b>SC0</b> | |||
| style="text-align: left;"| | |||
*Sygnał SDA (dane) interfejsu I2C – wyjście I2C 0 | |||
*Sygnał SCL (zegar) interfejsu I2C – wyjście I2C 0 | |||
|- | |- | ||
| style="text-align: left;"|<b> | | style="text-align: left;"| | ||
| style="text-align: left;"|Sygnał SCL (zegar) interfejsu I2C – wyjście I2C | *<b>SD1</b> | ||
*<b>SC1</b> | |||
| style="text-align: left;"| | |||
*Sygnał SDA (dane) interfejsu I2C – wyjście I2C 1 | |||
*Sygnał SCL (zegar) interfejsu I2C – wyjście I2C 1 | |||
|- | |- | ||
| style="text-align: left;"|<b> | | style="text-align: left;"| | ||
| style="text-align: left;"| Sygnał SDA (dane) interfejsu I2C – wyjście I2C | *<b>SD2</b> | ||
*<b>SC2</b> | |||
| style="text-align: left;"| | |||
*Sygnał SDA (dane) interfejsu I2C – wyjście I2C 2 | |||
*Sygnał SCL (zegar) interfejsu I2C – wyjście I2C 2 | |||
|- | |- | ||
| style="text-align: left;"| | | style="text-align: left;"| | ||
*<b>SD3</b> | |||
*<b>SC3</b> | |||
| style="text-align: left;"| | |||
*Sygnał SDA (dane) interfejsu I2C – wyjście I2C 3 | |||
*Sygnał SCL (zegar) interfejsu I2C – wyjście I2C 3 | |||
| style="text-align: left;"| | |||
|} | |} | ||
| Line 118: | Line 122: | ||
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: | 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: | ||
<center> | <center> | ||
[[File: | [[File:KAmod_I2C_Hub4_i2c.jpg|none|700px|thumb|center]] | ||
</center> | </center> | ||
Revision as of 15:35, 3 May 2025

Opis
KAmod I2C Hub8 - 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 Hub8 |
|
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)
Zasilanie
| Oznaczenie (J1) | Funkcja |
|---|---|
| V+ | wejście zasilania, biegun dodatni |
| GND | wejście zasilania, biegun ujemny (GND) |
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){};
}
}
Linki
- [Karta katalogowa TCA9546A]
- Przykładowe programy
- [Model CAD (STEP)]