mirror of
https://github.com/PaulStoffregen/Tlc5940
synced 2025-06-27 10:27:48 +02:00
102 lines
4.1 KiB
Plaintext
102 lines
4.1 KiB
Plaintext
/*
|
|
Basic Pin setup:
|
|
------------ ---u----
|
|
ARDUINO 13|-> SCLK (pin 25) OUT1 |1 28| OUT channel 0
|
|
12| OUT2 |2 27|-> GND (VPRG)
|
|
11|-> SIN (pin 26) OUT3 |3 26|-> SIN (pin 11)
|
|
10|-> BLANK (pin 23) OUT4 |4 25|-> SCLK (pin 13)
|
|
9|-> XLAT (pin 24) . |5 24|-> XLAT (pin 9)
|
|
8| . |6 23|-> BLANK (pin 10)
|
|
7| . |7 22|-> GND
|
|
6| . |8 21|-> VCC (+5V)
|
|
5| . |9 20|-> 2K Resistor -> GND
|
|
4| . |10 19|-> +5V (DCPRG)
|
|
3|-> GSCLK (pin 18) . |11 18|-> GSCLK (pin 3)
|
|
2| . |12 17|-> SOUT
|
|
1| . |13 16|-> XERR
|
|
0| OUT14|14 15| OUT channel 15
|
|
------------ --------
|
|
|
|
- Put the longer leg (anode) of the LEDs in the +5V and the shorter leg
|
|
(cathode) in OUT(0-15).
|
|
- +5V from Arduino -> TLC pin 21 and 19 (VCC and DCPRG)
|
|
- GND from Arduino -> TLC pin 22 and 27 (GND and VPRG)
|
|
- digital 3 -> TLC pin 18 (GSCLK)
|
|
- digital 9 -> TLC pin 24 (XLAT)
|
|
- digital 10 -> TLC pin 23 (BLANK)
|
|
- digital 11 -> TLC pin 26 (SIN)
|
|
- digital 13 -> TLC pin 25 (SCLK)
|
|
- The 2K resistor between TLC pin 20 and GND will let ~20mA through each
|
|
LED. To be precise, it's I = 39.06 / R (in ohms). This doesn't depend
|
|
on the LED driving voltage.
|
|
- (Optional): put a pull-up resistor (~10k) between +5V and BLANK so that
|
|
all the LEDs will turn off when the Arduino is reset.
|
|
|
|
If you are daisy-chaining more than one TLC, connect the SOUT of the first
|
|
TLC to the SIN of the next. All the other pins should just be connected
|
|
together:
|
|
BLANK on Arduino -> BLANK of TLC1 -> BLANK of TLC2 -> ...
|
|
XLAT on Arduino -> XLAT of TLC1 -> XLAT of TLC2 -> ...
|
|
The one exception is that each TLC needs it's own resistor between pin 20
|
|
and GND.
|
|
|
|
This library uses the PWM output ability of digital pins 3, 9, 10, and 11.
|
|
Do not use analogWrite(...) on these pins.
|
|
|
|
This sketch does the Knight Rider strobe across a line of LEDs.
|
|
|
|
Alex Leone <acleone ~AT~ gmail.com>, 2009-02-03 */
|
|
|
|
#include "Tlc5940.h"
|
|
|
|
void setup()
|
|
{
|
|
/* Call Tlc.init() to setup the tlc.
|
|
You can optionally pass an initial PWM value (0 - 4095) for all channels.*/
|
|
Tlc.init();
|
|
}
|
|
|
|
/* This loop will create a Knight Rider-like effect if you have LEDs plugged
|
|
into all the TLC outputs. NUM_TLCS is defined in "tlc_config.h" in the
|
|
library folder. After editing tlc_config.h for your setup, delete the
|
|
Tlc5940.o file to save the changes. */
|
|
|
|
void loop()
|
|
{
|
|
int direction = 1;
|
|
for (int channel = 0; channel < NUM_TLCS * 16; channel += direction) {
|
|
|
|
/* Tlc.clear() sets all the grayscale values to zero, but does not send
|
|
them to the TLCs. To actually send the data, call Tlc.update() */
|
|
Tlc.clear();
|
|
|
|
/* Tlc.set(channel (0-15), value (0-4095)) sets the grayscale value for
|
|
one channel (15 is OUT15 on the first TLC, if multiple TLCs are daisy-
|
|
chained, then channel = 16 would be OUT0 of the second TLC, etc.).
|
|
|
|
value goes from off (0) to always on (4095).
|
|
|
|
Like Tlc.clear(), this function only sets up the data, Tlc.update()
|
|
will send the data. */
|
|
if (channel == 0) {
|
|
direction = 1;
|
|
} else {
|
|
Tlc.set(channel - 1, 1000);
|
|
}
|
|
Tlc.set(channel, 4095);
|
|
if (channel != NUM_TLCS * 16 - 1) {
|
|
Tlc.set(channel + 1, 1000);
|
|
} else {
|
|
direction = -1;
|
|
}
|
|
|
|
/* Tlc.update() sends the data to the TLCs. This is when the LEDs will
|
|
actually change. */
|
|
Tlc.update();
|
|
|
|
delay(75);
|
|
}
|
|
|
|
}
|
|
|