www.mikrocontroller.net

Forum: Compiler & IDEs Tasterabfrage beim Mega8


Autor: Spyder24 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau doch mal hier:

AVR-Tutorial: IO-Grundlagen

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Spyder24 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm stimmt, ich schiebe dann ja nur eine 1 rein :S

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

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

Autor: Spyder24 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, jetzt komme ich erstmal weiter.

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Lötlackl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Aber noch eine Frage: Was macht das Zeichen "^"?

bitweise XOR

mfg Lötlackl

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.