ค้นหา I2C Address ด้วย Mbed
บทความสอนวิธีค้นหา Address I2C ของอุปกรณ์ต่างๆด้วย Mbed
29 November, 2019 by
ค้นหา I2C Address ด้วย Mbed
Liew Wuttipat
| No comments yet

        สวัสดีครับ บทความนี้ผมจะมาแนะนำวิธีการค้นหา Address I2C ของอุปกรณ์ที่เราซื้อมาว่าเป็นอะไรกัน เนื่องจากในบางครั้งเราซื้ออุปกรณ์มาแล้ว แต่เราไม่รู้ Address ของอุปกรณ์ชิ้นนั้นๆ หรือเราอยากรู้ว่าอุปกรณ์นั้นยังสามารถเชื่อมต่อได้หรือไม่ ยกตัวอย่างเช่น หน้าจอ LCD บางครั้งก็มี Address เป็น 0x27 หรือ  0x3F, เซนเซอร์ IMU MPU9250 บางครั้งก็เป็น 0x68 หรือ 0x69 เพื่อความแน่ใจเราก็ควรจะเช็คก่อน

        เรามาเริ่มกันเลย เราก็ต่ออุปกรณ์ของเราเข้ากับช่อง I2C ตามปกติ (SDA, SCL) ในบทความนี้ผมใช้ตัวอย่างเป็นบอร์ด Blue Pill (STM32F103C8T6) กับเซนเซอร์ MPU9250 ที่เพิ่งซื้อมาใหม่


        เมื่อต่ออุปกรณ์เสร็จเรียบร้อยแล้ว จากนั้นก็อัพโหลดโปรแกรมเข้าไป โดยโปรแกรมนี้จะทำการค้นหาไล่ตั้งแต่ Address 0x00 ไปจนถึง 0x7F ถ้าหากอุปกรณ์ตอบ ACK กลับมาก็แสดงว่าเจออุปกรณ์ และจะปริ้นค่า Address ของอุปกรณ์ที่เจอออกมา


#include <mbed.h>

I2C i2c(PB_11, PB_10); // SDA pin, SCL pin
Serial pc(PB_6, PB_7); // TX pin, RX pin

int main()
{
pc.baud(115200);
wait_ms(2000);
pc.printf("Hello World!\n");

int count = 0;
for (int address = 0; address < 127; address++)
{
if (!i2c.write(address << 1, NULL, 0)) // 0 returned is ok
{
pc.printf("I2C found at 0x%02X\n", address);
count++;
}
wait_ms(20);
}
if (count)
pc.printf("%d", count);
else
pc.printf("No");
pc.printf(" device found\n\n");
}


เมื่ออัพโหลดแล้วเปิด Serial monitor ก็จะเห็นข้อความแสดงขึ้นมา หากขึ้นแบบนี้แสดงว่าค้นหาเจออุปกรณ์ที่ Address 0x68


Hello World!
I2C found at 0x68
1 device found


แต่หากขึ้นแสดงแบบนี้แสดงว่าไม่มีอุปกรณ์ต่ออยู่ หรือค้นหาไม่เจอ


Hello World!
No device found

Sign in to leave a comment