Forum: Compiler & IDEs Frage zu Bitmanipulation.


von µc-mensch (Gast)


Lesenswert?

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.

von Justus S. (jussa)


Lesenswert?

µc-mensch schrieb:
> Kann das wer erklären?

schau dir den Schaltplan an...

von Peter II (Gast)


Lesenswert?

miss doch mal die Spannung direkt an der LED. Dann wird es die eventuell 
klar.

von Blubber (Gast)


Lesenswert?

bisschen flott,.. hm?

von µc-mensch (Gast)


Lesenswert?

Tatsache :P an der LED liegt erst Spannung an wenn ich es umgekehrt 
programmiere.

von Peter II (Gast)


Lesenswert?

µ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.

von Kaj (Gast)


Lesenswert?

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

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


Lesenswert?

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.

von µc-mensch (Gast)


Lesenswert?

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

von ich (Gast)


Lesenswert?

µ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?

von Paul M. (paul_m65)


Lesenswert?

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
Noch kein Account? Hier anmelden.