PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED über DDR steuern????



3mal3
09.08.2006, 10:09
Hy, ich bin Anfänger beim programmieren von µC. Hab den RN-Control und AVRStudio.
Ich möchte nur mal eine LED zum blinken bringen, aber wenn ich den Port als Ausgang definiere leuchtet die LED ohne das ich den Port auf high setzen muss.
DDRA=(1<<DDA0);
//LED leuchtet ab hier
PORTA |=(1<<PA0); // nicht notwendig
PORTA &=~(1<<PA0); //schaltet die LED nicht ab!!
dachte eigentlich dass die LED´s über Port´s oder Pin´s an und ausgemacht werden müssen und nicht über DDR.. nur zum definieren ob Eingang oder Ausgang.
Seh ich da was falsch oder wo ist der Denkfehler

linux_80
09.08.2006, 11:00
Hallo,
Du meinst PortC, denn die LEDs sind beim RN-Control über PortC angeschlossen.
Die LEDs sind gegen Gnd, also Masse (oder 0V), angeschlossen, so leuchten die wenn der Port auf 0 ist, und sind aus wenn der Port auf 1 gesetzt wird.
Das wird aber oft so gemacht, denn nicht alle Controller können den Strom liefern den eine LED braucht um zu leuchten.
Der Mega32 könnte das jetzt schon, aber schadet nicht es so zu machen.

SeaLion
10.08.2006, 15:27
Wenn die Schaltung von dir richtig ist, dann liegt dein Denkfehler in der Geschwindigkeit des Controllers.
Wenn du nur den oben genannten Code verwendentest blinkt die LED mit (Achtung Schätzwert) 100kHz oder mehr (je nach Quarzfrequenz).

3mal3
11.08.2006, 07:57
Danke, daran lag´s. Habe es jetzt auch hinbekommen.
Anschlussfrage:
ist das richtig: wenn man zB eine LED zum leuchten bringen will, muss das Port auf High gesetzt werden klappt nicht wenn Pin auf High (gesetzt); verbindet man einen "High"-Port (mit Kabel) auf einen anderen Port und will das dieser bei High-Pegel eine Aktion ausführtmuss man den Pin-Zustand abfragen und nicht den Port-Zustand (if bit_is_set PinA...) -->Aktion. nicht (if bit_is_set PortA...).

also High erzeugen -> Port
High detektieren -> Pin

Richtig? Warum?

linux_80
11.08.2006, 13:43
Hallo,
das liegt daran, das die Eingänge an PinX ankommen, und die Ausgänge über PortX angesprochen werden.
Je nach Richtung im DDRx.
Dazu kommt noch, wenn ein Port auf Eingang gestellt ist, kann man per PortX einen Pullup einschalten wenn er auf 1 gesetzt wird.

PS:
ist so von Atmel gebaut worden.