การเริ่มต้นกำลังไฟของโมดูล LCD HD44780


10

ฉันกำลังใช้โมดูล LCD LCD โคลน HD44780 กับ KS0066U ทุกอย่างทำงานได้ดีบนโมดูลยกเว้นเมื่อฉันปิดวงจรอุปกรณ์อย่างรวดเร็ว (เปิด -> ปิด -> เปิด) ด้วยเหตุผลบางประการการหยุดชะงักของพลังงานในระยะสั้นทำให้โมดูลจอแสดงผลเริ่มต้นอย่างไม่เหมาะสมเป็น LCD แบบ 1 บรรทัดแทนที่จะเป็นหน้าจอ LCD แบบ 2 บรรทัด อะไรจะทำให้เกิดพฤติกรรมนี้ มีวิธีการป้องกันในซอฟต์แวร์หรือไม่?

แก้ไข: ฉันใช้ตัวควบคุมการแสดงผลในโหมด 4 บิตไม่ใช่โหมด 8 บิต


ดูเหมือนว่าไม่มีใครคิดว่าคำถามของคุณมีค่ามากกว่าการลงคะแนนค่อนข้างแปลก
Kortuk

เอกสารข้อมูลทางเทคนิคสำหรับโคลน HD44780 บางอันเขียนได้ไม่ดีนัก เป้าหมายของฉันคือการได้รับการสนทนาที่เกิดขึ้นในสิ่งที่วิธีที่เหมาะสมเพื่อเริ่มต้นพวกเขาคือ บางทีฉันอาจเป็นคนเดียวที่มีปัญหาในการใช้พวกเขาในโหมด 4 บิต
mjh2007

ไม่ฉันกำลังเจอปัญหาเดียวกันตอนนี้ทำงานในโหมด 4 บิต เป็นเวลาประมาณ 15 ปีแล้วที่ฉันได้ตั้งโปรแกรม LCD แบบตัวละครล่าสุดและฉันจำได้ว่ามันเป็นความเจ็บปวดที่แท้จริงในการดีบั๊กเมื่อตอนที่ฉันอยู่โรงเรียน แม้ว่าฉันจะไม่ได้อยู่ไกลเท่าคุณ - ฉันไม่สามารถเริ่มต้นได้ถูกต้องเพราะฉันยังไม่สามารถแสดงตัวละครเดียวได้ :)
เดฟ

คำตอบ:


4

ฉันเปลี่ยนรหัสการเริ่มต้นของฉันเพื่อที่จะส่งแทะ 4 บิตบนของชุดคำสั่งฟังก์ชั่นสองครั้ง ตามมาซึ่งฉันไม่พอใจแทะ 4 บิตบนแล้วตามด้วยแทะล่าง 4 บิตที่ต่ำกว่า สิ่งนี้ไม่ตรงกับแผ่นข้อมูลที่ดูเหมือนว่าบ่งบอกว่าคุณสามารถส่งแทะ 4 บิตบนได้จากนั้นส่งคำสั่งชุดฟังก์ชั่นบน 4 บิตแล้วตามด้วย 4 บิตที่ต่ำกว่า

// ทำงานได้บางครั้ง
พอร์ตหลอกหลอกรหัส= 0x20;
E = 1; E = 0;
พอร์ต = 0x20;
E = 1; E = 0;
พอร์ต = 0xc0;
E = 1; E = 0;

// ทำงานได้ตลอดเวลา
พอร์ตหลอกหลอกรหัส= 0x20;
E = 1; E = 0;
E = 1; E = 0;
พอร์ต = 0x20;
E = 1; E = 0;
พอร์ต = 0xc0;
E = 1; E = 0;


2

ฉันเดาว่าคุณจะพลาดความล่าช้าที่จำเป็นในลำดับการเริ่มต้นของคุณ หากจอแสดงผลไม่ว่างเมื่อคุณพยายามส่งคำสั่งคำสั่งนั้นจะถูกละเว้น หากเมื่อคุณเริ่มโพรซีเดอร์จอแสดงผลจะอยู่ในโหมดสี่บิตและเพิ่งมี "0000" โอเวอร์คล็อกเป็นครึ่งแรกของคำสั่งดังนั้นเมื่อคุณนาฬิกาใน "0011" จอแสดงผลจะเห็นคำสั่งทั้งหมดเป็น "00000011" ซึ่งจะทำให้จอแสดงผลไม่ว่างนานถึง 1.6ms

ในทางกลับกันจะเป็นการดีถ้าเป็นไปได้ที่จะโยงสายข้อมูลที่มีลำดับต่ำจากจอแสดงผลในลักษณะที่เมื่อคำสั่ง "0011" ถูกส่งไปยังจอแสดงผลทั้ง 8 บิตที่จอแสดงผลจะแสดงเป็นคำสั่งโหมดโหมด ซึ่งถูกต้องสำหรับประเภทการแสดงผลที่คุณใช้ ซึ่งจะช่วยหลีกเลี่ยงความผิดพลาดในการแสดงผลเมื่อทำการรีเซ็ตจอแสดงผลที่ใช้งานอยู่แล้ว (การรีเซ็ตจอแสดงผลเป็นระยะเป็นความคิดที่ดีถ้ามันสามารถทำได้อย่างไม่มีที่ติเพราะมันจะช่วยให้มั่นใจได้ว่าหากจอแสดงผล ตัวเอง)


1

ฉันพบวิธีแก้ปัญหาสำหรับปัญหา:

ฉันเพิ่มความล่าช้า 1,000 มิลลิวินาทีเมื่อเริ่มต้นก่อนที่จะเริ่มต้น / กำหนดค่าคอนโทรลเลอร์ LCD มันใช้งานได้ดีสำหรับฉัน

ความล่าช้าที่ต่ำกว่า (100, 200ms) ทำงานได้ไม่ดีนัก เพิ่งทราบ: มันเกิดขึ้นเฉพาะใน 4bits databuss

โชคดี!


0

การใส่ความล่าช้าในโค้ดของคุณดังนั้นเมื่อมันเปิดขึ้นมันจะให้ LCD ยาวพอที่จะเริ่มต้นเมื่อมันเริ่มทำงาน สูงสุดไม่กี่ร้อยมิลลิวินาที

คุณสามารถลองเชื่อมต่อพลังงาน LCD กับไมโครคอนโทรลเลอร์และปิดจอ LCD เป็นเวลาหนึ่งวินาทีหลังจากเปิดเครื่อง


มีความล่าช้า 100 ms เมื่อเริ่มต้นระบบ
mjh2007

ลองคำแนะนำอื่น ๆ ของฉันแล้ว คุณสามารถควบคุมพลังงาน LCD จากขาโดยตรง ไม่ควรวาดมากกว่าสองสาม mA
โทมัสโอ

มีความล่าช้าสูงสุดที่อนุญาตหรือไม่ ฉันคิดว่าสิ่งสำคัญกับ LCD เหล่านี้คือคุณรอจำนวนขั้นต่ำ แต่ถ้าคุณไม่สามารถแก้ไขเวลาได้คุณสามารถเล่นได้อย่างปลอดภัยและรออีกต่อไป
เดฟ

@Dave คุณอาจตีความ "การหน่วงเวลาสูงสุด" ผิด ๆ มันเป็นเพียงความล่าช้าที่สมเหตุสมผลที่ฉันอยากแนะนำ ยกตัวอย่างเช่นการรอสักสองสามชั่วโมงจะรุนแรงมาก ...
โธมัสโอ

ฮ่า ๆ! ฉันคิดว่านั่นคือสิ่งที่คุณหมายถึง แต่ฉันต้องการให้แน่ใจว่าฉันไม่ได้หายไปบางสิ่งบางอย่างเพราะฉันยังไม่ได้รับการเริ่มต้นจอแอลซีดีของฉัน ฉันสงสัยว่าฉันควรจะไปและคว้าหม้อเพื่อให้แน่ใจว่ามันไม่ใช่ความแตกต่างที่ทำให้ฉันกลัวที่นี่ :)
เดฟ

0

ไม่แน่ใจว่าสิ่งนี้จะช่วยได้ทั้งหมดหรือไม่ แต่ฉันยุ่งกับ KS0066U ในโครงการ Arduino นี่คือการเชื่อมโยง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.