โมดูลแสดงผลแบบ 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 เพื่อติดตั้ง
ตัวอย่างโปรแกรม
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/************************************************************************ Project LCD16x2_I2C_Demo Description Sample LCD16x2 display with I2C interface board. Programmer Mr. Ukrit Tantasutanon Date 2020-11-13 Hardware AVR-AP3 = Controller board I2C LCD 16x2 Library LiquidCrystal_I2C ************************************************************************* MICRO RESEARCH TECHNOLOGY OC.,LTD. , www.micro-research.co.th *************************************************************************/ #include LiquidCrystal_I2C lcd(0x27,16,2); // For PCF8574 //LiquidCrystal_I2C lcd(0x3f,16,2); // For PCF8574A int Counter=0; void setup() { lcd.init(); // Initital LCD lcd.backlight(); // Turn on backlight } void loop() { lcd.setCursor ( 0, 0 ); // Cursor position Row=0 , Col=0 lcd.print("LCD16x2 I2C Demo"); lcd.setCursor ( 0, 1 ); // Cursor position Row=1 , Col=0 lcd.print("Counter="); lcd.print(Counter++); delay(1000); } |
หวังว่าบทความนี้จะข้อมูลให้เกิดความเข้าใจเกี่ยวกับการกำหนดหมายเลขแอดเดรสในโปรแกรม เพื่อใช้งานจอแสดงผล LCD ที่มีการเชื่อมต่อผ่านพอร์ต I2C interface
อุปกรณ์ที่ใช้ในบทความ
-
- บอร์ดไมโครคอนโทรลเลอร์ รุ่น AVR-AP3
- จอแสดงผล LCD ขนาด 16×2 รุ่น LCM162K-NB แสดงผลด้วยพื้นหลังสีฟ้า ตัวอักษรสีขาว ,
- บอร์ดขยายบอร์ต PCF8574 สำหรับจอ LCD
ข้อมูลอ้างอิง
https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
บทความโดย
อุกฤษฎ์ ตันทสุทธานนท์
ukrit_mrt@micro-research.co.th