Atmega328 / Arduino Uno - Max 200mA

Hallo Leute :sunglasses:

Ich habe da mal ein paar Fragen.
Der Atmega328 des Arduino Uno's verträgt ja maximum 200mA und pro Pin maximum 40mA.

  • wie sieht das ganze aus, wenn ich ein Shift Register ( 74HC595 ) nutze
  • kann man dagegen etwas tun, das man mehr als 200mA nutzen kann
  • das gleiche wie oben nur mit mehr als 40mA pro Pin

Ich möchte mir eine art kleinen Bilderrahmen aus Holz bauen mit Schubladen von 3x3. Das ergibt dann 9x LED's und die benötigen 3 Pins für die RGB ansteuerung also 9x3 = 27 Pins. Dafür benötige ich 4 Shift Register die ich in einer Reihe schalten möchte oder vielleicht jewals 2 in einer Reihe. Was muss ich dort beachten bzw. kann mir jemand bei mein Vorhaben eventuell helfen ?

Kurze Nebenfrage: Kann ich mithilfe eines Arduino Uno's als ISP Programer auch einen eigenen Bootloader auf einen neuen Atmel328P brennen ? ( das gleiche gillt dann für Programme, die ich dann mit C schreiben möchte, ohne das Arduino IDE rein zum mal ausprobiert haben )

Vielen lieben Dank im vorraus !

Die 200mA solltest du nicht ausnutzten, auch wenn es möglich ist. Außerdem gibt es auch noch eine Begrenzung für die I/O Ports:

  • Stromsenke:
    ** PC0 - PC5, ADC6, ADC7 -> nicht mehr als 100mA
    ** PB0 - PB5, PD5 - PD7 -> nicht mehr als 100mA
    ** PD0 - PD4 -> nicht mehr als 100mA
  • Stromquelle:
    ** PC0 - PC5, D0-D4, ADC7 -> nicht mehr als 150mA
    ** PB0 - PB5, PD5 - PD7, ADC6 -> nicht mehr als 150mA

Der 75HC595 treibt noch weniger Strom. 8,75mA pro Pin. Wenn du mehr Strom willst, brauchst du noch einen ULN2803 pro Schieberegister.

Oder verwende gleiche richtige LED Strips mit WS2812B. Da ist alles schon eingebaut.

Kann ich mithilfe eines Arduino Uno's als ISP Programer auch einen eigenen Bootloader auf einen neuen Atmel328P brennen ?

Ja

  1. Bei dem Atmegas kann jeder Port bis zu 200mA. Der Arduino Uno hat 3 davon. PORTD(D0-7), PORTB(D8-13), PORTC(A0-A5). Genau möchte ich jetzt nicht drauf eingehen. Geringere Stromverträglichkeit ist vorallem bei den nicht 8Bit Ports möglich. Entsprechend im DB nachlesen

  2. Die Spannungsversorgung der Shiftregister kommt doch nicht von der SPI-Schnittstelle. Die Stromversorgung erfolgt über die 5V. Diese solltest du am besten von extern einspeisen. (Netzteil 5V an HC595:5V, Netzteil GND an HC595:GND und Arduino:GND). Vom Netzteil kannst du auch den Arduino direkt speisen. Dann ersparste dir die Verlustleistung des Spannungswandlers.

  3. Zur Nebenfrage, ja, auch wenn ein richtiger ISP aufdauer sinnvoller ist. Beim anderen, keine Ahnung, ob der Arduino unterstütz würde. Ich behaupte er wird im Atmel Studio oder ähnlichen nicht ohne weiteres erkannt. -> Atmel AVRISP mkII

sschultewolter:

  1. Bei dem Atmegas kann jeder Port bis zu 200mA.

Nein. Es sind schon 200mA über Vcc und GND. Das mit den Ports kommt dann noch dazu. Und es ist etwas komplizierter als x mA pro Port. Es gibt sogar einen Unterschied zwischen Stromsenke und Quelle.

Vielen Dank für die vielen schnellen Antworten. Leider kann man es sich auch denken

Vielen Dank für die vielen schnellen Antworten. Leider bin ich noch ein Anfänger un bin gerade überfordert. Wie gesat, ich habe 9 LED's. Wie fange ich da ambesten an ? Wie viel mA verbraucht eine RGB ? Wie viele verbauchen 9 zusammen ? Eine Reihe von Shift Registern möglich ?

Schieberegister passen. Darüber kann man mit einer Library auch PWM machen:
http://www.elcojacobs.com/shiftpwm/
http://www.elcojacobs.com/using-shiftpwm-to-control-rgb-leds-with-arduino/

Normal betreibt man 5mm LEDs mit 10-20mA. Das hängt von der Helligkeit ab die du möchtest. Und auch wie hell deine LEDs überhaupt sind. Es geht aber vielleicht auch weniger. Es kann wie sein, dass du mit <8mA auskommst, wenn dir das hell genug ist. Und moderne LEDs sind eigentlich sehr hell. Dann reichen die SR alleine (wobei die von vielen Leuten wohl auch über der Spezifikation betrieben. Wird sogar in dem zweiten Link erwähnt, und da werden die mit SPI relativ schnell getaktet).

Da musst du einfach mal ausprobieren wie viel Strom du für deine gewünschte Helligkeit brauchst.

Für mehr als 8-9mA kannst du wie gesagt pro SR einen ULN2803 dran bauen:
http://www.ti.com/lit/ds/symlink/uln2803a.pdf
Das sind Darlington Transistor Arrays. Ein IC davon hat 8 Open Collector Transistoren, d.h. bei High am Eingang fließt Strom in den Ausgangs-Pin gegen Masse. Entsprechend bräuchtest du dann auch LEDs mit gemeinsamer Anode. An SR alleine geht auch gemeinsame Kathode.

Sind nicht hei 9 RGB's alle mit 3 internen LED's also 9x3 ( 27 x 20mA = 540 mA ) zuviel für den Atmel ?

Der Strom läuft doch dabei nicht über den Prozessor! Das wäre nur der Fall wenn du die LEDs direkt an den µC anschließt. Der Strom geht entweder über die Schieberegister oder den ULN wenn vorhanden.

Man kann die Schieberegister wohl auch ziemlich überlasten und es geht noch. Aus einem Kommentar von der pwmshift Seite:

If they are just 20mA RGB LEDs, 595’s can drive them directly. It is out of spec according to the datasheet, but it works well in practice. A friend of me recently did a 30mA burn in test on all 8 pins and the 595s were fine.

Wie gesagt, 10mA reichen vielleicht auch. Einfach mal ausprobieren wie hell die dann sind.

Vielen Dank. Ich möchte auch lernen die Hardware zu verstehen. Ich habe Jahre lang programmiert und gehe jetzt Hobbymässig in die Hardware Richtung. Scheinbar habe ich ein Verständnisproblem. Schafft also ein Shift Register 8 Led's auf 20mA ? Oder halt so ähnlich. Und ja, wieso.

Und was macht ein Transistor genau?

Okay ich hatte ein Verständnisproblem. Tut mir Leid, ich stand auf den Schlauch. Das was ich jetzt noch nicht verstehe, ist was ein Transistor tut. Noch eine Frage wäre, kann ich eine RGB Led mit digitalen Pins ansteuern? Habe mal ein Beispielcode gesehen, da wurden digitale Pins verwendet, aber mit analogWrite. Und wäre das noch Kompatibel mit dem Shift Register ?

Leon17:
Vielen Dank. Ich möchte auch lernen die Hardware zu verstehen. Ich habe Jahre lang programmiert und gehe jetzt Hobbymässig in die Hardware Richtung. Scheinbar habe ich ein Verständnisproblem. Schafft also ein Shift Register 8 Led's auf 20mA ? Oder halt so ähnlich. Und ja, wieso.

Und was macht ein Transistor genau?

Nein, ein 74HC595 schafft nicht 20mA an den Ausgängen zu treiben. Dazu kannst Du einen Transistor oder ein Transistorarray ( mehrer Transistoren zB den ULN2803) nach dem Schieberegister schalten. Der Transistor bzw ULN2803 wird mit einem kleinen Strom angesteuert und kann einen größeren Strom (LED) schalten.
Es gibt auch Schieberegister mit Transistorausgängen TPIC6A595 mit Mosfet 350mA Open Drain Ausgängen (schalten nur auf Masse) oder TPIC6B595 mit Mosfet 150mA

Grüße Uwe

Vielen lieben Dank, es kommt langsam immer mehr Licht in den finsternen Wald.

Noch ein paar Fragen:

  • wo kann ich im Datenblatt des 74HC595 nachlesen, wieviel mA pro Pin verwendet werden
  • wo kann man oder woran erkennt man wie viel ein Transistor an mA liefert

Im Datenblatt ???
http://www.mikrocontroller.net/part/74HC595

Seite 6 von 24
70mA MAX => ~8,5mA/Pin

Nehm direkt ein Darlington Array. Dann haste auch keine große Zusatzschaltung.

http://www.mikrocontroller.net/part/ULN2803

Gut wenn 70 mA dann 8,5 mA pro Pin.
Ist das dann automatisch für jeden Pin 8,5 mA oder ist das abhängig wie viele Pins genutzt werden. Z.B. 4 von 8, ist es dann weiter 8,5 mA pro Pin oder 17 mA pro Pin

Ein Pin könnte bis zu 35mA, jedoch maximal 70mA für das ganze Schieberegister. Davon abgesehen, warum verbaust du nicht einfach den von Uwe vorgeschlagenen ULN2803?

Die 35mA sind bei Schieberegister wie auch beim Atmega maximale Ratings. Das heißt auch, man sollte diese nicht vollständig ausnutzen! Alle "Lasten" sollten über Transistoren/Mosefts/... etc angetrieben werden. Das wird man spätestens bei dem ARM sehen. Denn da kannst du die Pins problemlos mit kleinen Leds bereits zum Absturz/Defekt bringen.

wo kann man oder woran erkennt man wie viel ein Transistor an mA liefert

Guckst du bei Reichelt sind die Werte 0,8A 0,625W für den Standard BC337 oder BC338 etwas übertrieben.
Im Datenblatt findest du immer zuerst die "abs. Max." Werte, die immer alle eingehalten werden müssen.
(Und woher die 800mA und 625 mW stammen).
Die empfohlene Umgebung ist eher aus den weiteren Werten zu entnehmen. Da siehst du z.B. , dass der Verstärkungsfaktor bei Ic = 100mA deutlich höher ist als bei 500mA.

Generell findest du bei Transistoren im TO92 Gehäuse üblicherweise Werte um die 100 mA.

Die Wärme aus der Verlustleistung Ic * VCE im gesättigten Bereich ist üblicherweise das Limit.

Bei höheren Strömen empfehlen sich Logik-Level MOSFET, die bereits bei einer Gate Spannung von 5V Ströme von einigen Ampere vertragen. Dort findet man üblicherweise RDS, um die Wärmeentwicklung bei Stromfluss abschätzen zu können.

Wobei das beim ULN2803 wesentlich komplizierter ist. Da steht zwar 500mA dabei, aber das ist nur für entweder einen geringeren Tastgrad bei PWM oder wenn man nicht alle Kanäle gleichzeitig nutzt.
Wenn man mehr Kanäle verwendet sinkt das ganz gewaltig. Siehe Diagramm Mittle Links auf Seite 5:
~~http://www.unisonic.com.tw/datasheet/ULN2803.pdf~~
20mA * 8 sind aber machbar. Vor allem wenn man shiftPWM verwendet. Und wie gesagt werden auch weniger als 20mA hell genug sein.

Ok, wenn ich das richtig verstehe, dann kann ich - wenn ich festlege, dass ich alle 8 Kanäle verwenden will - nur insgesammt maximal 140mA aus dem Teil ziehen??

Damit kann man dann doch keine Matrix multiplexen, wenn man nur 20 mA pro Pin da raus kriegt.
Vorallem dann nicht, wenn man die Spalten multiplext.

Selbst wenn ich ein Duty Cycle von unter 20% habe kann ich da dann bloß 50 mA raus ziehn.

Und so ein Ding verwendet man zum Multiplexen von LED Matrixen o_O erstaunlich,
wenn man da dann noch was sieht.

Da baue ich mir dann lieber "fette" Mosfet- Transistor-Schaltungen, kann Ströme von über 0.1A bereitstellen und muss dabei noch nichtmal wirklich eine Abfallende CE Spannung beachten.

Addi2438:
Ok, wenn ich das richtig verstehe, dann kann ich - wenn ich festlege, dass ich alle 8 Kanäle verwenden will - nur insgesammt maximal 140mA aus dem Teil ziehen??

Damit kann man dann doch keine Matrix multiplexen, wenn man nur 20 mA pro Pin da raus kriegt.
Vorallem dann nicht, wenn man die Spalten multiplext.

Selbst wenn ich ein Duty Cycle von unter 20% habe kann ich da dann bloß 50 mA raus ziehn.

Und so ein Ding verwendet man zum Multiplexen von LED Matrixen o_O erstaunlich,
wenn man da dann noch was sieht.

Würde ich auch nur für einfache Matrizen nutzten. Ansonsten Mosfets oder direkt MAX72122/99 oder noch größrt fir MAX6952