Nota : come altri hanno sottolineato, i punteggi massimi assoluti non dovrebbero mai essere avvicinati intenzionalmente. Sono il punto di errore noto del chip. Tuttavia, forniscono un punto di progettazione molto utile per capire quanto sei lontano da quel massimo. Questa risposta si concentra sulla risoluzione di ciò che resta di quel problema di progettazione - vale a dire, quanto lontano si dovrebbe essere da quel valore massimo (e perché).
Ci sono due grandi problemi da considerare nel dimensionare la corrente di uscita in situazioni statiche : uscita di tensione e uscita termica.
Uscita di tensione
All'aumentare della corrente di uscita, la tensione di uscita inizierà a "non funzionare" (maggiore del previsto per un'uscita "bassa" e inferiore del previsto per un'uscita "alta") a causa dell'impedenza di uscita finita del driver di uscita del pin GPIO . Questo, a sua volta, disturberà il punto Q del circuito collegato in uscita.
Ciò è particolarmente interessante nel caso di dispositivi altamente non lineari come i LED. Se si modifica un po 'la tensione che si applica a un LED, la domanda attuale cambia molto di più in relazione.
Ciò porta al principio generale secondo cui si desidera che la tensione di uscita "errore" non oltre il 10% (per semplificare la vita del progetto).
Per avvicinarti ovunque ai massimi assoluti dovrai subire un errore del 60% nella tensione di uscita. In effetti, le specifiche della tua MCU non mostrano nemmeno quanti errori ci sarebbero a quel livello di output.
Otterresti qualcosa come 1V da un'uscita "alta" da un VCC a 3V. Quel livello non è abbastanza alto da segnalare in modo affidabile "alto" ad altri dispositivi (nei sistemi digitali).
Ho estratto questa figura dal link del tuo foglio dati:
Per progettare il limite corrente (qui, dato Vcc = 3): 3 - 0.1 (3) = 2.7
A 2,7 V, il limite di corrente nominale è 8 mA, ovvero un po ' meno delle aspettative di * 30 * mA o giù di lì ... ;-)
La nota interessante della fisica dei dispositivi è che il lato n (lato basso) in quasi tutti i driver di output CMOS che ho visto è un po 'più forte del lato alto di tipo p. Questo perché gli elettroni (il vettore di maggioranza nelle FET di tipo n) si muovono attraverso il canale circa due volte più facilmente dei fori (il vettore di maggioranza nelle FET di tipo p). Per compensare, i produttori di chip raddoppiano (approssimativamente) le dimensioni del transistor di tipo p fino a quando le prestazioni del driver sono approssimativamente simmetriche, ma la parte bassa di solito mantiene un leggero (<10% di vantaggio) anche così.
Questo caso non fa eccezione ...
In questa figura puoi vedere che 0 + 0,1 (3) = 0,3 V -> 9 mA, circa il 10% in più rispetto agli 8 mA in precedenza.
Quindi, se possibile, è necessario installare i LED che puntano nel chip. Cioè, progettali in modo che l'uscita sia bassa = LED illuminato. Qualcosa come questo:
Potenza termica
Correnti elevate nel driver del pin = calore (ovviamente). Calore ++ -> disastro. I circuiti del driver GPIO sono generalmente distribuiti uniformemente intorno alla periferia della matrice per necessità geometrica (spesso determinano la dimensione minima della matrice).
Nel caso di questo chip Atmel (ATMEGA8, vedi sotto), lo sono sicuramente. I circuiti GPIO sono raggruppati attorno ai siti di legame del filo blu scuro nell'anello ciano attorno alla logica (scura) e alle aree di memoria al centro.
Questa è solo una stima al contorno e leggermente ondulata a mano, ma l'ingegneria riguarda il fare le cose, quindi ecco qui ... ;-)
L'uso di pin vicini ad alti livelli di corrente dovrebbe comportare un declassamento almeno lineare.
Se si presume che la parte distribuisca il calore in modo approssimativamente uniforme (presupposto corretto per il proprio dado piccolo), è possibile ottenere un'approssimazione del primo ordine lavorando all'indietro dalla valutazione massima assoluta (40 mA) e assumendo che il pin vicino condividerà il 100% del carico di calore.
Ciò significa che se si dispone di un'uscita da 40 mA (in realtà non farlo), i suoi vicini immediati dovrebbero essere a 0 mA. Uscita 20 mA -> 10 mA vicini, ecc ...
Se ho spiegato abbastanza bene, allora dovrebbe essere chiaro che scegli il minimo tra i due metodi.