การใช้งานโมดูลแสดง LCD แบบ I2C interface

โมดูลแสดงผลแบบ LCD ที่พบเห็นนิยมใช้กันมาก จะเป็นแบบ Character LCD ซึ่งโดยปกติแล้ว จะมีรูปแบบการเชื่อมต่อเพื่อใช้งานได้ 2 ลักษณะ แบ่งตามจำนวนสายดาต้า (Data bus) ที่ใช้ คือ

    • แบบ 8 บิต อินเตอร์เฟซ
    • แบบ 4 บิต อินเตอร์เฟซ

นอกจากสัญญาณ Data bus แล้ว ยังจำเป็นต้องมีสัญญาณควบคุมจังหวะการสื่อสารข้อมูล อื่นๆ อีกได้แก่

    • E     : Enable
    • RW : Read/Write
    • RS   : Register select

เมื่อรวมจำนวนสายสัญญาณที่ใช้งานทั้งหมดแล้ว จะพบว่าทีความต้องการใช้สายสัญญาณจำนวนหนึ่ง จึงทำให้การเลือกใช้เบอร์ไมโครคอนโทรลเลอร์ ต้องมีจำนวนขาสัญญาณที่เพียงพอด้วย และเป็นไปไม่ได้เลย หากเลือกใช้ไมโครคอนโทรลเลอร์ขนาดเล็ก ที่มีจำนวนขาน้อยๆ เช่่น 8 ขา เป็นต้น

สำหรับแนวทางการประยุกต์ใช้งานในปัจจุบันที่พบเห็นกันมาก จะเป็นการใช้งานร่วมกับ IC ขยายพอร์ต I/O เช่นเบอร์ PCF8574 และ PCF8574A พบเห็นได้มากในท้องตลาด และออกแบบมาเป็น PCB ที่สามารถบัดกรีไว้ด้านหลังของจอ LCD ได้ง่ายด้วย

รูปแสดงตัวอย่าง LCD16x2 บัดกรี I2C LCD interface board ไว้ด้านหลัง ใช้สัญญาณการสื่อสารเพียง 2 เส้น คือ SDA และ SCL ทำให้ไม้ไมโครคอนโทรลเลอร์ที่มีขา I/O น้อยๆ ก็สามารถแสดงผลผ่านจอ LCD ได้

โดย IC ขยายพอร์ตเบอร์ PCF8574 นี้จะมี 2 รุ่นย่อย ดูจากอักษร A ที่ต่อท้ายหมายเลขเบอร์ IC เป็น PCF8574 และ PCF8574A โดยทั้งสองรุ่นนี้จะมีโครงสร้างภายนอกที่เหมือนกัน สามารถใส่แทนกันได้เลย แต่ต่างกันที่หมายเลขอ้างอิงแอดเดรสของ IC ดังนั้น การเขียนโปรแกรมแกรก็ต้องปรับให้ตรงกับเบอร์ที่ใช้งานด้วยเช่นกัน

รูปแบบ Package ต่างๆ ของชิพ

 

หมายเลขอ้างอิงอแดเดรสสำหรับเบอร์ PCF8574 และ PCF8574A เป็นดังนี้

เป็นข้อมูลขนาด 8 บิต (1 Byte) ใช้การอ้างอิงหมายเลขแอดเดรส ที่ประกอบด้วยส่วนคงที่ (fixed) และส่วนที่ปรับเลือกได้จากฮาร์ดแวร์ (hardware selectable) ส่วนบิตสุดท้ายเป็น R/W ควบคุมทิศทางการอ่านเขียนข้อมูล

โดยบิตสุดท้าย (R/W) นั้นจะใช้ควบคุมตามจังหวะอ่าน-เขียนข้อมูลให้กับ PCF8574 และถูกจัดการภายในส่วนของ Library โดยมากจึงไม่ได้ให้ผู้ใช้งานกำหนดบิตนี้โดยตรง และเลื่อนบิตข้อมูลด้านหน้าลงมา 1 บิต (Shift right 1 bit) เพื่อใช้สำหรับการอ้างอิงหมายเลขแอดเดรส ดังนั้นจึงได้ค่าเป็นดังนี้

PCF8574   = 0 0 1 0 0 A2 A1 A0 = 0 0 1 0 0 1 1 1  => 0x27

PCF8574A = 0 0 1 1 1 A2 A1 A0 = 0 0 1 1 1 1 1 1 => 0x3F

เมื่อขาสัญญาณ A2 A1 และ A0 ปกติจะได้รับ Pull up ให้มีค่าเป็น 1 หากไม่มีการกำนดเป็นอย่างอื่น และสามารถกำหนดเป็น 0 ได้ด้วยการบัดกรี PCB pad ดังรูป

ตัวอย่างโปรแกรม Arduino

การใช้งานจำเป็นต้องติดตั้ง Library ที่ชื่อว่า LiquidCrystal_I2C ให้เลือกที่เมนู
Sketch >> Include Library >> Manage Libraries… ดังรูป

พิมพ์ที่ช่องค้นหาด้านบน Liquid Crystal และติดตั้ง LiquidCrystal I2C และกดปุ่ม Install เพื่อติดตั้ง

ตัวอย่างโปรแกรม

หวังว่าบทความนี้จะข้อมูลให้เกิดความเข้าใจเกี่ยวกับการกำหนดหมายเลขแอดเดรสในโปรแกรม เพื่อใช้งานจอแสดงผล LCD ที่มีการเชื่อมต่อผ่านพอร์ต I2C interface

อุปกรณ์ที่ใช้ในบทความ

    1. บอร์ดไมโครคอนโทรลเลอร์ รุ่น AVR-AP3
    2. จอแสดงผล LCD ขนาด 16×2 รุ่น LCM162K-NB แสดงผลด้วยพื้นหลังสีฟ้า ตัวอักษรสีขาว ,
    3. บอร์ดขยายบอร์ต PCF8574 สำหรับจอ LCD

ข้อมูลอ้างอิง

https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf

บทความโดย
อุกฤษฎ์  ตันทสุทธานนท์
ukrit_mrt@micro-research.co.th

Leave a Reply

Your email address will not be published. Required fields are marked *