สารบัญ:

1602 โมดูลแผงปุ่มกด LCD พร้อมกระเป๋าเป้สะพายหลัง I2C: 6 ขั้นตอน
1602 โมดูลแผงปุ่มกด LCD พร้อมกระเป๋าเป้สะพายหลัง I2C: 6 ขั้นตอน

วีดีโอ: 1602 โมดูลแผงปุ่มกด LCD พร้อมกระเป๋าเป้สะพายหลัง I2C: 6 ขั้นตอน

วีดีโอ: 1602 โมดูลแผงปุ่มกด LCD พร้อมกระเป๋าเป้สะพายหลัง I2C: 6 ขั้นตอน
วีดีโอ: Universal Radio Project Controller (ATMega328 & si5351) 2024, พฤศจิกายน
Anonim
1602 โมดูลแผงปุ่มกด LCD พร้อมกระเป๋าเป้สะพายหลัง I2C
1602 โมดูลแผงปุ่มกด LCD พร้อมกระเป๋าเป้สะพายหลัง I2C

ในฐานะที่เป็นส่วนหนึ่งของโครงการขนาดใหญ่ ฉันต้องการมีจอ LCD และแป้นกดสำหรับการนำทางของเมนูง่ายๆ ฉันจะใช้พอร์ต I/O จำนวนมากบน Arduino สำหรับงานอื่นๆ ดังนั้นฉันจึงต้องการอินเทอร์เฟซ I2C สำหรับ LCD ดังนั้นฉันจึงซื้อฮาร์ดแวร์ ซึ่งประกอบด้วยโมดูล 1602 LCD Keypad Shield จาก DFRobot และโมดูลซีเรียล I2C ที่ไม่ระบุชื่อสำหรับ LCD ฉันต้องการใช้กับ Arduino Nano จากนั้นฉันก็พบว่ามีความท้าทายบางอย่างในการทำให้ส่วนประกอบเหล่านี้ทำงานร่วมกันได้ แต่ก็เป็นไปได้ ดังนั้นฉันจึงต้องการแบ่งปันประสบการณ์ของฉันและอาจช่วยเหลือผู้อื่น

รูปภาพนี้เป็นของเขียงหั่นขนมที่ใช้งานได้ ซึ่งสามารถแสดงข้อความบน LCD และระบุการกดปุ่มได้ LCD ถูกควบคุมผ่านอินเทอร์เฟซ I2C รวมถึงไฟหลังจอ LCD Arduino ได้รับการกดแป้นบนพิน A0 (สามารถเป็นพินอะนาล็อกใดก็ได้ ยกเว้น A4 และ A5 ซึ่งเชื่อมโยงกับอินเทอร์เฟซ I2C)

ขั้นตอนที่ 1: คำอธิบายชิ้นส่วน - โมดูลแผงปุ่มกด LCD

คำอธิบายชิ้นส่วน - โมดูลแผงปุ่มกด LCD
คำอธิบายชิ้นส่วน - โมดูลแผงปุ่มกด LCD

โมดูลแผงปุ่มกด LCD ประกอบด้วยจอ LCD 1602 ที่ใช้กันทั่วไปซึ่งติดตั้งอยู่บนแผงวงจรที่ยึดกุญแจไว้ และใช้ส่วนย่อยของการเชื่อมต่อ LCD และทำให้พร้อมใช้งานกับหมุดส่วนหัวที่ด้านล่างของแผงวงจร ฉันเข้าใจว่าบอร์ดนี้มีจุดประสงค์เพื่อติดตั้งบน Arduino Uno หรือที่คล้ายกัน และให้เลย์เอาต์พินที่ถูกต้องเพื่อให้มันทำงานในสภาพแวดล้อมนั้น ฉันซื้อโมดูลนี้บนอีเบย์จากผู้ขายในประเทศจีน หมุดส่วนหัวที่ด้านล่าง (แผงปุ่มกด) ของบอร์ดส่วนใหญ่จะติดป้ายกำกับไว้ แต่หมุดที่ด้านบนซึ่งเป็นอินเทอร์เฟซ LCD จะไม่ติดป้ายกำกับ อย่างไรก็ตาม หมุดบน LCD นั้นมีป้ายกำกับ

ขั้นตอนที่ 2: คำอธิบายชิ้นส่วน - I2C Serial Module

คำอธิบายชิ้นส่วน - I2C Serial Module
คำอธิบายชิ้นส่วน - I2C Serial Module

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

โมดูลนี้ใช้ IC PCF8574T ซึ่งยุติโปรโตคอล I2C มี 3 พินสำหรับการควบคุมที่อยู่ (20 ถึง 27) และมีพินอินพุต/เอาต์พุตดิจิทัล 8 พิน P0 ถึง P7 ตามแผ่นข้อมูลของ PCF8574T พิน I/O แต่ละตัวมี FET เพื่อดึงลงกราวด์สำหรับสถานะ LOW และสามารถจมได้อย่างน้อย 20ma ในสถานะสูง มีการดึงขึ้นแบบแอ็คทีฟชั่วคราว และกระแสดึงขึ้นต่อเนื่องที่ประมาณ 0.1 mA

ในโมดูลนี้ หมุด I/O ดิจิทัลทั้งหมด ยกเว้น P3 จะถูกดึงออกมาที่หมุดส่วนหัว (ทางด้านขวาของรูปภาพ) ในกรณีของ P3 จะเชื่อมต่อกับฐานของทรานซิสเตอร์ อีซีแอลของทรานซิสเตอร์นั้นเชื่อมต่อกับ Vss (กราวด์) และตัวสะสมเชื่อมต่อกับพินส่วนหัว 16 ซึ่งสามารถใช้ควบคุมไฟหลังจอ LCD ได้ เนื่องจากทรานซิสเตอร์ สถานะลอจิกจึงกลับด้านเมื่อเทียบกับที่สันนิษฐานไว้ในไลบรารีซอฟต์แวร์ กล่าวคือ ไฟแบ็คไลท์ LCD จะเปิดขึ้นเมื่อพิน P3 ต่ำ และปิดเมื่อพิน P3 สูง

ฉลากบนทรานซิสเตอร์ระบุว่า L6 ซึ่งตามการวิจัยของฉันอาจทำให้เป็น MMBC1623L6 ซึ่งมีอัตราขยายกระแสขั้นต่ำที่ 200 ด้วยกระแสฐาน 0.1 mA มันควรจะสามารถรักษาสภาวะต่ำที่ตัวสะสม (โมดูล Pin 16) ที่มีกระแสสะสมอย่างน้อย 20mA

นอกจากนี้ โมดูลนี้มีโพเทนชิออมิเตอร์ 10K ที่เชื่อมต่อระหว่าง +5 และกราวด์ โดยนำตัวแปรนำออกมาที่พิน 3 (ที่สามจากด้านล่างของรูปภาพ) เมื่อเชื่อมต่อโดยตรงกับ LCD หม้อนี้จะควบคุมความคมชัดของ LCD อย่างไรก็ตาม ฟังก์ชั่นดังกล่าวมีให้โดยหม้อที่คล้ายกันแยกต่างหากบนแผงป้องกัน LCD ดังนั้นหม้อนี้บนโมดูลอนุกรมจึงไม่ทำงาน

ฉันไม่พบการเชื่อมต่อกับพิน INT ของ PCF8574T

UPDATE 22 สิงหาคม 2019

ดังที่ได้กล่าวไว้ข้างต้น PCF8574 มีหมุดควบคุมที่อยู่ 3 ตัว ดูเหมือนว่าสิ่งเหล่านี้จะถูกนำออกมาบนแผ่นรองบนกระดานกระเป๋าเป้สะพายหลังซึ่งมีป้ายกำกับว่า A0, A1 และ A2 พวกเขาสามารถเห็นได้ในภาพถ่าย ฉันไม่ได้ทดสอบสิ่งนี้ แต่ดูเหมือนว่าเกือบจะแน่ใจว่าโดยการเชื่อมต่อหมุดเหล่านี้อย่างน้อยหนึ่งหมุดกับแผ่นรองที่อยู่ติดกัน ที่อยู่ I2C สามารถควบคุมได้ในช่วงตั้งแต่ 20 ถึง 27 นอกจากนี้ยังมีอุปกรณ์ที่เหมือนกันเกือบตัวที่สองคือ PCF8574A ซึ่งมีฟังก์ชันการทำงานเหมือนกันกับ PCF8574 แต่ครอบคลุมช่วงที่อยู่ตั้งแต่ 0x38 ถึง 0x3F

สามารถตรวจสอบที่อยู่ที่อุปกรณ์ของคุณใช้จริงได้ด้วย I2CScanner มีเครื่องสแกน I2C แบบง่ายๆ หลายเครื่องจากแหล่งต่างๆ อันนี้ที่ https://github.com/farmerkeith/I2CScanner ยังระบุอุปกรณ์บางอย่างที่พบ

ขั้นตอนที่ 3: การเชื่อมต่อ

การเชื่อมต่อ
การเชื่อมต่อ

ขอบคุณ ChaitanyaM17 ที่ให้แผนภาพ Fritzing ซึ่งแสดงการเชื่อมต่อที่อธิบายไว้ด้านล่าง

พลัง:

โมดูล LCD มีหมุดที่ด้านล่างของ "5.0V" ทางด้านขวา ติดกับหมุดที่ไม่มีป้ายกำกับสองอันซึ่งมีพื้นทั้งคู่

ถือโมดูลอนุกรมที่มีอินเทอร์เฟซ I2C ที่ด้านซ้ายมือ มี 16 พินที่ขอบด้านล่าง อันแรกคือกราวด์ และอันที่สองคือ +5v อีกทางเลือกหนึ่งคือใช้พินสองตัวล่างบนอินเทอร์เฟซ I2C เพื่อจ่ายไฟ แต่ฉันพบว่าสะดวกกว่าที่จะใช้พินตามที่อธิบายไว้ข้างต้น

อินเทอร์เฟซ I2C บนโมดูลอนุกรม พินบนสุดคือ SCL (นาฬิกา) และไปที่ Arduino A5 ขาที่สองลงคือ SDA (ข้อมูล) และไปที่ Arduino A4

อินเทอร์เฟซการพิมพ์ LCD มีการเชื่อมต่อ 6 ระหว่างโมดูลอนุกรมและแผงแผงปุ่มกด LCD ซึ่งทั้งหมดอยู่ระหว่างหมุดที่ไม่มีป้ายกำกับ ฉันจะระบุพวกมันบนโมดูล LCD โดยนับจากขวาไปซ้าย โดยพินแรกเป็น 1 มี 2 บล็อก 8 บล็อก ดังนั้นพวกมันจึงไปจาก 1 ถึง 16 ฉันระบุพวกมันบนโมดูลอนุกรม I2C โดยนับจากซ้ายไป ใช่แล้ว มี 16 อย่างนี้ด้วย นอกจากนี้ฉันให้ฉลากแต่ละเส้นซึ่งเป็นขาเทียบเท่าบน Arduino ที่ปกติจะเกี่ยวข้องกับฟังก์ชันนั้น ในกรณีของการเชื่อมต่อโดยตรงโดยไม่มีโมดูลอนุกรม

ดังนั้นการเชื่อมต่อข้อมูล 6 รายการคือ:

Arduino เทียบเท่า // ขาโมดูลอนุกรม // ขาโมดูลปุ่มกด LCD

D4 // 11 // 5 D5 // 12 // 6 D6 // 13 // 7 D7 // 14 // 8 D8 // 4 // 9D9 // 6 // 10

การควบคุมไฟหลังจอ LCD: ใช้การเชื่อมต่ออีกหนึ่งอย่าง:

Arduino เทียบเท่า // ขาโมดูลอนุกรม // ขาโมดูลปุ่มกด LCD

D10 ///16 // 11

อินเทอร์เฟซปุ่มกด: ใช้สายไฟเส้นเดียวจากพินโมดูล LCD ที่ด้านล่างที่มีป้ายกำกับ "A0" เพื่อตรึง A0 บน Arduino อย่างน้อยมันก็ค่อนข้างง่าย!

ขั้นตอนที่ 4: ทำให้คีย์ RST ใช้งานได้เหมือนกับ 5 คีย์อื่นๆ

RST สามารถเชื่อมต่อโดยตรงกับอินพุต RESTART ของ Arduino Nano

อย่างไรก็ตาม หากคุณต้องการให้คีย์ RST ใช้งานได้ในซอฟต์แวร์สำหรับสิ่งอื่น สามารถทำได้โดยเชื่อมต่อตัวต้านทาน 15K ระหว่างพิน RST และพิน A0 ที่ด้านล่างของแผงป้องกันแผงปุ่มกด LCD

ใช้งานได้ดังนี้: มีตัวต้านทาน 2K ระหว่าง +5V และปุ่มขวา จากนั้นจึงต่อสายตัวต้านทานที่ใหญ่ขึ้นเรื่อยๆ สำหรับแต่ละคีย์อื่นๆ (330R ไปยังคีย์ UP, 620R ไปยังคีย์ DOWN, 1K ไปยังคีย์ LEFT และ 3K3 ไปยังคีย์ SELECT คีย์ทั้งหมด (รวมถึงคีย์ RST) จะเชื่อมต่อกับ กราวด์ เมื่อเชื่อมต่อกับตัวแปลง A/D 10 บิต (สำหรับ Arduino Nano A0) จะแสดงค่าต่อไปนี้โดยประมาณ:

ขวา = 0; ขึ้น = 100; ลง = 260; ซ้าย = 410; เลือก = 640

ด้วยตัวต้านทาน 15 k ถึง RST ให้ค่าประมาณ 850

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

ขั้นตอนที่ 5: ซอฟต์แวร์

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

ประเด็นหลักคือการกลับขั้วของคำสั่ง Backlight OFF และ ON (เนื่องจากทรานซิสเตอร์ในโมดูล I2C ตามที่อธิบายไว้ในส่วนคำอธิบายชิ้นส่วน)

UPDATE 22 สิงหาคม 2019

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

LiquidCrystal_I2C จอแอลซีดี (0x27, 2, 1, 0, 4, 5, 6, 7);

ขั้นตอนที่ 6: ทบทวนและอภิปราย

อย่างที่คุณเห็น ฉันมีฟังก์ชันหลักที่ใช้งานได้

ความตั้งใจต่อไปของฉันคือการใส่สิ่งนี้ลงในกล่องโครงการโดยเป็นส่วนหนึ่งของโครงการอื่น อย่างไรก็ตาม หลังจากออกเดินทางบนเส้นทางนี้แล้ว ฉันได้เรียนรู้ว่ายังมีอีกปัญหาหนึ่งที่ฉันไม่ได้คาดคิดมาก่อน

ปัญหาคือโมดูล LCD Keypad นี้ไม่ได้ตั้งค่าให้ติดตั้งในกล่อง กล่องแบบไหนก็ได้ ปุ่มของปุ่มทั้ง 6 ปุ่มอยู่ต่ำกว่าระดับของหน้าจอ LCD อย่างมาก ดังนั้นหากโมดูลติดตั้งในกล่อง (เช่น ในฝา) โดยให้ด้านบนของแผงวงจร LCD เรียบเสมอกับด้านล่างของฝาปิด ของกุญแจอยู่ต่ำกว่าด้านบนของฝาประมาณ 7 มม.

วิธีแก้ปัญหาที่เป็นไปได้คือ:

ก) อดทนกับมัน เจาะรูที่ฝาปิดและใช้เครื่องมือ (เช่น เข็มถักที่มีเส้นผ่านศูนย์กลางที่เหมาะสม) เพื่อกดปุ่ม

b) ถอด LCD ออกจากแผงวงจรโมดูลและทำการผ่าตัดบนแผงปุ่มกดเพื่อให้สามารถยึดส่วนประกอบทั้งสองไว้ที่ฝากล่องโครงการได้อย่างอิสระ (ฉันคิดว่าอาจมีปัญหากับปุ่มที่สั้นเกินไป)

c) ลบปุ่มที่มีอยู่แล้วแทนที่ด้วยปุ่มที่สูงกว่า ปุ่มใหม่ต้องสูงประมาณ 13 มม. เพื่อสั่งงานผ่านฝากล่องโปรเจ็กต์ได้) สวิตช์ปุ่มสำรองมีให้เลือกหลายระดับ รวมถึง 13 มม.

d) ทิ้งโมดูลป้องกันแผงปุ่มกด LCD และใช้ LCD และแผงปุ่มกดแยกกัน (เช่น เริ่มต้นใหม่) มีแผงปุ่มกดให้เลือกหลากหลาย แต่ฉันไม่เคยเห็นรูปแบบ 6 ปุ่มแบบเดียวกับในโมดูลนี้ (เช่น เลือก ซ้าย ขึ้น ลง ขวา รีสตาร์ท) อาจไม่ใช่ปัญหาใหญ่ แต่เหตุผลหนึ่งที่ฉันเริ่มต้นกับโมดูลนี้คือ ฉันคิดว่าเลย์เอาต์คีย์นี้เป็นสิ่งที่ฉันต้องการ

ฉันกำลังวางแผนที่จะใช้โซลูชัน c) ด้านบน และดูว่าฉันจะไปได้อย่างไร

ตัวอย่างข้อมูลอื่นที่อาจสนใจ:

เมื่อเปิดไฟแบ็คไลท์การบริโภคในปัจจุบันของโครงการนี้คือ: Arduino Nano 21.5 ma; โมดูลอนุกรม 3.6 ma; โมดูล LCD 27.5 mA; รวม 52 มิลลิแอมป์

เมื่อปิดไฟแบ็คไลท์ การใช้กระแสไฟของโปรเจ็กต์นี้คือ: Arduino Nano 21.5 ma; โมดูลอนุกรม 4.6 ma; โมดูล LCD 9.8 mA; รวม 36 มิลลิแอมป์

แนะนำ: