โปรเจกต์ การ Interface กับ 16x2 Character LCD
เพิ่ม LCD เข้ากับ projects ของคุณเพื่อแสดงผล data ที่ได้รับจาก sensors, แสดง custom characters ของคุณเอง หรือใช้เป็น debugging tool
เพิ่ม LCD เข้ากับ projects ของคุณเพื่อแสดงผล data ที่ได้รับจาก sensors, แสดง custom characters ของคุณเอง หรือใช้เป็น debugging tool
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์
*******
กรุณาเยี่ยมชม https://proteshea.com/16x2-character-lcd-with-arduino-uno/ สำหรับรายการอุปกรณ์ทั้งหมดที่จำเป็นสำหรับโปรเจกต์นี้
*******
การมี LCD (Liquid Crystal Display) เป็นส่วนหนึ่งของการออกแบบของคุณนั้นมีประโยชน์มากมาย สามารถใช้เพื่อแสดงข้อมูลที่ได้รับจาก Sensors, สร้างเมนูที่โต้ตอบได้ หรือใช้เป็นเครื่องมือสำหรับการ Debug นอกจากนี้คุณยังสามารถสร้างตัวอักษรพิเศษของคุณเองเพื่อแสดงผลได้อีกด้วย! ในโปรเจกต์นี้ เราจะเชื่อมต่อ character LCD ขนาด 16×2 (ในโหมด 4-bit) เข้ากับ Arduino Uno Rev3 (Uno) ซึ่งจะต้องใช้ digital output Pins จำนวน 6 Pins จาก Uno เพื่อขับ LCD (4 Pins สำหรับข้อมูล และ 2 Pins สำหรับการควบคุม)
LCD ประกอบด้วย 16 Pins ที่ใช้สำหรับไฟเลี้ยง, การควบคุม และข้อมูล โดยใช้ Controller มาตรฐานอุตสาหกรรมของ Hitachi ดังนั้นการทำงานพื้นฐานจึงคล้ายคลึงกันในแต่ละยี่ห้อที่วางจำหน่าย มีทั้ง Interface แบบขนาน 4-bit และ 8-bit ในที่นี้เราจะใช้ในโหมด 4-bit แทน 8-bit ซึ่งหมายความว่าเราต้องส่ง nibble สูง (1 nibble = 4 bits) ก่อน แล้วตามด้วย nibble ต่ำ เพื่อส่ง Byte ข้อมูลที่จำเป็นสำหรับแต่ละคำสั่งหรือตัวอักษร LCD ที่พบบ่อยที่สุดคือขนาด 16×2 หรือ 20×4 ซึ่งหมายความว่าสามารถแสดงตัวอักษรได้ 16 ตัวในแต่ละแถวจากทั้งหมด 2 แถว และ 20 ตัวในแต่ละแถวจากทั้งหมด 4 แถวตามลำดับ แผนผัง Pinout ของ LCD แสดงอยู่ด้านล่าง
หมายเหตุ: LCD ไม่ได้มาพร้อมกับ Header ตัวผู้แบบ 16 Pins ดังนั้นคุณจะต้องบัดกรีเพิ่มเอง
Pin 1 และ Pin 2 ใช้สำหรับจ่ายไฟให้ LCD และควรเชื่อมต่อกับ GND และ +5Vdc ตามลำดับ Pin 3 ใช้สำหรับปรับความคมชัด (Contrast) – ส่วนนี้จะเชื่อมต่อกับ Potentiometer (Pot) ขนาด 10KΩ เพื่อให้สามารถปรับแรงดันเอาต์พุตไปยัง Pin 3 ได้ ส่วน Register Select (RS) บน Pin 4 ใช้สำหรับส่งคำสั่งเมื่อมีสถานะ Low หรือส่งข้อมูลเมื่อมีสถานะ High Pin 5 คือ Read/Write (R/W) ใช้สำหรับอ่านหรือเขียนข้อมูลจาก LCD ตัว LCD มีความสามารถในการประมวลผลโปรแกรมและแสดงข้อมูลซึ่งเป็นเหตุผลที่ต้องมี Pin นี้ อย่างไรก็ตาม เราจะทำการเขียนข้อมูลลง LCD เท่านั้น ดังนั้นเราจึงสามารถต่อ Pin นี้ลง Ground เพื่อให้มันอยู่ในโหมดเขียนถาวรได้ แปด Pins ถัดไป (7-14) ใช้สำหรับส่งข้อมูล เนื่องจากเราใช้ LCD ในโหมด 4-bit ดังนั้น D0-D3 (Pins 7-10) จึงไม่ได้ถูกใช้งาน Pins 15 และ 16 คือ Anode และ Cathode ของ LED Backlight ตามลำดับ เราจำเป็นต้องใช้ตัวต้านทานภายนอกต่ออนุกรมกับ Backlight นี้เพื่อจำกัดกระแส มิฉะนั้น LED อาจไหม้ได้
LCD มี Timing Diagram ที่ต้องปฏิบัติตามเพื่อให้สามารถส่งคำสั่งและข้อมูลตัวอักษรได้ นอกจากนี้ยังมีเวลา Set-up และ Hold ที่ต้องนำมาพิจารณาด้วย เพื่อให้ระดับสัญญาณคงที่และมั่นใจว่า Pins ถูกสุ่มตัวอย่างในเวลาที่ถูกต้อง แผนภาพด้านล่างแสดง Timing Diagram สำหรับการส่งคำสั่งไปยัง LCD ในโหมด 4-bit หากเราต้องการส่งคำสั่งเพื่อล้างหน้าจอ เราต้องส่ง 0000 (Upper Nibble) บน Data Bus และตามด้วย 0001 (Lower Nibble) บน Data Bus

แผนภาพด้านล่างแสดง Timing Diagram สำหรับการส่งข้อมูลไปยัง LCD ในโหมด 4-bit ตัวอย่างเช่น สมมติว่าเราต้องการส่งตัวอักษร 1 ไปยัง LCD ค่า ASCII ขนาด 8-bit ที่เทียบเท่าคือ 0x30 หรือ 0011 0000 ดังนั้นเราจะส่ง 0011 บน Data Bus และตามด้วย 0000

คุณไม่จำเป็นต้องเขียน Driver สำหรับ LCD เอง เพราะมี Library ที่เราสามารถใช้งานได้ชื่อว่า LiquidCrystal.h ซึ่งใช้งานง่ายและช่วยให้เรากำหนดสเปกของ LCD ได้ เช่น จำนวน Column และ Row และเลือกว่าจะใช้ Interface แบบ 4-bit หรือ 8-bit เรายังสามารถส่งข้อมูลและคำสั่งต่าง ๆ ได้มากถึง 19 คำสั่ง
เรากำลังใช้ Modulus Canister ในการติดตั้ง LCD โปรดรับชมวิดีโอด้านล่างหากคุณกำลังใช้ Modulus
เมื่อคุณติดตั้ง LCD เข้ากับ Modulus เรียบร้อยแล้ว เราสามารถต่อปลายตัวผู้ของสาย Jumper แต่ละเส้นเข้ากับ Female Header Pins ของ Uno คุณควรมี Jumper 6 เส้น: โดยต่ออยู่ที่ Pins 4, 6 และ 11-14 ซึ่ง Pins 4, 6 และ 11-14 ของ LCD จะเชื่อมต่อกับ Uno Pins 2, 3 และ 4-7 ตามลำดับ
หากคุณใช้ Breadboard แผนผังวงจรเบื้องต้นแสดงอยู่ด้านล่าง เราจะจ่ายไฟ +5V และ GND ให้กับ Breadboard ผ่าน FuelCan ซึ่งจะอธิบายเพิ่มเติมในส่วนถัดไป

หากคุณยังไม่ได้ติดตั้ง Uno ลงในพื้นที่ต้นแบบของ FuelCan ให้ดำเนินการได้เลย หากคุณใช้ Breadboard แทน Modulus ให้วาง Breadboard ไว้ในช่องเก็บของด้านล่างเพื่อจำกัดความยาวของสาย Jumper คุณจะต้องจ่ายไฟ +5V และ GND ให้กับ Power และ Ground Rails บน Breadboard โดยใช้สาย Banana Jack to Test-lead Clip ที่จัดเตรียมไว้ให้ คุณจะต้องใช้ Header Pin ตัวผู้สองตัวเพื่อยึด Test-lead Clips บนฝั่ง Breadboard เสียบสาย USB ด้าน Type A เข้ากับช่อง USB1 และด้าน Type B เข้ากับช่องของ Uno เสียบอะแดปเตอร์แปลงไฟ AC-DC เพื่อจ่ายไฟให้ FuelCan
เมื่อเดินสายเสร็จเรียบร้อยและจ่ายไฟให้ FuelCan แล้ว ตอนนี้เราสามารถโหลด Sketch ลงใน Uno ได้เลย Sketch อยู่ด้านล่างนี้ Library LiquidCrystal ประกอบด้วยฟังก์ชันต่าง ๆ 19 ฟังก์ชันที่คุณสามารถใช้งานได้ เราไม่ได้แสดงให้ดูทั้งหมด แต่เราจะแสดงฟังก์ชันที่ใช้บ่อยที่สุด เช่น lcd.print, lcd.clear, lcd.home, lcd.createChar, lcd.write, lcd.setCursor, lcd.blink, lcd.noBlink, lcd.cursor, lcd.noCursor, lcd.scrollDisplayLeft และ lcd.scrollDisplayRight นอกจากนี้เรายังแสดงตัวอักษรพิเศษ (custom character) บน LCD อีกด้วย!
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้