PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Signalveränderung durch Pullup



Moppi
08.12.2020, 08:53
Hallo,

ich wollte mal kurz in die Runde fragen, was Ihr so von Signalveränderungen durch Pullups haltet.

Ich habe jetzt viel mit einer selbstgebastelten Datenübertragungsroutine herumgespielt und gestern den Pin-Mode bei Arduino von INPUT auf INPUT_PULLUP geändert. Nun habe ich manche Eingänge auch parallel geschaltet, Somit hätte ich zweimal Pullups auf einer Leitung. Die sollen beim Arduino im 20 bis 50k-Bereich sein. Also funktionieren tut das mit den Pullups, nach meinem Minioszi geurteilt sieht es so aus, dass mit Pullup das Signal am Eingangspinn etwas stabiler zu sein scheint. Kann das möglich sein, dass ein Pullup immer einen positiven Effekt auf die Signalstabilität hat? Das Signal an sich wird dadurch ja auch etwas verändert. Theoretisch bräuchte ich keine Pullups, da Digitaleingänge ja schon einen Bereich haben, wo nur LOW und nur HIGH erkannt wird. Wenn ein Signal im LOW-oder HIGH-Bereich etwas "zappelt" macht das demnach doch nichts aus?

Ich habe Pullups nur zu Testzwecken verwendet, weil ich Fehler in der Datenübertragung gesucht habe. Nun frage ich mich, ob ich die besser drin lasse oder nicht. Vielleicht haben die Pullups auch keinen Einfluss, weil die die Mindestsignallänge an einem Eingang nicht entscheidend beeinflussen und damit auch nicht die Datenübertragungsgeschwindigkeit. Zumindest bringen die Pullups einen definierten Zustand an einem Eingang, solange da noch kein definiertes Signal auf die Übertragungsleitung gegeben wurde.

Danke, für's drüber Nachdenken und freundlichen Gruß!
Moppi

Gnom67
08.12.2020, 09:25
Du solltest dir wohl mal ein paar Grundlagen (https://www.elektronik-kompendium.de/public/schaerer/pullr.htm) anlesen, was die Funktion von Pullups/Pulldowns angeht.
Deine Frage erscheint mir vollkommen unsinnig.

Und was bitte bedeutet "Nun habe ich manche Eingänge auch parallel geschaltet." ??? Was soll das denn?

oberallgeier
08.12.2020, 10:58
.. Pullup .. Signalstabilität .. Digitaleingänge .. nur LOW und nur HIGH erkannt .. Danke, für's drüber Nachdenken ..Nun, Nachdenken hilft da nicht viel. Besser das Datenblatt lesen. Stichwörter sind z.B. (Bezug : Atmel-42735B-ATmega328/P_Datasheet_Complete-11/2016)
18. I/O-Ports
18.1. Overview
Figure 18-1. I/O Pin Equivalent Schematic

32. Electrical Characteristics
32.2. Common DC Characteristics
dazu einige Timing-Tabellen und -Diagramme im Datenblatt wie z.B.:
18.2.4. Reading the Pin Value
Figure 18-3. Synchronization when Reading an Externally Applied Pin value

Und noch Einiges. So hatte ich mich jedenfalls (halbwegs) eingearbeitet.

Und, wie Gnom67 schreibt, ein paar Grundlagen. Das Thema hatten wir ja ähnlich schon im August (https://www.roboternetz.de/community/threads/75182-ATmega328P-PU-Input-Pins-Maximum-Voltage) ?

Gnom67
08.12.2020, 13:09
Moppi, dein Beitrag klingt ein wenig so, als würde ein Pullup irgendwie das Signal verbessern... wie ein Verstärker oder sowas... du scheinst da nicht die richtige Vorstellung zu haben, was ein Pullup (oder Pulldown) macht.

Ein digitaler Eingang erkennt high oder low ab gewissen Spannungsschwellen. Beispielsweise wird bei 3,3-V-Eingängen (Low Voltage TTL) alles was unter 0,8 V ist wird als low erkannt, alles über 2,0 V als high. Dazwischen ist nicht sicher, was der Eingang erkennt. Wenn du also ein Signal mit 1,9 Volt anlegst, kann es als high oder als low erkannt werden oder auch zeitlich wechselnd mal so und mal so.

Wenn du an einen Eingang ein Signal (Sender) anschließt, hast du drei Möglichkeiten:
- Das Signal kommt von einem Push-Pull-Treiber - das heißt, der Ausgang des Senders liefert für high eine garantierte Spannung über 2 Volt (z. B. 3,3 V) und für low eine garantierte Spannung unter 0,8 V (z. B. 0 V (GND), indem er die Signalleitung zwischen zwei Spannungsniveaus hin und her schaltet. Das ist für den Eingang eindeutig und du benötigst keinen Pullup oder pulldown.
- Der Sender liefert nur ein eindeutiges Signal, z. b. für low, indem die Leitung mit GND verbunden wird (z. B. bei einem Taster, der den Eingang auf GND zieht - es kann aber z. B. auch ein Open-Collector-Ausgang sein). Das Low-Signal ist somit eindeutig, wenn der Taster gedrückt ist, nämlich 0 Volt. Ist der Taster aber nicht gedrückt, liegt der Eingang ohne Verbindung einfach offen (er geht bis zum Taster und weil der keinen Kontakt hat, hängt das Ende des Kabels sozusagen in der Luft. Welche Spannung nun am Eingang liegt, kann man nicht sagen. Restladungen aus dem letzten Tastendruck, elektromagnetische Wellen aus der Umgebung, statische Aufladungen oder Kriechströme können irgendein Signal (high oder low) erzeugen. Der Eingang "floatet", wie man so schön sagt.
Um das zu verhindern, benötigt man einen Pullup-Widerstand (relatov groß, meist 10-50 KOhm), der eben dieses Offenliegen des Eingangs verhindert und (mit sehr kleinem Strom) immer dafür sorgt, dass 3,3 V am Eingang liegen. Ist der Taster oder der Open-Collector-Ausgang offen, dann zieht der Pullp den Eingang also auf 3,3 V und somit auf ein klares Niveau (high). Drückst du jetzt den Taster, wird der Eingang mit GND (0 V) verbunden. Die 3,3 V, an denen der Pullup hängt, fallen komplett im Pullup-Widerstand ab. (Der Widerstand und die Leitung zu GND bilden sozusagen einen Spannungsteiler im Verhältnis 10 KOhm zu ~0 KOhm - die gesamte Spannung fällt am Widerstand ab. Der Eingang liegt auf 0 V.)
- Dritte Möglichkeit: Der Sender hat bereits einen Pullup (oder Pulldown) eingebaut. Dann brauchst du am Eingang natürlich keinen mehr. Im Grunde ist es erst mal egal, ob der Pullup am einen oder am anderen Ende der Signalleitung, also am Eingang oder am Ausgang hängt.

Pullup und Pulldown arbeiten identisch nur sozusagen umgedreht.
- Der Pullup hält einen Eingang über einen relativ großen Widerstand auf high (3,3 V) und das Signal zieht ihn auf low (0 V / GND).
- Der Pulldown hält einen Eingang über einen relativ großen Widerstand auf low (0 V) und das Signal zieht ihn auf high (3,3 V).
Der Pullup-/Pulldown-Widerstand ist immer deutlich größer als der Widerstand der Signalleitung (z. B. Taster oder Transistor zu GND), damit die Spannung auch weit genug abfällt oder ansteigt.

Moppi
08.12.2020, 13:42
@Oberallgeier

Thema im August hatte damit nichts zu tun, ich habs gerade noch mal gelesen.

@Gnom67


als würde ein Pullup irgendwie das Signal verbessern... wie ein Verstärker oder sowas...
Nein, darum geht es nicht, ob der als Verstärker dient. Im Vergleich zu einem Transistoreingang sehe ich das aber so, dass ein Pullup an der Basis den Transistor vorspannt, das ist für verschiedene Zwecke üblich. Das hat auch einen Einfluss auf die Schaltgeschwindigkeit. Zugegeben weiß ich jetzt nicht, ob das bei den Arduino-Eingängen denselben Effekt hätte. Ich kenne mich eben auch nicht mit allen Sachen genau aus. Tut mir leid!


Ein digitaler Eingang erkennt high oder low ab gewissen Spannungsschwellen.

Also wie ich schrieb: "da Digitaleingänge ja schon einen Bereich haben, wo nur LOW und nur HIGH erkannt wird", heißt, das ab einem bestimmten Schwellenwert (der auch von der Versorgungsspannung abhängt), eben LOW oder HIGH erkannt wird. Dadurch ergeben sich 2 Bereiche, ein Oberer und ein Unterer, in denen es auch keine große Rolle spielt, ob ein Signal etwas verrauscht ist "zappelt". Von 0 bis 0.7V z.B. wird immer LOW erkannt. Und ab ca. 2.0V, bis zur Grenze der Versorgungsspannung, eben HIGH. (Muss man im Datenblatt schauen, wie die Werte genau sind, interessiert hier aber für eine allgemeine Betrachtung von Digitaleingängen nicht).

Für den Rest Deiner Erklärung vielen Dank! Ich habe das alles gelesen, aber für mich jetzt nichts Neues entdeckt.


Da hier sehr schnell mit Unterstellungen losgelegt wird:

Du solltest dir wohl mal ein paar Grundlagen (https://www.elektronik-kompendium.de/public/schaerer/pullr.htm) anlesen

möchte ich das mal so wein wenig zurückgeben und dazu sagen:

Man sollte erst einmal die Fragen genau lesen und zu verstehen zu versuchen.

Wie Oberallgeier schrieb:

Nun, Nachdenken hilft da nicht viel.

Doch, genau das sollte man tun, wenn man Fragen verstehen möchte.


Deshalb die Fragen nochmal auf das bezogen, was ich beobachtet habe:

Die Pullups sorgen für ein eindeutiges Signal am Eingang. Treten Nebeneffekte dadurch auf, wie Signalverschleifung, die sich negativ auswirken?

Wenn das keiner weiß, ist es nicht schlimm. Dann suche ich mir das selber noch raus, damit habe ich kein Problem. Aber ich dachte, ich bin in einem Forum, wo man Fragen stellen kann, die andere aus dem FF beantworten können, weil sich bereits intensiver damit beschäftigen oder beschäftigt haben. Sprich, man hilft sich gegenseitig. Bemerkungen, dass ich irgendwas suchen soll oder Datenblätter lesen soll, kann ich nicht brauchen. Vor Internetzeiten habe ich das nur so gemacht, aber mit Internetforen geht dieser Vorgang womöglich eben schneller. Ich bin durchaus nicht so unbeholfen.

@Obergallgeier
Ich schaue noch mal im Datenblatt, ob ich dort was finde zur Signalverschleifung in Verbindung mit internen Kapazitäten und Pullups.

Vielen Dank!

MfG

Holomino
08.12.2020, 14:02
Natürlich geht das. Du baust damit eine Stromschleife und hältst dadurch induzierte Störungen von z.B. Nachbarports oder den Leiterbahnen im Verhältnis zum Nutzstrom klein. RS 485 macht auch nichts anderes.

Moppi
08.12.2020, 14:23
Und was bitte bedeutet "Nun habe ich manche Eingänge auch parallel geschaltet." ??? Was soll das denn?

Kannst Du die Bemerkung mal erläutern? Die scheint mir unsinnig zu sein.

Aber um das aufzuhellen und ein paar Grundlagen zu liefern:
Es geht um eine Datenübertragung von einem Gerät zu mehreren Anderen. Damit sind die Datenleitungen von einem Gerät an zwei andere Geräte dauerhaft verbunden. Da die Empfänger auf Input schalten (jetzt z.Z.mit Pullup), liegen also zwei Pullups an einer Datenleitung (laut Datenblatt stimmt das so). Damit halbiert sich der Pullup-Widerstand für die gemeinsame Datenleitung.

Eine Eingangskapazität konnte ich noch nicht finden.

Da die Frage offenbar nicht so schnell zu beantworten ist, werde ich die Pullups erst einmal drin lassen, bis ich mehr rausgefunden habe.

MfG

- - - Aktualisiert - - -


Natürlich geht das. Du baust damit eine Stromschleife und hältst dadurch induzierte Störungen von z.B. Nachbarports oder den Leiterbahnen im Verhältnis zum Nutzstrom klein. RS 485 macht auch nichts anderes.

Danke, für Deine Antwort! Das "Natürlich geht das." bezieht sich auf was genau?

- - - Aktualisiert - - -

Also ich weiß wohl, dass I2C auch Pullups verwendet.

Holomino
08.12.2020, 14:35
Auf das Zuschalten des PullUps. Fass mal mit dem nackten Finger an die Messspitze Deines Oszis und betrachte den enormen 50Hz Sinus, der durch die Umgebung in Dich induziert wird. Dann nimm einen 10kOhm Widerstand und klemm ihn zwischen Tastspitze und Masseklemme. Ist der Sinus bei aufgelegtem Finger immer noch so groß?

Ob Tastkopf oder Input-Pin. Beide sind ähnlich hochohmig (MOhm-Bereich). Und bei beiden lassen sich induzierte Störungen aus dem Umfeld durch einen Widerstand als Abschluss dämpfen.

Moppi
08.12.2020, 14:51
Danke für die Antwort! Somit hätte das mindestens einen positiven Effekt. Den ich so ein wenig im Oszi schon erkennen konnte, mir aber darüber nicht so klar war, ob das mehr am Oszi selbst liegt, oder ob das auch so auf die Eingänge dann zutrifft.

Nun hatte mich dann noch interessiert, ob durch so eine Widerstandsbeschaltung die Datenübertragungsrate wesentlich beeinflusst würde. Weil ich will das optimieren. Wenn es auch ohne Pullups funktionierte, aber dann die Übertragung schneller wäre, würde ich die vielleicht weglassen, wie es angedacht war. Die Signalleitungen sind ja kurz.

MfG

Holomino
08.12.2020, 17:18
Hmm, ein I2C-Bus mit 4k7-Widerstand geht mit kurzen Leitungslängen bis 400kHz.
Wie hoch willst Du gehen?

Moppi
08.12.2020, 19:33
Ich will so schnell es geht. Ich habe auf einer Seite nur einen 8MHz Quarz, daher nur halbe Geschwindigkeit zu einem UNO. Ich habe es gerade ausgerechnet auf ~48kByte pro Sekunde. Bin da aber nicht sicher. Ich muss das messen. Dürfte nicht so schlimm sein. Muss nur die ICs nochmal umstecken und testweise Serial.print einbauen, um nach 1 Sekunde die Zahl der Übertragungen anzuzeigen. Funktionieren tut es gut, vielleicht auch wegen der 8MHz auf einer Seite. Der Master läuft mit 16MHz, die Slaves mit 8Mhz. Wenn die 48kByte stimmen, dürften es auch etwa 400KHz sein. Ich brauche aber unbedingt mal die genaue Geschwindigkeit, um abschätzen zu können, wann die Motoren vermutlich anfangen zu ruckeln. Weil für die Zeit der Datenübertragung stehen die still. Beim Ausprobieren habe ich gesehen, dass es noch funktioniert, die Räder laufen sichtbar rund, trotz der Pausen für die Übertragungen zwischendurch. Wenn ich gemessen habe, schreibe ich es hier. Dauert einen Moment...

-------------

Messung:

812 Übertragungen pro Sekunde. 17 mal 3 Bit = 51 Bit pro Übertragung. 41412 Bit pro Sekunde. Sind 5176 Byte/s.

Meine Schätzung von vorhin lag da weit daneben. Muss vielleicht mal eine längere Pause machen..

Wobei ich jetzt hier mit 2 ATmega328 getestet habe, die beide mit 16MHz takten. Wenn ich einen davon mit nur 8MHz takte, komme ich vielleicht noch auf 600 Übertragungen pro Sekunde. (nicht dass ich jetzt wieder meilenweit daneben liege ;) )

Vielleicht lohnt es sich, dass ich versuche das noch zu optimieren, mehr hatte ich mir da schon erhofft. Mal sehen, wie es praktisch läuft. Wenn es so ausreicht, auch gut. Stabil laufen tut es so.


MfG

Gnom67
08.12.2020, 23:27
Tja, hättest du mal genauer gelesen...
Wenn du einen ATmega mit einem anderen direkt verbindest GPIO-Out an GPIO-In, brauchst du keine Pullups, weil die Ausgänge Push-Pull-Driver haben. (#4, dritter Absatz, erster Spiegelstrich (https://www.roboternetz.de/community/threads/75530-Signalver%C3%A4nderung-durch-Pullup?p=662947&viewfull=1#post662947)) Ein Pullup sorgt hier nur für zusätzliche Ladungen, die transportiert werden müssen. Dafür, dass du im Brustton der Überzeugung angibst, von mir nichts neues erfahren zu haben, wirken deine weiteren Ausführungen leider ziemlich hilflos.
Da wünsch ich dir doch weiter viel Erfolg - ob mit oder ohne Pullups... Mir ist's egal - und du weißt es ja sowieso besser.

Moppi
09.12.2020, 10:55
Ich weiß wohl, dass man normalerweise keine Pullups benötigt. Ich habe die hier zum ersten Mal reingenommen. Dennoch bleibt, das, was ich beobachtet habe bestehen. Ich denke mir das ja nicht aus. Darauf zielte die Frage ab. Und zusätzlich ist es im Programm an gewissen Stellen (Synchronisation) nicht von Nachteil, wenn eine Singnalleitung auf HIGH liegt, bevor sie vom zuständigen µC in ihrer Funktion logisch definiert wird. So weit war der Stand. Ob ich die Synchronisation so oder so, den Pin zu einer anderen Zeit setze oder rücksetze, so weit war ich nicht in der Überlegung. Mir ging es darum, ob ein Pullup bei einer Datenübertragung auf das Signal einen positiven oder negativen Einfluss hat (wenn ja, dann wäre es schön zu wissen, welchen).


Dafür, dass du im Brustton der Überzeugung angibst, von mir nichts neues erfahren zu haben, wirken deine weiteren Ausführungen leider ziemlich hilflos.
Da wünsch ich dir doch weiter viel Erfolg - ob mit oder ohne Pullups... Mir ist's egal - und du weißt es ja sowieso besser.

Das ist doch mal eine sachgerechte Unterstützung. Deinen Brustton habe ich lieber nicht. Hättest Du gleich richtig gelesen, was ich schrieb, hättest Du es auch verstanden. Dann hättest Du auch gleich eine passende Antwort geben können. Anstatt Du Dich dermaßen in Erklärungen ergießt, die man als selbstverständlich voraussetzen sollte (LOW/HIGH-Potential), wenn man mit digitalen Bausteinen schon eine Weile arbeitet. Meine Bemerkung diesbezüglich hatte nichts mit "Brustton" zu tun. Der sich hier Fragestellungen echauffiert, dass bist Du. Wenn Du denkst, dass ich da duckmäuserisch sitze und lieber nichts dazu schreibe, hast Du ich eben getäuscht. Ein Kommentar muss schon erlaubt sein. Da hilft es auch nicht hinterher dagegen zu wettern.


Da wünsch ich dir doch weiter viel Erfolg - ob mit oder ohne Pullups... Mir ist's egal - und du weißt es ja sowieso besser.

Ich weiß ja, dass es Dir egal ist, das hast Du schon mal in einer PM geschrieben. Deshalb verstehe ich auch gar nicht, warum Du Dich überhaupt dann dazu einlässt. Ob die Pullups drin bleiben oder nicht, werde ich irgendwie, irgendwann sowieso feststellen, auf die ein oder andere Weise. Aber ist es nicht schön, dass wir hier ein Forum dafür haben, um solche Sachen hinterfragen zu können? Und ist es nicht schön, dass es Leute gibt, die das auch alles wissen und sofort eine richtige, auf die Frage passende Antwort geben können?


wirken deine weiteren Ausführungen leider ziemlich hilflos.

Deine Randbemerkungen zu Unsinnigkeiten und der ganze Streit, den Du anzettelst, sowieso.


Freundlichen Gruß
Moppi


PS: habe nichts einzuwenden, wenn der Thread geschlossen wird, persönliche Profilierungsattacken brauche ich nicht