Hallo, ich habe das OMILEX AVR Starter Kit das man aus dem µc-Shop und versuche mich grade ein wenig an der Programmierung des LEDs. Meine Frage ist folgende: Mein Programm besteht nur aus: int main(void) { DDRC |= (1<<PC5); // (PC5 LED) PORTC &=~ (1<<PC5); while(1) { } } Obwohl ich mit &=~ den Port an PC5 "ausschalte" leuchtet meine LED?! Woran liegt das? Mein Multimeter zeigt 0V an. Die LED leuchtet aber trotzdem. Mache ich es umgekehrt und lege mit PORTC |= (1<<PC5) Spannung an geht die LED aus?! Kann das wer erklären? Danke schonmal! r.
µc-mensch schrieb: > Tatsache :P an der LED liegt erst Spannung an wenn ich es umgekehrt > programmiere. das warum musst du aber noch erklären, dann hast du es verstanden.
Ganz einfach: Die LED liegt mit einem Beinchen an der Spannungsversorgung, wird also dauerhaft mit Spannung versorgt. Das andere Beinchen wird dann über den µC auf LOW-gezogen, wenn du den Pin auf 0 setzt. Also fällt an der LED Spannung ab und sie leuchtet. Wenn du den Pin auf HIGH setzt liegt an beiden Beinchen der LED (vermutlich) die selbe Spannung an, es fällt also keine Spannung ab, und die LED leuchtet nicht. Warum wird das gemacht? ganz einfach: Damit an der LED immer eine gleich hohe Spannung anliegt, und sie damit immer "gleich hell" leuchtet. Würde man es andersherum machen, Würde an der LED ein Pegel anliegen, was bedeutet das ein HIGH z.B. zwischen 4,5V und 5,5V liegt, und damit nicht gewährleistet ist, das die LED immer gleich hell leuchtet. Ob mann den Helligkeitsunterschied zwischen 4,5V und 5,5V effektiv sieht, sei mal dahin gestellt. Die Beschreibung ist nicht ganz korrekt, das weiß ich, aber es reicht grob um zu verstehen was passiert. Grüße
Kaj schrieb: > Warum wird das gemacht? Historisch hat man das so gemacht, weil die n-Kanal-Transistoren, die die Ausgänge in Richtung GND schalten, stromergiebiger waren als die p-Kanal-Transistoren, die in Richtung Vcc schalten (oder gar, wie bei vielen 8051, nur n-Kanal-Transistoren existieren, der High-Pegel wird dann nur durch Pullup-Widerstände erzeugt). Heutzutage sind bei den meisten Controllern die n-Kanal- und die p-Kanal-Transistoren ungefähr gleich stark, sodass man diese Schaltungsvariante eigentlich nicht mehr braucht. Macht man halt nur noch so, weil man es schon immer so gemacht hat.
Danke für die Erklärung! Deine Erklärung macht natürlich Sinn wenn man dann am Schaltplan auch tatsächlich erkennt das ein Beinchen schon versorgt wird. 2mal Spannung anlegen wäre in dem Fall weniger sinnvoll. Jetzt machts natürlich auch Klick wieso man erst den Port auf Ausgang setzt (also Spannung) um Ihn dann wieder auszuschalten damit eben auch ein Strom fließt. Danke Jungs & Mädels (falls welche dabei waren...) Gruß. µc
µc-mensch schrieb: > Jetzt machts natürlich auch Klick wieso man erst den Port auf Ausgang > setzt (also Spannung) um Ihn dann wieder auszuschalten damit eben auch > ein Strom fließt. Fast(!) richtig :-) Du schaltest ihn nicht wieder aus, sondern du schaltest ihn aktiv auf Low. Nur dadurch, daß Low-Pegel rauskommt (0V), kann Strom durch die LED fließen. Wenn du ihn ausschalten würdest, wäre er wieder hochohmig und nix würde passieren. Wollte das nur nochmal richtigstellen, ok?
Jörg Wunsch schrieb: > Historisch hat man das so gemacht, weil die n-Kanal-Transistoren, > die die Ausgänge in Richtung GND schalten, stromergiebiger waren als > die p-Kanal-Transistoren, die in Richtung Vcc schalten (oder gar, > wie bei vielen 8051, nur n-Kanal-Transistoren existieren, der > High-Pegel wird dann nur durch Pullup-Widerstände erzeugt). > > Heutzutage sind bei den meisten Controllern die n-Kanal- und die > p-Kanal-Transistoren ungefähr gleich stark, sodass man diese > Schaltungsvariante eigentlich nicht mehr braucht. Macht man halt > nur noch so, weil man es schon immer so gemacht hat. Ja das liest man hier im Forum öfter. Die Leute sollten besser mal die Suchfunktion benutzen bevor sie dauernd das gleiche fragen.
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.