สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
โพสต์นี้มีจุดมุ่งหมายเพื่ออธิบายวิธีที่ง่ายกว่าในการใช้ Arduino Due (หรือบอร์ด 3.3V อื่นๆ) กับจอแสดงผล LCD 16x2 ยอดนิยมพร้อมโมดูลอะแดปเตอร์ I2C
ปัญหาเริ่มต้นคือ LCD ต้องการ 5V เพื่อให้แบ็คไลท์ทำงานได้อย่างถูกต้อง แต่พิน SCL และ SDA ควรทำงานที่ 3.3V เพื่อสื่อสารกับ Arduino Due โดยไม่ก่อให้เกิดอันตราย เพื่อแก้ปัญหานี้ ฉันพบสองตัวเลือก:
วิธีแก้ปัญหาที่กล่าวถึงมากที่สุดคือการใช้ Bi-Directional Logic Level Converter ซึ่งแก้ปัญหาได้อย่างแท้จริง แต่ยังเพิ่มส่วนประกอบอื่นในรายการของคุณและการเชื่อมต่อสายไฟเพิ่มเติมในวงจรของคุณ
วิธีอื่นที่ฉันพบคือเพียงแค่ถอดตัวต้านทานแบบดึงขึ้น 2 ตัวใน "กระเป๋าเป้สะพายหลังอะแดปเตอร์ I2C" จาก LCD นอกจากจะง่ายกว่ามากแล้ว ยังมีข้อดีอื่นๆ ที่อธิบายไว้เมื่อเปรียบเทียบในตอนท้าย วิธีนี้เป็นจุดสนใจหลักของโพสต์นี้
เสบียง
Arduino Due
จอแสดงผล LCD 16x2 พร้อมโมดูลอะแดปเตอร์ I2C
หัวแร้ง
ปั๊มบัดกรีหรือไส้ตะเกียงบัดกรี
แหนบ
ขั้นตอนที่ 1: ที่มาของโซลูชัน
ฉันไม่ได้เป็นผู้คิดค้นวิธีแก้ปัญหา ฉันเห็นคำแนะนำที่ดีและคำอธิบายเกี่ยวกับฟอรัม Arduino ในลิงก์ด้านล่าง ซึ่งฉันจะทำซ้ำในโพสต์นี้
forum.arduino.cc/index.php?topic=553725.0
คำตอบจาก: david_prentice
ฉันไม่พบบทช่วยสอนที่สมบูรณ์บนอินเทอร์เน็ต และเนื่องจากเป็นปัญหาที่พบบ่อยมาก ฉันจึงพยายามนำเสนอวิธีแก้ปัญหาโดยละเอียด ที่นี่เป็นพยานว่าใช้งานได้จริง และเพิ่มข้อมูลที่อาจทำให้ความสงสัยเกี่ยวกับผลลัพธ์ลดลง
ขั้นตอนที่ 2: คำอธิบาย
อุปกรณ์
เพื่อให้การสื่อสาร I2C ทำงานได้ ต้องใช้ตัวต้านทานแบบดึงขึ้นที่เชื่อมต่อกับพิน SDA และ SCL นั่นเป็นเพราะว่าอุปกรณ์จะหมุนหมุดเหล่านี้ให้ต่ำขณะสื่อสารเท่านั้น เพื่อเป็นตัวแทนของ HIGH จะต้องไม่ส่ง LOW เท่านั้น และต้องขอบคุณการดึงขึ้นที่ HIGH (ความเข้าใจนี้จะค่อนข้างสำคัญในภายหลัง)
LCD "กระเป๋าเป้สะพายหลัง I2C" มีตัวต้านทานแบบดึงขึ้น 4K7 สองตัวที่ตอบสนองความต้องการ I2C แต่เนื่องจากเชื่อมต่อกับ Vcc ถ้าคุณใช้ 5 V พวกเขาจะดึง SDA และ SCL เป็น 5 V
หากคุณดูที่แผ่นข้อมูล คุณจะเห็นว่า Due มีตัวต้านทานแบบดึงขึ้น 1K5 ในตัวอยู่แล้วบน SDA หลัก, หมุด SCL ซึ่งแตกต่างจากบอร์ดอื่น ๆ ซึ่งดึงพวกมันไปที่ 3.3 V.
แบบทดสอบ
- จอแสดงผล LCD -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
หากคุณเพียงแค่เชื่อมต่อ LCD บน Due (ตามการเดินสายด้านบน) 1k5 (หรือ 1k0) Due pullups ที่เชื่อมต่อกับ 3.3V และ pullups LCD 4K7 ที่เชื่อมต่อกับ 5 V จะส่งผลให้สาย I2C ไม่ได้ใช้งานที่ 3.7 V (3.6 V ด้วย 1k0). นั่นไม่ดี เนื่องจากแผ่นข้อมูล Due กำหนดแรงดันไฟฟ้าสูงสุด 3.6 V สำหรับสาย I/O
จากการทดสอบสถานการณ์สมมตินี้ มีเพียง LCD เท่านั้น ฉันได้ 3, 56 V โดยการเพิ่มโมดูล EEPROM ให้กับ SDA และ SCL เดียวกัน เพิ่มขึ้นเป็น 3.606 V ในทั้งสองกรณีทุกอย่างทำงานได้ตามปกติ แต่สิ่งเหล่านี้อยู่ไกลจากแรงดันไฟฟ้าในอุดมคติ ระดับที่พิจารณาสูงสุด 3.6 V ที่กำหนด
ใช่แล้ว มีโอกาสที่จะทำงานได้เหมือนของฉันในขณะที่ไม่ได้ทำการเปลี่ยนแปลงใดๆ แต่ระดับแรงดันไฟฟ้ายังห่างไกลจากอุดมคติและความคลาดเคลื่อนบางประการในการดึง Due หรือ LCD อาจทำให้เกินขีดจำกัด 3.6 V (อย่างน้อยก็ควรทดสอบอย่างระมัดระวังด้วยโพเทนชิออมิเตอร์ 20K หรือ 100K ว่าความต้านทานต่ำสุดระหว่างพิน 5 V และ SCL/SDA คืออะไรก่อนที่จะถึง 3.6 V แม้ว่าส่วนที่เหลือของโซลูชันจะปลอดภัยกว่าและอาจง่ายกว่ามาก)
สารละลาย
วิธีแก้ปัญหาที่นำเสนอคือเพียงแค่ถอดตัวต้านทานแบบดึงขึ้นออกจากกระเป๋าเป้สะพายหลัง LCD ซึ่งพยายามดึงสายให้สูงถึง 5 V จากนั้นจะเหลือเฉพาะตัวต้านทานแบบดึงขึ้นบน Due เท่านั้นโดยดึงสาย SCL และ SDA ไปที่ 3.3V. มันทำงานได้อย่างสมบูรณ์โดยรักษาพินรอบเดินเบาไว้ที่ประมาณ 3.262 V!
การเชื่อมต่อยังคงเหมือนเดิม:
- จอ LCD -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
หากคุณสงสัยว่า LCD จะไม่ดึงเส้นไปที่ 5 V เพื่อแสดง HIGH เมื่อสื่อสารหรือไม่ โปรดจำไว้ว่าใน I2C อุปกรณ์จะดึงเฉพาะเส้น LOW ซึ่งเป็นสัญญาณ HIGH ที่แสดงเมื่อไม่รบกวน ซึ่งจะเป็น 3.3 V จาก การดึงออนบอร์ดของ Due
นอกจากนี้ 3.3 V ก็เพียงพอแล้วสำหรับเป้สะพายหลัง I2C เพื่อพิจารณาว่าเป็นสัญญาณระดับสูง
ขั้นตอนที่ 3: ระบุและถอดตัวต้านทาน
ภาพด้านบนแสดงตัวต้านทานแบบดึงขึ้นเป็นสีแดงที่ฉันพบในโมดูลของฉัน
แยกแยะ
เนื่องจากกระเป๋าเป้สะพายหลังอะแดปเตอร์ LCD I2C อาจแตกต่างกัน ตัวต้านทานอาจไม่อยู่ในการกำหนดค่าเดียวกัน ในการระบุตัวต้านทานแบบดึงขึ้น คุณสามารถใช้มัลติมิเตอร์กับการทดสอบความต่อเนื่องได้ ตัวต้านทานแบบดึงขึ้นแต่ละตัวควรมีปลายด้านหนึ่งเชื่อมต่อกับพิน SCL หรือ SDA และปลายอีกด้านหนึ่งกับ Vcc
ในกรณีของฉัน มีตัวต้านทาน 4K7 (472 ในโค้ด SMD) สามตัวบนบอร์ด มีเพียงสองคนเท่านั้นที่ตรงตามข้อกำหนดข้างต้น โดยชี้ให้เห็นว่านี่คือพูลอัพที่เรากำลังมองหา!
เพื่อความระมัดระวังเป็นพิเศษ (หากด้วยเหตุผลบางอย่างที่ไม่ใช่ 4K7) ฉันยังทดสอบตัวต้านทานอื่นๆ และยืนยันว่าไม่มีตัวต้านทานตัวใดที่ตรงตามข้อกำหนดสำหรับการดึงขึ้น
ลบ
ตอนนี้ สิ่งที่คุณต้องทำคือทำลายมันทิ้ง! ง่ายกว่าถ้าคุณมีปั๊มบัดกรีหรือไส้ตะเกียงบัดกรีและแหนบเพื่อช่วย
ขั้นตอนที่ 4: การเปรียบเทียบระหว่างโซลูชัน
ตัวแปลงระดับลอจิกแบบสองทิศทาง (LLC)
ข้อดี:
ไม่ต้องใช้อุปกรณ์บัดกรีหรือความสามารถใดๆ
จุดด้อย:
โฆษณาสายเคเบิลเพิ่มเติมและ LLC ในรายการส่วนประกอบของคุณ
Messier เชื่อมต่อกับส่วนประกอบพิเศษ
ราคาแพงกว่าเล็กน้อย
ถอดตัวต้านทานแบบดึงขึ้น LCD
ข้อดี:
ผลลัพธ์สุดท้ายที่สะอาดขึ้น
คุณก็สามารถทำได้ทันทีโดยไม่ต้องรอ LLC
ดีเป็นพิเศษถ้าคุณต้องการลดความหลากหลายของส่วนประกอบและความซับซ้อนของการประกอบในโครงการที่ซับซ้อนหรือที่คุณต้องการทำซ้ำ
จุดด้อย:
เปลี่ยนวงจร LCD (ถ้าคุณต้องการให้ "พร้อมใช้งาน" กับ Uno ซึ่งมี pullups 4K7 อยู่แล้ว คุณสามารถเลิกทำการเปลี่ยนแปลงที่ขายต่อได้)
ขั้นตอนที่ 5: ข้อควรพิจารณาขั้นสุดท้าย
ฉันหวังว่าบทช่วยสอนนี้จะให้ความกระจ่างเกี่ยวกับปัญหาความเข้ากันได้นี้และวิธีแก้ปัญหาที่เป็นไปได้บางอย่าง
หากคุณมีแนวคิดในการปรับปรุง คำอธิบายที่ดีขึ้น วิธีแก้ปัญหาใหม่ หรือพบข้อผิดพลาดในโพสต์ โปรดบอกฉันในความคิดเห็น!:)