ฉันจะควบคุมไฟ LED จำนวนมากด้วยพินเพียงไม่กี่ตัวบนไมโครของฉันได้อย่างไร


10

ฉันใช้ Atmel ATtiny13 ซึ่งมี I / O 6-pin ฉันต้องการควบคุมไฟ LED ประมาณ 15 ดวง แต่ไม่แน่ใจว่าจะเชื่อมต่อทุกสิ่งได้อย่างไร ดูเหมือนว่าฉันสามารถควบคุม LED ได้ครั้งละ 6 ตัวเท่านั้น ฉัน จำกัด เพียง LED 6 ดวงเท่านั้นเนื่องจากขนาดของไมโครคอนโทรลเลอร์หรือไม่


ฉันไม่เคยเห็น อาจซ้ำกัน: electronics.stackexchange.com/questions/9860/…
Daniel Grillo

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

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

1
@ Joeeforker คุณพูดถูกค่าใช้จ่ายสำหรับไมโครที่มีจำนวนพินมากกว่านั้นค่อนข้างน้อยมากเมื่อพิจารณาว่าโปรเจคของฉันเป็นแบบครั้งเดียว ฉันคิดว่าเมื่อถึงจุดหนึ่งเกี่ยวกับการใช้ไมโครที่มีหมุดประมาณ 20 IO เพื่อให้งานสำเร็จ แต่หนึ่งในเป้าหมายของฉันคือรอยเท้าแผงวงจรที่เล็กมาก นอกจากนี้คำคุณศัพท์พินเนียร์ที่ยอดเยี่ยม !
JYelton

คำตอบ:


18

มีวิธีการหลายวิธีที่สามารถใช้เพื่อขับเคลื่อน LED จำนวนมากจากหมุด IO ไม่กี่ตัว

ที่ง่ายที่สุดคือการแสดงมัลติเพล็กซิ่งแถว / คอลัมน์มาตรฐาน ด้วยเทคนิคนี้คุณสามารถขับ LEDs ด้วยหมุด IO ในทางคณิตศาสตร์รอบการทำงานคือ: n(n/2)2n

1minimum(unique row patterns, unique column patterns)

ซึ่งหมายความว่าเทคนิคนี้มีรอบการทำงาน 100% เมื่อไฟ LED ทั้งหมดสว่าง (หรือแถวทั้งหมดหรือคอลัมน์ทั้งหมดเหมือนกัน) และรอบการทำงานเมื่อจำเป็นต้องมีเส้นทแยงมุม (หรือแถวทั้งหมดแตกต่างกัน ) คุณรับประกันเฉพาะรอบการทำงาน 100% เมื่อให้แสงสว่างทุก LED หรือหนึ่ง LED (หรือ LED เป็นศูนย์ แต่ไม่นับมากนัก)1/n

เล็กน้อยที่ซับซ้อนมากขึ้นเป็นCharlieplexing ด้วยเทคนิคนี้คุณสามารถขับเคลื่อนไฟ LEDด้วยหมุด IO เพียงไฟ LED สามารถไฟพร้อมกันกับเทคนิคนี้ ในทางคณิตศาสตร์รอบการทำงานคือ:n n - 1n2nnn1

1minimum simultaneous sets

โดยที่ชุดพร้อมกันเป็นกลุ่มเฉพาะของ LED ที่มีขั้วบวกทั่วไปหรือแคโทดทั่วไป (สิ่งนี้ยังไม่ได้รับการพิสูจน์มันเป็นเพียงสิ่งที่ฉันมาถึงหลังจากไตร่ตรองปัญหาเป็นเวลาหนึ่งนาทีถ้ารอบการทำงานมีความสำคัญต่อคุณคุณจะต้องมองลึกลงไปอีก) นี่เป็นการคำนวณที่ซับซ้อนมากขึ้นทั้งในด้านสติปัญญา และคำนวณได้มากกว่าการคำนวณที่เทียบเท่าสำหรับมัลติเพล็กซิ่งมาตรฐาน อย่างมีประสิทธิภาพคุณจะได้รับรอบการทำงานเมื่อ LED ทั้งหมดติดสว่าง แต่บางรูปแบบ (เฉพาะบางส่วน) ของ n-1 หรือน้อยกว่า LED สามารถมีรอบการทำงานได้ 100% คุณรับประกันเฉพาะรอบการทำงาน 100% เมื่อให้แสงสว่าง 1 LED1/n

วิธีสุดท้ายที่ฉันจะพูดถึงคือการใช้shift registerหรือ IO expander ด้วยสองพิน (อินเทอร์เฟซข้อมูล / นาฬิกาดิบ I2C หรือทิศทางเดียว SPI) คุณสามารถควบคุมไฟ LED จำนวนมากตามอำเภอใจ รอบการทำงานสำหรับรูปแบบใด ๆ คือ 100% แต่อัตราการอัปเดตจะแปรผกผันกับจำนวนไฟ LED นี่เป็นวิธีที่มีราคาแพงที่สุด สำหรับไฟ LED 15 ดวงอาจจะถูกกว่าหากคุณอัพเกรดเป็นไมโครที่มีหมุด IO จำนวนมาก


+1 สำหรับการอธิบายเล็กน้อยเกี่ยวกับแง่มุมวัฏจักรหน้าที่ ในประโยคที่สองเกี่ยวกับ Charlieplexing คุณหมายถึง "drive n ^ 2-n LED ที่มีn IO pins หรือไม่
JYelton

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

11

การใช้CharlieplexingคุณสามารถขับLEDโดยตรงจากหมุดnn×(n1)n

กันตัวอย่าง:

หก LED บน 3 Pins:

PINS        LEDS
0 1 2   1 2 3 4 5 6
0 0 0   0 0 0 0 0 0
0 1 Z   1 0 0 0 0 0
1 0 Z   0 1 0 0 0 0
Z 0 1   0 0 1 0 0 0
Z 1 0   0 0 0 1 0 0
0 Z 1   0 0 0 0 1 0
1 Z 0   0 0 0 0 0 1
0 0 1   0 0 1 0 1 0
0 1 0   1 0 0 1 0 0
0 1 1   1 0 0 0 1 0
1 0 0   0 1 0 0 0 1
1 0 1   0 1 1 0 0 0
1 1 0   0 0 0 1 0 1
1 1 1   0 0 0 0 0 0

แผนผังของ Charlieplexing มี 3 ขาออก


ขอบคุณสำหรับชุดข้อมูลขาออกรวมทั้งแผนผังที่เป็นประโยชน์
JYelton

1
อีกวิธีหนึ่งในการวาดแผนผังคือตาราง NxN แต่ขับเฉพาะคอลัมน์เท่านั้นและแทนที่เส้นทแยงมุมหลักด้วยกางเกงขาสั้นคอลัมน์แถว
supercat

หมายความว่าฉันไม่สามารถเปิดทั้งหมดในครั้งเดียว นั่นหมายความว่าถ้าฉันต้องการที่จะเปิดพวกเขาทั้งหมดในครั้งเดียวฉันต้องทำเวลาให้พอที่จะหลอกตา?
MaNyYaCk

@MaNyYaCk ใช่ คุณถูก.
Daniel Grillo

8

โดยไม่ต้องมัลติเพล็กซ์ (ไดรฟ์โดยตรง) คุณถูก จำกัด ไว้ที่ 6 LED

ด้วย charlieplexing คุณสามารถขับ LED n * (n-1) LED จาก n pins

ด้วยตัวขยาย I / O หรือการลงทะเบียนกะคุณสามารถขับ LED ได้ไม่ จำกัด จำนวน
ตัวอย่าง: MCP23008 8-I2C I / O Expander


คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับตัวขยาย I / O ที่จะเป็นได้ไหม?
JYelton

3
I / O expander เป็นชิปภายนอกที่มี I / O พินและรีจิสเตอร์ คุณสามารถใช้บัสสื่อสารมาตรฐานเช่น I2C หรือ SPI เพื่อสื่อสารกับพวกเขา
mjh2007

+1 คุณสามารถขับ LED จำนวนมากได้ด้วย TLC594 ของ TI ( focus.ti.com/lit/ds/symlink/tlc5940.pdf ) แต่อาจมีค่าใช้จ่ายสูงเกินไปสำหรับงานหลายอย่าง search.digikey.com/scripts/DkSearch/…
kenny

ขอบคุณ - ฉันควรออกแบบโครงการที่ใช้ตัวขยาย I / O เพื่อบังคับให้ฉันเรียนรู้การใช้งาน
JYelton


2

นี่คือตัวอย่างของ charlieplexing ที่ฉันสร้างขึ้น

มันเป็นเครื่องจำลองลำแสงประภาคารและใช้ชุดไฟ LED 12 ดวงที่สว่างถึง 4 GPIO เพื่อกวาดลำแสงรอบแผ่นดิสก์ มีวิดีโอของมันที่นี่เป็น

โครงการนี้เป็นแบบ PIC ฉันใช้ PIC12f683 ซึ่งเป็น 8pin uP และอาจพิจารณาได้เปรียบกับ 8pin AVRs

ความเข้มของไฟ LED นั้นเกิดจากการแทรกสอดที่ให้ PWM 32 ขั้นตอนที่ประมาณ 60Hz อนุญาตให้ใช้ไฟ LED สองดวงเท่านั้นในเวลาใดก็ได้ที่ให้หน้าที่ 50% สำหรับ LED แต่ละตัวเท่าที่ฉันต้องการ นอกจากนี้ยังให้การแลกเปลี่ยนที่ดีจากอัตราการรีเฟรช PWM เมื่อเทียบกับความละเอียด

การเข้ารหัสสำหรับการใช้ charlieplexing นั้นง่ายมาก ๆ ถ้าคุณใช้วิธี "คลาสสิค" ของการส่องไฟ LED เดียวที่จุดใดจุดหนึ่งในเวลาที่อัตราการรีเฟรชที่รวดเร็วมาก ฉันหา PORT และ TRIS ที่ต้องการ (ลงทะเบียนเฉพาะรูป) ก่อนจากนั้นจึงเก็บผลลัพธ์ไว้ในอาร์เรย์คงที่ สำหรับแสงไฟ LED x PIC เพียงแค่ต้องค้นหาค่าที่ดัชนีของอาร์เรย์ [x] และเขียนโดยตรงไปยังพอร์ต (ด้วยการปิดบังเล็กน้อยเพื่อรักษาสถานะของหมุดอื่น ๆ ที่ไม่ได้ใช้ใน charliplex)

โครงการของฉันมีเพียง 12 LED ไม่ใช่ 15 หรือสูงสุด 20 GPIO 5 จะอนุญาตตามที่ฉันต้องการเก็บ GPIO หนึ่งไว้สำหรับการพัฒนาในอนาคต

อย่างไรก็ตาม ... ฉันแค่คิดว่ามันอาจเป็นประโยชน์ในการมีตัวอย่างการทำงานที่คล้ายกับคำขอของคุณ

รหัสแหล่งที่มาเต็มและแผนงานมีอยู่ในบล็อกของฉัน


0

อีกทางเลือกหนึ่งคือใช้ Neopixel LEDs พวกเขามี IC ควบคุมในตัวและคุณต้องการเพียงหนึ่งพินในการควบคุมไฟ LED ได้มากเท่าที่คุณต้องการ แน่นอนคุณจะต้องมีแหล่งพลังงาน LED แยกต่างหากอย่างเพียงพอแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.