MỞ RỘNG IO CHO ARDUINO UNO QUA GIAO TIẾP I2C

Hôm nay Arduino Shop sẽ giới thiệu đến các bạn một ứng dụng mới, ứng dụng này có thể giúp các bạn mở rộng IO với chỉ 2 đường tín hiệu qua chuẩn giao tiếp I2C. Với phương pháp này, hoàn toàn có thể giúp các bạn dùng Arduino Uno hoặc Mini điều khiển cùng lúc lên tới 64IO. Quá nhiều đúng không nào? Giờ là lúc đi vào chi tiết nhé.

Ngày đăng: 01-01-2017

6,077 lượt xem

Trong project này, Arduino Shop sẽ giới thiệu cách kết nối và lập trình giao tiếp giữa MCP2308 với Arduino Uno. Dùng phần mềm protues mô phỏng các bạn nha. Mục đích của bài này là giúp các bạn mở rộng IO cho dự án của mình khi đã lở mua con arduino Uno về và mới phát hiện rằng con này không đủ IO để điều khiển. Với MCP23008 có thể giúp bạn mở rộng IO lên đến 64 IO mà chỉ qua 2 tín hiệu theo chuẩn I2C là SDA và SCL. Thật là một giải pháp tiện lợi đúng không ạ? 

Với MCP này, bạn có thể mở rộng cả output và input. Tuy nhiên trong giới hạn bài viết này, mình chỉ đề cập đến việc mở rộng output cho arduino. Sẽ giành một bài viết riêng cho việc mở rộng Input các bạn nhé.

MCP sử dụng chuẩn giao tiếp I2C, do vậy chúng ta dùng giao tiếp I2C của Arduino với MCP23008 nhé. Giờ chúng ta sẽ thực hiện đề tài dùng arduino điều khiển 8 cái led qua chuẩn giao tiếp I2C với MCP23008 nha

1. Chuẩn bị một số linh kiện

    - MCP23008 I/O IC

    - Một số điện trở 220 ôm

    - Một vài cái led

    - Arduino Uno

==> Thật đơn giản đúng không, tuyệt cú mèo rồi đây. :)

mcp23008

IC MCP23008

Trên đây là sơ đồ chân của con MCP23008 các bạn nha. Các bạn muốn tìm hiểu kỹ hơn thì có thể >>>>>xem datasheet tại đây nha.<<<<<

2. Cách kết nối MCP với Arduino qua giao tiếp I2C

MCP23008 này chịu điều khiển nguồn áp 5V. Nối chân Vdd tới 5V của arduino và Vss xuống đất của Arduino. Các bort từ GP0 tới GP7 là 8 cổng I/O.

Chân NC để không, không kết nối gì cả.

SCL và SDA là 2 chân truyền nhận dữ liệu giữa MCP23008 và Arduino qua chuẩn I2C. 2 chân này chính là 2 chân điều khiển chính nha các bạn.

INT là chân tín hiệu ngắt. Mình không sử dụng nhé

Chân reset bạn nối tới 5V. Nếu bạn kích mức không thì toàn bộ IO sẽ được reset nhé

3 chân A0,A1,A2 chính là 3 chân chọn địa chỉ của MCP23008 để giao tiếp tới Arduino theo chuẩn I2C. Địa chỉ bắt đầu của nó là 0x20 tương ứng với 3 tín hiệu của chân A0,A1,A2 là 0,0,0. Do có 3 chân nên bạn có thể kết nối tới 2^3=8 con IC này, mỗi con IC có 8 IO, Do vậy bạn có thể mở rộng lên toiwss 64 IO mà chỉ cần 2 đường truyền nhận I2C. Thật là một giải pháp tiện lợi đúng không nào.

Cụ thể cách kết nối như thế nào, chúng ta xem hình bên dưới các bạn nha

arduino-ket-noi-voi-mcp23008

Arduino-ket-noi-voi-mcp23008

Hoặc theo sơ đồ bên dưới các bạn nha, nếu bạn không có phần mềm protues để thực hiện

MCP23008-ket-noi-voi-arduino-uno

MCP23008-ket-noi-voi-arduino-uno

3. Code giao tiếp MCP23008 với arduino qua giao tiếp I2C

#include <Wire.h>

void setup()
{
Wire.begin(); //khai báo kết nối i2c

Wire.beginTransmission(0x20); //địa chỉ của thiết bị, tương ứng 3 chân A0,A1,A2 là 0,0,0

Wire.write(0x00); //Chọn thanh ghi IODIRA: THanh ghi ghi giá trị trạng thái của IO

Wire.write(0x00); //Thiết lập các IO là output

Wire.endTransmission(); // Cho phép ngừng trao đổi giữa các thiết bị
}

void loop()
{

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(1); // Đổi trạng thái pin GP0 từ 0 lên 1

delay(500);

Wire.endTransmission(); //kết thúc quá trình tuyền nhận

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(2); // Đổi trạng thái pin GP1 từ 0 lên 1

delay(500);

Wire.endTransmission(); //kết thúc quá trình tuyền nhận

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(4); // Đổi trạng thái pin GP2 từ 0 lên 1

delay(500);

Wire.endTransmission();//kết thúc quá trình tuyền nhận

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(8); // Đổi trạng thái pin GP3 từ 0 lên 1

delay(500);

Wire.endTransmission(); //kết thúc quá trình tuyền nhận

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(16); // Đổi trạng thái pin GP4 từ 0 lên 1

delay(500);

Wire.endTransmission(); //kết thúc quá trình tuyền nhận

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(32); // Đổi trạng thái pin GP5 từ 0 lên 1

delay(500);

Wire.endTransmission(); //kết thúc quá trình tuyền nhận

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(64); // Đổi trạng thái pin GP6 từ 0 lên 1

delay(500);

Wire.endTransmission(); //kết thúc quá trình tuyền nhận

Wire.beginTransmission(0x20); //CHọn thiết bị CMP có địa chỉ 0x20

Wire.write(0x09); // Chọn pin GPIO

Wire.write(128); // Đổi trạng thái pin GP7 từ 0 lên 1

delay(500);

Wire.endTransmission(); //kết thúc quá trình tuyền nhận

}

4. Lời kết:

Đến đây, Arduino Shop xin kết thúc project cách mở rộng IO qua MCP23008 với Arduino qua chuẩn giao tiếp I2C. Cảm ơn các bạn đã quan tâm và đọc hết bài viết của Arduino Shop. Hi vọng các bạn sẽ thành ứng dụng được bài viết này vào thực tế nhé. Bên cạnh đó, nếu bạn nào chưa làm được, hoặc liên hệ với Arduino Shop để được hỗ trợ hoặc có thể mua luôn sản phẩm này bên mình hiện đang cung cấp. Sản phẩm này bên mình nhập về từ ÚC nên các bạn yên tâm về chất lượng. Xem sản phẩm bên dưới nhé:

BO- IO- I2C-CACH-LY

BO- IO- I2C-CACH-LY

Cảm ơn các bạn đã quan tâm theo dõi. :), Chúc các bạn năm mới thành công và hạnh phúc.

 

GỌI NGAY - 0902 37 12 52 (Mr Quốc): Tư vấn KT

ĐỂ ĐƯỢC TƯ VẤN VÀ CUNG CẤP GIẢI PHÁP KỊP THỜI CHO BẠN

ARDUINO SHOP

Địa chỉ: Số 41 Gò Dưa, Phường Tam Bình, Quận Thủ Đức, TP. Hồ Chí Minh
Email: arduinoshophcm@gmail.com

Bình luận (5)

Gửi bình luận của bạn

Captcha
  • Nguyễn Hoài Bảo (29-03-2018) Trả lời
    Bao nhiêu một con shop ?
    • Arduino Shop (21-07-2018)
      Giá có trên website nha anh
  • Nguyễn Quốc Tuấn (11-11-2017) Trả lời
    Cách để lập trình 8 con IC MCP23008 thì làm sao vậy anh. Anh mới giới thiệu đoạn code lập trình cho 1 con IC MCP23008 thôi. nếu được có khả năng em mua 8 con. A cho em cái giá mỗi 1 con được không
    • Huỳnh Tấn Quốc (04-12-2017)
      Bạn chỉ cần xét địa chỉ I2C cho nó và lập trình thôi bạn.
  • Huỳnh Tấn Quốc (05-04-2017) Trả lời
    Anh ơi cho em hoi, cái này giá bao nhiêu tiền
<