5

我刚买了一个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(). 我已经将一些演示代码上传到了没有真正工作的板上。我发现 8 个驱动源通道可以digitalWrite()通过引脚 3-11 轻松控制。然而,控制其他 24 个接收器通道更加困难。显然,它们由 3 个移位寄存器(每个一个)控制,我只能使用 shiftOut 访问它们。我不知道这是如何工作的。有人可以帮我指出正确的方向吗?

一半的 LED 连接到蓝色 1-8,另一半连接到绿色 1-8。正极连接到已设置为 HIGH 的 VCC1-2。我确信电路连接正确,这是我遇到问题的编程。

我查看了 Rainbowduino 附带的示例代码,但我无法理解它。我该如何解决这个问题?

4

2 回答 2

3

使用移位寄存器来复用(或解复用,取决于您的观点)输入/输出在数字电子设备中非常常见。

基本上,您将控制器上的保存引脚换成必须在设计中包含另一个芯片(移位寄存器)。

在这种情况下,寄存器用作串并转换器;它有一个串行输入线,它由你的 CPU 提供的位。它还具有 8 个并行输出,连接到从 CPU 串行加载的 8 位存储器。使用它,您可以在单个引脚上“移出”8 位数据(通常加上一个用于时钟的引脚),然后将其存储在移位寄存器中,并可以并行驱动 8 个 LED。

在这种特殊情况下,您需要确定移位寄存器(MBI5168 恒流灌电流驱动器包含移位寄存器,此处)连接到哪个 AVR 端口引脚。它们应该链接到一对输出,一个用于数据,一个用于时钟。一旦你知道了这些引脚,你应该能够使用ShiftOut命令自己驱动它们。

进一步挖掘,这个示例“草图”在名为“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。
于 2009-07-15T11:44:39.210 回答
2

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

阅读我的博客文章

于 2009-10-15T15:27:20.337 回答