Forum: Mikrocontroller und Digitale Elektronik Atmega 32A, Atmel Studio 6.2, Sprache C, Eingangspin auf Low Level abfragen


von Michael S. (misei_3216)


Lesenswert?

Hallo,

ich habe eine Frage bezüglich einer Low-Level Abfrage an Port-A.

Programmierumgebung: Atmel Studio 6.2
CPU: Atmega: 32A
Programmiersprache: C

Ich versuche das Datenregister für PORTA auf LOW-Level folgendermaßen 
auf seinen Zustand ab zu fragen.
1
if ((PINA2 == 0) && (PA2 == 1))                        //Schalter 2
2
   {
3
4
   }

Demnach soll der Controller folgendes tun:
wenn an PINA2 Low-Level (0) anliegt, soll die Schleife aufgerufen 
werden.
Allerdings wird diese Abfrage im Debug nicht bearbeitet. bzw der Inhalt 
der Schleife wird ohne Verknüpfung abgearbeitet.

Jemand eine Idee woran das liegen kann?

LG Michael

von Ingo L. (corrtexx)


Lesenswert?

Michael S. schrieb:
> Jemand eine Idee woran das liegen kann?
Ja, deine Abfrage ist einfach falsch. Hinter PINA2 verbirgt sich eine 2, 
somit kann die niemals 0 sein.

Richtig ist:
1
if (!(PINA & (1<<PINA2)))                        //Schalter 2
2
   {
3
4
   }

Ein Blick hier herein hätte dir geholfen:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

: Bearbeitet durch User
von Michael S. (misei_3216)


Lesenswert?

Hallo Ingo Less,

Danke dir. Dein Eintrag Funktioniert.
Bezüglich der ZWei in PORT A habe ich eine Frage.

Das ! Negiert den Ausdruck.

Die Abfrage in der Klammer bedeutet demnach:
PINA und 1<<PA2

Anders geschrieben:
PIN A --> aus iom32a.h  #define PINA    _SFR_IO8(0x19)  --> hier wird 
doch das ganze Eingangs Register eingelesen?
Mal ein Beispiel
An Port A sind bit 2 und 3 mit High Level dann ergibt sich doch:
0b00001100 dezimal 12


Und 1 << PA2 ist doch eine Bitmanipulation welche in diesem fall die 1 
zwei stellen nach links schiebt, oder?

Dann steht da doch (nicht(0b00001100 und (1 zwei nach links))
              bzw   (nicht(12         &    1 zwei nach links))

Das kann ja nicht sein. Wie ist demnach diese Abfage aufgebaut?

Danke dir!

von Michael S. (misei_3216)


Lesenswert?

Hallo Ingo Less,

sorry, habs verstanden. Dies ist ein Zeiger auf das Bit Zwei im 
Datenregister. Stimmt das so?

Lg

von Falk B. (falk)


Lesenswert?


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.