quando sul mio arduino duemilanove scrivo:
digitalWrite(pin, HIGH);
dove pin è uno qualunque dei pin di output, mi viene fornita una tensione di 5 volt, ma appena collego un carico anche minimo, come un led si accende appena appena e la tensione cala a poco più di un volt.
invece, se scrivo:
analogWrite(pin, 255);
tutto funziona correttamente e i 5 volt di output sono effettivi, riescono cioè a comandare un led o quant'altro....dove ho sbagliato? cosa posso fare?
Sei sicuro di aver fatto precedere il comando digitalWrite da:
pinMode(pin, OUTPUT);
??
Solitamente si inserisce nel setup();
solitamente anche senza impostarlo a mano mi dava lo stesso un output...ora provo
solitamente anche senza impostarlo a mano mi dava lo stesso un output...ora provo
Non è così. Il microcontrollore ha bisogno sempre di sapere PRIMA se un pin digitale debba essere usato come input o output; omettendo questa informazione non potrai avere di certo un comportamento corretto...di certo non sotto "carico".
chiedo scusa per la mia ignoranza
grazie mille!
Di niente 
Posso darti anche una spiegazione più tecnica di ciò che ti accadeva esattamente.
Non avendo impostato il pin come OUTPUT tramite il comando pinMode(), il pin era configurato come ingresso, per cui usando digitalWrite(pin, OUTPUT); non facevi altro che attivare la cosiddetta resistenza di Pullup (vedi http://arduino.cc/en/Tutorial/DigitalPins); questo spiegava la tensione di 5V "a vuoto" che trovavi all'uscita del pin, che però crollava miseramente non appena collegavi il Led.
quindi abilitando come pull-up gli da una tensione di 5v "falsa"....parecchio interessante 
Beh, non è che sia "falsa"
... è la stessa tensione che misureresti con un multimetro collegando una resistenza da 20k (perchè questo è il valore della R interna al micro) in serie tra i 5V e la massa.
Il motivo di tale resistenza è, invece, di fatto un elemento "positivo" per il programmatore.
Detta brevemente, non è mai consigliabile lasciare un pin d'ingresso scollegato (si dice anche "flottante"), perchè avendo un alta impedenza tende a captare tutti i disturbi dell'ambiente circostante, che vengono scambiati per valori LOW o HIGH dal micro, falsando la rilevazione.
Per evitare questo si inserisce sempre una R tra il pin e i 5V (o la massa) per "ancorare" rispettivamente verso HIGH (pullup) o LOW (pulldown) l'ingresso quando non è presente alcun segnale, eliminando cosi la sensibilità ai disturbi. Dato che questa R è praticamente d'obbligo, hanno pensato bene di inserirla all'interno del micro, attivandola a comando, per evitare di inserirla esternamente.
L'attivazione avviene, appunto, tramite il comando digitalWrite(), cosi si avrà un codice del tipo:
pinMode(pin, INPUT);
digitalWrite(pin, HIGH);
Dato, però, che la sequenza appare alquanto "innaturale" e poco intuitiva, nell'ultima versione dell'IDE hanno pensato di integrare questa possibilità direttamente all'interno di pinMode()...come puoi vedere chiaramente qui pinMode() - Arduino Reference.
Spero di esserti stato d'aiuto. Ciao
grazie mille a tutti!! 8)