Forum: Compiler & IDEs Ausgänge setzen in C/ Anfänger


von Jonathan K. (joni8a)


Lesenswert?

Hallo, ich bin neu was die programmierung der AVR´s in C angeht. Ich 
habe mir auch schon das Tutorial angekuckt. Ich bin nicht grad weit 
gekommen bevor ich passen musste. Ich verstehe nicht wie ich die ports 
beschalte. Ich möchte den port A0 als ausgang definieren und auf high 
setzen, A1 möchte ich dagegen auf low setzen. Da komme ich nicht weiter, 
ich werde aus den Tutorials nicht schlau, hoffe jemand kann mir helfen.

joni8a

von Peter (Gast)


Lesenswert?

Hallo,
um einen enstprechenden Portpin als Ausgang zu setzen musst du einfach 
das entsprechende Bit im DDRX Register setzen. (Das X steht für den 
jeweilgen PORT(A,B,C, D) ). Wenn das Bit des Portpins null ist ist es 
ein Eingang. In deinem Bsp. wäre des dann einfach:
DDRA |= (1<<PA0);
Gruß
Peter

von Jonathan K. (joni8a)


Lesenswert?

Hi, erstmal danke für die antwort, wenn ich jetzt folgendes programm auf 
meinen avr spiele passiert leider nichts :(. Die LED bleibt tot.


#include <avr/io.h>

int main(void)
{
  DDRA |= (1<<PA0);
  while(1)
    {

    }
  return 0;   /* never reached */
}

von Matthias (Gast)


Lesenswert?

Bis jetzt ist es afaik auch nur als Ausgang definiert. Mehr nicht!

von Jonathan K. (joni8a)


Lesenswert?

Oh ok, und wie setze ich in denn auf high?

von Spinne (Gast)


Lesenswert?

>Die LED bleibt tot
Arme LED.

Mit Deinem Programm ist, wie Matthias schon sagt, der Port auf Ausgang 
geschaltet. Nach dem Reset ist das Datenregister auf 0 gesetzt. D.h. Du 
müsstest eine 0 (= 0V) messen können.

Was benutzt Du für eine Hardware? Die LED könnte theoretische jetzt 
leuchten.

Der Code
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
  DDRA |= (1<<PA0);
6
  PORTA |= (1<<PA0);
7
8
  while(1)
9
    {
10
11
    }
12
  return 0;   /* never reached */
13
}

Sollte jetzt aber, die LED zum leuchten bringen. Wenn nicht, ist was 
anderes los.

von Jonathan K. (joni8a)


Lesenswert?

Danke, jetzt klappt es!

joni8a

von Spinne (Gast)


Lesenswert?

Hach. Ich liebe es wenn es funktioniert.

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.