ผู้เขียน หัวข้อ: งานครั้งที่ 7 การเขียนโปรแกรมเพื่อแสดงผลด้วย LCD i2c เบื้องต้น  (อ่าน 12557 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์
การติดตั้งไลบารี่ LCD i2c และการใช้งานเบื้องต้น

การติดตั้งไลบารี่ LCD i2c  เนื่องจากโปรแกรม Arduino IDE ไม่ได้มีการติดตั้งมาให้ตั้งแต่เริ่มต้นจึงจำเป็นต้องมีการติดตั้งเพิ่มเติ่มเข้าไปในโปรแกรม โดยมีขั้นตอนดังนี้

1. ดาวน์โหลดไฟล์ zip จากเวปไซด์ https://github.com/marcoschwartz/LiquidCrystal_I2C


2. ทำการเพิ่มไลบรารี่ลงในโปรแกรม Arduino IDE โดยการเพิ่มจากไฟล์ zip แล้วทำการหาไฟล์ zip ที่ได้จากการดาวน์โหลดในข้อ 1


การต่อใช้งาน LCD กับบอร์ดเชื่อมต่อแบบ i2c
  LCD ชนิดที่เป็นตัวอักขระโดยปกติทั่วไปจะเป็น LCD ที่ใช้แรงดันไฟเลี้ยงขนาด 5 Vdc แต่เนื่องจากปัจจุบันเทคโนโลยีไมโครคอนโทรลเลอร์ที่นำ LCD ไปใช้งานมีความเร็วในการทำงานที่สูงขึ้น (ความถี่สูงขึ้น) จึงส่งผลใกต้องลดแรงดันลงเพื่อให้เกิดความร้อนลดลงนั่นเอง ซึ่งจะเห็นได่ว่ามีการใช้แรงดัน 3.3 V ในไมโครคอนโทรลเลอร์ที่มีความถี่การทำงานที่สูงขึ้น จึงทำให้ LCD ที่ทำงานที่ 5 V ไม่สามารถใช้งานได้ในระดับแรงดัน 3.3 V และในปัจจุบันมีการออกแบบโดยเพิ่มวงจรทวีแรงดันให้กับ LCD ภายในโมดูลซึ่งจะทำให้สามารถใช้งานที่แรงดัน 3.3 V ได้ โดยผู้ใช้งานสามารถสังเกตุได้จากชิพทวีแรงดันหลังโมดูล LCD ดังรูป


LCD i2c
สามารถซื้อชุดสำเร็จที่เป็น LCD และมีโมดูล i2c ประกอบมาแล้วหรือจะซื้อโมดูล i2c มาเชื่อมต่อกับ LCD ก็สามารถทำได้โดยที่หน้าตาตัวโมดูลเป็นดังรูป

โมดูลเชื่อมต่อ LCD แบบ i2c


แอดแดรสของโมดูลสามารถแก้ไขเป็นตำแหน่งอื่นได้โดยการเชื่อมต่อ(H) หรือปลดลอย(L) จุดกำหนดแอดเดรส (A0 A1 A2) ที่ตัวโมดูลโดยสามารถกำหนดแอดเดรสเป็นตำแหน่งอื่นได้ดังนี้



ประกบเชื่อมต่อกับ LCD ดังรูป








ขาสัญญาณ SDA และ SCL ถูกกำหนดไว้ในระบบแล้วดังนี้
โค๊ด: [Select]
static const uint8_t SDA = 4;
static const uint8_t SCL = 5;

static const uint8_t LED_BUILTIN = 16;
static const uint8_t BUILTIN_LED = 16;

static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = 0;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t D9   = 3;
static const uint8_t D10  = 1;
ดังนั้นเมื่อใช้กับ NodeMCU ขา SDA จะต้องต่อกับขา D2 และขา SCL จะต้องต่อกับขา D1

ฟังก์ชั่นที่มีให้ใช้งานในไลบรารี่
.init();
.begin();
.clear();
.home();
.noDisplay();
.display();
.noBlink();
.blink();
.noCursor();
.cursor();
.scrollDisplayLeft();
.scrollDisplayRight();
.leftToRight();
.rightToLeft();
.shiftIncrement();
.shiftDecrement();
.noBacklight();
.backlight();
.autoscroll();
.noAutoscroll();
.createChar();
.setCursor();
.print();
.blink_on();
.blink_off();
.cursor_on();
.cursor_off();
.setBacklight();
.load_custom_character();
.printstr();

โจทย์โปรแกรม
-เขียนโปรแกรมอ่านค่าอนาลอกโดยนำค่าที่อ่านได้มาแสดงผลที่หน้าจอ LCD
-โปรแกรมรายละเอียดพิเศษรายกลุ่ม (แจ้งให้ทราบเมื่อถึงชั่วโมงเรียน)

วงจรที่ใช้ในการทดลองกรณีใช้บอร์ด NodeMCU
สำหรับโมดูล LCD 5V

สำหรับโมดูล LCD 3.3V



วงจรที่ใช้ในการทดลองกรณีใช้บอร์ด WeMos D1 mini
สำหรับโมดูล LCD 5V

สำหรับโมดูล LCD3.3V



ตัวอย่างโปรแกรม
โค๊ด: [Select]
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);    /* 0x27 for PCF8574 and 0x3F for PCF8574A */
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(2,0);
  lcd.print("Hello, world!");
  lcd.setCursor(4,1);
  lcd.print("NodeMCU Lab");
}
void loop()
{
}
« แก้ไขครั้งสุดท้าย: กรกฎาคม 04, 2018, 09:27:54 PM โดย admin »