สารบัญ:

จอ LCD 5V พร้อม Arduino Due 3.3V I2C: 5 ขั้นตอน
จอ LCD 5V พร้อม Arduino Due 3.3V I2C: 5 ขั้นตอน

วีดีโอ: จอ LCD 5V พร้อม Arduino Due 3.3V I2C: 5 ขั้นตอน

วีดีโอ: จอ LCD 5V พร้อม Arduino Due 3.3V I2C: 5 ขั้นตอน
วีดีโอ: Using a 5 Volt LCD1602 Display with 3.3 Volt Microcontrollers #Shorts 2024, กรกฎาคม
Anonim
จอ LCD 5V พร้อม Arduino Due 3.3V I2C
จอ LCD 5V พร้อม Arduino Due 3.3V I2C

โพสต์นี้มีจุดมุ่งหมายเพื่ออธิบายวิธีที่ง่ายกว่าในการใช้ 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: ข้อควรพิจารณาขั้นสุดท้าย

ฉันหวังว่าบทช่วยสอนนี้จะให้ความกระจ่างเกี่ยวกับปัญหาความเข้ากันได้นี้และวิธีแก้ปัญหาที่เป็นไปได้บางอย่าง

หากคุณมีแนวคิดในการปรับปรุง คำอธิบายที่ดีขึ้น วิธีแก้ปัญหาใหม่ หรือพบข้อผิดพลาดในโพสต์ โปรดบอกฉันในความคิดเห็น!:)

แนะนำ: