Pin A5 und 1 (im obigen Bild ist nur A5 abgebildet) sind als Inputs definiert. Wenn sie HIGH sind bringen sie jeweils eine LED zum leuchten (if A5 == HIGH usw) . Die Widerstände betragen 10kOhm. Ja es funktioniert..
Frage 1: Ist dies richtig übersetzt und ist die Reihenfolge des Widerstandes in den folgenden Bildern egal?
Frage 2: ist eine Verständnisfrage .. ist mein Gedankengang richtig?
Strom fließt von + (5V) nach - (GND).
Wenn ein Taster betätigt wird fließt Strom durch den 10 kOhm Widerstand zu GND. Der Strom beträgt 0,5 mA (5V/10kOhm)
diese 0,5 mA misst (?) der Arduino und gibt ein "HIGH"-Signal weiter (??).
Frage 3: wozu benötige ich überhaupt einen Widerstand? der Taster verbraucht ja kein Strom, also muss doch auch keiner gedrosselt werden?
Zuallererst. Verwende nicht die Pins 0 und 1. Darüber läuft die Serielle Schnittstelle und darum das UPLOAD. Wenn Du sie benutzt dann funktioniert unter umständen der Upload des Sketches nicht mehr.
1)So gesehen ist die Reihenfolge nicht egal weil Du 2 verschiedene Schaltungen hast. http://oi58.tinypic.com/9sxk46.jpg sind die Eingänge direkt mit GND verbunden und ein Tastendrücken ändert nichts.
Sehr sehr wenige ICs messen den Strom; die meisten messen Spannungen. Wenn eine Strom zu messen ist dann wird ein Widerstand (Shund) verwendet und der Spannungsabfall darauf gemessen.
Wenn der Taster nicht gedrückt ist dann bekommt der Eingang ein HIGH (5V) Signal vom Widerstand. Der Strom des Eingangs ist sehr gering (unter 1µA) und bei einem 10 kOhm Widerstand ist der dadurch resultierende Spannungsabfall zu vernachlässigen.
Wenn der Taster gedrückt wird, wird der Arduino-Pin auf Masse gezogen und der Arduino liest LOW. Nebeneffekt: am Widerstand ist eine Spannung von 5V angelegt und es fließt darum ein Strom. Dieser Strom hat keinen Einfluß auf die Funktion des Eingangs.
unbeschaltete Eingänge (also mit offenen Taster und ohne Widerstand) haben einen so hohen Eingangswiderstand das Stöhrungen leicht eine Spannung erzeugen, daß der Eingang HIGH liest. Da die Störungen unvorhersehbar sind, hast Du unvorhersehbare Eingangszustände. Ein Widerstand auf 5V (oder Masse) gibt dem Eingang einen definierten Zustand.
Zunächst einmal danke Uwe für die Antwort! Jedoch verstehe ich den Mittelteil nicht so ganz ..
uwefed:
2.) [...] Wenn der Taster nicht gedrückt ist dann bekommt der Eingang ein HIGH (5V) Signal vom Widerstand. Der Strom des Eingangs ist sehr gering (unter 1µA) und bei einem 10 kOhm Widerstand ist der dadurch resultierende Spannungsabfall zu vernachlässigen.
Wenn der Taster gedrückt wird, wird der Arduino-Pin auf Masse gezogen und der Arduino liest LOW. Nebeneffekt: am Widerstand ist eine Spannung von 5V angelegt und es fließt darum ein Strom. Dieser Strom hat keinen Einfluß auf die Funktion des Eingangs.
.. hm, ich weiß nicht, wie ich's ausdrücken soll. Ich möcht dir nicht unterstellen, dass du dich geirrt oder verlesen hast, aber laut dir ist der der Pin-Modus auf Low, wenn der Taster gedrückt ist. Ich habe den Arduino jdoch so programmiert, dass er die LED zum leuchten bringt wenn A5 auf HIGH ist (= wenn die Taste gedrücktist).
Denkfehler meinerseits oder Schreibfehler deinerseits? (ouh man, das klingt irgendwie provokant.. soll es aber nicht.. )
Wenn man den Widerstand zwischen +5V und Eingang und den Taster zwischen Masse und Eingang schaltet dann bekommt Arduino ein LOW-Signal wenn der Taster gedrückt wird. Statt des Widerstands kann auch der interne Pullup-Widerstand aktiviert werden.
Wenn man den Widerstand zwischen Masse und Eingang und den Taster zwischen +5V und Eingang schaltet dann bekommt Arduino ein HIGH-Signal wenn der Taster gedrückt wird.
Beide Möglichkeiten sind gleichwertig. Bei Verwendung des internen Pullupwiderstandes braucht es aber keinen externen Widerstand und darum hat die erste Möglichkeit bei verwendung des internen Widerstandes Vorteile.
Du hast Recht, ich habe Deine beitrag nicht aufmerksam genug gelesen.
Ich hoffe meine obrige Erklährung klährt alles.
Jeodoch bahnt sich grad das nächste Verständigungsproblem an: Im Arduino-"Reference" Bereich (constants - Arduino Reference) steht, dass an einen Arduino Pin, insofern er als Input deklariert und LOW ist, eine Spannung von 2V anliegt. Aber wieso? Wieso nicht 0V?
the microcontroller will report LOW if a voltage of 2 volts or less is present at the pin.
Hast du Ursache und Wirkung verwechselt:
Wenn du irgendwas zwischen 0 .. 2V anlegst, wird es als LOW erkannt.
Wenn du nichts anlegst (oder gar ein Stück Draht, das "nirgends" hinführt), ist der Zustand undefiniert und wird sich schnell ändern.
Wenn du einen Pin als INPUT_PULLUP definierst, und ein Messgerät dranhältst, siehst du 5V ( genauer: einen Wert fast so hoch wie am 5V Pin) (gegen GND gemessen). Mit digitalRead wirst du sicher HIGH erhalten. Den Pin kannst du ohne weiteres mit GND verbinden (direkt oder mit Taster) und wirst dann 0V messen und LOW erhalten.
The meaning of LOW also has a different meaning depending on whether a pin is set to INPUT or OUTPUT. When a pin is configured as an INPUT with pinMode, and read with digitalRead, the microcontroller will report LOW if a voltage of 2 volts or less is present at the pin.
Da steht jedoch etwas anderes wie Du verstanden hast.
... the microcontroller will report LOW if a voltage of 2 volts or less is present at the pin.
Da muß man in die Digitaltechnik etwas ausholen. Es muß ja irgendwie festgelegt sein, aber welcher Spannung der Pegel als High-Signal und bis zu welcher Spannung ein Low-Signal definiert ist. Dazwischen gibt es einen ungültigen/verbotenen Bereich.
Übersetzt steht hier, zwischen 0 und 2 Volt am Pin, gibt Dir der µC ein Low-Signal zurück, wenn Du den Pin mit digitalRead abfragst. Das heißt der µC gibt keine 2V oder so raus, sondern die müssen anliegen.
Wobei !!! Hier muß in der Arduino Doku ein Fehler drin sein. 2V dürfen niemals LOW-Signal bedeuten. Laut TTL 5V Definition ist LOW bis max. 0,8V und ab 2V gilt es als High-Signal. Dazwischen wäre der verbotene Bereich.
Außer "Arduino" liest analog ein und wandelt intern in Abhängikeit der Spannung nach digital. Wäre aber grober Unfug. Zumal das nicht mit jeden Pin funktionieren würde.
Doc_Arduino:
Wobei !!! Hier muß in der Arduino Doku ein Fehler drin sein. 2V dürfen niemals LOW-Signal bedeuten. Laut TTL 5V Definition ist LOW bis max. 0,8V und ab 2V gilt es als High-Signal. Dazwischen wäre der verbotene Bereich.
Außer "Arduino" liest analog ein und wandelt intern in Abhängikeit der Spannung nach digital. Wäre aber grober Unfug. Zumal das nicht mit jeden Pin funktionieren würde.
Signal LOW wird erkannst bei
Vcc = 1.8V - 2.4V -0.5V - 0.2*Vcc
Vcc= 2.4V - 5.5V -0.5V - 0.3*Vcc
Signal HIGH wird erkannt bei
Vcc = 1.8V - 2.4V 0.7*Vcc - Vcc + 0.5V
Vcc= 2.4V - 5.5V 0.6*Vcc - Vcc + 0.5V
Das würde bein Arduino (Atmega328P) und einer Vcc von 5V bedeuten:
LOW-Signal: -0.5V - 1,5V
HIGH-Signal: 3,5V - 5.5V
Irgendwo werden die sich aus der Beschreibung dann die 2V abgeleitet haben.Ausgehend vom niedrigsten Wert (-0.5V) bis zum max. höchst erlaubten für LOW-Level von 1.5V liegt nun einmal 2V an. Jedoch nicht zwischen dem Vcc und Gnd Potential und da liegt dann der Hund begraben.
Kann ich zustimmen. 0,8 un 2V sind TTL Grenzwerte für die TTL Serie SN7400. Andere Serien haben schon andere Limits.
CMOS haben Limits die auf die Versorgungssspannung bezug nehmen wie sschultewolter richtig schreibt.