Hallo! Ich bin Anfänger in AVR-Programmierung. Gibt es eine Möglichkeit den Status eines Ausganges (bspw. PD1) einzulesen? Und zwar ob da gerade eine 1 oder eine 0 ausgegeben wird? Gruß, Benny
Datenblatt, Seite 53: "Independent of the setting of Data Direction bit DDxn, the port pin can be read through the PINxn Register bit."
Vielen Dank für den Hinweis... ich komme aber nicht wirklich weiter damit... und zwar möchte ich den Signalzustand an PD1 einlesen und über eine LED an PA2 ausgeben. Zudem möchte ich die Funktion intern(); ausführen, wenn die LED vorher nicht geleuchtet hatte. Pullup an PD1 ist aktiv.
1 | if (PIND & (1<<PD1)) PORTA &= ~(1<<PA2); else { //LED aus wenn HIGH |
2 | if (!(PINA & (1<<PA2))) //LED-Ausgang einlesen. Wenn nicht an, dann |
3 | PORTA |= (1<<PA2); // LED einschalten und |
4 | intern(); //Funktion intern aufrufen. |
5 | }
|
Wenn ich nun PD1 auf Masse lege geht zwar die LED an - jedoch führt er die Funktion intern(); immer aus... auch wenn die LED bereits leuchtet. Ich dachte dies kann man umgehen wenn man den Ausgangspin PA2 einliest. Wenn HIGH (=LED leuchtet) anliegen sollte wird die Funktion intern() nicht erneut aufgerufen... Woran liegt das? Viele Grüße, Benny
Benny wrote:
> Woran liegt das?
Vielleicht daran, dass das if in dem else -Block keinerlei
Auswirkung auf den Funktionsaufruf hat? Wenn die Funktion nicht mehr
ausgeführt werden soll, wenn PA2 bereits high ist, dann musst Du noch
ein paar Klammern spendieren.
Oder alternativ die öffnende Klammer anders positionieren.
1 | if (PIND & (1<<PD1)) |
2 | PORTA &= ~(1<<PA2); //LED aus wenn HIGH |
3 | else if (!(PINA & (1<<PA2))) { //LED-Ausgang einlesen. Wenn nicht an, |
4 | PORTA |= (1<<PA2); //dann LED einschalten und |
5 | intern(); //Funktion intern aufrufen. |
6 | }
|
aha - es funktioniert - vielen vielen Dank! Da hab ich wohl eine Klammer übersehen, die weitreichende Folgen hatte ;) Gruß, Benny
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.