Attiny 841 - Strombelastung Ausgang

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Hallo
habe das Datenblatt vom Attiny 841 studiert und bin genau so schlau wie vorher.
Im Internet findet man Schaltungen mit Ati 841 mit Vorwiderständen zwischen 1,5 und 2 KOhm. Das bedeutet der Ausgang verträgt 2 mA. Sonst vertragen sie doch 20 mA. Was stimmt den?
Achim
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.290
141
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo Achim!

Es kommt darauf an, welchen PORT du nutzt und das ist dann noch abhängig von der Betriebsspannung VCC und ob du Sink oder Source Current hast.

Bei Low Ausgängen:
Ports with standard sink strength: PORTA6, PORTA[4:0], PORTB[2:0]
Ports with high sink strength: PORTA7, PORTA5


Das sind nun so viele Möglichkeiten, dass man es nicht pauschal sagen kann, wie ein Portpin belastbar ist.

Die Werte findest du im Kapitel DC Characteristics.

Beispiel:
PA0, VCC 5V: Source Current max. IOH = -10mA

Beachten musst du ggf. noch den Gesamtstrom eines Ports oder aller Ports.

Ich würde nicht danach gehen, was andere für Vorwiderstänge zu Peripheriebereichen verwenden, sondern die Werte aus dem Datenblatt beachten.

Dirk :ciao:
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Das hatte ich befürchtet. Werde einfach Vorwiderstände nach VCC nehmen und die LEDs nach GND schalten. Werde mich dann mit 2mA begnügen müssen und kann nicht so stark geblendet werden. Danke für die Info.
achim
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.363
61
48
Marwitz
Sprachen
BascomAVR, Assembler
Sonst vertragen sie doch 20 mA. Was stimmt den?
Hatte ich schonmal erwähnt, daß unter anderen der ATtiny441/841 recht "speziell" ist?

So findet sich zB die, bei den TPI- und X-Tinies typische Pullup-Ansteuerung.
Die ganz alten (AT90S...usw) AVR hatte übrigens keine symmetrische Charakteristik, das ist eher bei den halbwegs moderneren AVR der Fall. Die 20mA sind (selbst da) nur ein grober Richtwert - es kommt zB auch auf die Versorgungsspannung an.

Werde mich dann mit 2mA begnügen müssen
Nur, wenn Du mit der Versorgungsspannung auf 1,8V runter gehst...

Abgesehen vom Reset-Pin verträgt jedes Bein:
  • 10mA bei 5V Spannungsversorgung (Sink und Source)
  • 5mA bei 3V Spannungsversorgung (Sink und Source)
  • 2mA bei 1,8V Spannungsversorgung (Sink und Source)
Abweichend davon können A5 und A7 (High Sink Pins) mehr Strom aufnehmen/nach Gnd ableiten:
  • 20mA bei 5V Spannungsversorgung (High Sink)
  • 10mA bei 3V Spannungsversorgung (High Sink)
  • 4mA bei 1,8V Spannungsversorgung (High Sink)
Im Port High Drive Enable Register (PHDE) können diese beiden Pins sogar (jeder für sich) für extra "große" Ströme aufgeschaltet werden (Extra High Sink), die sie dann aufnehmen können:
  • 20mA bei 5V Spannungsversorgung (Extra High Sink)
  • 20mA bei 3V Spannungsversorgung (Extra High Sink)
  • 8mA bei 1,8V Spannungsversorgung (Extra High Sink)
 
Zuletzt bearbeitet:

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Da muss ich die Hardware wohl noch mal überdenken. Vorher muss ich aber noch einiges klären.
Was soll es machen oder was kann es machen:

- Ausgang (Pin) soll eine LED schalten zur Anzeige nach GND ???
- Ausgang (Pin) soll eine LED schalten zur Anzeige nach Vcc ???
- Eingang (Pin) soll einen Taster abfragen, Taster dabei nach Vcc oder GND oder definierter Zustand z.B. Vcc nach GND ziehen ???
- Ausgang (Pin) soll auf einer anderen Platine einen Pin schalten ???
- Widerstände (intern) schalten nach Vcc oder GND ???

Einige Pins sind durch den I2C Bus oder ISP belegt. Kann jetzt nicht sagen welcher Pin frei ist. Da der 841 "so eigen" ist müssen wir erst mal klären was Sinn macht.
Der 841 soll dabei als eigenständiger Slave am Bus arbeiten, eigene Aufgaben und Programme ausführen, andere ICs z.B. Schrittmotor ansteuern oder Sensoren ohne I2C auslesen.
achim
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Habe den Entwurf meiner kleinen Platine mit dem Attiny 841 angesehen. Nach Abzug der Pins für den I2C Bus und den ISP Anschlüssen bleiben frei:
- PA 0
- PA 1
- PA 2
- PA 3
- PA 7
- PB 2
die Betriebsspannung beträgt 5V. Da werde ich mal das Datenblatt ansehen. Vielleicht hat jemand eine Idee dazu.
achim
 

TommyB

Team Bitschubse
Premium Benutzer
17 Mai 2010
2.151
80
48
36
127.0.0.1 ;)
Sprachen
C#, VB.Net, LunaAVR, Assembler, Python
Traditionell schaltet man zu GND. Also VCC - LED+Rv - µC. Dran denken dass 1 dann aus und 0 an ist, also invertiert. Eingänge ebenfalls, Pin - Taster - GND. Hat den Vorteil dass man die internen PullUp's (der Name sagt es schon, die ziehen auf VCC) nutzen kann. Bei I2C wird für die Kommunikation auch nur runter gezogen, also gen GND, und irgendwo sitzen die PullUp's im Bus. Abgesehen von I2C kann man das natürlich auch anders umsetzen, ist je nach Anwendungsfall auch sinnvoll.
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Nach Datenblatt gibt es Ausgänge mit Standard, High und extra High. Damit sind Ströme von ca. 10 mA bis 20 mA bei 5V möglich. Da werde ich dann alles einheitlich auf 2 mA mit einem R von ca. 1KOhm legen.
Hallo Thomas
Das mit den Ausgängen ist jetzt klar. Wie meinst du das mit den Eingängen. Hab es bei den anderen Prozessoren immer so gemacht - Vcc - R (4,7K) - Pin Prozessor - Taster nach GND. Damit verhindere ich das der Pin während der Taster Betätigung in der Luft hängt. Ist das noch sinnvoll oder sollte ich darauf verzichten?
achim
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.290
141
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hab es bei den anderen Prozessoren immer so gemacht - Vcc - R (4,7K) - Pin Prozessor - Taster nach GND. Damit verhindere ich das der Pin während der Taster Betätigung in der Luft hängt. Ist das noch sinnvoll oder sollte ich darauf verzichten?
Wenn du den internen Pullup-Widerstand aktivierst, benötigst du keinen externen Widerstand.
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Der Ursprungsgedanke war dabei, das ich den Widerstand nicht vergesse und dadurch undefinierte Fehler bekomme.
 

TommyB

Team Bitschubse
Premium Benutzer
17 Mai 2010
2.151
80
48
36
127.0.0.1 ;)
Sprachen
C#, VB.Net, LunaAVR, Assembler, Python
Wenn du den internen Pullup-Widerstand aktivierst, benötigst du keinen externen Widerstand.
/sign.
Den PullUp musst du denn aktivieren, sonst (oder für Controller die keinen haben) ist dein Vorhaben das Richtige. Für AVR's normalerweise nicht benötigt.
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.363
61
48
Marwitz
Sprachen
BascomAVR, Assembler
Traditionell schaltet man zu GND
Traditionell waren eben die Ports nicht symmetrisch (ALABEL könnte jetzt möglicherweise was über NPNs, PNPs und Transistoren im allgemeinen erzählen) - die meisten derzeit üblichen AVR sind symmetrisch, und somit spielts keine Rolle. Die Ports beim Tiny441/841 sind erstmal auch symmetrisch, nur eben schwächer. Lediglich bei zwei Beinen kannst Du mehr Strom in den Controller (und a nach Gnd) fließen lassen.
- Eingang (Pin) soll einen Taster abfragen, Taster dabei nach Vcc oder GND oder definierter Zustand z.B. Vcc nach GND ziehen ???
- Widerstände (intern) schalten nach Vcc oder GND ???
In der Digitalelektronik hast Du nur zwei Pegel - Hi/Lo bzw Vcc/Gnd bzw an/aus bzw 1/0...
Bei unbetätigtem Taster soll ein Zustand anliegen, bei betätigtem der andere. Wenn der Taster ein Wechsler ist, kannst Du das genau so schalten
Code:
Vcc----
      `---Eingang
Gnd----
Wenn Du nur einen Öffner/Schließer nutzen willst, kannst Du einen Pegel über einen Pull-Widerstand an den Eingang legen, und den anderen Pegel durch den Taster erzwingen. Wohin gepullt, und wohin gezwungen wird ist egal. Die AVR haben aber keine internen Pulldowns;)
- Ausgang (Pin) soll eine LED schalten zur Anzeige nach GND ???
- Ausgang (Pin) soll eine LED schalten zur Anzeige nach Vcc ???
- Ausgang (Pin) soll auf einer anderen Platine einen Pin schalten ???
Wo liegt für den Controller der Unterschied zwischen einer LED und einem Pin auf einer anderen Platine?

Da der 841 "so eigen" ist müssen wir erst mal klären was Sinn macht.
Was WILLST Du denn mit dem machen?

Der 441/841 bietet Dir viele Möglichkeiten, die Du mit anderen Controllern (zumindest der Tiny-Klasse) nicht hast:
  • neben dem internen 8MHz-Oszillator steht ein ULP-Oszillator (32..512kHz) zur Verfügung, Du kannst zur Laufzeit(!) beliebig wechseln
  • ein 8bit und zwei 16bit-Timer mit je zwei OC-Units
  • 8 (acht) PWM-fähige Pins (darunter die beiden high-Sink-Pins), die gleichzeitig durch die sechs OC-Units verwendet werden können
  • zwei UARTS (die auch als SPI-Master betrieben werden können)
  • ein SPI
  • ein Slave-TWI
  • differentieller 10-Bit-ADC mit 1x/20x/100x Gain Amplifier und "Temperatursensor"
  • zwei Analog-Comperatoren (mit einstellbarer Hysterese)
Die acht PWM-Pins lassen sich in Grenzen flexibel auf die OC-Units "schalten" (sogar mehrere Pins auf dasselbe Unit) - zumindest nicht so festgelegt, wie bei anderen konventionellen Tinies.
Ebenso lassen sich USART0 oder das SPI auf andere Beine umschalten (und zwar auch zur Laufzeit)
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Eigentlich besteht die Antwort aus 3 Platinen. Der Grundaufbau ist soweit gleich was den Prozessor, ISP und Bus Klemmen betrifft. Der erste soll einen zusätzlichen 10 poligen Buchsenstecker haben um eine Zusatzplatine anzuschliessen. Damit soll der Anschluss eines Schrittmotors oder ähnliches nicht Busfähigen Teils erfolgen. Bei der zweiten Platine kommen ein paar Taster und LEDs und zusätzlich Adressstecker für den Bus. Das soll eine Anzeige und Tasterplatine am Bus oder Solo werden. Die dritte Platine soll wieder ein paar Taster und LEDs haben und zusätzlich einen Regler für einen ADC Eingang. Jede Platine soll entweder am Bus oder separat betrieben werden können.
Damit kommen wir zur nächsten Frage. Was ist der günstigste Eingang um ADC zu messen. Eine Umschaltung zwischen verschiedenen Pins braucht dabei nicht zu erfolgen, wohl aber mit einem 1x/20x/100x Gain Amplifier. Referenzeingang 4V dabei nicht vergessen. Kannst du was mit meinen Angaben anfangen?
achim
 

TommyB

Team Bitschubse
Premium Benutzer
17 Mai 2010
2.151
80
48
36
127.0.0.1 ;)
Sprachen
C#, VB.Net, LunaAVR, Assembler, Python
:offtopic:
In der Digitalelektronik hast Du nur zwei Pegel - Hi/Lo bzw Vcc/Gnd bzw an/aus bzw 1/0...
Ganz streng genommen stimmt das nicht mehr so ganz, zumindest bei Flash Speichern, die ggf. nur "halb" geladen werden.
Erinnert mich an meinen lieblings-Roboter "Bender":
Ich hatte einen furchtbaren Traum...
Einsen und Nullen überall.
Alles war perfekt.
Aber dann...
Aber dann!!!
ich glaubte...
ICH HABE EINE ZWEI GESEHEN!!!
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.363
61
48
Marwitz
Sprachen
BascomAVR, Assembler
Was ist der günstigste Eingang um ADC zu messen.
???
Im single Ended spielt der verwendete Kanal quasi keine Rolle, Du kannst also anhand der anderen nötigen alternativen Funktionen entscheiden. Oder was das beste für's Layout ist. In der Praxis spielen dann natürlich noch Störgrößen auf anderen Leitungen in der Nähe mit rein...
Differential ended mißt Du ja immer 'ne Differenz zwischen zwei Kanälen (und kannst da zusätzlich verstärken) - und da sind eben nicht alle 12x12 Kombinationen wählbar. Die meisten Kombinationsmöglichkeiten scheint ADC3 zu bieten gegen 0, 1, 2, 4, 5, 6, 7.
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Habe meine Schaltung angesehen. PA3 (ADC3) ist frei. Werde es mit einem Poti von ca. 50 KOhm belegen. Damit kann ich dann die Spannug zwischen 0V (GND) und 5V (Vcc) einstellen. In dem Beispiel iost dann och 2x 10kOhm Widerstände in Reihe zwischen GND und Vcc geschaltet. Die mittlere Spannung ca. 2,5V wird auf den PA4 gelegt. Mit PA5 wird dann eine LED geschaltet.
achim
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.363
61
48
Marwitz
Sprachen
BascomAVR, Assembler
Die mittlere Spannung ca. 2,5V wird auf den PA4 gelegt. Mit PA5 wird dann eine LED geschaltet.
???
A6, A5 und A4 sind doch die Standard-Beine des SPI (MOSI, MISO, SCK) - ok, kann man auf A1, A0 und A3 remappen) und auch des ISP (over SPI - hier kannst Du aber nicht remappen). Die LED an MISO wird nicht stören flimmert halt dann nur beim flashen etc. mit. Der Spannungsteiler würde an SCK hängen, aus meinem Bauch heraus sollte der ICE den zwar übersteuern können, obs sinnig ist, weiß ich nicht...

Im differentiellen Modus scheint der ADC immer bipolar zu laufen. Also die Differenz positiver Eingang minus negativer Eingang, multipliziert mit der gewählten Verstärkung wird gegen die gewählte Referenz approximiert. Die Differenz kann theoretisch negativ sein; das Ergebnis liegt dann in den zehn ADC-Result Bits als vorzeichenbehaftete Zehn-Bit-Ganzzahl vor. vom Betrag her hast Du also nur 'ne Auflösung von neun Bit bzw zehn Bit im Bereich von -Aref..+Aref.
(es gibt auch differentielle ADCs, die zwischen Bi- und Unipolar umgeschaltet werden können, oder wo das über die Kanäle im Multiplexer gewählt werden kann. Dort könnte man dann mit geringerer Auflösung messen, welcher Eingang positiver als der andere ist, und dann die Polarität der Unipolaren differentiellen Messung entsprechend Eingestellt mit voller Auflösung messen.
Hier geht das wie gesagt nicht - es wird immer bipolar gemessen, ist also immer ein Eingang positiv gegen den anderen, verschenkst Du quasi die negative Hälfte des 10-Bit Ergebnisses.

Hmm… man könnte auf den negativen Eingang die exakt halbe Referenzspannung legen...
Bei 'ner externen Referenz klar, die gewählte interne Referenz kann auf den Aref-Pin (A0) geschaltet werden (REFS2 in ADMUXB), um dort extern mit einem Kerko gepuffert zu werden - da könnte dann ein präziser hochohmiger Spannungsteiler die halbe Aref auf den negativen Eingang leiten...

Bei Gain=100 ändern sich dann die Ergebnisse aber möglicherweise schon, wenn Du nur hinschaust...
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Hallo
Habe diese Schaltung gefunden und nehme es als Grundlage. Es fehlt der 6 polige ISP Anschluss und ein Reset Taster.7991
Eine Software war dazu nicht zu finden. Da der 841 eine Weiterentwicklung des Ati 84 ist passt den einige Software auch dazu oder muss alles neu werden?
achim
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.363
61
48
Marwitz
Sprachen
BascomAVR, Assembler
Es fehlt der 6 polige ISP Anschluss und ein Reset Taster.
A6, A5 und A4 sind doch die Standard-Beine des SPI (MOSI, MISO, SCK)
Am Reset hängt hier ein Pullup mit 2K. Parallel dazu wäre dann noch der interne Pullup, zusammen hätten die im worst case also 1,875 kΩ. Empfohlen wird AFAIR ein Pullup mit 4K7..10K. Möglicherweise (wahrscheinlich) werden einige Programmer den nicht auf Gnd bekommen, und folglich 'ne Fehler beim Flashen werfen...
Da der 841 eine Weiterentwicklung des Ati 84 ist passt den einige Software auch dazu oder muss alles neu werden?
Einiges wird passen (Du mußt also nicht ALLES neu coden) - vieles wird aber auch nicht passen (da sich Register und Bitnamen geändert haben können).
Und die neue Hardware erfordert natürlich erst recht neuen Code.
Bei einigem kann Dir die verwendete Programmiersprache helfen.

Was Du zB definitiv beachten mußt, ist die neue Port-Verschaltung. Das war mir hier aufgefallen. Typisch ist diese Verschaltung zB bei den TPI-Tinies, und wohl auch bei den X-Tinies.
 

achim S.

Mitglied
Premium Benutzer
16 Jan 2010
548
8
18
Nähe Basel
Sprachen
ANSI C
Danke für die Info. Die Sache war mir so noch nicht bewusst. Der 841 ist halt doch anders. Falls du noch mehr solche Infos hast nehm ich sie gerne.
Dachte vielleicht an Timer Mode oder PWM.
achim
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)