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ß
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).
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
intmain(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
return0;// (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ß
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.
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
intmain(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
return0;// (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ß
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
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.
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.