控制Rainbowduino的问题

时间:2009-07-15 11:36:15

标签: hardware arduino

我刚买了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附带的示例代码,但我无法理解它。我该如何解决这个问题?

2 个答案:

答案 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上编程),但我会说这是你的粒子喷射子弹传送系统'寻找。

我这样理解:

  • PORTC是连接到移位寄存器的,所有控制引脚都在PORTC中。
  • 专用四个引脚(而不是我上面提到的乐观两个引脚)。
  • 时钟为引脚PORTC:2,数据为PORTC:1。

答案 1 :(得分:2)

控制每个LED的时间非常昂贵,最好是按行考虑,而每种LED颜色都是按位显示,因此它是8位x 3种颜色(红色,绿色,蓝色)。我写了一个小的Rainbowduino库,它允许你轻松设置每一行或每一帧:

Read my blog post on that