Answers:
我相信使用Charlie-plexing N线可以控制N *(N-1)个LED。维基百科上有一篇很好的文章。
我的一个朋友Jimmie P.Rodgers在Arduino Shield上安装了126个LED。他使用charlie-plexing来控制LED。有关其董事会的一些信息,请访问 -jimmieprodgers.com/2009/12/my-development-process/(archive.org副本)
在上一次波士顿Arduino用户组会议上,吉米·罗杰斯(Jimmie P. Rodgers)绘制了一个Charlie-plexing图,将其作为带有标记网络的矩阵。以这种方式绘制的示意图似乎在传达概念方面做得很好。我创建了一些类似的示意图-请参阅http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html
jimmieprodgers.com
此答案中的链接装有病毒。
您可以使用移位寄存器(http://en.wikipedia.org/wiki/Shift_register)从单个串行流中获取任意数量的并行输出。
您将需要考虑功率限制。我实际上从未亲自使用过Arduino,但我假设它与PIC一样具有电流限制。同样,移位寄存器本身也会有电流限制。如果遇到这种情况,您将需要使用MOSFET之类的东西来控制LED,而不必直接从微控制器获取很多功率。
任何给定的AVR微控制器引脚都可以提供高达40 mA的电流,并且芯片所提供或吸收的总电源(即在接地和Vcc引脚处)必须低于200 mA。
对于需要大量LED的情况,Charlieplexing是一个很好的解决方案,但是一次只能点亮一个LED 。标准的Arduino板(例如Duemilanove)提供17个“免费” I / O引脚,不计算TX,RX,复位或引脚13。因此,您可以连接17 * 16 = 272个LED。这可以很好地工作,特别是如果您保持一个LED点亮,或仅在几个LED之间快速扫描时。但是,如果您尝试使用某种模式照亮整个矩阵,则会发现每个矩阵都开启(略少于)时间的1/272,因此,如果您的驱动电流在任何给定时刻为30 mA,则每个LED平均电流约为0.1 mA,非常暗。
如果您不需要那么多的LED,而是需要更高的亮度,则传统的多路复用可能是更好的选择。在这种情况下,您可以将矩阵中的某些行用作行,将某些行用作列。如果使用10 mA LED电流,则可以定义一个4列13行的矩阵,其中一行中的所有4个LED一次可以打开,然后扫描各行。然后,每行在时间为10mA时接通时间的1/13,因此平均LED电流可以高达0.76 mA,但您只能得到4 * 13 = 104个LED。(每个LED绝对比字符复合照明更亮。)
最后一个示例中的限制是AVR上每个引脚40 mA,因为每行驱动引脚源4x10 = 40 mA。如果允许将外部晶体管(价格便宜且体积小)添加到行输出,则可以避免该特定限制并变亮。例如,您可以制作一个8x9阵列,具有8行9列,总共72个LED。通过晶体管选择同时打开8行之一。给定行中的所有9个LED一次最多可以打开,以20 mA驱动,因此180 mA来自晶体管,因此您处于AVR的电流限制之下。现在,每个LED的平均电流为20 mA / 8 = 2.5 mA,通常比较亮。
通过17个I / O引脚,17个NPN晶体管(发射极跟随器来提高电流),应该不会出现任何问题,以1/17占空比任意组合显示272个LED,平均电流或0.7mA(200mA / 272),受以下限制:该芯片一次可拉低200mA的能力。添加一个二极管以得到0.7伏的压降,这将允许再添加17个LED(将占空比降低至1/18),尽管亮度不会与其他LED完全匹配。
温德尔·奥斯卡(Windell Oskay)提出了一个很好的论点,即104个LED最多而不增加晶体管,而汤姆·伊戈( Tom Igoe )发布了由单个Arduino Mega直接控制的128个LED矩阵的照片-没有额外的晶体管(分立或集成)。
Tom Igoe是否通过短暂超过数据表中列出的“每个引脚的绝对最大电流”来“作弊”?