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 | 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ß
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 | 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ß
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.