Hallo!
Ich weiß, dass es zu dem Thema sehr viele Threads gibt, aber es geht mir
mehr darum, welchen Wert aus dem µC Datenblatt ich korrekterweise nehmen
muss. Folgendes Beispiel:
Ein µC Pin (vom Atmega328P-PU, Arduino standalone) wird als Input
definiert und es wird ein Taster angeschlossen. Jetzt gibt es ja
prinzipiell zwei Möglichkeiten: Pull-up oder Pull-down (extern, ich
weiß, dass es auch interne Pull-ups gibt, aber es geht ja um das
korrekte lesen des Datenblatts).
Im Fall eines Pull-up Widerstandes ergibt das für mich auch alles Sinn:
Der Pin ist als Input definiert und es fließt etwas Strom über den
Pull-up in den µC. Dabei kann über das Ohm'sche Gesetz ausgerechnet
werden, wie groß der Widerstand sein darf, damit der minimale High-Wert
des Pins nicht unterschritten wird.
Beim Pull-down ergibt folgendes für mich keinen Sinn:
Der Pin wird als Input definiert, wie kann er dann noch als Stromquelle
dienen und Strom vom Pin über den Pull-down nach GND fließen?
Zum Thema Datenblatt: Welchen Stromwert muss ich denn nun heranziehen?
Unter Punkt 28 des Atmega328P-PU Datenblattes (DC Characteristics) ist
einmal ein Input leakage current von max 1 µA bei 5,5 V angegeben (ich
arbeite mit 3,3 V). Andererseits wird der typische DC current per I/O
pin mit 40 mA angegeben. Intuitiv hätte ich jetzt den leakage current
verwendet, aber da es ja beim Pull-down um den maximalen source current
geht, bin ich mir da nicht so sicher.
Kann mir da bitte jemand helfen?
Danke
LG Thorsten
Durch den Pulldown Widerstand soll kein konstanter Strom fließen. Er
soll dafür sorgen, dass der Pin in einem definierten (und) Zustand ist
wenn keine Spannung anliegt und eventuelle Restladungen vom Input
entfernen.
Ach so, wenn du rechnen willst:
Er muss gross genug sein um den Eingangspegel nicht runterzuziehen und
so klein wie du ihn benötigst um die C am Input in akzeptabler Zeit
wegzubekommen.
F. F. schrieb:> Du hast offensichtlich den Sinn noch nicht verstanden.> Lies bitte diesen Artikel:> https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
Dachte ich eigentlich schon, der verlinkte Artikel spricht ja nur vom
Pull-up und nicht vom Pull-down. Vielleicht habe ich mein Problem
unzureichend beschrieben?
JE schrieb:> Durch den Pulldown Widerstand soll kein konstanter Strom fließen.> Er> soll dafür sorgen, dass der Pin in einem definierten (und) Zustand ist> wenn keine Spannung anliegt und eventuelle Restladungen vom Input> entfernen.
Mir ist schon klar, dass durch den Pull-Down kein konstanter Strom
fließen soll. Aber bisherige Erklärungen habe ich so verstanden, dass
der Inputpin trotzdem einen gewissen Strom liefert. Dieser Strom fließt
durch den Pull-Down ab. Ist dem nicht so?
JE schrieb:> Ach so, wenn du rechnen willst:> Er muss gross genug sein um den Eingangspegel nicht runterzuziehen
er soll ihn doch runter, idealerweise auf GND, ziehen oder nicht?
Lasst mich mein Anliegen nochmal etwas anders formulieren:
Es geht nur um den Pull-Down: Ich möchte an einem Eingangspin definiert
LOW anliegen haben, d.h. die Spannung am Pin darf (in meinem Fall) nicht
über 1,98 V steigen, solange der Taster geöffnet ist.
Im Fall des gedrückte Tasters: der Widerstand verhindert nur den
Kurzschluss und sollte möglichst groß sein, damit nicht zu viel Strom
verheizt wird, richtig?
Im Fall des geöffneten Tasters: der Widerstand zieht den Eingang auf
GND. Je kleiner der Widerstand, desto näher ist der Inputpegel an GND
und desto schneller wird die Leitungskapazität entladen, richtig? Es
fließt ja ein Strom aus dem Eingangspin über den Pull-Down Widerstand
(der sich leider nicht verhindern lässt und von dem ich vermute, dass es
der als im Datenblatt als leakage current bezeichnete ist). Daher kann
ich den Pull-Down nicht beliebig groß machen, sonst wandert der
Inputpegel über die 1,98 V. Habe ich das tatsächlich falsch verstanden?
Thorsten schrieb:> Je kleiner der Widerstand, desto näher ist der Inputpegel an GND> und desto schneller wird die Leitungskapazität entladen, richtig?
Besser: desto kleiner der Pull-Down umso kleiner ist der
Spannungsabfall, der durch Leckströme entsteht.
Der Pull-Down kann nicht beliebig groß gewählt werden:
- da der Spannunsabfall den maximalen Low-Pegel überschreiten kann
- der Eingang empfindlich gegen Störspannungseinkopplungen wird
Thorsten schrieb:> Der Pin wird als Input definiert, wie kann er dann noch als Stromquelle> dienen und Strom vom Pin über den Pull-down nach GND fließen?
Das sind alles parasitäre Restströme. Da ist keine interne Stromquelle
vorhanden - zumindest nicht bei gewöhnlichen CMOS-Eingängen. Wenn, dann
steht das im Datenblatt bzw. ist dort genannt, dass der Pin auch offen
bleiben darf (z.B. trifft man das bei Smartswitchen an).
Du musst also nur dafür sorgen, dass der Input current - gilt für beide
Richtungen - an dem Pull-Up oder -Down nicht soviel Spannungsabfall
hervorruft, dass du die Pegel für max. LOW bzw. min. HIGH nicht über-
bzw. unterschreitest. Die Grenzen sind 0.3·VCC bzw. 0.6·VCC; bei 3.3V
also muss für LOW <1V und für HIGH > 2V erreicht werden. Heißt: PullDown
max. 1Meg, PullUp max. 1.3Meg. Praktischerweise bleibt man davon ein
ganzes Stück weg; auch weil parasitäre Kapazitäten am Pin, an den
Leitungen usw. das Ganze von verlangsamen. Intern z.B. beträgt der PU
ca. 50k. Extern mache ich das abhängig von der Nutzung des Pins - 10k
für einen Taster sind ganz ok, manchmal ist auch 1k besser (lange
Leitung zum Taster, etwas 'wetting current' für die Kontakte, elektrisch
verseuchte Umgebung, kritisches Signal usw.).
Da sieht man auch, dass der in beide Richtungen fließen kann - es gibt
zwei Angaben: einmal für pin low (absolute value) und für pin high
(absolute value). Und es sind Worst-Case-Angaben.
Der IO current von 40mA ist hier irrelevant, der kommt nur zum Tragen,
wenn du den Pin als Ausgang verwendest. Und es ist kein Betriebswert,
sondern er wird in der Rubrik 'Absolute Maximum Ratings' genannt -
Grenzwerte, die den Baustein gerade noch am Leben lassen, aber dabei
muss er nicht mehr korrekt funktionieren!
Georg M. schrieb:> Der CMOS-Aufbau ist symmetrisch gegenüber VDD und GND. Dementsprechend> symmetrisch sind auch Pull-up und Pull-down und die entsprechenden> Taster.
Ja, leider nicht ganz. Zumindest unterscheiden sich die
Datenblattangaben bei min HIGH (0.3·VCC) und max LOW (0.6·VCC).
Thorsten schrieb:> Im Fall des geöffneten Tasters: der Widerstand zieht den Eingang auf> GND. Je kleiner der Widerstand, desto näher ist der Inputpegel an GND> und desto schneller wird die Leitungskapazität entladen, richtig? Es> fließt ja ein Strom aus dem Eingangspin über den Pull-Down Widerstand> (der sich leider nicht verhindern lässt und von dem ich vermute, dass es> der als im Datenblatt als leakage current bezeichnete ist). Daher kann> ich den Pull-Down nicht beliebig groß machen, sonst wandert der> Inputpegel über die 1,98 V. Habe ich das tatsächlich falsch verstanden?
Nein, das hast du alles richtig verstanden - nur die 1.98V kann ich
nicht nachvollziehen (du arbeitest bei 3.3V, da ist die Grenze
0.3·3.3V!). Wie kommst du auf den Wert?
HildeK schrieb:> parasitäre Kapazitäten am Pin, an den> Leitungen usw. das Ganze von verlangsamen
Laut https://www.avrfreaks.net/comment/1961521#comment-1961521 hat ein
AVR-Input eine parasitäre Kapazität von 2-8pF. Im Datenblatt ist dazu
leider keine Angabe.
Das bedeutet bei einem Pullup oder Pulldown von 1MΩ, wenn man die
Leckströme mal ignoriert, dass es 2-8μs dauert bis nach dem Loslassen
des Tasters das Logiksignal wechselt.
Wenn dass unakzeptabel lang ist (gut, bei einem Taster eher nicht) muss
man auch aus diesem Grund Widerstände mit kleineren Werten wählen.
LG, Sebastian
Sebastian W. schrieb:> Laut https://www.avrfreaks.net/comment/1961521#comment-1961521 hat ein> AVR-Input eine parasitäre Kapazität von 2-8pF. Im Datenblatt ist dazu> leider keine Angabe.
Passt schon in etwa. Aber du hast üblicherweise auch Leitungen zu dem
Pin, insbesondere bei Tastern. Dann kann das auch das fünf- bis
zehnfache sein.
Hinzu kommt, dass CMOS-Eingänge häufig eine Mindestslewrate haben
wollen, meist <<1μs; gut, AVRs trifft das nicht, die haben
Schmitttrigger.
HildeK schrieb:> ... - nur die 1.98V kann ich> nicht nachvollziehen (du arbeitest bei 3.3V, da ist die Grenze> 0.3·3.3V!). Wie kommst du auf den Wert?
Sorry, falschen Werte gecopy&pasted... ich meinte 0,99 V
Vielen Dank an alle für die sehr hilfreichen Antworten, die haben mir
sehr geholfen!
LG Thorsten
Einfache Regeln für 98,7% aller Fälle:
Wenn Rpu / Rpd für die Bereitstellung eines definierten Logikpegels
am Eingang eines µCs dienen sollen:
R = Vcc/V * 10 ... 20 kOhm
Wenn Rpu / Rpd für die flotte Pegel-Erfassung von Schaltern/Tastern
nach Gnd / Vcc am Eingang eines µCs dienen sollen:
R = Vcc/V * 0,2 ... 1 kOhm
Simple schrieb:> Wenn Rpu / Rpd für die flotte Pegel-Erfassung von Schaltern/Tastern> nach Gnd / Vcc am Eingang eines µCs dienen sollen:
Wer hat dir diese Bären aufgebunden?
Um einen Taster/Schalter ausreichend flott erfassen zu können, brauchst
du keine Zeitkonstante von wenigen Nanosekunden (Eingangskapazität
ATmega max 10pF), zumal nur die Steilheit der Loslassflanke vom Pull-up
bzw. -down bestimmt wird.
Bei mechanischen Kontakten wird der höhere Strom zur Reinhaltung der
Kontakte benötigt und hängt von der verwendeten Kontaktart ab.
Beitrag "Mindeststrom bei Taster/Schalter für sicheren Betrieb?"
Üblicherweise schaltest du den Pin um.
Wenn dein "Taster" z.B. ein Fet ist, dann brauchst du einen pullup oder
pulldown (je nachdem was für ein Fet dran hängt), um dein Gate möglichst
schnell zu entladen. Einmal um ein definitives Umschalten zu erreichen,
aber auch zum Schutz des Fet's.
Beim Taster dient der Pin immer als Eingang und da brauchst du eher eine
Entprellroutine oder in Hardware.
Sinnigerweise begrenzt man auch den Strom "in" den Controller, aber der
hat ja auch einen Innenwiderstand.
Da kommt aber kein pullup und kein pulldown dran.
Da ein Bild immer mehr als tausend Worte sagt, solltest du deine
Schaltung aufzeichnen und posten.
Thorsten schrieb:> Der Pin ist als Input definiert und es fließt etwas Strom über den> Pull-up in den µC. Dabei kann über das Ohm'sche Gesetz ausgerechnet> werden, wie groß der Widerstand sein darf, damit der minimale High-Wert> des Pins nicht unterschritten wird.
Na ja, wie viel Strom fliesst in so einen uC Eingang ? Unter 1uA.
Welche Spannung reicht für high ? Schau ins Datenblatt des Prozessors
bei der vorhandenen Betriebsspannung, sagen wir 3.5V also 1.5V
Spannungsabfall am Widerstand also 1.5MOhm.
> Beim Pull-down
Ist es genau so, nur der Widerstand soll low halten, also unter 1V.
ABER: Die Rechnung ist Quatsch. Der Widerstand gilt für deinen Taster.
Es soll, wenn der Taster gedrückt wird, ein Mindeststrom fliessen, je
nach Taster kann das 1mA, 100uA sein, schau in dessen Datenblatt.
Wenn der Taster-Mindeststrom geringer ist als schon der eingebaute pull
up im uC ergibt, meist 90k also 55uA, dann brauchst du keinen externen
pull up.
Aus Störsicherheitsgründen lässt man trotzdem gern 0.5mA fliessen.
MaWin schrieb:> Es soll, wenn der Taster gedrückt wird, ein Mindeststrom fliessen, je> nach Taster kann das 1mA, 100uA sein, schau in dessen Datenblatt.
Endlich weist mal jemand darauf hin, nachdem weiter oben Mega-Ohm
genannt wurden.
Die Kontakte des Tasters verschleißen frühzeitig, wenn zu wenig Strom
fließt. Wenn im Datenblatt des Tasters kein Mindest-Strom (Wetting
Current) angegeben ist, dann gehe ich immer von 1mA bei kleinen Tastern
aus, bzw. 100mA bei den großen Tastern für Treppenhaus-Beleuchtung.
Stefan ⛄ F. schrieb:> MaWin schrieb:>> Es soll, wenn der Taster gedrückt wird, ein Mindeststrom fliessen, je>> nach Taster kann das 1mA, 100uA sein, schau in dessen Datenblatt.>> Endlich weist mal jemand darauf hin, nachdem weiter oben Mega-Ohm> genannt wurden.
Die genannten Mega-Ohm waren als theoretische Grenze genannt; ein
Rechenbeispiel. Ich hatte gestern schon weiter Randbedingung aufgeführt,
auch den Wetting Current für die Tasterkontakte, die dann zu anderen
Dimensionierungen führen:
HildeK schrieb:> Extern mache ich das abhängig von der Nutzung des Pins - 10k> für einen Taster sind ganz ok, manchmal ist auch 1k besser (lange> Leitung zum Taster, etwas 'wetting current' für die Kontakte, elektrisch> verseuchte Umgebung, kritisches Signal usw.).
HildeK schrieb:> Ich hatte gestern schon weiter Randbedingung aufgeführt,
Das habe ich übersehen. Das ist ein oft unterschätztes Thema. Immer wenn
in meinem Haushalt die Taster von Geräten nach einigen Monaten/Jahren
schlecht reagierten, lag es an zu geringem Strom (nicht an schlechten
Tastern). Durch simples verringern der Pull-Widerstände konnte ich das
Problem stets lösen.
Stefan ⛄ F. schrieb:> Die Kontakte des Tasters verschleißen frühzeitig, wenn zu wenig Strom> fließt.
Welcher Effekt ist dafür zuständig? Und ist das reversibel?
1 Meg ist für PullUp/Down schon sehr viel. Früher, bei TTL-Gräbern wurde
nicht groß gerechnet (außer bei Zeitkonstanten natürlich) - da war 10k
der Standardwiderstand.
Mohandes H. schrieb:> Welcher Effekt ist dafür zuständig?
Verschmutzung der Kontakte.
> Und ist das reversibel?
Ja
Stefan ⛄ F. schrieb:> Durch simples verringern der Pull-Widerstände konnte ich das> Problem stets lösen.
Mohandes H. schrieb:> Früher, bei TTL-Gräbern wurde nicht groß gerechnet (außer bei> Zeitkonstanten natürlich) - da war 10k der Standardwiderstand.
Bei TTL musste der Pull-Down Widerstand < 470 Ohm sein und die Eingänge
lieferten von alleine mehr als 1mA bei HIGH Pegel.
Mohandes H. schrieb:> Früher, bei TTL-Gräbern wurde> nicht groß gerechnet (außer bei Zeitkonstanten natürlich) - da war 10k> der Standardwiderstand.
Früher (tm) war TTL auch noch TTL. Bei Standard-TTL floss beim Verbinden
mit Gnd aus einem Eingang, auch ohne Pull-Up Widerstand, ein Strom von
gut 1mA.
Die 10kΩ haben den Störabstand bei Input High verbessert.
Stefan ⛄ F. schrieb:> Das habe ich übersehen.
Passiert mir auch (siehe gestern [Lichtgeschwindigkeit]) 😀.
Ich weiß, dass dir der 'Wetting Current' immer wichtig ist bei solchen
Fragen - das ist auch richtig so.
Diser Strom hat bei jedem Tastertyp einen anderen optimaler Wert und
auch ein anderen nutzbaren Bereich. Manchmal sollte der Strom möglichst
klein sein, weil Batteriebetrieb. Beim Taster nicht ganz so tragisch,
aber der Pin könnte ja ähnlich mit einem Schalter für längere Zeit
bedient werden sollen. Und ob man zu jedem Taster eine Angabe dazu
findet, ist auch nicht sicher.
Es gibt auch Tasterkontakte, denen das egal ist, so z.B. den Gummitasten
wie sie z.B. in einer Fernbedienung zu finden sind.
Selbst bei so einfachen Dingen gibt es nicht nur eine pauschal richtige
Antwort 😀. Und viele weitere Randbedingungen, die ich teilweise nannte.
Sehr interessante Tipps, vielen Dank! Das Datenblatt meiner Taster gibt
als minimum Rating (wir dort offensichtlich nicht als wetting current
bezeichnet) 10 µA @ 1V an. Da müsste ich mit einem 50-100k Widerstand
doch ganz gut fahren, da dann zwischen 66 und 33 µA fließen. Im
geöffneten Zustand wird der Input auf 50-100 mV vs. GND gezogen, was
sicher als LOW erkannt wird.
Wenn ich anstatt eines Tasters jetzt einen Jumper nutzen möchte, dann
ist der minimale Strom ja weniger wichtig, da ich notfalls die
Stiftleiste sauber machen kann und den Jumper ersetze, richtig? Dann
könnte ich den Pull-Down tendenziell größer machen, um den Stromfluss zu
begrenzen.
Thorsten schrieb:> Wenn ich anstatt eines Tasters jetzt einen Jumper nutzen möchte, dann> ist der minimale Strom ja weniger wichtig, da ich notfalls die> Stiftleiste sauber machen kann und den Jumper ersetze, richtig?
Ja richtig. Da würde sich der Schmutz auch durch das Aufstecken
abreiben.
Thorsten schrieb:> Da müsste ich mit einem 50-100k Widerstand> doch ganz gut fahren,
Wenn dir bei der hochohmigen Beschaltung keine Störeinflüsse (allg. EMV)
zu schaffen machen, dann kannst du ja den internen PU nehmen.
Ja, ich weiß, du wolltest einen PD, aber das ist doch bei einem µC nur
eine Frage einer einfachen Invertierung in SW.
Mir persönlich ist z.B. das Schalten gegen GND eh lieber, schon weil an
vielen Stellen in einem Gehäuse Teile auf GND-Potential liegen. Ein
versehentlicher Schluss damit hat halt weniger Auswirkung als ein evtl.
Kurzschluss von VCC nach GND.
Aber über 50kΩ würde ich trotzdem nicht gehen.
Stefan ⛄ F. schrieb:> Die Kontakte des Tasters verschleißen frühzeitig, wenn zu wenig Strom> fließt.
Um den Mechanismus besser zu verstehen, würde ich das aber nicht
"verschleißen" nennen, denn darunter verstehe ich "Abrieb, Abbrennen".
Hier handelt es sich aber um Oxidation, das eine Isolierschicht auf den
Kontakten bildet.
F. F. schrieb:> Wobei man auch sagen muss, bei aller Stromsparerei, am Ende muss erstmal> das Gerät ordentlich funktionieren.
Erinnert euch an den Hype des Wassersparens bei Toilettenspülungen. Ein
sehr eingängiges Beispiel für tumpe Sparwut ohne Rücksicht!
Gruß Rainer
F. F. schrieb:> Wobei man auch sagen muss, bei aller Stromsparerei, am Ende muss erstmal> das Gerät ordentlich funktionieren.
Unser EMV-Spezi sagt: alles über 2k ist aus EMV-Sicht wirkungslos.
Thorsten schrieb:> Da müsste ich mit einem 50-100k Widerstand doch ganz gut fahren
Ein 10k-Pullup oder 10k-Pulldown an einem CMOS-Eingang wird bei einem
Burst-Test jämmerlich versagen, weil dann die Software, die den Pin
abfragt, ab&an den falschen Pegel einlesen wird.
Man könnte nun den Pull-Widerstand auf 1k verringern. Dann passiert da
normalerweise auch beim EMV-Burst nichts mehr.
Oder man könnte einfach die Impedanz des Pull-Widerstands verringern.
Dazu muss man dann nur einen 10nF Kondensator vom µC-Pin nach GND
schalten. Dann reicht auch ein 10k als Pull-Widerstand aus.
Aber mit einem 100k Widerstand brauchst du dich nicht über eigenartiges
Verhalten deiner Schaltung wundern.
Lothar M. schrieb:> Unser EMV-Spezi sagt: alles über 2k ist aus EMV-Sicht wirkungslos.
Eben.
Insofern wundert mich schon, dass so ziemlich alle Bastel-Module
Pull-Ups mit 10 bis 12 kΩ verwenden. Sogar direkt neben der
Sende-Antenne von Funkmodulen.
Da genügt manchmal das Dosenblech in den Steckbrettern, um genug Energie
zu reflektieren, das sporadisch Fehlfunktionen auftreten.