Forum: Compiler & IDEs Tasterabfrage beim Mega8


von Spyder24 (Gast)


Lesenswert?

Hallo,

mit folgender Anweisung (auf dem Mega8), frage ich doch den ersten 
Taster an PortB ab, oder?
DDRB=0x00;    //Taster
PORTB=0xFF;    //Pull-Up
if (1<<PINB0)

Im AVRSTUDIO macht er immer mit der folgenden Anweisung weiter, obwohl 
ich bei PINB0 gar keine 1 angelegt habe. Wieso?

von Patrick (Gast)


Lesenswert?

Wie ist denn Dein Schalter angeschlossen? Mit dem aktivieren der 
Pull-Ups wird Ein Eingang auf 1 gezogen. Deine if-Bedingung ist also 
immer wahr. Mach doch einfach:
if (!PINB0);

von Patrick (Gast)


Lesenswert?

Schau doch mal hier:

AVR-Tutorial: IO-Grundlagen

von Johannes M. (johnny-m)


Lesenswert?

Nö. "1 << PINB0" ist eine binäre "1", die um "PINB0", also um 0 Stellen 
nach links geschoben ist. "1 << PINB0" hat also den Wert "0b00000001", 
also 1. Und 1 ist immer wahr, also ist auch die if-Bedingung immer 
erfüllt. Schau Dir mal das AVR-GCC-Tutorial und v.a. den Artikel 
Bitmanipulation an.

von Johannes M. (johnny-m)


Lesenswert?

Patrick wrote:
> Wie ist denn Dein Schalter angeschlossen? Mit dem aktivieren der
> Pull-Ups wird Ein Eingang auf 1 gezogen. Deine if-Bedingung ist also
> immer wahr. Mach doch einfach:
> if (!PINB0);
Da PINB0 als 0 definiert ist, ist !PINB0 1, also ebenfalls immer wahr. 
Erst denken, dann schreiben...

Mit den Bedenken, was die Anschlussart des Tasters angeht, stimme ich 
allerdings zu. In den meisten Fällen (und auch auf den meisten mir 
bekannten Experimentierboards) sind die Taster Low-aktiv, und 
dementsprechend gibts ne Null am Pin bei gedrückter Taste...

von Spyder24 (Gast)


Lesenswert?

Hmm stimmt, ich schiebe dann ja nur eine 1 rein :S

Ich benutze das STK500, probiere es aber erstmal im AVRStudio.

von Johannes M. (johnny-m)


Lesenswert?

Spyder24 wrote:
> Ich benutze das STK500, probiere es aber erstmal im AVRStudio.
Beim STK500 sind die Taster ebenfalls Low-side angheschlossen, also
Taster nicht gedrückt -> 1
Taster gedrückt -> 0

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Spyder24 wrote:
> DDRB=0x00;    //Taster
> PORTB=0xFF;    //Pull-Up
> if (1<<PINB0)

if (PINB & (1<<PINB0))
//  Einlesen
//       und
//         Bit vergleichen

von Spyder24 (Gast)


Lesenswert?

Danke, jetzt komme ich erstmal weiter.

Aber noch eine Frage: Was macht das Zeichen "^"?

von Johannes M. (johnny-m)


Lesenswert?

Spyder24 wrote:
> Aber noch eine Frage: Was macht das Zeichen "^"?
Exklusiv-ODER. Das beste wird sein, Du besorgst Dir mal ein C-Buch oder 
ein brauchbares Tutorial...

von Lötlackl (Gast)


Lesenswert?

>> Aber noch eine Frage: Was macht das Zeichen "^"?

bitweise XOR

mfg Lötlackl

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.