Hinweis : Wie andere bereits betont haben, sollten absolute Höchstbewertungen niemals absichtlich erreicht werden. Sie sind die bekannte Fehlerstelle des Chips. Sie bieten jedoch einen sehr nützlichen Entwurfspunkt, um zu verstehen, wie weit Sie von diesem Maximum entfernt sind. Diese Antwort konzentriert sich auf die Lösung der Überreste dieses Designproblems - nämlich wie weit sollte man von diesem Maximalwert entfernt sein (und warum).
Bei der Dimensionierung des Ausgangsstroms in statischen Situationen sind zwei große Probleme zu berücksichtigen : Spannungsausgang und Wärmeausgang.
Spannungsausgang
Wenn Sie den Ausgangsstrom erhöhen, beginnt die Ausgangsspannung aufgrund der endlichen Ausgangsimpedanz des Ausgangstreibers des GPIO-Pins zu "versagen" (größer als erwartet für einen Ausgang "niedrig" und niedriger als erwartet für einen Ausgang "hoch") . Dies wiederum stört den Q-Punkt Ihrer am Ausgang angeschlossenen Schaltung.
Dies ist besonders interessant bei stark nichtlinearen Geräten wie LEDs. Wenn Sie die Spannung, die Sie an eine LED anlegen, ein wenig ändern, ändert sich der Strombedarf im Verhältnis viel mehr.
Dies führt zu dem allgemeinen Prinzip, dass die Ausgangsspannung nicht mehr als 10% "fehlerhaft" sein soll (um Ihr Konstruktionsleben zu vereinfachen).
Um sich den absoluten Höchstwerten anzunähern, müssen Sie einen Fehler von> 60% in Ihrer Ausgangsspannung erleiden. Tatsächlich zeigen die Spezifikationen für Ihre MCU nicht einmal, wie viel Fehler bei diesem Ausgangspegel auftreten würde.
Sie würden so etwas wie 1V von einem Ausgang "hoch" von einem 3V VCC erhalten. Dieser Pegel ist nicht hoch genug, um anderen Geräten (in digitalen Systemen) zuverlässig "hoch" zu signalisieren.
Ich habe diese Zahl aus Ihrem Datenblatt-Link extrahiert:
Zur Auslegung der Strombegrenzung (hier bei Vcc = 3): 3 - 0,1 (3) = 2,7
Bei 2,7 V liegt die Nennstrombegrenzung bei 8 mA - das ist etwas weniger als erwartet von * 30 * mA ... ;-)
Interessanter Hinweis aus der Gerätephysik ist, dass die n-Seite (niedrige Seite) in fast jedem CMOS-Ausgangstreiber, den ich mir angesehen habe, etwas stärker ist als die p-Typ-hohe Seite. Dies liegt daran, dass sich Elektronen (der Majoritätsträger im n-Typ-FET) etwa doppelt so leicht durch den Kanal bewegen wie Löcher (der Majoritätsträger in p-Typ-FETs). Um dies zu kompensieren, verdoppeln die Chiphersteller die Größe des p-Transistors (ungefähr), bis die Leistung des Treibers ungefähr symmetrisch ist, aber die Low-Side behält normalerweise einen leichten Vorteil (<10% Vorteil).
Dieser Fall ist keine Ausnahme ...
Sie können in dieser Figur sehen, dass 0 + 0,1 (3) = 0,3 V -> 9 mA, ungefähr 10% größer als die vorherigen 8 mA.
Daher sollten Sie Ihre LEDs nach Möglichkeit in Ihren Chip einbauen . Das heißt, gestalten Sie sie so, dass der Ausgang niedrig = LED leuchtet. Etwas wie das:
Wärmeleistung
Hohe Ströme im Pin-Treiber = Wärme (offensichtlich). Hitze ++ -> Katastrophe. GPIO-Treiberschaltungen sind normalerweise aus geometrischen Gründen gleichmäßig um den Umfang des Chips verteilt (häufig bestimmen sie die Mindestgröße des Chips).
Bei diesem Atmel-Chip (ATMEGA8, siehe unten) sind sie es mit Sicherheit. Die GPIO-Schaltungen sind um die dunkelblauen Drahtbindungsstellen im Cyanring um die (dunklen) Logik- und Speicherbereiche in der Mitte gruppiert.
Dies ist alles nur eine Grenzschätzung und leicht von Hand gewellt, aber beim Engineering geht es darum, Dinge zu erledigen, also geht es weiter ... ;-)
Die Verwendung benachbarter Pins bei hohen Strompegeln sollte zu einer zumindest linearen Leistungsreduzierung führen.
Wenn Sie davon ausgehen, dass das Teil die Wärme ungefähr gleichmäßig verteilt (faire Annahme für Ihre kleine Matrize), können Sie eine Annäherung erster Ordnung erhalten, indem Sie von der absoluten Maximalleistung (40 mA) rückwärts arbeiten und davon ausgehen, dass der benachbarte Stift 100% der Wärme teilt Wärmebelastung.
Das heißt, wenn Sie einen 40-mA-Ausgang haben (tun Sie dies nicht wirklich), sollten seine unmittelbaren Nachbarn bei 0 mA liegen. 20mA Ausgang -> 10mA Nachbarn, etc ...
Wenn ich es gut genug erklärt habe, sollte jetzt klar sein, dass Sie das Minimum zwischen den beiden Methoden auswählen.