EXI-0404 Arduino sample
Date : 2023-02-13
1. Overview
บอร์ดขยาย Input/Output รุ่น EXI-0404 มีคุณสมบัติดังนี้
- บอร์ดขยาย I/O ด้วยชิพ MCP23008 สื่อสารผ่าน I2C bus ขยายพิ่ม I/O จำนวน 8 บิต
- อินพุตขนาด 4 ช่อง (Bit 4-7) รับสัญญาณผ่านอ็อปโตไอโซเลเตอร์ ขนาดแรงดัน 12V-24V
- กำหนดเลือกสัญญาณอินพุตแบบ NPN หรือ PNP ได้
- รีเลย์เอาต์พุต พิกัดกระแส 3A จำนวน 4 ช่อง
- สามารถปรับตั้งค่า Address ได้ด้วยจั๊มเปอร์ ภายในบอร์ด ต่อขยายได้สูงสุด 8 บอร์ด
- เทอร์มินัลแบบถอดได้ เพื่อความสะดวกต่อการติดตั้งใช้งาน
2. MCP23008 GPIO assignment
3. ตัวอย่างวงจรการต่อใช้งาน
3.1. การต่อใช้งานกับ Arduino UNO
3.2. การต่อใช้งานกับบอร์ด AVR-AP3 (https://micro-research.co.th/avr-ap3-series.html)
4. การติดตั้งไลบรารี่ สำหรับ MCP23008 ภายในโปรแกรม Arduino IDE ดังนี้
4.1. เปิดหน้าต่าง Library Manager และพิมพ์ชื่อ mcp23008 ที่ช่องค้นหา ให้เลือกติดตั้ง (Install) ที่รายการ Adafruit MCP23008 Library ดังรูป
4.2. คลิกที่ปุ่ม INSTALL ALL เพื่อติดตั้งไลนรานรี่อื่นๆที่เกี่ยวข้องด้วยทั้งหมด
4.3. ติดตั้งไลบรารี่เสร็จเรียบร้อย จะสังเกตเห็นจัวอย่าง Example ดังรูป
5.ตัวอย่างโปรแกรม Arduino โดยกำหนดค่า Address = 0 หรือใส่ Jumper ที่ตำแหน่ง A0-A2 และจั๊มเปอร์ใช้งาน SDA, SCL pull-up resistor ดังรูป
5.1. โปรแกรม toggle เอาต์พุต Y0 ติด-ดับสลับกันทุก 1 วินาที
#include <Wire.h>
#include "Adafruit_MCP23008.h"
Adafruit_MCP23008 mcp;
void setup() {
mcp.begin(); // use default address 0
mcp.pinMode(0, OUTPUT);
}
void loop() {
delay(1000);
mcp.digitalWrite(0, HIGH);
delay(1000);
mcp.digitalWrite(0, LOW);
}
5.2. โปรแกรมควบคุมรีเลย์อาต์พุตให้ทำงานเป็นลำดับ เรียงจาก Y0 – Y3 และวนรอบต่อเนื่องกันไป
/*********************************************************************
Project Sequence_Output_Y0_Y3
Description Step sequence output relay Y0-Y3
Programmer Ukrit Tantasutanon
Hardware
EXI-0404 MCP23008 , 4 Input / 4 Output expansion I/O
Address 0 : A2-A0 = 000 => 0x20 (default)
Address 1 : A2-A0 = 001 => 0x21
...
Address 7 : A2-A0 = 111 => 0x27
Library
Adafruit MCP23008 library
********************************************************************
MICRO RESEARCH TECHNOLOGY CO.,LTD. , https://micro-research.co.th
********************************************************************/
#include <Wire.h>
#include "Adafruit_MCP23008.h"
Adafruit_MCP23008 mcp;
char Output_State = 0x00;
void setup() {
// Use default address 0
mcp.begin(0x20);
// Define output pin
mcp.pinMode(0, OUTPUT);
mcp.pinMode(1, OUTPUT);
mcp.pinMode(2, OUTPUT);
mcp.pinMode(3, OUTPUT);
}
void loop() {
// Check data boundary and initial value
if ((Output_State & 0x0F)==0)
{ Output_State=1;
}else {
Output_State<<=1;
}
// Update data to output
mcp.writeGPIO(Output_State);
delay(1000);
}
5.3. โปรแกรมอ่านสถานะอินพุต IN4-IN7 และ อัพเดทออกไปยังรีเลย์อาต์พุต Y0 – Y3
/*********************************************************************
Project Input_To_Output
Description Read input status then update to output relay
Programmer Ukrit Tantasutanon
Hardware
EXI-0404 MCP23008 , 4 Input / 4 Output expansion I/O
Address 0 : A2-A0 = 000 => 0x20 (default)
Address 1 : A2-A0 = 001 => 0x21
...
Address 7 : A2-A0 = 111 => 0x27
Library
Adafruit MCP23008 library
********************************************************************
MICRO RESEARCH TECHNOLOGY CO.,LTD. , https://micro-research.co.th
********************************************************************/
#include <Wire.h>
#include "Adafruit_MCP23008.h"
Adafruit_MCP23008 mcp;
char Output_State = 0x00;
char Input_State;
void setup() {
// Use default address 0
mcp.begin(0x20);
// Define output pin
mcp.pinMode(0, OUTPUT);
mcp.pinMode(1, OUTPUT);
mcp.pinMode(2, OUTPUT);
mcp.pinMode(3, OUTPUT);
}
void loop() {
// Read input status
Input_State = mcp.readGPIO() & 0xF0; // Input : Active low
Output_State = (~Input_State >> 4); // Output : Active high
// Update data to output
mcp.writeGPIO(Output_State);
delay(10);
}