สารบัญ:

LED Matrix ใช้ Shift Registers: 7 ขั้นตอน (พร้อมรูปภาพ)
LED Matrix ใช้ Shift Registers: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: LED Matrix ใช้ Shift Registers: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: LED Matrix ใช้ Shift Registers: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Controlling a BIG LED Matrix?! How Shift Registers work! || EB#39 2024, พฤศจิกายน
Anonim
LED Matrix โดยใช้ Shift Registers
LED Matrix โดยใช้ Shift Registers
LED Matrix โดยใช้ Shift Registers
LED Matrix โดยใช้ Shift Registers
LED Matrix โดยใช้ Shift Registers
LED Matrix โดยใช้ Shift Registers

คำแนะนำนี้มีขึ้นเพื่อเป็นคำอธิบายที่สมบูรณ์กว่าแบบอื่นที่มีให้ทางออนไลน์ โดยเฉพาะอย่างยิ่งสิ่งนี้จะให้คำอธิบายเกี่ยวกับฮาร์ดแวร์มากกว่าที่มีอยู่ใน 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!

แนะนำ: