我刚买了Rainbowduino来控制单个LED的负载(不是RGB矩阵)。到目前为止,所有文档都旨在控制不我所追求的RGB阵列。
如果你不熟悉Rainbowduino,它是一个Arduino克隆,有24个120 mA恒流通道,8个超级源驱动器通道,每个500 mA,宽输出电压适应5 V - 12 V DC 。非常适合驱动LED。产品网页位于:http://www.seeedstudio.com/blog/?page_id=187
我连接了16个LED,希望能够使用digitalWrite()
单独打开和关闭每个LED。我已经将一些演示代码上传到电路板上,而这些代码并没有真正起作用。我已经知道8引脚源通道可以通过引脚3-11上的digitalWrite()
轻松控制。然而,控制其他24个接收器通道更加困难。显然,它们由3个移位寄存器(每个寄存器)控制,我只能通过shiftOut访问它们。我不知道这是怎么回事。有人可以帮助我指出正确的方向吗?
一半LED连接到蓝色1-8,另一半连接到绿色1-8。正极连接到已设置为HIGH的VCC1-2。我确信电路连接正确,这是我遇到问题的编程。
我查看了Rainbowduino附带的示例代码,但我无法理解它。我该如何解决这个问题?
答案 0 :(得分:3)
使用移位寄存器来复用(或解复用,取决于您的观点)输入/输出在数字电子设备中非常常见。
基本上,您需要在控制器上交换保存引脚,以便在设计中包含另一个芯片(移位寄存器)。
在这种情况下,寄存器用作串并转换器;它有一个串行输入线,由CPU提供位。它还有8个并行输出,连接到8位存储器,从CPU串行加载。使用它,您可以在一个引脚上“移出”8位数据(通常加一个引脚进行时钟控制),然后存储在移位寄存器中并且可以并行驱动8个LED。
在这种特殊情况下,您需要确定移位寄存器(MBI5168恒流灌电流驱动器包含此处的移位寄存器)所连接的AVR端口引脚。它们应该被链接到一对输出,一个用于数据,一个用于时钟。一旦你知道这些引脚,你应该能够使用ShiftOut命令自己驱动它们。
进一步挖掘,this sample "sketch"在名为“Rainbow.h”的文件中包含以下定义:
//MBI5168
#define SH_DIR_OE DDRC
#define SH_DIR_SDI DDRC
#define SH_DIR_CLK DDRC
#define SH_DIR_LE DDRC
#define SH_BIT_OE 0x08
#define SH_BIT_SDI 0x01
#define SH_BIT_CLK 0x02
#define SH_BIT_LE 0x04
#define SH_PORT_OE PORTC
#define SH_PORT_SDI PORTC
#define SH_PORT_CLK PORTC
#define SH_PORT_LE PORTC
这当然是全数字“传闻”(我不拥有该设备,我从来没有在任何类型的* duino上编程),但我会说这是你的粒子喷射子弹传送系统'寻找。
我这样理解:
答案 1 :(得分:2)
控制每个LED的时间非常昂贵,最好是按行考虑,而每种LED颜色都是按位显示,因此它是8位x 3种颜色(红色,绿色,蓝色)。我写了一个小的Rainbowduino库,它允许你轻松设置每一行或每一帧: