KAmod I2C-IOexp16 (PL)
From Kamamilabs.com - Wiki

Opis
KAmod I2C-IOexp16 - Expander 16 cyfrowych linii I/O z układem MCP23017
Moduł KAmod I2C-IOexp16 zawiera 16 linii cyfrowych, które mogą działać jako wejścia lub wyjścia. Sterowanie odbywa się poprzez magistralę I2C.


Podstawowe cechy i parametry
- 16 linii które mogą działać jako wejścia lub wyjścia, o maksymalnym prądzie 20 mA
- Zawiera expander typu MCP23017
- Sterowanie poprzez interfejs I2C o taktowaniu max 1 MHz
- 3 linie adresowe umożliwiają dołączenie 8 modułów do jednej magistrali I2C
- Wyjście przerwania, które może być przypisane do linii portu A
- Zasilanie 2...5 V
Wyposażenie standardowe
Kod | Opis |
---|---|
KAmod I2C-IOexp16 |
|

Schemat elektryczny

Rozmieszczenie linii I/O
Oznaczenie | Funkcja |
---|---|
PA (J2) |
|
PB (J3) |
|
PB (J4) |
|
Linie I/O zostały wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm, tuż przy krawędziach płytki. Umożliwiają one przylutowanie przewodów lub szpilek goldpin. Przyporządkowanie portów i wyprowadzeń zostało opisane na poniższym rysunku.
Każde wyprowadzenie może być niezależnie skonfigurowane jako wejście lub wyjście cyfrowe. Wyjścia cyfrowe mogą myć obciążone maksymalnym prądem 20 mA. Wejścia cyfrowe mają niezależnie konfigurowane rezystory podciągające tzw. pull-up oraz umożliwiają generowanie przerwań. Linie portu A mogą sygnalizować wystąpienie przerwania na dodatkowym wyprowadzeniu – INTA.

Sygnały sterujące
Oznaczenie | Funkcja |
---|---|
SD (J1) | Sygnał SDA (dane) interfejsu I2C |
SC (J1) | Sygnał SCL (zegar) interfejsu I2C |
RST (J1) | Wejście zerujące układ |
INTA (J1) | Wyjście sygnalizujące wystąpienie przerwania na liniach portu A |
A0, A1 (J1) | Wejścia umożliwiające ustawienie adresu interfejsu I2C (bity 1 oraz 0). Domyślnie ustawione na logiczne 0. |
A2 (zworka) | Założenie zworki ze spoiwa lutowniczego umożliwia ustawienie bitu 2 adresu interfejsu I2C. |
Sterowanie modułem KAmod I2C-IOexp16 odbywa się poprzez interfejs I2C, który może być taktowany sygnałem zegarowym o częstotliwości 100 kHz, 400 kHz lub 1 MHz. Funkcje wyprowadzeń na złączu J1 są następujące:
- Sygnały interfejsu sterującego I2C to SD – SDA, oraz SC – SCL. Nie są wyposażone w rezystory podciągające – odpowiednie elementy musi zawierać układ sterujący.
- Wejścia A0, A1 pozwalają ustawić adres (bity nr 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 i A1 ustawia logiczne 1 dla najmłodszych bitów adresu.
- Zworka A2 umieszczona na dolnej stronie płytki modułu (bottom) pozwala na ustawienie bitu nr. 2 określającego adres I2C. Domyślnie sygnał A2 jest połączony do masy poprzez rezystor (pull-down) i przyjmuje wartość logiczną 0. Założenie zworki ze spoiwa lutowniczego umożliwia ustawienie logicznego 1 dla bitu nr 2 adresu interfejsu I2C.
- Wszystkie dostępne adresy interfejsu I2C zawierają się w zakresie 0x20...0x27.
Szczegółowe informacje dotyczące komunikacji i konfiguracji układu MCP23017 są dostępne w dokumentacji technicznej tego układu.
Dodatkowe sygnały to:
- Sygnał zerujący (RST) służy do wyzerowania układu MCP23017 na płytce KAmod I2C-IOexp16, co przywraca wszystkie ustawienia do stanu początkowego.
- Wyjście INTA może sygnalizować odpowiednim stanem wystąpienie przerwania na liniach portu A.


Zasilanie
Moduł KAmod I2C-IOexp16 może być zasilany napięciem stałym o wartości 2...5 V.

Wymiary
Wymiary płytki KAmod I2C-IOexp16 to 31x18 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. Moduł KAmod I2C-IOexp16 został podłączony poprzez interfejs I2C.
#include <Wire.h>
#include <Adafruit_MCP23X17.h>
//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 MCP23017_ARD 0x20
TwoWire I2Cbus = TwoWire(0);
Adafruit_MCP23X17 MCPIO;
int i;
//-----------------------------------------------------------------
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("Hello. KAmod IOexp16 test");
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
delay(500);
while(!I2Cbus.begin(I2C_SDA, I2C_SCL, I2C_FREQ)){
Serial.println("I2C init failed...");
delay(500);
}
while (!MCPIO.begin_I2C(MCP23017_ARD, &I2Cbus)) {
Serial.println("MCP init failed...");
delay(500);
}
Serial.println("I2C init OK");
delay(100);
MCPIO.pinMode(TEST_LED, OUTPUT);
}
//-----------------------------------------------------------------
void loop() {
if (i & 1){
digitalWrite(LED_PIN, TEST_LED_ON);
} else {
digitalWrite(LED_PIN, TEST_LED_OFF);
}
MCPIO.pinMode(i, OUTPUT);
MCPIO.digitalWrite(i, TEST_LED_ON);
delay(100);
MCPIO.pinMode(i, OUTPUT);
MCPIO.digitalWrite(i, TEST_LED_OFF);
delay(100);
i++;
if (i >= 16){
i = 0;
}
}