เพื่อสร้างการสื่อสารที่ดีระหว่างโลกมนุษย์และโลกแห่งเครื่องจักรหน่วยแสดงผลจึงมีบทบาทสำคัญ ดังนั้นจึงเป็นส่วนสำคัญของระบบฝังตัว หน่วยแสดงผล - ใหญ่หรือเล็กทำงานบนหลักการพื้นฐานเดียวกัน นอกเหนือจากหน่วยแสดงผลที่ซับซ้อนเช่นจอแสดงผลกราฟิกและเครื่องจ่าย 3 มิติแล้วเราต้องรู้จักการทำงานกับจอแสดงผลแบบธรรมดาเช่นหน่วย 16x1 และ 16x2 หน่วยแสดงผล 16x1 จะมี 16 ตัวอักษรและอยู่ในบรรทัดเดียว LCD 16x2 จะมี 32 ตัวอักษรรวม 16in 1 stและอีก 16 ตัวใน 2 ndไลน์. ที่นี่เราต้องเข้าใจว่าในแต่ละอักขระมี 5x10 = 50 พิกเซลดังนั้นการแสดงหนึ่งอักขระต้องทำงานร่วมกัน 50 พิกเซล แต่เราไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้เนื่องจากมีคอนโทรลเลอร์อื่น (HD44780) ในหน่วยแสดงผลซึ่งทำหน้าที่ควบคุมพิกเซล (คุณสามารถเห็นได้ในหน่วย LCD คือตาดำด้านหลัง)
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์:
ไมโครคอนโทรลเลอร์ ATmega32
แหล่งจ่ายไฟ (5v)
โปรแกรมเมอร์ AVR-ISP
JHD_162ALCD (16x2 LCD)
ตัวเก็บประจุ 100uF
ซอฟต์แวร์:
Atmel สตูดิโอ 6.1
Progisp หรือแฟลชมายากล
แผนภาพวงจรและคำอธิบาย
ดังที่แสดงในจอ LCD ที่เชื่อมต่อกับวงจร ATmega32คุณจะเห็นว่า PORTA ของ ATMEGA32 เชื่อมต่อกับพอร์ตข้อมูล LCD ที่นี่อย่าลืมปิดการใช้งานการสื่อสาร JTAG ใน PORTC ของ ATMEGA โดยการเปลี่ยนฟิวส์ไบต์หากต้องการใช้ PORTC เป็นพอร์ตการสื่อสารปกติ ในจอ LCD 16x2 จะมี 16 พินทั้งหมดหากมีไฟด้านหลังหากไม่มีไฟด้านหลังจะมี 14 พิน หนึ่งสามารถจ่ายไฟหรือปล่อยหมุดไฟด้านหลัง ตอนนี้ใน 14 พินมีพินข้อมูล 8 พิน (7-14 หรือ D0-D7), พินแหล่งจ่ายไฟ 2 พิน (1 & 2 หรือ VSS & VDD หรือ gnd & + 5v), พิน3 rdสำหรับควบคุมคอนทราสต์ (VEE- ควบคุมความหนาของตัวอักษร แสดง), 3 พินควบคุม (RS & RW & E)
ในวงจรด้านบนเพื่อเชื่อมต่อ LCD 16x2 พร้อมไมโครคอนโทรลเลอร์ AVRคุณสามารถสังเกตได้ว่าฉันใช้พินควบคุมเพียงสองตัว สิ่งนี้ให้ความยืดหยุ่นในการทำความเข้าใจที่ดีขึ้น ไม่ได้ใช้บิตคอนทราสต์และ READ / WRITE บ่อยนักดังนั้นจึงสามารถย่อให้สั้นลงได้ ทำให้ LCD มีคอนทราสต์สูงสุดและโหมดอ่าน เราต้องควบคุมพิน ENABLE และ RS เพื่อส่งอักขระและข้อมูลตามนั้น
การเชื่อมต่อระหว่างไมโครคอนโทรลเลอร์ ATmega32 และ 16x2 LCD มีดังต่อไปนี้:
PIN1 หรือ VSS - กราวด์
PIN2 หรือ VDD หรือ VCC - กำลังไฟ + 5v
PIN3 หรือ VEE - กราวด์ (ให้ความเปรียบต่างสูงสุดที่ดีที่สุดสำหรับมือใหม่)
PIN4 หรือ RS (Register Selection) - PD6 ของไมโครคอนโทรลเลอร์
PIN5 หรือ RW (อ่าน / เขียน) - กราวด์ (ทำให้ LCD อยู่ในโหมดอ่านทำให้การสื่อสารสำหรับผู้ใช้ง่ายขึ้น)
PIN6 หรือ E (เปิดใช้งาน) - PD5 ของไมโครคอนโทรลเลอร์
PIN7 หรือ D0 - PA0 ของไมโครคอนโทรลเลอร์
PIN8 หรือ D1 - PA1
PIN9 หรือ D2 - PA2
PIN10 หรือ D3 - PA3
PIN11 หรือ D4 - PA4
PIN12 หรือ D5 - PA5
PIN13 หรือ D6 - PA6
PIN14 หรือ D7 - PA7
ในวงจรคุณจะเห็นว่าเราใช้การสื่อสาร 8 บิต (D0-D7) แต่นี่ไม่ใช่การบังคับและเรายังสามารถใช้การสื่อสาร 4 บิต (D4-D7) ได้ แต่ด้วยโปรแกรมการสื่อสาร 4 บิตจะค่อนข้างซับซ้อนสำหรับผู้เริ่มต้นดังนั้นเราจึงไปด้วย การสื่อสาร 8 บิต
ดังนั้นจากการสังเกตจากตารางด้านบนเรากำลังเชื่อมต่อ 10 พินของ LCD เข้ากับคอนโทรลเลอร์ซึ่ง 8 พินเป็นพินข้อมูลและ 2 พินสำหรับควบคุม
กำลังทำงาน
ในการเริ่มต้นคุณต้องรู้จักฟังก์ชันของ 10 พินของ 16x2 LCD (8 พินข้อมูล + 2 พินควบคุม) พินข้อมูล 8 พินใช้สำหรับส่งข้อมูลหรือคำสั่งไปยัง LCD ในหมุดควบคุมสองตัว:
1. RS (Register selection) pin คือการบอก LCD ว่าเรากำลังส่งข้อมูลหรือสั่งการไป
ตัวอย่างเช่น:
ในตารางด้านบนสำหรับค่าพอร์ตข้อมูล (D7-D0) ที่เป็น“ 0b0010 1000 หรือ 0x28” จะบอกให้ LCD แสดงสัญลักษณ์“ (” ในตารางที่สองค่า 0x28 ที่เท่ากันจะบอกว่า LCD“ คุณเป็น LCD ขนาด 5x7 จุดและ ทำตัวเหมือนหนึ่ง” ดังนั้นสำหรับค่าเดียวกันผู้ใช้สามารถกำหนดสองสิ่งได้ตอนนี้สถานการณ์นี้ถูกทำให้เป็นกลางโดยพินการลงทะเบียนหากตั้งค่าพิน RS ไว้ต่ำ LCD จะเข้าใจว่าเรากำลังส่งคำสั่งหากเราตั้งค่าพิน RS ไว้ที่สูงแล้ว LCD เข้าใจว่าเรากำลังส่งข้อมูลดังนั้นในทั้งสองกรณี LCD จะเคารพค่าพอร์ตข้อมูลตามค่าพิน RS
2. พิน E (เปิดใช้งาน) เป็นเพียงการบอก "ไฟ LED แสดงสถานะการทำงานของพีซี" พินนี้จะถูกตั้งไว้ที่สูงเพื่อบอกให้ LCD "รับพอร์ตข้อมูลฟอร์มข้อมูลของคอนโทรลเลอร์" เมื่อพินนี้ต่ำหลังจากสูงแล้ว LCD จะประมวลผลข้อมูลที่ได้รับและแสดงผลลัพธ์ที่สอดคล้อง ดังนั้นพินนี้จึงถูกตั้งค่าให้สูงก่อนส่งข้อมูลและดึงลงมาที่พื้นหลังจากส่งข้อมูล
หลังจากเชื่อมต่อฮาร์ดแวร์แล้วให้เริ่ม Atmel studio และเริ่มโปรเจ็กต์ใหม่สำหรับเขียนโปรแกรมตอนนี้เปิดหน้าจอการเขียนโปรแกรมและเริ่มเขียนโปรแกรม โปรแกรมมีดังต่อไปนี้
อันดับแรกเราบอกคอนโทรลเลอร์ว่าเราใช้พอร์ตใดสำหรับข้อมูลและควบคุม LCD จากนั้นบอกคอนโทรลเลอร์ว่าจะส่งข้อมูลหรือคำสั่งตามนั้นเมื่อใดโดยเล่นกับพิน RS และ E
คำอธิบายสั้น ๆ เกี่ยวกับแนวคิดที่ใช้ในโปรแกรม:
1. ตั้งค่า E ไว้สูง (บอกให้ LCD รับข้อมูล) และ RS ตั้งไว้ต่ำ (บอก LCD ว่าเรากำลังให้คำสั่ง)
2. ให้ค่า 0x01 แก่พอร์ตข้อมูลเพื่อเป็นคำสั่งในการล้างหน้าจอ
3. ตั้งค่า E ไว้สูง (บอกให้ LCD รับข้อมูล) และตั้งค่า RS ไว้สูง (บอกว่า LCD กำลังให้ข้อมูล)
4. การส่งสตริงอักขระส่งอักขระแต่ละตัวทีละสตริง
5. E ถูกตั้งไว้ต่ำ (บอก LCD ว่าเราส่งข้อมูลเสร็จแล้ว)
6. หลังจากคำสั่งสุดท้าย LCD จะยุติการสื่อสารและประมวลผลข้อมูลและแสดงสตริงของอักขระบนหน้าจอ
ในสถานการณ์นี้เราจะส่งอักขระทีละตัว อักขระถูกกำหนดให้กับ LCD โดยรหัส ASCII (รหัสมาตรฐานอเมริกันสำหรับการแลกเปลี่ยนข้อมูล)
ตารางของรหัส ASCII แสดงไว้ด้านบน ที่นี่เพื่อให้ LCD แสดงอักขระ“ @” เราจำเป็นต้องส่งรหัสฐานสิบหก“ 64” ถ้าเราส่ง '0x62' ไปที่ LCD มันจะแสดงสัญลักษณ์ '>' เช่นนี้เราจะส่งรหัสที่เหมาะสมไปยัง LCD เพื่อแสดงชื่อ
วิธีการสื่อสารระหว่างไมโครคอนโทรลเลอร์ LCD และ ATmega32 AVRอธิบายได้ดีที่สุดตามขั้นตอนของรหัส C ด้านล่าง