Forum: Mikrocontroller und Digitale Elektronik Led blinken lassen


von Christian (Gast)


Lesenswert?

Guten Tag , hab da mal ein Anfängerproblem


Ich möchte eine LED blinken lassen.


while(1)
{
   PORTD = (1<<PD5);
   _delay_ms(50);
   PORTD &= ~(1<<PD5);
   _delay_ms(50);
}

Die LED geht zwar an aber nicht aus. wenn ich PORTD=0x00; hinschreib 
gehts.
Was hab ich verkehrt gemacht??? mit PORTD &= ~(1<<PD5);  lösche ich doch 
das Bit??!?!

von LED (Gast)


Lesenswert?

mach mal aus den _delay_ms(50); ein _delay_ms(500);
Dein Auge ist zu träge das bei 50ms zu erkennen. Für sich ist die 
einfach immer an.

von Christian (Gast)


Lesenswert?

dank dir ! hätt ja nicht gedacht , dass ich sooo langsam bin ... ;-)

Jetzt funktionierts, bzw. jetzt sehe ich, dass es funktioniert  ;-)

von LED (Gast)


Lesenswert?

Na ja, im Schnitt erkennt das Auge 25 Bilder pro Sekunde schon als Video 
an. bei 100ms hättest du evtl angefangen was zu erkennen ;)

von Christian (Gast)


Lesenswert?

hab noch was entdeckt. bei mir gehts nur aus, wenn ich PORTD &= 
~(0<<PD5) mache... versteh ich nicht?

von micha (Gast)


Lesenswert?

Du musst Binär denken!
mit (1 << PD5 ) wird eine 1 um den Wert von PD5 nach links geschoben
also wenn in deinem Register 0b00000000 steht steht dann 0b00100000
(ich bin einfach mal davon ausgegangen das PD5 den Wert 5 hat)
und das ~ invertiert das Register dann also:
aus 0b00100000 wird 0b11011111

http://www.mikrocontroller.net/articles/Bitmanipulation

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.