More control over 3W RGB

I have my 3W RGB LED working - PWM via a ULN2003A.

Thing is - there isn't much more than 8 levels of brightness - meaning you can't do anything subtle at all.

Any idea how I can get more control over the thing?

James

Thing is - there isn't much more than 8 levels of brightness

You should have 256 levels of brightness with PWM. However just using a darlington driver means you are probably using a current limiting resistor in series with the LED. This is not the way to drive power LEDs as the resistor ends up being very small and so the current is sensitive to temperature.
Look here for driver ideas:- http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1234273497

You may also find it helpful to use a non-linear output curve. The human eye responds sort of logarithmically to light, so it perceives a much greater difference in intensity between say 5% and 10% PWM than it does between 90% and 95%. A parabolic function is a simple way to compensate for this to some extent, as I've been using in a project:

void set_g0( RGB color) { //RGB is a struct consisting of a byte each for red, green, blue
  analogWrite( g0_redPin, int( (color.r*color.r)/255 ) );
  analogWrite( g0_greenPin, int( (color.g*color.g)/255 ) );
  analogWrite( g0_bluePin, int( (color.b*color.b)/255) );
}

There are likely better ways to do it, mind, but this works pretty well.

Thanks for the link... so I need a driver... but all the LM34xx ones are SMD... no good to me... any ideas on alternatives?

(can't find any of the other ones either)