Forum: Mikrocontroller und Digitale Elektronik Abfrage Eingänge in C


von werner1 (Gast)


Lesenswert?

Hallo
Habe ein Atmega 32 und möchte ein Eingang am PortA Pin 2 abfragen.
An PortA Pin0 ist eine Led angeschlossen.
Beim tasten des Taster soll die Led leuchten. Wäre erfreut über ein 
Lösungsvorschlag
Hier mein Programm


int main(void)
{

DDRA = 0x01 << PA0;  //PortA Pin 0 wird als Ausgang gesetzt
DDRA &= ~(1 << DDA2);  //PortA Pin 2 wird als Einagng gesetzt
PORTA |= (1<<PA2) ;

    while(1)
    {
  ;

  if (PA2 == 1)
  {
PORTA |= 1<<PA0;
  }

  else
  {
PORTA &= ~(1<<PA0);
  }

von Oliver (Gast)


Lesenswert?


von µC-Bastler (Gast)


Lesenswert?

werner1 schrieb:
> Beim tasten des Taster soll die Led leuchten. Wäre erfreut über ein
> Lösungsvorschlag

Probier einfach, dein Programmablauf im Simulator laufen zu lassen. Dann 
kannst du bei jedem Schritt verfolgen, was in den Registern passiert.

von Edi R. (edi_r)


Lesenswert?

werner1 schrieb:
>   if (PA2 == 1)

"PA2" ist nur eine vordefinierte Konstante und enthält den Wert 2. Der 
Vergleich ist also immer false. Was Du erreichen willst, bekommst Du z. 
B. so:
1
if (!(PINA&(1<<PA2)))

Dabei bin ich davon ausgegangen, dass der erwähnte Taster beim Betätigen 
den Eingang gegen GND zieht, also dass am Portpin beim Betätigen "0" 
gelesen wird, und dass die LED ebenfalls zwischen Portpin und GND liegt 
(und hoffentlich mit einem passenden Vorwiderstand).

Übrigens fehlen noch zwei schließende geschweifte Klammern am Ende.

von werner1 (Gast)


Lesenswert?

Danke Edi R.

Jetzt klappt es. Wenn ich den Taster nach VCC ziehe muss ich dann das ! 
weglassen ?

von Edi R. (edi_r)


Lesenswert?

Ja, aber dann brauchst Du einen externen Pull-Down. Den internen Pull-Up 
kannst Du dann abschalten.

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.