Forum: Mikrocontroller und Digitale Elektronik AVR: wenn Portpin Null => 1


von AntonWerger (Gast)


Lesenswert?

Hallo,

der Portpin B4 eines AVR-Controllers soll abgefragt werden.

Wenn der Pin auf Hi liegt, soll das Ergebnis der Abfrage 0 sein.

Liegt der Portpin auf Lo, soll das Ergebnis 1 sein.

1
if (PINB &= ~(1<<PINB4) )) { ;}

Eigentlich hatte ich angenommen, dass es so funktionieren müsste, aber 
irgendwie klappt es nicht.
Liegt es an meinem Ausdruck, oder ist der Fehler woanders.

In jedem Fall ist der genannte Pin auf Eingang konfiguriert.

von Klaus W. (mfgkw)


Lesenswert?

&= ist doch eine Zuweisung!
Willst du das?

von AntonWerger (Gast)


Lesenswert?

AntonWerger schrieb:
> if (PINB &= ~(1<<PINB4) )) { ;}

Hupps, da hatte ich grade im Posting oben eine Klammer zu viel 
geschrieben, sorry!

So soll es heißen:
1
if (PINB &= ~(1<<PINB4) ) { ;}


Klaus Wachtler schrieb:
> &= ist doch eine Zuweisung!
> Willst du das?

Hupps!

von Klaus W. (mfgkw)


Lesenswert?

Probier doch mal sowas:
1
ergebnis = ( PORTB&( 1<<PINB4 ) )==0;
bzw.
1
   if( ( PORTB&( 1<<PINB4 ) )==0 ) { /* Pin ist 0, Ergebnis ist 1 */ } else { /* Pin ist 1, Ergebnis ist 0 */ }

von Falk B. (falk)


Lesenswert?

@ AntonWerger (Gast)

>Wenn der Pin auf Hi liegt, soll das Ergebnis der Abfrage 0 sein.
>Liegt der Portpin auf Lo, soll das Ergebnis 1 sein.

Ein klassicher Fall von Bitmanipulation und C-Grundlagen.

Eher so.

1
if ( !(PINB & (1<<PINB4)) ) {
2
  // B4 is LOW
3
} else {
4
  // B4 is HIGH
5
}

>Eigentlich hatte ich angenommen, dass es so funktionieren müsste, aber
>irgendwie klappt es nicht.

Do macht eine Zuweisung, willst aber nur eine logische Verknüpfung.

>Liegt es an meinem Ausdruck,

Ja

von Simon S. (-schumi-)


Lesenswert?

nWerger schrieb:
>
1
> 
2
> if (PINB &= ~(1<<PINB4) )) { ;}
3
> 
4
>
Zudem fragst du hier alle Pins außer B4 ab.
1
if( ~PINB & (1<<PINB4) )
2
{
3
4
}

von Klaus W. (mfgkw)


Lesenswert?

BTW:
Heißt das nicht PB4 statt PINB4?

Kann mich aber auch täuschen...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Klaus Wachtler schrieb:
> Heißt das nicht PB4 statt PINB4?

Geht beides. Beides ist als 4 definiert.

PB4 ist für die Anwendung auf PORTB gedacht, PINB4 für die Anwendung auf 
PINB4.

von Klaus W. (mfgkw)


Lesenswert?

Frank M. schrieb:
> PINB4 für die Anwendung auf
> PINB4.

klar :-)

Danke, war mir nicht mehr bewusst.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Klaus Wachtler schrieb:
> Frank M. schrieb:
>> PINB4 für die Anwendung auf
>> PINB4.
>
> klar :-)

Sorry, PINB4 für die Anwendung auf PINB (ohne 4) sollte das heißen ;-)

Es könnte ja mal zukünftig ein AVR existieren, dessen PINs mit einer 
anderen Numerierung abgefragt werden muss als die des PORTs. Wird aber 
wohl nie passieren ;-)

von AntonWerger (Gast)


Lesenswert?

Vielen Dank für die Antworten!

Simon S. schrieb:
> if( ~PINB & (1<<PINB4) )

Super, Danke Simon!!!

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.