สารบัญ:

3-Wire HD44780 LCD ราคาไม่ถึง 1 ดอลลาร์: 5 ขั้นตอน
3-Wire HD44780 LCD ราคาไม่ถึง 1 ดอลลาร์: 5 ขั้นตอน

วีดีโอ: 3-Wire HD44780 LCD ราคาไม่ถึง 1 ดอลลาร์: 5 ขั้นตอน

วีดีโอ: 3-Wire HD44780 LCD ราคาไม่ถึง 1 ดอลลาร์: 5 ขั้นตอน
วีดีโอ: Arduino Tut. #4 - HD44780 LCD Setup and Programming 2024, กรกฎาคม
Anonim
3-Wire HD44780 LCD ราคาไม่ถึง 1 ดอลลาร์
3-Wire HD44780 LCD ราคาไม่ถึง 1 ดอลลาร์

ในคำแนะนำนี้ เราจะเรียนรู้วิธีที่เราสามารถเชื่อมต่อ LCD ที่ใช้ชิปเซ็ต HD44780 กับบัส SPI และขับด้วยสายไฟเพียง 3 เส้นในราคาน้อยกว่า $1 แม้ว่าฉันจะเน้นที่การแสดงตัวเลขและตัวอักษร HD44780 ในบทช่วยสอนนี้ หลักการเดียวกันนี้ก็จะได้ผลค่อนข้างเหมือนกันสำหรับ LCD อื่นๆ ที่ใช้บัสข้อมูลแบบขนาน 8 บิต และสามารถปรับให้เข้ากับจอแสดงผลที่มีบัสข้อมูล 16 บิตได้ง่ายมาก. โดยปกติแล้ว จอแสดงผลแบบตัวเลขและตัวอักษรแบบ HD44780 (และเข้ากันได้) มีจำหน่ายในรูปแบบ 16x2 (2 บรรทัดประกอบด้วยอักขระ 16 ตัว) และขนาด 20x4 แต่สามารถพบได้ในรูปแบบอื่นๆ อีกมากมาย จอแสดงผลที่ 'ซับซ้อน' ที่สุดน่าจะเป็นจอแสดงผลขนาด 40x4 จอแสดงผลประเภทนี้มีความพิเศษเนื่องจากมีตัวควบคุม HD44780 2 ตัว ตัวหนึ่งสำหรับสองแถวบนและอีกตัวหนึ่งสำหรับสองแถวล่าง LCD กราฟิกบางตัวมีตัวควบคุมสองตัวเช่นกัน LCD HD44780 นั้นยอดเยี่ยม ราคาถูกมาก อ่านง่าย และใช้งานได้ง่ายมาก แต่ก็มีข้อเสียอยู่บ้าง จอภาพเหล่านี้ใช้พิน I/O จำนวนมากเมื่อเชื่อมต่อกับ Arduino ในโปรเจ็กต์ธรรมดาๆ นี่ไม่ใช่ข้อกังวล แต่เมื่อโปรเจ็กต์ใหญ่ขึ้น มี IO มาก หรือต้องการพินบางอย่างสำหรับสิ่งต่างๆ เช่น การอ่านแบบอะนาล็อกหรือ PWM ความจริงที่ว่า LCD เหล่านี้ต้องการอย่างน้อย 6 พินสามารถกลายเป็น ปัญหา. แต่เราสามารถแก้ปัญหานี้ได้อย่างถูกและน่าสนใจ

ขั้นตอนที่ 1: รับส่วนประกอบ

ฉันใช้ TaydaElectronics กับส่วนประกอบส่วนใหญ่ที่ฉันใช้ในโปรเจ็กต์นี้ คุณสามารถรับชิ้นส่วนเหล่านี้บนอีเบย์ได้เช่นกัน แต่เพื่อความสะดวกในการใช้งาน ฉันจะเชื่อมโยงคุณกับ Tayda. Shopping List2 - แพ็คเกจ 74HC595 DIP161 - ส่วนหัวของผู้ชายทั่วไป - 2 พิน ไม่จำเป็น ฉันใช้วิธีนี้เพื่อปิดการใช้งานแบ็คไลท์อย่างถาวร3 - ตัวเก็บประจุเซรามิก - ความจุ 0.1µF; แรงดันไฟฟ้า 50V1 - ตัวเก็บประจุด้วยไฟฟ้า - ความจุ 10µF; แรงดันไฟฟ้า 35V1 - ตัวเก็บประจุเซรามิก - ความจุ 220pF; แรงดันไฟฟ้า 50V1 - ทรานซิสเตอร์ NPN - หมายเลขชิ้นส่วน PN2222A*1 - ตัวต้านทาน 1k Ω1 - โพเทนชิโอมิเตอร์แบบทริมเมอร์ - ความต้านทานสูงสุด 5kΩ1 - 470 Ω ตัวต้านทาน* ด้วยทรานซิสเตอร์ NPN ไฟแบ็คไลท์จะดับจนกว่าจะเปิดโดยซอฟต์แวร์ หากคุณต้องการเปิดไฟแบ็คไลท์ตามค่าเริ่มต้น ให้ใช้ทรานซิสเตอร์ชนิด PNP การเปลี่ยนแปลงในรหัสของห้องสมุดที่ให้ไว้จะต้องทำแม้ว่า ยอดรวมย่อยสำหรับรายการนี้คือ 0.744 เหรียญ ไม่จำเป็นต้องใช้ส่วนหัวของหมุด ดังนั้นคุณสามารถประหยัดได้ 15 เซ็นต์ตรงนั้น และยอดรวมย่อยจะเท่ากับ $0.6

ขั้นตอนที่ 2: รู้จักฮาร์ดแวร์ของคุณ #1

รู้จักฮาร์ดแวร์ของคุณ #1
รู้จักฮาร์ดแวร์ของคุณ #1

นี่คือพินมาตรฐานของ HD44780 LCD ซึ่งคล้ายกับกราฟิก LCD บางตัวเช่นกัน HD44780 สามารถทำงานได้ในสองโหมด: 1. โหมด 4 บิต โดยแต่ละไบต์ที่ส่งไปยัง LCD ประกอบด้วย 2 ส่วน 4 บิต 2. โหมด 8 บิตซึ่งเราจะเน้น LCD มีทั้งหมด 16 พิน พินควบคุม 3 พิน และดาต้าพิน 8 อัน:RS - ควบคุมว่าเราต้องการส่งคำสั่งหรือข้อมูลไปยัง LCD หรือไม่ โดยที่ 'สูง' หมายถึงข้อมูล (อักขระ) และ 'ต่ำ' หมายถึงคำสั่ง byte. R/W - ตัวควบคุม HD44780 ช่วยให้คุณอ่านจาก RAM ได้ เมื่อพินนี้ 'สูง' เราสามารถอ่านข้อมูลจากหมุดข้อมูลได้ เมื่อ 'ต่ำ' เราสามารถเขียนข้อมูลไปยัง LCD ได้ แม้ว่าตัวเลือกในการอ่านจาก LCD จะมีประโยชน์ในบางกรณี แต่เราจะไม่พูดถึงมันในบทช่วยสอนนี้ และเราจะเพียงแค่ต่อพินนี้เพื่อให้แน่ใจว่าพินจะอยู่ในโหมดเขียนเสมอ E - E คือพิน 'เปิดใช้งาน' หมุดนี้ถูกสลับเป็น 'สูง' จากนั้น 'ต่ำ' เพื่อเขียนข้อมูลไปยัง RAM และในที่สุดก็แสดงบนหน้าจอ DB0-7 - นี่คือหมุดข้อมูล ในโหมด 4 บิต เราใช้เฉพาะ 4 บิตสูง DB4-DB7 และในโหมด 8 บิตทั้งหมดจะถูกใช้ VSS - นี่คือพินกราวด์. VCC - นี่คือพินพาวเวอร์ จอ LCD ใช้แหล่งจ่ายไฟ 5V เราสามารถป้อนพลังงานจากพิน +5v ของ Arduino ได้อย่างง่ายดาย Vo - นี่คือพินที่ให้คุณกำหนดระดับคอนทราสต์สำหรับจอแสดงผล มันต้องใช้โพเทนชิออมิเตอร์ ซึ่งปกติแล้วจะใช้หม้อ 5K Ohm LED+ - นี่คือ แหล่งพลังงานสำหรับแบ็คไลท์ LCD บางรุ่นไม่มีไฟแบ็คไลท์ และมีเพียง 14 พินเท่านั้น ในกรณีส่วนใหญ่พินนี้ต้องการการเชื่อมต่อ +5v ด้วย LED- - นี่คือกราวด์สำหรับแบ็คไลท์** สิ่งสำคัญคือต้องตรวจสอบแผ่นข้อมูลการแสดงผลหรือตรวจสอบ PCB เพื่อตรวจสอบตัวต้านทานแบ็คไลท์ LCD ส่วนใหญ่จะสร้างขึ้น -ในกรณีนี้ สิ่งที่คุณต้องทำคือจ่ายไฟให้กับ LED+ และกราวด์กับ LED- แต่ในกรณีที่ LCD ของคุณไม่มีตัวต้านทานในตัวสำหรับแบ็คไลท์ คุณจำเป็นต้องเพิ่มตัวต้านทานเข้าไป มิฉะนั้น แบ็คไลท์จะใช้พลังงานมาก และในที่สุด ไฟก็จะดับ ในกรณีส่วนใหญ่ วิธีที่ LCD นี้เชื่อมต่อกับ Arduino คือการใช้ในโหมด 4 บิตและต่อสายดินกับพิน R/W วิธีนี้เราใช้พิน RS, E และ DB4-DB7 การทำงานในโหมด 4 บิตมีข้อเสียเล็กๆ น้อยๆ อีกประการหนึ่งคือ การเขียนข้อมูลไปยังหน้าจอใช้เวลานานเป็นสองเท่าเมื่อเทียบกับการกำหนดค่าแบบ 8 บิต LCD มีเวลา 'การตกตะกอน' ที่ 37 ไมโครวินาที ซึ่งหมายความว่าคุณต้องรอ 37 ไมโครวินาทีก่อนที่จะส่งคำสั่งถัดไปหรือ data-byte ไปยัง LCD เนื่องจากในโหมด 4 บิต เราต้องส่งข้อมูลสองครั้งสำหรับแต่ละไบต์ เวลาทั้งหมดที่ใช้ในการเขียนไบต์เดียวจึงสูงถึง 74 ไมโครวินาที นี่ยังเร็วพอ แต่ฉันต้องการให้การออกแบบของฉันได้ผลลัพธ์ที่ดีที่สุด วิธีแก้ปัญหาของเราเกี่ยวกับจำนวนพินที่ใช้อยู่ในตัวแปลง Serial to Parallel…

ขั้นตอนที่ 3: รู้จักฮาร์ดแวร์ของคุณ #2

รู้จักฮาร์ดแวร์ของคุณ #2
รู้จักฮาร์ดแวร์ของคุณ #2

สิ่งที่เราจะทำคือสร้างอะแดปเตอร์ซึ่งใช้การสื่อสารแบบอนุกรมที่ออกมาจาก Arduino และแปลงข้อมูลเป็นเอาต์พุตแบบขนานซึ่งสามารถป้อนเข้าสู่ LCD ของเราได้ มาในชิป 74HC595 นี่เป็นเครื่องบันทึกการเปลี่ยนแปลงราคาถูกและใช้งานง่ายมาก โดยพื้นฐานแล้วสิ่งที่ทำคือใช้สัญญาณนาฬิกาและข้อมูลที่ใช้เพื่อเติมบัฟเฟอร์ 8 บิตภายในด้วย 8 บิตสุดท้ายที่ 'โอเวอร์คล็อก' เมื่อพิน 'Latch' (ST_CP) ถูกทำให้ 'สูง' แล้ว มันจะย้ายบิตเหล่านี้เป็น 8 เอาต์พุต 595 มีคุณสมบัติที่ดีมาก มีพินข้อมูลอนุกรม (Q7 ') พินนี้สามารถใช้กับเดซี่เชน 2 หรือมากกว่า 595 ร่วมกันเพื่อสร้างอะแดปเตอร์ Serial to Parallel ซึ่งมีความกว้าง 16 บิตขึ้นไป สำหรับโครงการนี้ เราต้องการชิป 2 ตัวนี้ แผนผังนี้ยังสามารถแก้ไขให้ทำงานกับ 595 เดียวในโหมด 4 บิตได้ แต่จะยังไม่ครอบคลุมในบทช่วยสอนนี้

ขั้นตอนที่ 4: การเดินสายไฟทั้งหมด

การเดินสายไฟทั้งหมด
การเดินสายไฟทั้งหมด

ตอนนี้เรารู้แล้วว่าฮาร์ดแวร์ของเราทำงานอย่างไร เราก็สามารถวางสายได้ทั้งหมด ในแผนผังเราเห็น 2 595 ชิปเดซี่ถูกล่ามโซ่เข้าด้วยกันเพื่อสร้างเอาต์พุตแบบขนาน 16 บิต อันที่จริงแล้วชิปด้านล่างเป็นชิปหลักและอันบนนั้นถูกล่ามโซ่ด้วยเดซี่ สิ่งที่เราเห็นในที่นี้คือ 595 ด้านล่างกำลังขับเคลื่อนหมุดข้อมูลของ LCD ในการกำหนดค่าแบบ 8 บิต ชิปตัวบนจะควบคุมสัญญาณ RS และไฟแบ็คไลท์ด้วยการเปิดหรือปิดทรานซิสเตอร์ จำ *หมายเหตุเกี่ยวกับไฟหลังจอ LCD ในหน้า Know your hardware #1 ในกรณีที่ LCD ของคุณไม่มีตัวต้านทานแบ็คไลท์ อย่าลืมเพิ่มตัวต้านทานเข้าไปในวงจรของคุณ ในกรณีของฉัน LCD ฉันมีตัวต้านทานในตัวอยู่แล้ว ดังนั้นฉันจึงข้ามขั้นตอนนี้ไป คอนทราสต์ถูกนำไปใช้ผ่านหม้อ 5K Ohm หนึ่งพินไปที่ GND พินที่สองไปที่ VCC และที่ปัดน้ำฝนไปที่พิน Vo บน LCD ตัวเก็บประจุที่ใช้กับสาย VCC ของ LCD และ 595 เป็นตัวเก็บประจุแบบแยกส่วน ซึ่งมีหน้าที่กำจัดสัญญาณรบกวน ไม่จำเป็นหากคุณกำลังทำงานบนเขียงหั่นขนม แต่ควรใช้ในกรณีที่คุณสร้างวงจรเวอร์ชันของคุณเองเพื่อใช้นอก "เงื่อนไขในห้องปฏิบัติการ" R5 และ C9 ในลำดับที่เจาะจงนั้นจะสร้างการหน่วงเวลา RC ซึ่งทำให้แน่ใจได้ว่าข้อมูลในเอาต์พุตของ 595 มีเวลาที่จะเสถียรก่อนที่หมุดเปิดใช้งานบน LCD จะถูกตั้งค่า 'สูง' และอ่านข้อมูล Q7' ของ 595 ด้านล่างจะเข้าสู่อินพุตข้อมูลอนุกรมของ 595 ที่ด้านบน ซึ่งจะสร้างสายเดซี่เชนขนาด 595 และอินเทอร์เฟซ 16 บิต การเดินสายไปยัง Arduino เป็นเรื่องง่าย เราใช้การกำหนดค่าแบบ 3 สายโดยใช้หมุด SPI ของ Arduino ซึ่งช่วยให้ถ่ายโอนข้อมูลได้อย่างรวดเร็ว โดยปกติการส่ง 2 ไบต์ไปยัง LCD จะใช้เวลาประมาณ 8 ไมโครวินาที สิ่งนี้เร็วมาก และจริง ๆ แล้วเร็วกว่าเวลาที่ LCD ใช้ในการประมวลผลข้อมูลมาก ดังนั้นจึงจำเป็นต้องมีการหน่วงเวลา 30 ไมโครวินาทีระหว่างการเขียนแต่ละครั้ง ข้อดีอย่างหนึ่งของการใช้ SPI ก็คือการแชร์พิน D11 และ D13 กับอุปกรณ์ SPI อื่นๆ ซึ่งหมายความว่าถ้าคุณมีส่วนประกอบอื่นที่ใช้ SPI อยู่แล้ว เช่น มาตรความเร่ง โซลูชันนี้จะใช้พินพิเศษเพียงพินเดียวสำหรับสัญญาณเปิดใช้งาน ในหน้าถัดไปเราจะเห็นผล ฉันได้สร้างกระเป๋าเป้สะพายหลังไว้บนกระดาน perfboard และมันทำงานได้ดีมากสำหรับฉันจนถึงตอนนี้

ขั้นตอนที่ 5: ผลลัพธ์ + ไลบรารี

ผลลัพธ์ + ห้องสมุด
ผลลัพธ์ + ห้องสมุด
ผลลัพธ์ + ห้องสมุด
ผลลัพธ์ + ห้องสมุด
ผลลัพธ์ + ห้องสมุด
ผลลัพธ์ + ห้องสมุด
ผลลัพธ์ + ห้องสมุด
ผลลัพธ์ + ห้องสมุด

"รูปภาพมีค่าหนึ่งพันคำ" ฉันเห็นด้วยกับข้อความนี้ ดังนั้นนี่คือภาพบางส่วนของผลลัพธ์สุดท้ายของโครงการนี้ นี่คือรูปภาพของผลิตภัณฑ์ที่เสร็จสมบูรณ์ มุมมอง Fritzing PCB เป็นเลย์เอาต์ของบอร์ดที่สมบูรณ์แบบที่ฉันเคยสร้างกระเป๋าเป้ของฉัน คุณอาจพบว่ามีประโยชน์หากคุณต้องการสร้างของคุณเอง ฉันชอบมันมากจนฉันออกแบบ PCB โดยใช้ DipTrace และสั่งซื้อ PCB จำนวน 10 ชุด ฉันต้องการ 2 หรือ 3 ยูนิตสำหรับตัวเอง แต่จะทำให้ส่วนที่เหลือมีราคาเป็นสัญลักษณ์เมื่อฉันได้รับ ดังนั้นหากใครสนใจกรุณาแจ้งให้เราทราบ * แก้ไข: PCB อยู่ที่นี่และใช้งานได้ นี่คือแกลเลอรีรูปภาพแบบเต็มสำหรับโครงการนี้ รวมถึง PCB จริง https://imgur.com/a/mUkpw#0 แน่นอน ฉันไม่ลืมสิ่งที่สำคัญที่สุดคือห้องสมุดที่จะใช้วงจรนี้ด้วย มันเข้ากันได้กับไลบรารี LiquidCrystal ที่มาพร้อมกับ Arduino IDE ดังนั้นคุณจึงสามารถแทนที่การประกาศที่ด้านบนสุดของแบบร่างของคุณได้อย่างง่ายดายและไม่ต้องเปลี่ยนแปลงสิ่งอื่นใดในภาพร่างของคุณ นอกจากนี้ยังมีภาพร่างตัวอย่างที่แสดงให้เห็นว่าแต่ละฟังก์ชันในไลบรารีทำงานอย่างไร ลองดูสิ

แนะนำ: