我刚买了一个 Rainbowduino控制单个 LED 的负载(不是 RGB 矩阵)。到目前为止,所有文档都旨在控制 RGB 阵列,即 不是 我在追求什么。
如果您不熟悉 Rainbowduino,它是一个 Arduino clone 具有 24 个 120 mA 恒流 channel 、8 个每个 500 mA 的 super 源驱动器 channel 以及 5 V - 12 V DC 的宽输出电压适应。非常适合驱动 LED。产品网页在此:http://www.seeedstudio.com/blog/?page_id=187
我已经连接了 16 个 LED,并希望能够使用 digitalWrite()
单独打开和关闭每个 LED .我已经将一些演示代码上传到了板子上,但实际上并不能正常工作。我已经发现 8 个驱动源 channel 可以通过 digitalWrite()
轻松控制。在引脚 3-11 上。然而,控制其他 24 个接收器 channel 更加困难。显然,它们由 3 个移位寄存器(每个一个)控制,我只能通过 shiftOut 访问它们。我不知道这是如何工作的。有人可以帮助我指出正确的方向吗?
一半的 LED 连接到蓝色 1-8,另一半连接到绿色 1-8。正极连接到已设置为高电平的 VCC1-2。我确信电路连接正确,这是我遇到的编程问题。
我查看了 Rainbowduino 附带的示例代码,但我无法理解。我该如何解决这个问题?
最佳答案
使用移位寄存器来复用(或解复用,取决于您的观点)输入/输出在数字电子产品中非常普遍。
基本上,您可以交换 Controller 上的保存引脚,以便在设计中包含另一个芯片(移位寄存器)。
在这种情况下,寄存器用作串并转换器;它有一个串行输入线,由你的 CPU 提供位。它还具有 8 个并行输出,连接到从 CPU 串行加载的 8 位存储器。使用它,您可以在单个引脚上“移出”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 上编程),但我想说这是您正在寻找的粒子喷射子弹传输系统.
我这样解释:
关于hardware - 控制 Rainbowduino 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1130892/