Sorry, took a while to liberate some time for this, but here's my little test sketch trying to reproduce the situation where you have an uneven current value from pin 0 to pin 15 when the set value is low:
(The idea is that a 10k pot allows you to control the value being set for all sixteen LEDs.)
/*
* Mathieu Glachant - Low value fader test sketch
* Based on library by Alex Leone - acleone ~AT~ u.washington.edu
* 2008-09-02 - v001
*
* Pin setup:
* ------------ ---u----
* ARDUINO 13| LED2 |1 28| LED channel 1 (short leg (cathode), with the longer leg (anode) hooked up to +5V)
* 12| LED3 |2 27|-> GND
* 11| LED4 |3 26|-> SIN (pin 4)
* 10|-> BLANK (pin 23) LED5 |4 25|-> SCLK (pin 6)
* 9|-> XLAT (pin 24) . |5 24|-> XLAT (pin 9)
* 8| . |6 23|-> BLANK (pin 10)
* 7| . |7 22|-> GND
* 6|-> SCLK (pin 25) . |8 21|-> VCC (+5V)
* 5| . |9 20|-> 2K Resistor -> GND
* 4|-> SIN (pin 26) . |10 19|-> +5V
* 3|-> GSCLK (pin 18) . |11 18|-> GSCLK (pin 3)
* 2| . |12 17|
* 1| . |13 16|
* 0| LED15|14 15| LED channel 16
* ------------ --------
*
* Put the longer leg of the LEDs in the +5V and the shorter leg in LED(1-16).
* The 2K resistor between pin 20 and GND will let ~20mA through each LED. The actual formula is
* Iref value = 39.05 / (desired current in A) eg 1953Ohms = 39.06 / 0.020A
*
*
* This sketch implements a fader based on the analog voltage at analog pin potPin (see constants below).
*/
#include <TLC5940LED.h>
#include <Wire.h>
#define NUM_TLCS 1
#define HMC6352Address 0x21
#define potPin 0 // Analog pot to set the overall brightness
void setup()
{
Tlc.init(NUM_TLCS);
Tlc.resetTimers();
Wire.begin();
}
int readPot(float scale)
{
return (int)(scale*analogRead(potPin)/1024); // Read the analog voltage from the pot
}
void headingLED(int heading)
{
Tlc.clear(); // sets all the channels to zero, but doesn't update
for (uint8_t channel = 1; channel <= NUM_TLCS * 16; channel++)
{
Tlc.set(channel, heading); // Tlc.set(channel, value (0-4095)) this requires a Tlc.update() to set the values.
}
Tlc.update();
}
void loop()
{
headingLED(readPot(4095));
delay(5);
}
The short of it is, I can't reproduce it. Any value of the analog voltage from the control pot for which the LEDs are visibly lit, I see no difference from one end to the other of the ramp. All the LEDs are lit equally to my naked eye.
What am I doing differently from what you did to get your results?