Forum: Compiler & IDEs Einfacher Schalter am AVR


von VanKurt (Gast)


Lesenswert?

Hi Leute!
Ich versuche gerade einfache Schalter an meinem AVR anzubringen, und
dann in der SOftware auf deren Eingabe zu reagieren. Erstmal zur
Hardware:

Ein Kumpel, bei dem das alles schon funktioniert hat gesagt, ich solle
den Schalter einfach zwischen einen Pin am AVR und Masse setzen. Das
hab ich dann auch gemacht.

Nun zur Software:
Zuerst habe ich den Pin als Eingang gesetzt und die internen Pullups
aktiviert:

DDRA = 0x00;
PORTA = 0xff;

Dann frage ich in der Hauptschleife meiner Software folgendes ab:

if( PINA & (1<<PINA0) ) doSomething();

Irgendwie scheint das ganze aber nicht zu funktionieren...
Deshalb meine Frage an euch Profis: Hab ich das so richtig gemacht?

Danke :-D

von VanKurt (Gast)


Lesenswert?

PS: Es handelt sich übrigens um einen AVR 90S815 (oder so ähnlich, habs
vergessen), programmiert mit AVR STudio 4, GCC und PonyProg...

von EISmeter (Gast)


Lesenswert?

Moin,

ich kenn den AVRGCC leider nicht so genau,
aber heißt das in C normalerweise nicht so ?

if (PINA && (1<<PINA0)) doSomething(); // also mit zwei &
                                       // --> Bitweises UND


Gruß,
mk

von Εrnst B. (ernst)


Lesenswert?

Nope, '&&' ist logisches und, '&' ist bitweise.
Und der Code oben ist schon richtig, vorrausgesetzt der Schalter ist
wirklich an Pin0 vom PortA angeschlossen.

/Ernst

von Dirk B. (dirk-)


Lesenswert?

Hallo,

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

/* Fuehre Aktion aus, wenn Bit Nr. 2 (das "dritte" Bit) in PINB
geloescht (0) ist */
if ( !(PINB & (1<<PINB2)) ) {
  /* Aktion */
}


Deine Taste ist Low Aktiv.

Gruß,
Dirk

von VanKurt (Gast)


Lesenswert?

OMFG! Das macht Sinn. Vielen Dank euch allen!

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.