Actions

KAmod I2C-IOexp16 (PL): Difference between revisions

From Kamamilabs.com - Wiki

Line 113: Line 113:


===== Linki =====
===== Linki =====
*[https://wiki.kamamilabs.com/images/8/89/MCP23017.pdf Karta katalogowa MCP23017]
*[https://github.com/KAMAMI-Labs/KAmod-I2C-IOexp16.git Przykładowe programy]

Revision as of 12:09, 3 April 2025

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 Zmontowany i uruchomiony moduł



Schemat elektryczny


Rozmieszczenie linii I/O
Sygnały sterujące
Zasilanie
Wymiary
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;
  }
}



Linki