Eigentlich kannst Du die LEDs auch direkt an die Ports hängen (mit Vorwiderstand natürlich), wenn Du folgende Bedingungen einhälst: (Angaben für die sink currents, die source currents sind aber identisch. Siehe Datenblatt S. 323)
Zitat Zitat von Mega128 Datenblatt
1] The sum of all IOL, for all ports, should not exceed 400 mA.
2] The sum of all IOL, for ports A0 - A7, G2, C3 - C7 should not exceed 100 mA.
3] The sum of all IOL, for ports C0 - C2, G0 - G1, D0 - D7, XTAL2 should not exceed 100 mA.
4] The sum of all IOL, for ports B0 - B7, G3 - G4, E0 - E7 should not exceed 100 mA.
5] The sum of all IOL, for ports F0 - F7, should not exceed 100 mA.
Mit den Low-Current-LEDs wirst Du nicht an diese Grenzen kommen. Aber ich weiß ja nicht, was Du sonst noch an den Ports hängen hast.

Zum ULN2803A:
Die Ausgänge sind Open-Collector-Ausgänge. Das steckt also auch nichts anderes dahinter als ein Transistor, dessen Emitter mit Ground verbunden ist und dessen Basis-Ansteuerung fertig integriert ist. Der Kollektor ist einfach nach aussen geführt. Der ULN arbeitet also eigentlich nur als Schalter, die Versorgungsspannung kommt direkt über den Vorwiderstand an die LED, die Kathode der LED an den ULN. Die Berechnung des Vorwiderstandes läuft wie üblich.

Gruß,
askazo