Forum: Analoge Elektronik und Schaltungstechnik Frage zu Open Collector / Open Drain


von Hans (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leute,

bitte köpft mich nicht, aber ich habe Verständnisprobleme mit Open 
Collector Ausgängen.
Dazu die Datei "As_open_drain.png" aus dem folgenden Link:
http://www.mikrocontroller.net/articles/Ausgangsstufen_Logik-ICs
Ferner habe ich die Konfiguration einer LED mit einem uC als Bild 
angehängt, siehe "Led.gif", was aus folgendem Link stammt:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

Meine Frage ich nun:
Wenn ich die LED leuchten lassen möchte, setze ich das entsprechende 
Register, also eine logische 1. Das heißt für mich, dass im Bild 
"As_open_drain.png" das "Ausgangssignal" high ist, also Vcc entspricht. 
Dadurch fängt aber der Transistor an zu leiten und zieht das 
Kollektorpotential auf GND. Die Diode, wie sie in "Led.gif" konfiguriert 
ist, fängt nun an zu leuchten, weil deren Kathode nun auf GND liegt und 
ein Strom von Vcc nach GND fließt.

bis hierhin alles richtig?

Was mich durcheinander bringt, ist, dass der PB Pin low ist, obwohl ich 
in meinem Programm eine logische 1 haben möchte.

Ist das wirklich etwas Grundsätzliches, das ich mir merken/angewöhnen 
muss?
Dass, wenn ich eine logische 1 im Programm habe, der Pin des uC dann 0 
ist?

Meine Logik ist bisher immer so gewesen, dass eine logische 1 am Ausgang 
des uC oder z.B. des LM393 Komparators bedeutet, dass der Strom aus dem 
uC bzw. dem Komparator hinausfließt. Das jeweilige Bauteil fungiert also 
als Energiequelle.

Ich hoffe, dass mein Anliegen klar geworden ist. Ich bin euch sehr 
dankbar über eine Erklärung, denn irgendwie drehe ich mich im Kreis und 
langsam verdreht sich mein Magen :/


Gruß

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hans schrieb:

> Wenn ich die LED leuchten lassen möchte, setze ich das entsprechende
> Register, also eine logische 1. Das heißt für mich, dass im Bild
> "As_open_drain.png" das "Ausgangssignal" high ist, also Vcc entspricht.
> Dadurch fängt aber der Transistor an zu leiten

Du denkst zu viel um die Ecke.

Wenn die gezeigte Open-Drain-Ausgangsstufe Bestandteil eines
Controllers oder dergleichen ist, dann wird ganz sicher ein gesetztes
Bit im entsprechenden Steuerregister bedeuten, dass der Ausgang "high"
wird (also der Transistor nicht durchgeschaltet).

> Meine Logik ist bisher immer so gewesen, dass eine logische 1 am
> Ausgang des uC oder z.B. des LM393 Komparators bedeutet, dass der
> Strom aus dem uC bzw. dem Komparator hinausfließt. Das jeweilige
> Bauteil fungiert also als Energiequelle.

Bei open drain / open collector nicht.  Dort bedeutet eine logische
1, dass kein Strom in das oder aus dem Bauteil fließt.

Falls das alles nicht dein Frage beantwortet, dann poste bitte
deinen Schaltplan und dein konkretes Programm(stück).

von Hans (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Jörg,

danke schon mal.

Dann nun mit Programmcode und Minimalschaltplan. Ich habe länger nicht 
mehr programmiert, falls etwas verkehrt sein sollte, bitte sagen.
1
#include <avr/io.h>          // (1)
2
 
3
int main (void) {            // (2)
4
 
5
   DDRD  |= 1<<PD7;             // (3)
6
   PORTD = 1<<PD7;             // (4)
7
 
8
   while(1) {                // (5)
9
     /* "leere" Schleife*/   // (6)
10
   }                         // (7)
11
 
12
   /* wird nie erreicht */
13
   return 0;                 // (8)
14
}

Der Code sollte allerdings klar sein. DDRD wird als Ausgang gesetzt, mit 
PORTD wird PD7 als high gesetzt.

Schaut man sich das Bild led.png an, frage ich mich nun, wie die LED 
leuchten kann. uC gibt 5V aus, die LED ist aber gleichzeitig an 5V 
angeschlossen. Wie kann da etwas leuchten?


Gruß

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hans schrieb:
> Schaut man sich das Bild led.png an, frage ich mich nun, wie die LED
> leuchten kann.

Ich mich auch, denn in diesem Falle kann sie nicht leuchten.

Entweder hast du eine andere Firmware drauf, die was anderes tut als
das Stück C-Code, oder sonst entspricht noch irgendwas nicht dem,
was auf den Bildern zu sehen ist.

von Hans (Gast)


Angehängte Dateien:

Lesenswert?

Jörg Wunsch schrieb:
> Hans schrieb:
>> Schaut man sich das Bild led.png an, frage ich mich nun, wie die LED
>> leuchten kann.
>
> Ich mich auch, denn in diesem Falle kann sie nicht leuchten.
Dann frage ich mich, wie das Bild im folgenden Link zu verstehen ist:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

Habe es auch als Bild angefügt.

Meiner Logik nach würde ich die LEDs wie im Bild ledmyconfig.png 
anschließen. Mit dem Programm
1
#include <avr/io.h>          // (1)
2
 
3
int main (void) {            // (2)
4
 
5
   DDRD  |= 1<<PD7;             // (3)
6
   PORTD |= 1<<PD7;             // (4)
7
 
8
   while(1) {                // (5)
9
     /* "leere" Schleife*/   // (6)
10
   }                         // (7)
11
 
12
   /* wird nie erreicht */
13
   return 0;                 // (8)
14
}
ist PD7 auf high, also 5V gesetzt. Der Strom fließt nach GND und die LED 
leuchtet. So entspricht es meiner Logik und ist entgegen dem AVR 
Tutorial.

Gruß

von Tutor (Gast)


Lesenswert?

Hans schrieb:
> ist PD7 auf high, also 5V gesetzt. Der Strom fließt nach GND und die LED
> leuchtet. So entspricht es meiner Logik und ist entgegen dem AVR
> Tutorial.

Dann hast Du das Tutorial nur halb gelesen. In dem Beispielprogramm 
werden Bit 0 und 1 von Port B auf 0 gesetzt und damit leuchten diese 
beiden LEDs.

Gruß
Tutor

von Hans (Gast)


Lesenswert?

Tutor schrieb:
> Hans schrieb:
>> ist PD7 auf high, also 5V gesetzt. Der Strom fließt nach GND und die LED
>> leuchtet. So entspricht es meiner Logik und ist entgegen dem AVR
>> Tutorial.
>
> Dann hast Du das Tutorial nur halb gelesen. In dem Beispielprogramm
> werden Bit 0 und 1 von Port B auf 0 gesetzt und damit leuchten diese
> beiden LEDs.
>
> Gruß
> Tutor

Okay, danke.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hans schrieb:
> Dann frage ich mich, wie das Bild im folgenden Link zu verstehen ist:

Es hat vorwiegend historische und minimal physikalische Gründe,
warum man sehr oft geneigt ist, Lasten (wie bspw. LEDs) an einen
Controller mit negativer Logik anzuschließen, also so, dass sie
bei Ausgang = low aktiviert sind.

Die historischen Gründe sind, dass es in der Vergangenheit nicht ganz
unpopuläre Controllerfamilien gab (die es bis heute noch überlebt
haben ;-), denen die Hersteller keine push-pull-Ausgangsstufen
spendiert haben, sondern nur open drain.  Bei diesen wird der High-
Pegel durch einen Pullup-Widerstand erzeugt, sodass sich bei einem
nach Masse angeschlossenen Verbraucher keine große Stromergiebigkeit
ergibt.  Daher klemmt man den Verbraucher an Vcc und lässt ihn durch
den open-drain-Transistor nach Masse einschalten.

Der physikalische Grund ist: die Transistoren, die nach Masse gehen,
sind n-Kanal-Typen.  Die Ladungsträger im Kanal sind Elektronen, die
eine sehr große Beweglichkeit haben.  Daher kann man bereits mit
kleinen Geometrien gute Kanalwiderständen und folglich eine gute
Stromergiebigkeit erreichen.  Die Transistoren, die nach Vcc schalten,
sind p-Kanal-Typen.  Die Ladungsträger sind "Löcher" im Gitterverbund,
die eine deutlich geringere Beweglichkeit haben als die Elektronen.
Daher hat ein p-Kanal-Transistor gleicher Geometrie eine geringere
Stromergiebigkeit im Vergleich zu einem n-Kanal-Transistor, sodass auch
push-pull-Ausgangsstufen sehr oft "unsymmetrisch" sind.

von Der (Gast)


Lesenswert?

Hans schrieb:
> As_open_drain.png    2,3 KB, 44 Downloads

Hans schrieb:
> Led.gif              1,5 KB, 42 Downloads

Hans schrieb:
> Led.gif              1,5 KB, 9 Downloads

Hans schrieb:
> ledmyconfig.png      4 KB, 19 Donwloads

Das nenne ich mal Bildformate! :-)

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.