PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wieviel Strom kommt aus den I/O Ports der Megas



Gock
05.12.2006, 18:07
Hi Leute!
Ich brauche jetzt mal Klarheit:
Die inoffizielle Standardbeschaltung von LEDs an I/O-Ports der ATMegas ist:
LED über Widerstand an Vcc und mit Kathode an den I/O Port. Ist der Port ein OUTPUT und LOW (0), dann geht die LED an, andernfalls aus. So sieht man es fast überall.
Ich will mir aber die Widerstände sparen und mag auch die negierte Logik nicht. Deshalb habe ich im Datenblatt nachgesehen (Mega32) und lese da:
"Although each I/O port can source more than the test conditions (20 mA at Vcc = 5V, 10 mA at Vcc = 3V) under steady state conditions (non-transient), the following must be observed: [...]"

Frage:
Wenn ich einen I/O Port auf OUTPUT schalte und ihn auf HIGH lege und an ihn eine LED (Anode) mit Vorwiderstand anschließe, liefert er dann die gewünschten 20mA?
Und würde er tatsächlich mehr bei entsprechendem Verbraucher liefern?
Wenn ja, warum macht das keiner (dessen Schaltung mir vorliegt)?
Und: Sehe ich das richtig, dass die internen Pull-Ups eigentlich nur benötigt werden, wenn man einen Open-Collectorausgang einlesen möchte?
Danke schonmal im Voraus,
Gock

pandadriver
05.12.2006, 18:32
Die internen Pull-ups dienen dazu, dass wenn der Ausgang high ist, dass dann die Betriebsspannung am Pin anliegt. Wenn du nun eine LED dranhenkst, kann es sein, dass dieser Widerstad zu gross ist, und der Ausgang somit nicht genug Strom liefern kann. Da ich es aber noch nie ausprobiert habe, weiss ich aber auch nicht, wie gross dieser Widerstand ist. Vielleicht geht es problemlos. Aber dann musst du schauen, das nicht zu viele Ausgänge gleichzeitig high sind, sonst lebt dein Controller nicht lange. Im Datenblatt muss irgendwo eine Angabe stehen. Die beste Art der LED-Ansteuerung ist aber immer noch mittels Treiber. Ob einzelne Transstoren, Arrays, oder fertige Treiber-ICs ist jedem selbst überlassen.

waste
06.12.2006, 00:04
Frage:
Wenn ich einen I/O Port auf OUTPUT schalte und ihn auf HIGH lege und an ihn eine LED (Anode) mit Vorwiderstand anschließe, liefert er dann die gewünschten 20mA?Ja, das ist kein Problem.

Und würde er tatsächlich mehr bei entsprechendem Verbraucher liefern? Bei entsprechender Last kann der ATMega auch mehr. Aber es ist pro I/O Port nicht mehr als 40mA erlaubt und bei Belastung mehrerer Ausgänge darf die Summe bestimmte Werte nicht überschreiten. Die Stelle im Datenblatt hast du ja schon gefunden.

Wenn ja, warum macht das keiner (dessen Schaltung mir vorliegt)? Das wird bestimmt öfters gemacht. Hab ich auch schon.

Und: Sehe ich das richtig, dass die internen Pull-Ups eigentlich nur benötigt werden, wenn man einen Open-Collectorausgang einlesen möchte? Das ist z.B. ein Grund. Ein anderer Grund könnte sein, bei nicht benutzten Pins floatende Eingänge zu vermeiden für einen geringeren Stromverbrauch.

Waste

Gock
06.12.2006, 13:38
Hallo!
@ Pandadriver

[...] wenn der Ausgang high ist, dass dann die Betriebsspannung am Pin anliegt.
Das wäre meine Befürchtung gewesen, nach Wastes Antwort wissen wir nun aber, dass es glücklicherweise nicht so ist. Denn wenn der Pin ein Ausgang ist, dann sind die PullUps ausgeschaltet. Daher verwendet man PullUps nur so, wie Waste schrieb.
Der PullUp selbst hat zwischen 20 und 50 kOhm (laut Datenblatt), was zu einem lächerlichen Strom von 0,25-0,1mA führt. Damit bringt man nichts zum leuchten. Der Gesamt-Ausgangsstrom pro Controller liegt aber bei satten 400mA, was mit den PullUps nicht erreichbar ist.

Die beste Art der LED-Ansteuerung ist aber immer noch mittels Treiber.
Warum? Ich sehe dazu keinen Grund.

@ Waste
Also doch. Ich war unsicher, weil man bei verschiedenen Quellen immer wieder die negierte Schaltung mit Vorwiderstand sieht und ich das früher auch so gemacht habe. Ich denke, das liegt daran, dass die alten AT90SXXXX Controller keine größeren Ströme liefern konnten, die Megas aber schon. Ich wollte es genau wissen, weil ich eine etwas größere Platine plane, ohne Vorwiderstände und ohne negierte Logik.
Also Danke Euch beiden,
Gruß Gock

waste
06.12.2006, 14:22
Also ohne Vorwiderstand geht es nicht. Da ist der Strom bestimmt über den erlaubten 40mA pro Pin.

Waste

Gock
06.12.2006, 14:26
Ja iss klar, ich dachte an 5V Verbraucher anderer Art oder an eine angemessene Betriebsspannung des AVR.
Gruß

pandadriver
06.12.2006, 18:29
Die beste Art der LED-Ansteuerung ist aber immer noch mittels Treiber.

Warum? Ich sehe dazu keinen Grund.

Wenn du an jedem Ausgang eines Ports eine LED mit 20mA zum leuchten bringen willst, was bleibt dir dann anderes übrig?

Gock
06.12.2006, 19:40
Laut Datenblatt kann ein einzelner Port 200mA sourcen, vorrausgesetzt alle anderen driven nicht mehr als insgesamt weitere 200mA. 8x20mA macht nur 160mA! Wo ist das Problem?
Außerdem müssen es pro LED ja auch nicht gleich 20mA sein, es genügen bei manchen bereits 5-10 oder sogar noch weniger (low current).
Insgesamt kann man also 20 LEDs mit einem Mega steuern (bei 20mA/LED)
Gruß

SprinterSB
06.12.2006, 19:53
Der PullUp selbst hat zwischen 20 und 50 kOhm (laut Datenblatt), was zu einem lächerlichen Strom von 0,25-0,1mA führt. Damit bringt man nichts zum leuchten.

Wer behauptet denn sowas? ;-)

Ich benutze in einer Applikation eben diese Pullups, um LEDs zu leuchten zu bringen, sogar in einer 1:4-PWM, also mit ca. 1/4 der Helligkeit. Die so angesteuerten LED dienen in einer LED-Matrix jedoch nur zur Orientierung und nicht zur eigentlichen Anzeige.

Insgesamt gibt es 27 LEDs ohne Treiber.

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=22760

Gock
06.12.2006, 22:19
Wer behauptet denn sowas?
Wie bereits gesagt, das behauptet Atmel, also diejenigen, die diese Dinger bauen ;-) (Siehe neuestes Datenblatt ATMega32 (2503J–AVR–10/06) S. 287)
Da ich denen das glaube, frage ich mich, ob wir beide vom Gleichen reden.
Verstehe ich Dich richtig?:
Du hast die Pins, an denen Deine LEDs (möglicherweise ohne Vorwiderstand) hängen als EINGANG definiert und schaltest sie HIGH (um die PullUps zu aktivieren), damit die LEDs leuchten?
Oder hast Du sie nicht doch als AUSGANG definiert?

Insgesamt gibt es 27 LEDs ohne Treiber.
Ja, das ist wie gesagt nicht ungewöhnlich, solange der Gesamtstrom unter 400mA bleibt. Aber nur mit internen PullUps? Das müssten schon sehr helle LEDs sein...Welche hast Du denn verwendet?
Gruß

SprinterSB
06.12.2006, 23:29
Der "normale" LED-Betrieb ist wie gewohnt, also mit Vorwiderstand.

Bei einigen LED wird aber -- genau wie du schreibst -- der Port auf IN+Pullup geschaltet, damit sie leuchten bzw. glimmern. Die in der Schaltung eingebauten Widerstände kommen noch dazu.

Es sind Super-Flux. Bis zu 9 Stück gleichzeitig pro Port und dennoch bleibe ich unter 20mA.

Ein LED ohne Vorwiderstand (bzw. Strombegrenzung) zu betreiben sollte man sich genau überlegen und die Datenblätter schauen -- wowohl LED als auch (Port-)Treiber.

Ne LED ohne Vorwiederstand zB per PWM mit ihrem durchschnittlichem Strom zu versorgen ist etwa so, als würdest du ne Minute in kochendem Wasser schwimmen, dann 5 Minute in Eiswasser und behaupten das sei angenehm.

Gock
06.12.2006, 23:57
LED ohne Vorwiderstand zu betreiben ist natürlich Käse, aber die PullUps sind ja dann die Vorwiderstände. Sonst hättest Du ja nichts gespart.
Der Vergleich mit dem Eiswasser hinkt geringfügig, da es bei den "normalen" LEDs (nicht die ultrahellen) gängige Methode ist, sie durch Pulsung heller zu machen, ohne die Lebensdauer stark zu verkürzen. Aber das nur am Rande.
Jedenfalls interessant, dass die Superfluxis schon bei derart geringen Strömen glimmen.
Gruß