Q:

Using diodes to limit current to LEDs

I'm setting up an attiny2313 to drive an array of LEDs and blink them in different patterns.  Rather than putting a series resistor in line with each LED (they'll be controlled separately, so I can't do tricks like putting them in series with each other), I was wondering about just using a couple diodes to get the voltage down to the right range.
The system is running at 3.3V (with a regulator to keep it pretty constant), and two 1N4001 diodes will drop that down to 1.9V - right in line with the lower end of the 1.8 - 2.2V these LEDs are specced for.  Since the diodes will always want to maintain the same voltage drop across themselves, I don't have to worry about that voltage changing as I turn the LEDs on or off.  Overall I save 6 components.
Has anyone else tried something like this?  Any gotchas I've overlooked?  I realize the diodes will have to dissipate the full current from all the LEDs, but for this small amount of current that doesn't seem like it will be an issue.
(edit:  I'm putting these diodes between the common cathode of the LEDs and ground)

A:

using another diode to "match" the source voltage to the LED voltage: NO NO NO!
An LED is basically a voltage sink: it draws no current until the voltage across it forward-biases the diode junction, and then all of a sudden when you get enough voltage the current through it rises dramatically. The light output of an LED is strongly dependent on the amount of current you put through it: more current = more light output. The voltage drop, although approximately constant, varies with temperature and from device to device.
In almost all applications you want to set the light output, and hence the current, to a fixed value, independent of supply voltage variations and LED voltage drop variations. This means the ideal source for an LED load is a constant current source -- which you can implement, it's just that it's a pain to do so without a few additional components. In practice we just tend to use a voltage source (switched on and off by a logic gate or a MOSFET or a bipolar transistor) and a resistor to set the current.
The key equation is Vsupply - VLED = ILED*R, or ILED = (Vsupply - VLED)/R
The term on the left-hand side is the difference between supply voltage and LED voltage drop. This can vary with temperature and part-to-part variation. A sensitivity analysis here is fairly easy: ΔI = ΔV/R -- the change in current is equal to 1/R times the change in voltage. If you want your LED current to be less sensitive to changes in voltage, that means the value of R should be higher... for a particular nominal LED current (usually between 5mA and 20mA), the current will be less sensitive to changes in voltage if the source voltage is higher and the resistance is higher. 
By dropping the supply voltage using a second diode, you are doing the exact opposite: to get the desired current, you have to reduce the value of R, which makes the load current more sensitive to voltage variation. AND you are also introducing another circuit element (this new diode) which has additional voltage tolerances, making those voltage variations larger. You'd be adding extra components which serve no purpose but to make the light output more sensitive to supply voltage variations, temperature, and part variations.
The only other things worth considering here are power dissipation. If you have a fixed voltage source (say 5V) and an LED or other circuit element that uses only a fraction of that voltage (say 1.2V) then only a fraction of the power (1.2/5V = 24% in this example) is dissipated in the LED, and the rest (76%) is dissipated in something else that you need to connect the two together. That's true for any linear power supply (see below for a comment about switchers). This goes into heat, which needs to be properly dissipated, and in most cases the cheapest easiest way to dissipate a given amount of heat in a controlled fashion is in a resistor. They work properly over a higher temperature range (most diodes/transistors work up to about 150 C max) and their behavior varies less with temperature.
The exception to all of this thinking is a switching power supply. Many LED drivers are going the switcher route, and using pulse-width modulation + a switching transistor and an inductor to get the efficiencies up. This lets essentially all of the power dissipation occur in the LED (with a little bit of loss in a switching MOSFET and inductor). You still treat the LED as a voltage sink, though, with the switching transistor + inductor acting as a current source, varying its duty cycle to control the LED brightness (in high-quality visual displays there is also a light-sensor chip so that the current can be varied to compensate for the LED's aging over time so that white light does not drift in color towards red or green or blue). A switching LED driver costs $$, though, so unless you need the efficiency I wouldn't bother.
Bottom line: keep it simple, use the resistor by itself.

A:

I must confess I never tried this. But the series resistor has an important role: it is there to limit the current through the LED. If there's no resistor, the current may be limited in the end to a value which is too high for the LED or for the driver transistor. Theoretically you should graphically add the U-I characteristics of the diodes and the LED, and see on the the resulting characteristic what's the current for your Vcc value. But the main problem is that this current cannot be reliable predicted, since the U-I catalog characteristics of the diodes and LED give you an typical curve, and this curve will also shift with the temperature.
So while it may work, I wouldn't count on it working in every instance. But you may have some help from an unexpected place: the IC driving your LEDs. Sometimes the digital outputs have internal resistors or other ways to limit the output current, in order to avoid overloading them. So check the spec sheet for your attiny2313.

A:

Sorry, but the whole premise of the question won't work, because diodes do not limit current. You seem to be somewhat confusing voltage and current. Without a resistor, there will be nothing to limit the current. In the best case, the LEDs will work fine, but will wear out much sooner due to overcurrent. In the worst case, it will pop the LED from too much current, and in the very worst case it will fry your microcontroller by trying to sink or source too much current.
Basically the answer is that you always need to limit the current using resistors, unless you are using a special LED driver IC that handles it for you (often called 'constant current sink' or 'constant current source'). 
I've used Allegro's LED driver ICs before, they work quite well. You can control 16 individual LEDs using only 3 pins on your microcontroller (or many more if using matrixing or multiplexing). Various other vendors also make LED driving ICs as well. Or you can do it yourself just using a combination of shift registers, transistors, and resistors.

