Forum: Mikrocontroller und Digitale Elektronik Schalten mit logischen Pegeln (AVR ATmega8515)


von Benjamin K. (exs)


Lesenswert?

Hi,

wenn ich mir das AVR-Tutorial so anschaue und auch den Artikel zu 
Entprellung fällt mir auf, dass dort der logische Pegel "Taster 
nicht gedrückt" eines Eingangs immer "high" ist. Wenn man den Taster 
drückt wird dieser Eingang dann auf "low" gezogen. Was ja von der Logik 
her verdrehte Pegel bedeutet.

Taster gedrückt = 0
Taster nicht gedrückt = 1

Warum wird das so gemacht?

Stellt sich natürlich direkt die Frage, ob man das auch anders machen 
kann? Also

Taster gedrückt = 1
Taster nicht gedrückt = 0

Wenn ich das richtig sehe, hätte die zweite Methode doch den Vorteil, 
dass kein Strom fliesen würde, solange kein Taster gedrückt ist. Wie 
verhält es sich da mit den internen Pull-Up-Widerständen?

Die Schaltung würde dann in etwa so aussehen:

o +5V
|
R
|    _
|    |
+---o o----o (INPUT des µC)


Zum Entprellen würde ich dann dem Taster einen Tiefpass nachschalten. 
Also in etwa so

o +5V
|    _
|    |
+---o o--R--+---o (INPUT µC)
            |
            =
            |
           ---

Den internen PULL-UP-Widerstand würde ich abschalten.
Liegt damit dann der Input-Pin auf GND (Kondensator mal als leer 
angenommen)?

Entsprechend dem Artikel Entprellung müsste der Tiefpass dann so 
ausgelegt werden, dass er Frequenzen < 50Hz durchlässt.

Gruß Benny

von Mario (Gast)


Lesenswert?

Wenn ich das richtig in Erinnerung habe, liegt es daran, daß eine 
Spannung unter etwa 1Volt als logische 0 erkannt wird, wenn man von der 
klassischen TTL Technik ausgeht, fließt da der Emitterstrom des 
Eingangstransistors aus dem Eingang heraus (-> Ersatzschaltibild einer 
TTL Eingangsstufe). Dieser ist recht hoch. Daher müßte der Wiederstand, 
der den Eingang nach Masse zieht, sehr niederohmig sein. So etwas ist 
immer ungut.

Umgekehrt diesen Eingang nach 5V ziehen ist um einiges niederohmiger.

Konkrete Werte kann ich dir nicht sagen, müßte man in den Daten eines 
"Standard-TTL-Gatters" nachsehen. Relevant ist der Strom der bei LOW aus 
dem Eingang nach Masse fließt und der Strom, der bei einem HIGH ins 
Gatter rein fließt, dann U=R*I anwenden und rechnen.

von Mario (Gast)


Lesenswert?

Umgekehrt diesen Eingang nach 5V ziehen ist um einiges niederohmiger.

muß natürlich richtig

Umgekehrt diesen Eingang nach 5V ziehen ist um einiges hochohmiger

heißen.

von Karl H. (kbuchegg)


Lesenswert?

Benjamin K. wrote:

> Warum wird das so gemacht?

Weil man dann den internen Pull-Up Widerstands des Ports benutzen kann.

> Stellt sich natürlich direkt die Frage, ob man das auch anders machen
> kann? Also
>
> Taster gedrückt = 1
> Taster nicht gedrückt = 0

Sicher kann man.

> Wenn ich das richtig sehe, hätte die zweite Methode doch den Vorteil,
> dass kein Strom fliesen würde, solange kein Taster gedrückt ist. Wie
> verhält es sich da mit den internen Pull-Up-Widerständen?

Dann brauchst du einen externen Pull-Down Widerstand, der dir den Pin 
bei nicht gedrücktem Taster definiert auf Low zieht.

> Die Schaltung würde dann in etwa so aussehen:
>
> o +5V
> |
> R
> |    _
> |    |
> +---o o----o (INPUT des µC)
>

Nö.
Sieh dir den Eingang an.
Wenn der Taster nicht gedrückt ist, auf welchem Pegel liegt er?
Da er weder mit + noch mit GND verbunden ist, hängt er in der Luft, hat 
also keinen definierten Pegel


Egal wie du es drehst oder wendest. Damit der Pin nicht in der Luft 
hängt, brauchst du immer einen PullUp oder PullDown, der einen 
definierten Pegel am Pin herstellt, wenn der Taster nicht geschlossen 
ist. Da du den aber sowieso brauchst, ist es einfacher den internen her 
zu nehmen und damit die Logik umzudrehen. Das ist ja auch kein Problem, 
denn programmtechnisch ist es ein Klacks das wieder umzudrehen.

Negativlogik hat auch noch andere Vorteile.
Gehn wir mal von Tastern weg und sagen wir da kommt eine Leitung aus der 
Ferne. Wenn Ruhepegel gleich 0 ist, kannst du über den Zustand der 
Leitung wenig sagen. Wenn die Leitung über einen langen Zeitraum 0 ist, 
dann kannst du nicht unterscheiden ob der Sender einfach nur nichts 
sendet oder ob die Leitung unterbrochen ist.

Ist der Ruhepegel aber 1 und sind Signale auf der Leitung kurze 0 
Signale, dann bedeutet ein langer 0-Pegel, dass irgendwas nicht stimmt. 
Entweder ist der Sender ausgefallen oder das Kabel ist gerissen oder 
.... (Wenn man da drauf wert legt, muss der Pullup natürlich beim Sender 
sein. Der interne bringt dann nichts)

von Aha (Gast)


Lesenswert?

Invertiert denken zu koennen ist als Minimalanforderung zu betrachten...

von Benjamin K. (exs)


Lesenswert?

OK vielen Dank für die ausführlichen Erklärungen

von Jörn P. (jonnyp)


Lesenswert?

Die Logikpegel der TTL betragen 0-0,8 V für low und 2,4-5 V für high.
Leger gesagt ist es schwieriger den Pegel unterhalb der 0,8 V zu halten 
als irgendwo zwischen 2,4 und 5 Volt.
Zum Anderen sind unbeschaltete TTL-Gatter hi. Das kann jeder mit einem 
7400 ausprobieren. Die schaltung aus
http://de.wikipedia.org/wiki/Diode-Transistor-Logik
zeigt sinngemäß, das durch die Eingangsdioden nur etwas aus der 
Schaltung "heraus" fließen kann.
TTL Ausgänge leisten mehr mit aktiv low, wie man ebenfalls an dieser 
Schaltung erkennt.

von STK500-Besitzer (Gast)


Lesenswert?

Du kannst ja in deine Schaltung "Öffner" einbauen. Da würde dann im 
nicht gedrückten Zustand eine 0 am Eingang liegen, und sobald man die 
Taste betätigt hat man die 1 am Eingang. Es fließt halt die ganze Zeit 
ein bischen Strom...

von Stefan (Gast)


Lesenswert?

> Wenn ich das richtig sehe, hätte die zweite Methode doch den Vorteil,
> dass kein Strom fliesen würde, solange kein Taster gedrückt ist. Wie
> verhält es sich da mit den internen Pull-Up-Widerständen?

Nein, auch bei invertierender Logik fliesst kein Strom, wenn der Taster 
nicht gedrückt ist.

Gruß, Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.