Will now be generated automatically
This commit is contained in:
parent
9b3fa42bd6
commit
a5917a39ce
297
Readme.txt
297
Readme.txt
@ -1,297 +0,0 @@
|
|||||||
$Id: Readme.txt,v 1.2 2006/10/01 16:28:01 rschaten Exp $
|
|
||||||
|
|
||||||
For full documentation and examples, take a look at htmldoc/index.html.
|
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
============
|
|
||||||
|
|
||||||
The USB-LED-Fader is a device to control a number of LEDs via USB. I built it
|
|
||||||
to display the online-status of my internet-connection, the recording-status of
|
|
||||||
my videorecorder, and warnings if the available disc-space is low. You can
|
|
||||||
imagine an endless number of applications for this.
|
|
||||||
|
|
||||||
The LEDs are controlled with pulse width modulation (PWM). That way, they are
|
|
||||||
not only on or off, it is possible to control the brightness. Included in the
|
|
||||||
device is a number of 'waveforms' that can be displayed on the LEDs. That way,
|
|
||||||
one LED can display some kind of a sinus- or triangular wave without any
|
|
||||||
interaction with the controlling host.
|
|
||||||
|
|
||||||
Every LED can be controlled individually, each one can display it's own
|
|
||||||
waveforms.
|
|
||||||
|
|
||||||
You can assign three different waves to every LED: two 'eternal' waves (0 & 1).
|
|
||||||
They are displayed alternating until anything different is required. The third
|
|
||||||
wave (2) is only displayed once, afterwards the device will switch back to
|
|
||||||
alternating between the first two waves.
|
|
||||||
|
|
||||||
One wave is described by three parameters: the waveform, the duration for one
|
|
||||||
repetition of the wave and the number of repetitions before switching to the
|
|
||||||
next wave.
|
|
||||||
|
|
||||||
This version supports four LEDs, it should be quite easy to change that number
|
|
||||||
between one and eight. I have not tested any number greater than four, but I
|
|
||||||
can imagine that the load on the controller can be too high to reliably
|
|
||||||
communicate via USB.
|
|
||||||
|
|
||||||
There are three parts included in the distribution: The firmware for an ATmega8
|
|
||||||
microcontroller, a commandline-client that can be run under Linux, and the
|
|
||||||
circuits needed to build the device.
|
|
||||||
|
|
||||||
This project is based on the PowerSwitch example application by Objective
|
|
||||||
Development. Like that, it uses Objective Development's firmware-only USB
|
|
||||||
driver for Atmel's AVR microcontrollers.
|
|
||||||
|
|
||||||
Objective Development's USB driver is a firmware-only implementation of the USB
|
|
||||||
1.1 standard (low speed device) on cheap single chip microcomputers of Atmel's
|
|
||||||
AVR series, such as the ATtiny2313 or even some of the small 8 pin devices. It
|
|
||||||
implements the standard to the point where useful applications can be
|
|
||||||
implemented. See the file "firmware/usbdrv/usbdrv.h" for features and
|
|
||||||
limitations.
|
|
||||||
|
|
||||||
|
|
||||||
Building and installing
|
|
||||||
=======================
|
|
||||||
|
|
||||||
Both, the firmware and Unix command line tool are built with "make". You may
|
|
||||||
need to customize both makefiles.
|
|
||||||
|
|
||||||
|
|
||||||
Firmware
|
|
||||||
--------
|
|
||||||
|
|
||||||
The firmware for this project requires avr-gcc and avr-libc (a C-library for
|
|
||||||
the AVR controller). Please read the instructions at
|
|
||||||
http://www.nongnu.org/avr-libc/user-manual/install_tools.html for how to
|
|
||||||
install the GNU toolchain (avr-gcc, assembler, linker etc.) and avr-libc.
|
|
||||||
|
|
||||||
Once you have the GNU toolchain for AVR microcontrollers installed, you can run
|
|
||||||
"make" in the subdirectory "firmware". You may have to edit the Makefile to use
|
|
||||||
your preferred downloader with "make program". The current version is built for
|
|
||||||
avrdude with a parallel connection to an stk200-compatible programmer.
|
|
||||||
|
|
||||||
If working with a brand-new controller, you may have to set the fuse-bits to
|
|
||||||
use the external crystal:
|
|
||||||
|
|
||||||
avrdude -p atmega8 -P /dev/parport0 -c stk200 -U hfuse:w:0xC9:m \
|
|
||||||
-U lfuse:w:0x9F:m
|
|
||||||
|
|
||||||
Afterwards, you can compile and flash to the device:
|
|
||||||
|
|
||||||
make program
|
|
||||||
|
|
||||||
|
|
||||||
Commandline client
|
|
||||||
------------------
|
|
||||||
|
|
||||||
The command line tool requires libusb. Please download libusb from
|
|
||||||
http://libusb.sourceforge.net/ and install it before you compile. Change to
|
|
||||||
directory "commandline", check the Makefile and edit the settings if required
|
|
||||||
and type
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
This will build the unix executable "usb-led-fader" which can be used to
|
|
||||||
control the device.
|
|
||||||
|
|
||||||
|
|
||||||
Usage
|
|
||||||
=====
|
|
||||||
|
|
||||||
Connect the device to the USB-port. All LED should flash up to indicate that
|
|
||||||
the device is initialized.
|
|
||||||
|
|
||||||
Then use the commandline-client as follows:
|
|
||||||
|
|
||||||
usb-led-fader status
|
|
||||||
usb-led-fader set <ledId> <waveId> <waveformId> <periodDuration> <repetitionCount>
|
|
||||||
usb-led-fader clear <ledId>
|
|
||||||
usb-led-fader reset
|
|
||||||
usb-led-fader show <waveformId>
|
|
||||||
usb-led-fader test
|
|
||||||
|
|
||||||
When using the set-function, it is possible to define several waves at once.
|
|
||||||
You simply have to give the parameters for all waves. See examples below.
|
|
||||||
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
----------
|
|
||||||
|
|
||||||
- ledId: ID of the LED (0-n, depending on the number of LEDs in your circuit).
|
|
||||||
- waveId: ID of the wave (0-1: constant waves, 2: override).
|
|
||||||
- waveformId: ID of the waveform (0-31: brightness, 32-37: patterns). For a
|
|
||||||
reference to the patterns, consult the function fade_calculateWaveform() in
|
|
||||||
the file "firmware/main.c".
|
|
||||||
- periodDuration: Time in sec/10 for one repetition of the waveform. A value of
|
|
||||||
0 can be used to reset the wave.
|
|
||||||
- repetitionCount: Number of repetitions before switching to the next wave. A
|
|
||||||
value of 0 can be used to repeat this forever.
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
--------
|
|
||||||
|
|
||||||
-> Get the status of all LEDs:
|
|
||||||
usb-led-fader status
|
|
||||||
This will result in an output similar to this:
|
|
||||||
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
|
|
||||||
In this output, the values curvalue, curpos, nextupd and updtime are for
|
|
||||||
debugging purposes only. They shouldn't be of interest to the common user. The
|
|
||||||
meaning of the other values should be clear.
|
|
||||||
|
|
||||||
-> Set the first LED to keep a middle brightness:
|
|
||||||
usb-led-fader set 0 0 15 10 1
|
|
||||||
So, on LED 0 the wave 0 is set to waveform 15. It will stay there for one
|
|
||||||
second and will be repeated once before switching to the next wave. There is no
|
|
||||||
next wave because we didn't define one, so this waveform will stay forever.
|
|
||||||
|
|
||||||
-> Now set a second wave on the first LED, a little brighter than the one
|
|
||||||
before:
|
|
||||||
usb-led-fader set 0 1 25 10 1
|
|
||||||
This is wave 1 on LED 0, waveform 25 indicates a constant level of brightness.
|
|
||||||
After setting the second wave, it will alternate with the first one after every
|
|
||||||
second, because both waves have the same duration and the same number of
|
|
||||||
repetitions.
|
|
||||||
|
|
||||||
-> Set a third wave on the first LED:
|
|
||||||
usb-led-fader set 0 2 36 20 5
|
|
||||||
This sets the third wave (wave 2) on the first LED. Waveform 36 is a nice
|
|
||||||
sinus-like wave, so the LED starts to fade. One period of the fading takes 2
|
|
||||||
seconds, it is repeated for 5 times. Since this is the third wave, after the
|
|
||||||
repetitions the LED returns to alternating between wave 0 and wave 1, this wave
|
|
||||||
is discarded.
|
|
||||||
|
|
||||||
-> Set multiple waves at once:
|
|
||||||
usb-led-fader set 0 0 15 10 1 0 1 25 10 1 0 2 36 20 5
|
|
||||||
This will set all of the above waves at once. Thus, the first LED will first
|
|
||||||
fade the sinus-wave five times, then start alternating between the two
|
|
||||||
brightnesses in one-second-rhythm.
|
|
||||||
|
|
||||||
Clear the first LED:
|
|
||||||
usb-led-fader clear 0
|
|
||||||
This will clear all three waves on the first LED.
|
|
||||||
|
|
||||||
-> Reset the device:
|
|
||||||
usb-led-fader reset
|
|
||||||
All LEDs will flash once, to indicate that the device is reset and the LEDs are
|
|
||||||
working.
|
|
||||||
|
|
||||||
-> Show a waveform on the screen:
|
|
||||||
usb-led-fader show 36
|
|
||||||
This will lead to an output like the following:
|
|
||||||
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: ****************************************************************
|
|
||||||
================================================================
|
|
||||||
Keep in mind that the width of the displayed wave corresponds to the length of
|
|
||||||
the waveform. If you display a very simple one like the constant brightness
|
|
||||||
levels (0-31), the length is 1. Therefore only one column is displayed.
|
|
||||||
|
|
||||||
-> Test the device:
|
|
||||||
usb-led-fader test
|
|
||||||
This function sends many random numbers to the device. The device returns the
|
|
||||||
packages, and the client looks for differences in the sent and the received
|
|
||||||
numbers.
|
|
||||||
|
|
||||||
|
|
||||||
Drawbacks
|
|
||||||
=========
|
|
||||||
|
|
||||||
As mentioned above, controlling the PWM for several LEDs is a lot of work for
|
|
||||||
one small microcontroller. Speaking the USB protocol is so, either. Both
|
|
||||||
combined result in a lot of load on the device, so the communication with the
|
|
||||||
device is not 100% reliable. More than 99% though, at least in our tests.
|
|
||||||
|
|
||||||
SO BE WARNED: You should not use this device to control the state of your
|
|
||||||
nuclear reactor. If you intend to use it in that way despite of this warning,
|
|
||||||
please let me know... ;-)
|
|
||||||
|
|
||||||
|
|
||||||
Files in the distribution
|
|
||||||
=========================
|
|
||||||
|
|
||||||
- Readme.txt: The file you are currently reading.
|
|
||||||
- firmware: Source code of the controller firmware.
|
|
||||||
- firmware/usbdrv: USB driver -- See Readme.txt in this directory for info
|
|
||||||
- commandline: Source code of the host software (needs libusb).
|
|
||||||
- common: Files needed by the firmware and the commandline-client.
|
|
||||||
- circuit: Circuit diagrams in PDF and EAGLE 4 format. A free version of EAGLE
|
|
||||||
is available for Linux, Mac OS X and Windows from http://www.cadsoft.de/.
|
|
||||||
- License.txt: Public license for all contents of this project, except for the
|
|
||||||
USB driver. Look in firmware/usbdrv/License.txt for further info.
|
|
||||||
- Changelog.txt: Logfile documenting changes in soft-, firm- and hardware.
|
|
||||||
|
|
||||||
|
|
||||||
Thanks!
|
|
||||||
=======
|
|
||||||
|
|
||||||
I'd like to thank Objective Development for the possibility to use their driver
|
|
||||||
for my project. In fact, this project wouldn't exist without the driver.
|
|
||||||
|
|
||||||
And I'd like to give special credits to Thomas Stegemann. He wrote the
|
|
||||||
PWM-stuff, and I guess it would have been nearly to impossible to me to write
|
|
||||||
the rest of the project without his help since C isn't my natural language.
|
|
||||||
|
|
||||||
|
|
||||||
About the license
|
|
||||||
=================
|
|
||||||
|
|
||||||
Our work - all contents except for the USB driver - are licensed under the GNU
|
|
||||||
General Public License (GPL). A copy of the GPL is included in License.txt. The
|
|
||||||
driver itself is licensed under a special license by Objective Development. See
|
|
||||||
firmware/usbdrv/License.txt for further info.
|
|
||||||
|
|
||||||
|
|
||||||
(c) 2006 by Ronald Schaten - http://www.schatenseite.de
|
|
Loading…
Reference in New Issue
Block a user