สารบัญ:
- เป้าหมาย
- ประสบการณ์และทักษะ
- ข้อจำกัดความรับผิดชอบและเครดิต
- ขั้นตอนที่ 1: อะไหล่
- ส่วนรายการ
- อะไหล่ทั่วไป
- ชิ้นส่วนเฉพาะที่ใช้ที่นี่
- หมายเหตุเกี่ยวกับอะไหล่
- ขั้นตอนที่ 2: เดอะเมทริกซ์
- ข้อควรพิจารณาในการก่อสร้าง
- การสร้างเมทริกซ์
- สำคัญ
- ขั้นตอนที่ 3: ฮาร์ดแวร์ควบคุม
- การสร้างฮาร์ดแวร์ควบคุม
- ขั้นตอนที่ 4: ซอฟต์แวร์
- เคล็ดลับ
- Shift Registers: วิธีการ
- ระบุที่อยู่จอแสดงผล
- การเขียนโปรแกรม
- ในการดำเนินการ
- ขั้นตอนที่ 5: แนวคิดแบบแยกส่วน
- คณิตศาสตร์
- Cascading Shift Registers
- ไดรเวอร์หลายแถว
- ตัวอย่างเช่น
- ขั้นตอนที่ 6: บทสรุป
- เพิ่มเติมที่เป็นไปได้
- ขั้นตอนที่ 7: ติดตามผล
- คุณสมบัติของแผงวงจร
- การประกอบ
วีดีโอ: LED Matrix ใช้ Shift Registers: 7 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:09
คำแนะนำนี้มีขึ้นเพื่อเป็นคำอธิบายที่สมบูรณ์กว่าแบบอื่นที่มีให้ทางออนไลน์ โดยเฉพาะอย่างยิ่งสิ่งนี้จะให้คำอธิบายเกี่ยวกับฮาร์ดแวร์มากกว่าที่มีอยู่ใน LED Marquee ที่สั่งสอนโดย led555
เป้าหมาย
คำแนะนำนี้นำเสนอแนวคิดที่เกี่ยวข้องกับการลงทะเบียนกะและไดรเวอร์ด้านสูง ด้วยการแสดงแนวคิดเหล่านี้ด้วยเมทริกซ์ LED ขนาด 8x8 ฉันหวังว่าจะมอบเครื่องมือที่จำเป็นในการปรับและขยายตามขนาดและเลย์เอาต์ที่โครงการของคุณเรียกร้อง
ประสบการณ์และทักษะ
ฉันจะให้คะแนนโครงการนี้มีความยากปานกลาง:
- หากคุณมีประสบการณ์ในการเขียนโปรแกรมไมโครคอนโทรลเลอร์และทำงานกับ LED อยู่แล้ว โปรเจ็กต์นี้น่าจะง่ายสำหรับคุณในการทำให้เสร็จและปรับขนาดเป็นอาร์เรย์ของไฟที่ใหญ่ขึ้น
- หากคุณเพิ่งเริ่มใช้งานไมโครคอนโทรลเลอร์และได้แฟลช LED หนึ่งหรือสองดวง คุณควรจะทำโปรเจ็กต์นี้ให้เสร็จได้ด้วยความช่วยเหลือจาก Google เพื่อนของเรา
- หากคุณมีประสบการณ์เพียงเล็กน้อยหรือไม่มีเลยกับไมโครคอนโทรลเลอร์หรือการเขียนโปรแกรม นี่อาจเป็นเรื่องที่เกินกว่าที่คุณควรจะทำ ลองใช้โปรเจ็กต์เริ่มต้นอื่นๆ สองสามโปรเจ็กต์แล้วกลับมาใหม่เมื่อคุณมีประสบการณ์ในการเขียนโปรแกรมสำหรับไมโครคอนโทรลเลอร์มากขึ้น
ข้อจำกัดความรับผิดชอบและเครดิต
ประการแรกฉันไม่ใช่วิศวกรไฟฟ้า หากคุณพบเห็นสิ่งผิดปกติหรือไม่ใช่แนวปฏิบัติที่ดีที่สุด โปรดแจ้งให้เราทราบ แล้วเราจะแก้ไขโดยยอมรับความเสี่ยงเอง คุณควรรู้ว่ากำลังทำอะไรอยู่ หรืออาจทำให้คอมพิวเตอร์ ไมโครคอนโทรลเลอร์ หรือแม้แต่ตัวคุณเองเสียหายได้ ฉันได้เรียนรู้อะไรมากมายจากอินเทอร์เน็ต โดยเฉพาะจากฟอรัมที่: https://www.avrfreaks.netฉันกำลังใช้ ชุดฟอนต์ที่มาพร้อมกับไลบรารี ks0108 สากล C ตรวจสอบที่นี่:https://en.radzio.dxp.pl/ks0108/
ขั้นตอนที่ 1: อะไหล่
ส่วนรายการ
อะไหล่ทั่วไป
ในการสร้างตาราง LED ขนาด 8x8 และควบคุมคุณจะต้อง:
- 64 LEDs ที่คุณเลือก
- 8 ตัวต้านทานสำหรับ LEDs
- 1 Shift register สำหรับคอลัมน์
- 1 อาร์เรย์ไดรเวอร์สำหรับแถว
- 8 ตัวต้านทานสำหรับเปลี่ยนอาร์เรย์ไดรเวอร์
- 1 ไมโครคอนโทรลเลอร์
- 1 แหล่งสัญญาณนาฬิกาสำหรับไมโครคอนโทรลเลอร์
- 1 บอร์ดต้นแบบ
- 1 แหล่งจ่ายไฟ
- ลวดเชื่อม
ชิ้นส่วนเฉพาะที่ใช้ที่นี่
สำหรับคำแนะนำนี้ฉันใช้สิ่งต่อไปนี้:
- ไฟ LED สีเขียว 64 ดวง (ส่วน Mouser #604-WP7113GD)
- ตัวต้านทาน 220ohm 1/4 วัตต์ 8 ตัวสำหรับ LED (ส่วน Mouser #660-CFS1/4CT52R221J)
- 1 HEF4794 ไดรเวอร์ LED พร้อม shift register (ส่วน Mouser #771-HEF4794BPN)
- 1 mic2981 อาร์เรย์ไดรเวอร์แหล่งกระแสไฟแรงสูงแรงดันสูง (ส่วน Digikey #576-1158-ND)
- ตัวต้านทาน 8 3.3kohm 1/4 วัตต์สำหรับเปลี่ยนอาร์เรย์ไดรเวอร์ (ส่วน Radio Shack #271-1328)
- 1 Atmel ATmega8 ไมโครคอนโทรลเลอร์ (ส่วนเมาส์ #556-ATMEGA8-16PU)
- 1 คริสตัล 12MHz สำหรับแหล่งสัญญาณนาฬิกาไมโครคอนโทรลเลอร์ (ส่วนเมาส์ #815-AB-12-B2)
- 1 บอร์ดสร้างต้นแบบ 2200 หลุม (Radio Shack part #276-147)
- แหล่งจ่ายไฟ ATX ที่แปลงแล้ว: ดูคำแนะนำนี้
- สายเบ็ดแกนแข็ง 22-awg (ส่วน Radio Shack #278-1221)
- เขียงหั่นขนม Solderless (Radio Shack part #276-169 (ไม่มีอีกต่อไปแล้ว ลอง: 276-002)
- AVR Dragon (ส่วนเมาส์ #556-ATAVRDRAGON)
- Dragon Rider 500 โดย Ecos Technologies: ดูคำแนะนำนี้
หมายเหตุเกี่ยวกับอะไหล่
ไดรเวอร์แถวและคอลัมน์: ส่วนที่ยากที่สุดของโปรเจ็กต์นี้คือการเลือกไดรเวอร์แถวและคอลัมน์ ก่อนอื่น ฉันไม่คิดว่าการลงทะเบียนกะมาตรฐาน 74HC595 เป็นความคิดที่ดีที่นี่ เพราะพวกเขาไม่สามารถจัดการกับกระแสที่เราต้องการส่งผ่าน LED ได้ นี่คือเหตุผลที่ฉันเลือกไดรเวอร์ HEF4794 เนื่องจากสามารถจมปัจจุบันได้อย่างง่ายดายเมื่อเปิดไฟ LED ทั้ง 8 ดวงในแถวเดียว ทะเบียนกะอยู่ที่ด้านล่าง (พินกราวด์ของไฟ LED) เราจะต้องมีไดรเวอร์แถวที่สามารถหาแหล่งกระแสได้มากพอที่จะรวมหลายคอลัมน์เข้าด้วยกัน mic2981 สามารถจ่ายกระแสไฟได้ถึง 500mA อีกส่วนเดียวที่ฉันพบว่าทำงานนี้คือ UDN2981 (ส่วน Digikey #620-1120-ND) ซึ่งเป็นส่วนเดียวกันโดยผู้ผลิตรายอื่น โปรดส่งข้อความถึงฉันหากคุณรู้จักไดรเวอร์ด้านสูงอื่นๆ ที่จะทำงานได้ดีในแอปพลิเคชันนี้ เมทริกซ์ LED: เมทริกซ์นี้คือ 8x8 เนื่องจากไดรเวอร์แถวและคอลัมน์แต่ละตัวมี 8 พิน อาร์เรย์ LED ที่ใหญ่ขึ้นอาจสร้างขึ้นโดยการรวมเมทริกซ์หลายตัวเข้าด้วยกัน และจะกล่าวถึงในขั้นตอน "แนวคิดแบบแยกส่วน" หากคุณต้องการอาร์เรย์ขนาดใหญ่ สั่งซื้อชิ้นส่วนที่จำเป็นทั้งหมดในคราวเดียว มีเมทริกซ์ LED 8x8, 5x7 และ 5x8 ในแพ็คเกจเดียว สิ่งเหล่านี้ควรแทนที่เมทริกซ์แบบ DIY ได้ง่าย อีเบย์เป็นแหล่งที่ดีสำหรับสิ่งเหล่านี้ Mouser มีอุปกรณ์ 5x7 บางตัวเช่น part #604-TA12-11GWA ฉันใช้ไฟ LED สีเขียวราคาถูกเพราะฉันแค่เล่นและสนุก การใช้จ่ายมากขึ้นกับไฟ LED ที่มีความสว่างสูงและประสิทธิภาพสูงสามารถช่วยให้คุณสร้างจอแสดงผลที่ดูน่าตื่นตาตื่นใจมากขึ้น… ซึ่งก็ดีพอสำหรับฉัน!ฮาร์ดแวร์ควบคุม: เมทริกซ์ถูกควบคุมโดยไมโครคอนโทรลเลอร์ Atmel AVR คุณจะต้องมีโปรแกรมเมอร์สำหรับสิ่งนี้ เนื่องจากฉันกำลังสร้างต้นแบบฉันจึงใช้ Dragon Rider 500 ซึ่งฉันได้เขียนคู่มือการประกอบและการใช้งาน นี่เป็นเครื่องมือที่ง่ายสำหรับการสร้างต้นแบบ และฉันขอแนะนำอย่างยิ่ง
ขั้นตอนที่ 2: เดอะเมทริกซ์
ฉันจะสร้างเมทริกซ์ LED ของตัวเองสำหรับโครงการนี้โดยใช้ไฟ LED 5 มม. และบอร์ดต้นแบบจาก Radio Shack ควรสังเกตว่าคุณสามารถซื้อโมดูลดอทเมทริกซ์ขนาด 8x8 ได้จากหลายแหล่งรวมถึงอีเบย์ พวกเขาควรทำงานได้ดีกับคำแนะนำนี้
ข้อควรพิจารณาในการก่อสร้าง
การจัดตำแหน่ง LEDS จะต้องถูกจัดตำแหน่งให้หันเข้าหาทิศทางเดียวกันในมุมเดียวกัน ฉันพบว่าตัวเลือกที่ง่ายที่สุดสำหรับฉันคือการวางตัวของ LED ล้างเข้ากับบอร์ดแล้วถือไว้ที่นั่นด้วยลูกแก้วชิ้นเล็กๆ และที่หนีบ ฉันวาง LED สองสามดวงไว้ห่างจากแถวที่ฉันกำลังทำงานอยู่สองสามนิ้วเพื่อให้แน่ใจว่าลูกแก้วนั้นขนานกับบอร์ดต้นแบบ แถวและคอลัมน์เราจำเป็นต้องมีการเชื่อมต่อร่วมกันสำหรับแต่ละแถวและแต่ละคอลัมน์ เนื่องจากตัวเลือกไดรเวอร์แถวและคอลัมน์ของเรา เราจำเป็นต้องมีขั้วบวก (ขั้วบวกของ LED) ที่เชื่อมต่อกันด้วยแถวและขั้วลบ (ขั้วลบของ LED) ที่เชื่อมต่อกันด้วยคอลัมน์ สายควบคุมสำหรับต้นแบบนี้ ฉันใช้สายเบ็ดแกนแข็ง (ตัวนำเดี่ยว) สิ่งนี้จะง่ายมากในการเชื่อมต่อกับเขียงหั่นขนมแบบบัดกรี อย่าลังเลที่จะใช้ตัวเชื่อมต่อประเภทอื่นเพื่อให้เหมาะกับโครงการของคุณ
การสร้างเมทริกซ์
1. วางคอลัมน์แรกของ LEDS ลงในบอร์ดต้นแบบ2. ตรวจสอบอีกครั้งว่าขั้วของคุณสำหรับ LED แต่ละดวงถูกต้อง ซึ่งจะแก้ไขได้ยากหากคุณทราบในภายหลัง3. ประสานตะกั่วทั้งสองของ LED เข้ากับบอร์ด ตรวจสอบเพื่อให้แน่ใจว่าจัดตำแหน่งอย่างถูกต้อง (ไม่ใช่ในมุมแปลก) และตัดขั้วแคโทดออก ตรวจสอบให้แน่ใจว่าคุณไม่ได้หนีบขั้วบวก เราต้องการสิ่งนั้นในภายหลัง ปล่อยให้ชี้ขึ้น4. ถอดฉนวนออกจากแกนลวดที่เป็นของแข็ง ประสานลวดชิ้นนี้กับแคโทดแต่ละตัวที่ระดับบอร์ด
- ฉันติดสิ่งนี้ที่ปลายแต่ละด้านแล้วกลับไปและเพิ่มการบัดกรีเล็กน้อยที่ทางแยกแต่ละทาง
- สายไฟนี้ควรวิ่งผ่าน LED สุดท้ายของคุณเพื่อสร้างอินเทอร์เฟซที่ง่ายเมื่อเราเพิ่มสายควบคุม
5. ทำซ้ำส่วนที่ 1-4 จนกว่าคุณจะมีไฟ LED ทั้งหมดเข้าที่และบัสคอลัมน์ทั้งหมดถูกบัดกรี6. ในการสร้างบัสแถว ให้งอลีดแอโนดหลายๆ อันที่มุม 90 องศา เพื่อให้สัมผัสกับลีดแอโนดอื่นๆ ในแถวเดียวกัน
- มีภาพรายละเอียดด้านล่างนี้
- ระวังอย่าให้สิ่งเหล่านี้สัมผัสกับคอลัมน์บัส ทำให้เกิดไฟฟ้าลัดวงจร
7. ประสานตะกั่วที่จุดเชื่อมต่อแต่ละจุดและตัดขั้วบวกส่วนเกินออก
ปล่อยให้ขั้วบวกสุดท้ายเกาะผ่าน LED สุดท้าย จะใช้เชื่อมต่อสายควบคุมไดรเวอร์แถว
8. ทำซ้ำส่วนที่ 6 & 7 จนกว่ารถโดยสารทุกแถวจะได้รับการบัดกรี9. ติดสายควบคุม
- ฉันใช้ลวดแกนแข็งสีแดงสำหรับแถวและสีดำสำหรับคอลัมน์
- ต่อสายหนึ่งเส้นสำหรับแต่ละคอลัมน์และอีกสายหนึ่งสำหรับแต่ละแถว สามารถทำได้ง่าย ๆ ที่จุดสิ้นสุดของรถบัสแต่ละคัน
สำคัญ
เมทริกซ์ LED นี้ไม่มีตัวต้านทานจำกัดกระแส หากคุณทดสอบสิ่งนี้โดยไม่ใช้ตัวต้านทาน อาจทำให้ไฟ LED ของคุณไหม้ และงานทั้งหมดนี้จะไม่มีประโยชน์
ขั้นตอนที่ 3: ฮาร์ดแวร์ควบคุม
เราจำเป็นต้องควบคุมคอลัมน์และแถวของเมทริกซ์ LED ของเรา เมทริกซ์ถูกสร้างขึ้นเพื่อให้แอโนด (ด้านแรงดันของ LED) ประกอบเป็นแถว และแคโทด (ด้านกราวด์ของ LED) ประกอบกันเป็นคอลัมน์ ซึ่งหมายความว่าไดรเวอร์แถวของเราต้องการแหล่งที่มาของกระแสและไดรเวอร์คอลัมน์ของเราต้องจมลง เพื่อประหยัดพิน ฉันใช้ shift register เพื่อควบคุมคอลัมน์ ด้วยวิธีนี้ ฉันสามารถควบคุมคอลัมน์ได้ไม่จำกัดจำนวนด้วยหมุดไมโครคอนโทรลเลอร์เพียงสี่ตัว คุณสามารถใช้เพียงสามขาได้หากขา Enable Output ผูกติดกับแรงดันไฟฟ้าโดยตรง ฉันได้เลือกไดรเวอร์ LED HEF4794 ที่มีการลงทะเบียนกะแล้ว นี่เป็นตัวเลือกที่ดีกว่า 74HC595 มาตรฐานเนื่องจากสามารถจมปัจจุบันได้อย่างง่ายดายเมื่อไฟ LED ทั้ง 8 ดวงเปิดพร้อมกัน ที่ด้านสูง (แหล่งกระแสสำหรับแถว) ฉันใช้ mic2981 แผนผังแสดง UDN2981 ฉันเชื่อว่าทั้งสองใช้แทนกันได้ ไดรเวอร์นี้สามารถจ่ายกระแสไฟได้ถึง 500mA เนื่องจากเราขับครั้งละ 1 แถวเท่านั้น จึงมีโอกาสขยายได้มากถึง 33 คอลัมน์สำหรับชิปนี้ (เพิ่มเติมในขั้นตอน "แนวคิดแบบแยกส่วน")
การสร้างฮาร์ดแวร์ควบคุม
สำหรับคำแนะนำนี้ฉันเพิ่งทำวงจรนี้ สำหรับวิธีแก้ปัญหาที่ถาวรกว่านี้ คุณจะต้องแกะสลักแผงวงจรของคุณเองหรือใช้บอร์ดต้นแบบ1. คนขับแถว
- วาง mic2981 (หรือ UDN2981) ลงในเขียงหั่นขนม
- เชื่อมต่อพิน 9 กับแรงดัน (สิ่งนี้ทำให้สับสนในแผนผัง)
- เชื่อมต่อ Pin 10 กับกราวด์ (สิ่งนี้ทำให้สับสนในแผนผัง)
- ใส่ตัวต้านทาน 3k3 ที่เชื่อมต่อกับพิน 1-8
- เชื่อมต่อจากพอร์ต D ของ ATmega8 (PD0-PD8) กับตัวต้านทาน 8 ตัว
- เชื่อมต่อสายควบคุม 8 แถวของเมทริกซ์ LED กับพิน 11-18 (โปรดทราบว่าฉันได้เชื่อมต่อแถวล่างสุดของ LED กับพิน 18 และแถวสูงสุดกับพิน 11)
2. ไดรเวอร์คอลัมน์
- วาง hef4794 ลงในเขียงหั่นขนม
- ต่อพิน 16 เข้ากับแรงดันไฟ
- เชื่อมต่อพิน 8 กับกราวด์
- เชื่อมต่อตัวต้านทาน 220 โอห์มกับพิน 4-7 และ 11-14
- เชื่อมต่อสายควบคุม 8 คอลัมน์จากเมทริกซ์ LED กับตัวต้านทาน 8 ตัวที่คุณเพิ่งเชื่อมต่อ
- เชื่อมต่อ Pin1 (Latch) กับ PC0 ของ ATmega8
- เชื่อมต่อ Pin2 (ข้อมูล) กับ PC1 ของ ATmega8
- เชื่อมต่อ Pin3 (นาฬิกา) กับ PC2 ของ ATmega8
- เชื่อมต่อ Pin15 (เปิดใช้งานเอาต์พุต) กับ PC3 ของ ATmega8
3. นาฬิกาคริสตัล
เชื่อมต่อคริสตัล 12MHz และตัวเก็บประจุแบบโหลดตามที่แสดงในแผนผัง
4. ISP
เชื่อมต่อส่วนหัวการเขียนโปรแกรมตามที่แสดงในแผนผัง
5. การกรองตัวเก็บประจุและตัวต้านทานแบบดึงขึ้น
- ทางที่ดีควรกรองแรงดันไฟที่จ่ายให้กับ ATmega8 ใช้ตัวเก็บประจุ 0.1uf ระหว่างพิน 7 และ 8 ของ ATmega8
- พินรีเซ็ตไม่ควรลอยอยู่เพราะอาจทำให้เกิดการรีเซ็ตแบบสุ่ม ใช้ตัวต้านทานเพื่อเชื่อมต่อกับแรงดันไฟฟ้า ทุกอย่างประมาณ 1k น่าจะดี ฉันใช้ตัวต้านทาน 10k ในแผนผัง
6. ตรวจสอบให้แน่ใจว่าคุณกำลังใช้กำลังไฟควบคุม +5v การออกแบบตัวควบคุมนั้นขึ้นอยู่กับคุณ
ขั้นตอนที่ 4: ซอฟต์แวร์
เคล็ดลับ
ใช่เหมือนทุกอย่างมีเคล็ดลับ เคล็ดลับคือมีไฟ LED ไม่เกิน 8 ดวงสว่างในคราวเดียว เพื่อให้ใช้งานได้ดีจำเป็นต้องมีการเขียนโปรแกรมที่ฉลาด แนวคิดที่ฉันเลือกคือการใช้ตัวจับเวลาขัดจังหวะ นี่คือการทำงานของการขัดจังหวะการแสดงผลในภาษาอังกฤษธรรมดา:
- ตัวจับเวลาจะนับจนถึงจุดหนึ่ง เมื่อถึงขั้นตอนการเรียกใช้บริการขัดจังหวะ
- รูทีนนี้กำหนดว่าจะแสดงแถวใดถัดไป
- ข้อมูลสำหรับแถวถัดไปจะถูกค้นหาจากบัฟเฟอร์และย้ายไปที่ไดรเวอร์คอลัมน์ (ข้อมูลนี้ไม่ได้ "ล็อค" ดังนั้นจึงยังไม่แสดง)
- ไดรเวอร์แถวถูกปิด ไม่มีไฟ LED ติดสว่าง
- โปรแกรมควบคุมคอลัมน์ "สลัก" ทำให้ในข้อมูลที่เราเลื่อนไปเมื่อสองขั้นตอนที่แล้วเป็นข้อมูลปัจจุบันที่จะแสดง
- ไดรเวอร์แถวจะให้ข้อมูลปัจจุบันแก่แถวใหม่ที่เรากำลังแสดง
- รูทีนการบริการอินเตอร์รัปต์สิ้นสุดลงและโปรแกรมจะกลับสู่โฟลว์ปกติจนกว่าจะถึงอินเตอร์รัปต์ถัดไป
สิ่งนี้เกิดขึ้นเร็วมาก อินเทอร์รัปต์จะส่งทุกๆ 1 มิลลิวินาที ซึ่งหมายความว่าเรากำลังรีเฟรชจอแสดงผลทั้งหมดทุกๆ 8 มิลลิวินาที นี่หมายถึงอัตราการแสดงผลประมาณ 125Hz มีความกังวลบางประการเกี่ยวกับความสว่าง เนื่องจากโดยพื้นฐานแล้วเราใช้ LED ที่รอบการทำงาน 1/8 (ปิด 7/8 ของเวลาทั้งหมด) ในกรณีของฉัน ฉันได้รับจอแสดงผลที่สว่างเพียงพอโดยไม่มีการกะพริบที่มองเห็นได้ จอแสดงผล LED แบบเต็มถูกแมปในอาร์เรย์ ระหว่างอินเทอร์รัปต์ อาร์เรย์สามารถเปลี่ยนแปลงได้ (ระวังอะตอมมิก) และจะปรากฏบนจอแสดงผลในช่วงอินเตอร์รัปต์ถัดไป ลักษณะเฉพาะของการเขียนโค้ดสำหรับไมโครคอนโทรลเลอร์ AVR และวิธีเขียนโค้ดเพื่อพูดคุยกับ shift register นั้นอยู่นอกเหนือขอบเขต ของคำสั่งสอนนี้ ฉันได้รวมซอร์สโค้ด (เขียนด้วยภาษา C และคอมไพล์ด้วย AVR-GCC) รวมถึงไฟล์ hex ลงในโปรแกรมโดยตรง ฉันได้ให้ความเห็นเกี่ยวกับโค้ดทั้งหมดแล้ว ดังนั้นคุณควรจะสามารถใช้สิ่งนี้เพื่อล้างคำถามใดๆ เกี่ยวกับวิธีรับข้อมูลลงใน shift register และการรีเฟรชแถวทำงานอย่างไร โปรดทราบว่าฉันกำลังใช้ไฟล์ฟอนต์ที่มาพร้อมกับ ks0108 ไลบรารี C สากล ห้องสมุดนั้นสามารถพบได้ที่นี่:
Shift Registers: วิธีการ
ฉันได้ตัดสินใจเพิ่มเล็กน้อยเกี่ยวกับวิธีการตั้งโปรแกรมด้วย shift register ฉันหวังว่าสิ่งนี้จะชัดเจนขึ้นสำหรับผู้ที่ไม่เคยทำงานกับพวกเขามาก่อน สิ่งที่พวกเขาทำShift Registers รับสัญญาณจากสายเดียวและส่งข้อมูลนั้นไปยังพินต่างๆ ในกรณีนี้ มีสายข้อมูลหนึ่งเส้นที่รับข้อมูลและ 8 พินที่ควบคุมโดยขึ้นอยู่กับข้อมูลที่ได้รับ เพื่อให้สิ่งต่าง ๆ ดีขึ้น มีขาออกสำหรับการลงทะเบียนกะแต่ละตัวที่สามารถเชื่อมต่อกับพินอินพุตของรีจิสเตอร์อื่นได้ สิ่งนี้เรียกว่า cascading และทำให้ศักยภาพในการขยายเป็นโอกาสที่แทบไม่จำกัด การลงทะเบียน Control PinsShift มี 4 พินควบคุม:
- สลัก - พินนี้บอก shift register เมื่อถึงเวลาเปลี่ยนไปใช้ข้อมูลที่ป้อนใหม่
- ข้อมูล - เลข 1 และ 0 บอก shift register ว่าพินใดที่จะเปิดใช้งานได้รับบนพินนี้
- นาฬิกา - นี่คือพัลส์ที่ส่งจากไมโครคอนโทรลเลอร์ที่บอกให้ shift register ทำการอ่านข้อมูลและย้ายไปยังขั้นตอนถัดไปในกระบวนการสื่อสาร
- เปิดใช้งานเอาต์พุต - นี่คือสวิตช์เปิด/ปิด, สูง=เปิด, ต่ำ=ปิด
ทำให้เป็นการเสนอราคาของคุณ:นี่คือหลักสูตรความผิดพลาดในการทำงานของหมุดควบคุมด้านบน:ขั้นตอนที่ 1: ตั้งค่า Latch, Data และ Clock ให้ต่ำ
การตั้งค่า Latch ให้ต่ำจะบอกถึง shift register ที่เรากำลังจะเขียน
ขั้นตอนที่ 2: ตั้งค่า Data pin เป็นค่าลอจิกที่คุณต้องการส่งไปยัง Shift Register ขั้นตอนที่ 3: ตั้งค่าหมุดนาฬิกาให้สูง โดยบอกให้ Shift Register อ่านค่าพินข้อมูลปัจจุบัน
ค่าอื่นๆ ทั้งหมดที่อยู่ใน Shift Register ในปัจจุบันจะย้ายไปที่ 1 ตำแหน่ง ทำให้มีที่ว่างสำหรับค่าตรรกะปัจจุบันของพินข้อมูล
ขั้นตอนที่ 4: ตั้งเข็มนาฬิกาให้ต่ำ และทำซ้ำขั้นตอนที่ 2 และ 3 จนกว่าข้อมูลทั้งหมดจะถูกส่งไปยัง shift register
ต้องตั้งค่าหมุดนาฬิกาให้ต่ำก่อนที่จะเปลี่ยนเป็นค่าข้อมูลถัดไป การสลับพินนี้ระหว่างสูงและต่ำคือสิ่งที่สร้าง "พัลส์นาฬิกา" ที่รีจิสเตอร์การเปลี่ยนแปลงจำเป็นต้องรู้ว่าเมื่อใดควรย้ายไปยังขั้นตอนถัดไปในกระบวนการ
ขั้นตอนที่ 5: ตั้งสลักสูง
สิ่งนี้บอกให้ shift register นำข้อมูลทั้งหมดที่ได้รับการเลื่อนเข้าและใช้เพื่อเปิดใช้งานพินเอาต์พุต ซึ่งหมายความว่าคุณจะไม่เห็นข้อมูลในขณะที่กำลังเคลื่อนเข้ามา พินเอาต์พุตจะไม่มีการเปลี่ยนแปลงจนกว่าสลักจะตั้งสูง
ขั้นตอนที่ 6: ตั้งค่าเปิดใช้งานเอาต์พุตสูง
- จะไม่มีเอาต์พุตพินจนกว่า Enable Output จะถูกตั้งค่าเป็นสูง ไม่ว่าจะเกิดอะไรขึ้นกับพินควบคุมอีกสามพินที่เหลือ
- ปักหมุดนี้ไว้สูงได้เสมอหากต้องการ
Cascading มีสองพินที่คุณสามารถใช้สำหรับเรียงซ้อน Os และ Os1 Os สำหรับนาฬิกาที่เพิ่มขึ้นอย่างรวดเร็วและ Os1 สำหรับนาฬิกาที่เพิ่มขึ้นช้า ยึดพินนี้เข้ากับพินข้อมูลของ shift register ถัดไป และโอเวอร์โฟลว์จากชิปนี้จะถูกป้อนในครั้งต่อไป สิ้นสุดการอัปเดต
ระบุที่อยู่จอแสดงผล
ในโปรแกรมตัวอย่าง ฉันได้สร้างอาร์เรย์ขนาด 8 ไบต์ที่เรียกว่า row_buffer แต่ละไบต์สอดคล้องกับหนึ่งแถวของจอแสดงผล 8x8 แถวที่ 0 อยู่ด้านล่างและแถวที่ 7 อยู่ด้านบน บิตที่มีความสำคัญน้อยที่สุดของแต่ละแถวจะอยู่ทางด้านขวา บิตที่สำคัญที่สุดอยู่ทางด้านซ้าย การเปลี่ยนจอแสดงผลนั้นง่ายพอๆ กับการเขียนค่าใหม่ไปยังอาร์เรย์ข้อมูลนั้น รูทีนบริการขัดจังหวะจะช่วยฟื้นฟูจอแสดงผล
การเขียนโปรแกรม
การเขียนโปรแกรมจะไม่ถูกกล่าวถึงในรายละเอียดที่นี่ ฉันจะเตือนคุณอย่าใช้สายเคเบิลการเขียนโปรแกรม DAPA เนื่องจากฉันเชื่อว่าคุณจะไม่สามารถตั้งโปรแกรมชิปได้เมื่อทำงานที่ 12MHz โปรแกรมเมอร์มาตรฐานอื่นๆ ทั้งหมดควรใช้งานได้ (STK500, MKII, Dragon, Parallel/Serial programmers ฯลฯ) ฟิวส์:ตรวจสอบให้แน่ใจว่าได้ตั้งโปรแกรมฟิวส์ให้ใช้คริสตัลฟิวส์ 12MHz: 0xC9lfuse: 0xEF
ในการดำเนินการ
เมื่อคุณตั้งโปรแกรมชิป จอแสดงผลควรเลื่อน "Hello World!" นี่คือวิดีโอของเมทริกซ์ LED ในการดำเนินการ คุณภาพวิดีโอค่อนข้างต่ำ เนื่องจากฉันใช้คุณลักษณะวิดีโอของกล้องดิจิตอล ไม่ใช่วิดีโอหรือเว็บแคมที่เหมาะสม
ขั้นตอนที่ 5: แนวคิดแบบแยกส่วน
โครงการนี้สามารถปรับขนาดได้ ปัจจัยจำกัดที่แท้จริงเพียงอย่างเดียวคือปริมาณกระแสไฟของคุณสามารถจ่ายได้ (ความจริงอีกประการหนึ่งคือจำนวน LED และรีจิสเตอร์รีจิสเตอร์ที่คุณมี)
คณิตศาสตร์
ฉันกำลังขับไฟ LED ที่ประมาณ 15mA (5V-1.8vDrop/220ohms=14.5mA) ซึ่งหมายความว่าฉันสามารถขับได้ถึง 33 คอลัมน์ด้วยไดรเวอร์ mic2981 (500mA/15mA=33.3) หารด้วย 8 เราจะเห็นว่าสิ่งนี้ทำให้เราสามารถรวม 4 shift register เข้าด้วยกัน พิจารณาด้วยว่าคุณไม่จำเป็นต้องยืดทั้ง 32 คอลัมน์จากซ้ายไปขวา คุณสามารถสร้างอาร์เรย์ 16x16 ที่ต่อสายแบบเดียวกับที่คุณสร้างอาร์เรย์ 8x32 ได้ สิ่งนี้จะได้รับการแก้ไขโดยการเปลี่ยนใน 4 ไบต์…. สองตัวแรกจะเปลี่ยนไปจนถึงไฟ LED สำหรับแถวที่ 9 สองไบต์ที่สองจะเปลี่ยนเป็นแถวแรก ทั้งสองแถวจะมาจากพินเดียวบนไดรเวอร์แถว
Cascading Shift Registers
การลงทะเบียนกะที่ใช้คือการลงทะเบียนกะแบบเรียงซ้อน ซึ่งหมายความว่าเมื่อคุณเปลี่ยนข้อมูล โอเวอร์โฟลว์จะปรากฏบนพิน OS มีประโยชน์มากเนื่องจากชุดของ shift register สามารถเชื่อมต่อกันได้ Os pin กับ Data pin เพิ่ม 8 คอลัมน์ด้วยชิปใหม่แต่ละตัว shift register ทั้งหมดจะเชื่อมต่อกับ Latch, Clock และ Enable Output pins เดียวกัน ไมโครคอนโทรลเลอร์ เอฟเฟกต์ "เรียงซ้อน" ถูกสร้างขึ้นเมื่อระบบปฏิบัติการของการลงทะเบียนกะครั้งแรกเชื่อมต่อกับพินข้อมูลของวินาที การเขียนโปรแกรมจะต้องมีการเปลี่ยนแปลงเพื่อให้สอดคล้องกับจำนวนคอลัมน์ที่เพิ่มขึ้น จำเป็นต้องอัปเดตทั้งบัฟเฟอร์ที่เก็บข้อมูลและฟังก์ชันที่เปลี่ยนข้อมูลในแต่ละคอลัมน์เพื่อให้สะท้อนถึงจำนวนคอลัมน์จริง แผนผังแสดงไว้ด้านล่างเป็นตัวอย่าง
ไดรเวอร์หลายแถว
ไดรเวอร์แถว (mic2981) สามารถจ่ายกระแสไฟได้มากพอที่จะขับ 32 คอลัมน์ ถ้าคุณต้องการมากกว่า 32 คอลัมน์ ควรใช้ไดรเวอร์แถวหลายแถวโดยไม่ต้องใช้หมุดไมโครคอนโทรลเลอร์เพิ่มเติม เราต้องการไดรเวอร์แถวเพื่อจ่ายกระแสไฟให้เพียงพอสำหรับไฟ LEDหากคุณใช้คอลัมน์มากกว่าที่จะให้แสงในคราวเดียว ไดรเวอร์แถวเพิ่มเติมสามารถจ่ายกระแสไฟที่ต้องการได้ ใช้พินอินพุตเดียวกันจากไมโครคอนโทรลเลอร์ จึงไม่จำเป็นต้องแก้ไขการสแกนแถว กล่าวอีกนัยหนึ่ง ไดรเวอร์แต่ละตัวจะควบคุมแถวสำหรับบล็อกขนาด 8x32 แม้ว่า 64 คอลัมน์อาจมีตำแหน่งแถวทางกายภาพเหมือนกัน แต่เราแบ่งบัสแถวเป็นสองแถว โดยใช้ไดรเวอร์เดียวสำหรับ 8 แถวของ 32 คอลัมน์แรก และไดรเวอร์ที่สองสำหรับ 8 แถวของ 32 คอลัมน์ที่สองเป็นต้น แผนผังแสดงไว้ด้านล่างเป็นตัวอย่าง ความผิดพลาดที่อาจเกิดขึ้น:1. อย่าใช้ไดรเวอร์หลายแถวที่มีจำนวนคอลัมน์เท่ากัน การทำเช่นนี้หมายความว่าหมุดลงทะเบียนกะแต่ละอันจะขับ LED มากกว่าหนึ่งดวงในแต่ละครั้ง2. คุณต้องมีตัวต้านทาน 8 ชุด (3k3) สำหรับไดรเวอร์แต่ละแถว หนึ่งชุดสำหรับไดรเวอร์หลายแถวจะไม่ทำงาน เนื่องจากจะไม่มีกระแสไฟที่จำเป็นในการเปลี่ยนเกต
ตัวอย่างเช่น
ฉันตัดสินใจที่จะขยายบนเมทริกซ์ที่ฉันสร้างไว้ก่อนหน้านี้ ฉันได้เพิ่มแถวอีก 7 แถวรวมเป็น 15 เนื่องจากนั่นคือทั้งหมดที่ฉันใส่ได้บนโปรโตบอร์ดนี้ ฉันเพิ่งค้นพบเกี่ยวกับการแข่งขันที่ Instructables กำลังทำที่เรียกว่า "ปล่อยให้มันเรืองแสง" นี่คือวิดีโอของฉันเกี่ยวกับเรื่องนั้น เป็นอีกครั้งที่กล้องดิจิตอลที่ฉันเคยถ่ายวิดีโอไม่ยุติธรรม สิ่งนี้ดูดีในสายตามนุษย์ โดยเฉพาะอย่างยิ่งเมื่อไฟ LED ทั้งหมดกะพริบ แต่ดูไม่ค่อยดีเท่าในวิดีโอ เพลิดเพลิน: ซอร์สโค้ดสำหรับจอแสดงผลขนาดใหญ่นี้รวมอยู่ด้านล่าง
ขั้นตอนที่ 6: บทสรุป
เพิ่มเติมที่เป็นไปได้
I2CI ออกจากหมุด Two Wire Interface (I2C) ที่ไม่ได้ใช้งานในการออกแบบนี้ มีโอกาสที่น่าสนใจหลายประการที่สามารถใช้หมุดทั้งสองนี้ได้ การเพิ่ม I2C EEPROM จะช่วยให้สามารถจัดเก็บข้อความขนาดใหญ่ขึ้นได้ นอกจากนี้ยังมีโอกาสในการออกแบบโปรแกรมเพื่อเปลี่ยน mega8 ให้เป็นไดรเวอร์การแสดงผลที่เข้ากันได้กับ I2C สิ่งนี้จะเปิดความเป็นไปได้ที่จะมีอุปกรณ์ที่เปิดใช้งาน USB เพื่อแสดงข้อมูลบนอาร์เรย์ LED ของคุณโดยการส่งผ่านบัส I2C อินพุตมีพินเหลืออยู่มากมายที่สามารถใช้สำหรับปุ่มหรือตัวรับสัญญาณ IR สิ่งนี้จะช่วยให้สามารถตั้งโปรแกรมข้อความผ่านระบบเมนูได้ สำหรับคำแนะนำนี้ฉันใช้ฟังก์ชั่นการแสดงผลสองสามอย่างเท่านั้น ตัวหนึ่งเพียงแค่เขียนอักขระลงบนจอแสดงผล อีกตัวเลื่อนอักขระลงบนจอแสดงผล สิ่งสำคัญที่ต้องจำไว้คือสิ่งที่คุณเห็นในแสงไฟจะแสดงในอาร์เรย์ข้อมูล หากคุณคิดหาวิธีเปลี่ยนอาร์เรย์ข้อมูลอย่างชาญฉลาด ไฟก็จะเปลี่ยนไปในลักษณะเดียวกัน โอกาสในการยั่วเย้าบางอย่างรวมถึงการสร้างเครื่องวัดกราฟจากคอลัมน์ สามารถใช้เป็นเครื่องวิเคราะห์สัญญาณพร้อมสเตอริโอ การเลื่อนสามารถทำได้จากบนลงล่างหรือจากล่างขึ้นบน แม้กระทั่งจากซ้ายไปขวา ขอให้โชคดีมีความสนุกสนาน!
ขั้นตอนที่ 7: ติดตามผล
หลังจากปล่อยให้วงจรควบคุมอยู่ในเขียงหั่นขนมเป็นเวลาหลายเดือน ในที่สุดฉันก็ออกแบบและแกะสลักแผงวงจรสองสามตัวเพื่อประกอบต้นแบบนี้เข้าด้วยกัน ทุกอย่างเป็นไปด้วยดี ฉันไม่คิดว่าจะมีอะไรแตกต่างไปจากนี้
คุณสมบัติของแผงวงจร
- รีจิสเตอร์ Shift อยู่บนบอร์ดแยกกันที่สามารถต่อสายโซ่เดซี่เข้าด้วยกันเพื่อเพิ่มขนาดของจอแสดงผล
- บอร์ดควบคุมมีตัวควบคุมพลังงานของตัวเอง ดังนั้นจึงสามารถทำงานได้โดยแหล่งพลังงานใดๆ ที่ให้ 7v-30v (แบตเตอรี่ 9v หรือแหล่งจ่ายไฟแบบตั้งโต๊ะ 12v ทั้งสองทำงานได้ดีสำหรับฉัน)
- รวมส่วนหัวของ ISP 6 พินเพื่อให้สามารถตั้งโปรแกรมไมโครคอนโทรลเลอร์ใหม่ได้โดยไม่ต้องถอดออกจากบอร์ด
- หัวต่อแบบ 4 พินพร้อมใช้งานสำหรับบัส I2C ในอนาคต สามารถใช้สำหรับ eeprom เพื่อจัดเก็บข้อความเพิ่มเติมหรือแม้กระทั่งเพื่อทำให้อุปกรณ์นี้เป็นอุปกรณ์ทาสที่ควบคุมโดยไมโครคอนโทรลเลอร์อื่น (สัญลักษณ์ RSS ทุกคน?)
- การออกแบบมีปุ่มกดชั่วขณะ 3 ปุ่ม ฉันอาจปรับแต่งเฟิร์มแวร์ในอนาคตเพื่อรวมการใช้ปุ่มเหล่านี้
การประกอบ
ขอลูกแก้ว ขายึดมุม สกรูเครื่อง 6x32 น็อต และแหวนรอง รวมทั้งชุดต๊าปสำหรับรูร้อยเกลียว และฉันจะสร้างอะไรก็ได้
รางวัลที่สองใน Let It Glow!
แนะนำ:
Cascade of Shift Registers 74HC595 ควบคุมผ่าน Arduino และ Ethernet: 3 ขั้นตอน
Cascade of Shift Registers 74HC595 ควบคุมผ่าน Arduino และ Ethernet: วันนี้ฉันอยากจะนำเสนอโครงการที่ฉันดำเนินการในสองเวอร์ชัน โครงการนี้ใช้ 12 shift register 74HC595 และ 96 LEDs, Arduino Uno board พร้อม Ethernet shield Wiznet W5100 8 LEDs เชื่อมต่อกับ shift register แต่ละอัน ตัวเลข 0
IoT Smart Clock Dot Matrix ใช้ Wemos ESP8266 - ESP Matrix: 12 ขั้นตอน (พร้อมรูปภาพ)
IoT Smart Clock Dot Matrix ใช้ Wemos ESP8266 - ESP Matrix: สร้าง IoT Smart Clock ของคุณเองที่สามารถ: แสดงนาฬิกาพร้อมไอคอนแอนิเมชั่นที่สวยงาม Display Reminder-1 to Reminder-5 แสดงปฏิทิน แสดงเวลาละหมาดของชาวมุสลิม แสดงข้อมูลสภาพอากาศ แสดงข่าว แสดงคำแนะนำ อัตรา Bitcoin แสดง
Arduino: ตัวบ่งชี้ Potentio ใช้ Led Matrix MAX7219: 4 ขั้นตอน
Arduino: ตัวบ่งชี้ Potentio ใช้ Led Matrix MAX7219: ในบทช่วยสอนก่อนหน้านี้ คุณสามารถดูได้ในบทความนี้ "ตัวบ่งชี้โพเทนชิโอใช้ RGB Neopixel"และวันนี้ฉันจะแสดงตัวบ่งชี้โพเทนชิเอเตอร์โดยใช้ไฟ LED MAX7219 ที่ตรงกับ
ใช้ 2 Shift Registers (74HC595) เพื่อขับ 16 LEDs: 9 Steps
การใช้ 2 Shift Registers (74HC595) กับไดรฟ์ 16 LEDs: วงจรนี้จะใช้ 2 shift register (74HC595) shift register จะขับเป็นเอาต์พุต 16 LEDs รีจิสเตอร์กะแต่ละตัวจะขับ LED 8 ดวง รีจิสเตอร์กะมีสายเพื่อให้เอาต์พุตรีจิสเตอร์แต่ละอันดูเหมือนซ้ำกัน
จอแสดงผล LED Matrix แบบเลื่อน 48 X 8 โดยใช้ Arduino และ Shift Registers: 6 ขั้นตอน (พร้อมรูปภาพ)
จอแสดงผลเมทริกซ์ LED แบบเลื่อนได้ 48 X 8 โดยใช้ Arduino และ Shift Registers: สวัสดีทุกคน! นี่เป็นคำสั่งแรกของฉันและมันคือทั้งหมดที่เกี่ยวกับการสร้างเมทริกซ์ LED การเลื่อนที่ตั้งโปรแกรมได้ 48 x 8 โดยใช้ Arduino Uno และการลงทะเบียนกะ 74HC595 นี่เป็นโครงการแรกของฉันกับบอร์ดพัฒนา Arduino มันเป็นความท้าทายที่มอบให้กับม