Frage zu Bitmanipulation.

Gast #3311519
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.
Gast #3311547
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
Moderator Persönliche Seite #3311568
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.
Gast #3311570
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
Gast #3311662
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?
#3311936
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren