USB LED 渐变器
USB-LED-渐变器是一种通过 USB 控制多个 LED 的设备。我构建它是为了显示我的互联网连接状态、视频录像机(VDR)的录制状态以及磁盘空间不足的警告。您可以想象无数种应用场景。
LED 通过脉冲宽度调制(PWM)进行控制。这样,它们不仅是打开或关闭,还可以控制亮度。设备中包含许多“波形”,可以通过 LED 显示。这样,一个 LED 可以显示某种正弦波或三角波,而无需与控制主机交互。每个 LED 都可以单独控制;每个都可以显示自己的波形。

您可以为每个 LED 分配三种不同的波形。前两种(0 和 1)是“永久”波形。它们交替显示,直到需要不同的波形。第三种波形(2)仅显示一次;之后设备将切换回前两种波形的交替显示。
它们交替显示,直到需要不同的波形。第三种波形(2)仅显示一次,之后设备将切换回前两种波形的交替显示。
一个波形由三个参数描述:波形、一个波形重复的持续时间和切换到下一个波形前的重复次数。
这个版本支持四个 LED。很容易将数量更改为一到八个。我没有测试超过四个的情况,但我可以想象控制器的负载可能太高,无法可靠地通过 USB 通信。
分发中包含三个部分:ATmega8 微控制器的固件、可以在 Linux 下运行的命令行客户端以及构建设备所需的电路。
这个项目基于 Objective Development 的 PowerSwitch 示例应用程序。类似地,它使用 Objective Development 的纯固件 USB 驱动程序,用于 Atmel 的 AVR 微控制器。
Objective Development 的 USB 驱动程序是 USB 1.1 标准(低速设备)在廉价的 Atmel AVR 系列单芯片微计算机上的纯固件实现,例如 ATtiny2313 甚至一些小的 8 引脚设备。它实现了标准,使得有用的应用可以被实现。有关特性和限制,请参见文件 "firmware/usbdrv/usbdrv.h"。
构建和安装
电路
电路仅包含少量标准组件。没有涉及特殊的 USB 芯片。
安装过程在文档中描述。
用法
将设备连接到 USB 端口。所有 LED 应闪烁以指示设备已初始化。
然后使用命令行客户端如下:
usb-led-fader status
usb-led-fader set
usb-led-fader clear
usb-led-fader reset
usb-led-fader show
usb-led-fader test
当使用 set 函数时,可以一次定义多个波形。您只需提供所有波形的参数。参见下面的示例。
参数
ledId: LED 的 ID(0-n,取决于电路中 LED 的数量)。
waveId: 波形的 ID(0-1: 恒定波形,2: 覆盖)。
waveformId: 波形的 ID(0-31: 亮度,32-37: 模式)。有关模式的参考,请使用 show 函数。
periodDuration: 一个波形重复的时间,以秒/10 为单位。值为 0 可用于重置波形。
repetitionCount: 切换到下一个波形前的重复次数。值为 0 可永远重复此波形。
示例
获取所有 LED 的状态:
usb-led-fader status
这将产生类似于以下的输出:
LED 0 curid curvalue curpos currep nextupd
0 2 26 0 23
wave waveform length repeat duration updtime
0 38 32 1 20 45
1 0 1 1 0 1
2 0 1 1 0 1
LED 1 curid curvalue curpos currep nextupd
0 14 19 0 19
wave waveform length repeat duration updtime
0 38 32 1 20 45
1 0 1 1 0 1
2 0 1 1 0 1
LED 2 curid curvalue curpos currep nextupd
0 31 16 0 43
wave waveform length repeat duration updtime
0 38 32 1 20 45
1 0 1 1 0 1
2 0 1 1 0 1
LED 3 curid curvalue curpos currep nextupd
0 6 9 0 39
wave waveform length repeat duration updtime
0 38 32 1 20 45
1 0 1 1 0 1
2 0 1 1 0 1
在此输出中,值 curvalue、curpos、nextupd 和 updtime 仅用于调试目的。普通用户不应关心它们。其他值的含义应该很清楚。
设置第一个 LED 保持中等亮度:
上述设备
我知道我本可以焊接得更漂亮... ;-)
usb-led-fader set 0 0 15 10 1
因此,在 LED 0 上,波形 0 设置为波形 15。它将停留一秒钟,并在切换到下一个波形前重复一次。由于我们没有定义下一个波形,因此这个波形将永久保持。
现在在第一个 LED 上设置第二个波形,比前一个稍亮:
usb-led-fader set 0 1 25 10 1
这是 LED 0 上的波形 1。波形 25 被定义为恒定亮度级别。设置第二个波形后,它将与第一个波形每秒交替一次,因为两个波形具有相同的持续时间和相同的重复次数。
在第一个 LED 上设置第三个波形:
usb-led-fader set 0 2 36 20 5
这将在第一个 LED 上设置第三个波形(波形 2)。波形 36 是一个良好的类似正弦波,因此 LED 开始渐变。一个渐变周期需要 2 秒钟,重复 5 次。由于这是第三个波形,在重复后,LED 返回波形 0 和波形 1 的交替显示,此波形被丢弃。
一次设置多个波形:
usb-led-fader set 0 0 15 10 1 0 1 25 10 1 0 2 36 20 5
这将一次设置所有上述波形。因此,第一个 LED 将首先渐变正弦波五次,然后开始以一秒的节奏在两种亮度之间交替。
清除第一个 LED:
usb-led-fader clear 0
这将清除第一个 LED 上的所有三个波形。
重置设备:
usb-led-fader reset
所有 LED 将闪烁一次,以指示设备已重置且 LED 正常工作。
在屏幕上显示波形:
usb-led-fader show 36
这将产生类似于以下的输出:
wave 36 - length 64
31: *****
30: *********
29: ***********
28: ***************
27: *****************
26: *******************
25: *******************
24: *********************
23: ***********************
22: *************************
21: *************************
20: ***************************
19: *****************************
18: *****************************
17: *******************************
16: *********************************
15: ***********************************
14: ***********************************
13: *************************************
12: ***************************************
11: ***************************************
10: *****************************************
9: *******************************************
8: *********************************************
7: *********************************************
6: ***********************************************
5: *************************************************
4: *****************************************************
3: *******************************************************
2: ***********************************************************
1: ****************************************************************
================================================================
请记住,显示波形的宽度对应于波形的长度。如果您显示非常简单的波形,如恒定亮度级别(0-31),则长度为 1。因此只显示一列。
测试设备:
usb-led-fader test
此功能向设备发送许多随机数。设备返回数据包,客户端查找发送和接收数字之间的差异。
缺点
如上所述,控制多个 LED 的 PWM 对于一个小型微控制器来说工作量很大。USB 协议通信也是如此。这些 together 导致设备负载很大,因此与设备的通信不是 100% 可靠。不过,至少在我们的测试中,超过 99%。

这里还没有内容,您有什么问题吗?