ok, ich habe wohl ein wenig für Verwirrung gesorgt. Versuche mal die von mir genannten Begriffe und Abkürzungen zu erläutern. Ich gebe mir Mühe... versprochen, aber ein wenig hat das natürlich mit Elektrotechnik zu tun, da kann ich nix zu.
Ansonsten könnt ihr mich auf dem AXEFest löchern oder auch steinigen. Aber lieber der Erstere, bei ein oder zwei Bier
1. Prellen
Prellen von z.B. Tastern ist ein rein mechanisches Phänomen, bei dem die Kontakte beim Drücken des Tasters nicht sofort eindeutig schließen. Das heißt, der Kontakt prellt kurze Zeit (bis zu 5 ms) zwischen auf und zu hin und her. Vergleichbar mit einem Lineal, dass man am Tischrand federn lässt. Dadurch kann ein Tastendruck auf einen nicht entprellten Taster als mehrere Tastendrücke wahrgenommen werden. Dieses prellen lässt sich nicht (!) allein durch die Beschaltung durch einen Pullup bzw. Pulldown Widerstand vermeiden. Die dazu notwendige Hardware- oder Software Lösung habe ich ja bereits beschrieben (mein Gekritzel auf den Bildchen).
2. Pullup bzw. Pulldown Widerstand.
Ein Pullup bzw. ein Pulldown Widerstand bildet eine Reihenschaltung mit dem z.B. Taster (oder Transistor bei der oben erwähnten Open Kollektor Technik).
Pullup (zieh hoch) Widerstand
Code:
+ (VCC)
----------------------
|
|
-
| |
| |
- Tasterwert
|---------------
|
\
\
|
| - (GND)
----------------------
|
-
Pulldown (zieh runter) Widerstand
Code:
+ (VCC)
----------------------
|
|
\
\
| Tasterwert
|--------------
-
| |
| |
-
|
| - (GND)
----------------------
|
-
In einer Reihenschaltung fallen die Spannungen an den jeweiligen Widerständen proportional zum Widerstandswert ab.
Ist der Taster nicht gedückt, hat dieser einen riesig großen Widerstand im Vergleich zum Pullup bzw. Pulldown Widerstand. D.h., fast die gesamte Spannung fällt am Taster ab.
Ist der Taster gedrückt (kurzgeschlossen), hat dieser einen winzigen Widerstand im Vergleich zum Pullup bzw. Pulldoewn Widerstand. D.h. fast die gesamte Spannung fällt am Pullup bzw. Pulldown Widerstand ab.
Daraus folgt mit Pull up Widerstand:
Bei nicht gedrücktem Taster fällt am Taster die gesamte Spannung ab -> Tastenwert ist auf VCC (Versorgungsspannung z.B. 5V)
Bei gedrücktem Taster fällt die gesamte Spannung am Widerstand ab -> Tasenwert ist auf GND (Masse oder 0V)
Beim Pulldown Widerstand ist das umgekehrt.
Warum benötigt man so einen komischen Widerstand überhaupt?
Wenn man ihn weglassen würde, wäre dort aber dennoch ein gedachter sehr sehr hochohmiger (parasitärer) Widerstand, die Isolation. Der Schalter hat einen ähnlich hohen Widerstand wenn er nicht gedrückt ist. Daraus folgt ein Spannungsteiler mit zwei ähnlich hohen Widerständen wo wir die Werte aber nicht genau kennen. Sprich wir kennen auch nicht den Spannungswert am Ausgang (Tasterwert). Weiterhin "fängt" sich so ein hochohmiges System auch gerne mal Ladungen von z.B. Leutstoffröhren oder ähnlichem Elektrosmog ein. Da diese Ladungen aber nicht so leicht abfließen können (hochohmiges System, da zu allen Seiten hin isoliert
), ist dort noch mal ein riesiger Unsicherheitsfaktor was die Ausgangsspannung betrifft.
Für den Fall des gedrückten Tasters bräuchten wir keinen Pullup bzw. Pulldown Widerstand, da diese in diesem Fall ja den großen Widerstand des Spannungsteilers darstellen und das kann natürlich auch die Isolation. Einfangen kann man sich da auch nichts, da der gedrücktze Taster ja einen sehr kleinen Widerstandswert hat.
Das bedeutet auf den Punkt gebracht,
- der Pullup Widerstand sorgt bei nicht gedrücktem Taster für eine stabile "1" (VCC oder Versorgungsspannung) am Ausgang.
- der Pulldown Widerstand sorgt bei nicht gedrücktem Taster für eine stabile "0" (GND oder Masse) am Ausgang.
Das Ganze hat aber nichts mit Prellen zu tun! Für eine ordentliche hardwareseitige Entprellung braucht es einen Kondensator, ob als extra Bauteil oder parasitär sei mal dahin gestellt!
3. VCC ist die Versorgungsspannung
4. GND ist die Masse (Minuspol)
5. uC ist die Abkürzung für Mikrocontroller
6. PORT, DDR und PIN Register des AVR bzw. ATMEGA Prozessors.
Ich gehe davon aus, dass ihr alle Arduinos mit ATMEGA (= AVR) Prozessoren habt. Es gibt mittlerweile auch ARM basierte, aber die Wahrscheinlichkeit ist doch sehr sehr groß
Bei den Arduiono Boards werden speziell für diese Plattform zugeschnittene Bibliotheken zur Verfügung gestellt, so dass man sich mit den Innereien des Controllers nicht abgeben muss.
Nur muss ein Taster jenachdem wie er angeschlossen wird auch unterschiedlich abgefragt werden (siehe Posting von mir weiter oben). Da sind diese Register wichtig. In wie weit die Varianten durch die Bibliotheken unterstützt werden kann ich nicht sagen.
Nun zum Erklärungsversuch:
Beim AVR werden jeweils 8 Anschlüsse zu einem Port zusammengesetzt. Im ATMEGA8 gibt es z.B. PORTB PORTC und PORTD. Über diese Register, die bei der Programmierung in der Sprache C als Variablen zur Verfügung stehen, kann ein Wert ausgegeben Werden.
Die Abkürzung DDR bedeutet hier Data Direction Register. Die DDR Register (beim ATMEGA8 DDRB, DDRC oder DDRD) dienen also dazu, dem AVR mitzuteilen, ob ein Anschluß ein Eingang oder ein Ausgang sein soll.
Eingelesen werden Werte über das PIN Register (PINB, PINC oder PIND). Ein beliebter Flüchtigkeitsfehler ist der Versuch Werte über das PORT Register einzulesen. Hier liest man aber nur die Werte, die man eigentlich ausgeben möchte, nicht die tatsächlichen.
Die internen Pullup Widerstände kann man nur einschalten, wenn ein Anschluß als Eingang konfiguriert ist (macht auch Sinn!). In diesem Fall benötigt man ja das PORT Register nicht, da man ja einlesen und nicht ausgeben will. Somit habe sich die Entwickler gedacht, Siliziumfläche ist teuer ... wir verwenden einfach das PORT Register doppelt.
Also, das Port Register gibt (wenn der Anschluß ein Ausgang ist) die Werte aus oder steuert (wenn der Anschluß ein Eingang ist) , ob ein Pullup Widerstand an ist bzw. aus ist
So, ich habe fertig und wahrscheinlich noch mehr verwirrt... wenn dem so ist, Entschuldigung!!