Forum: Mikrocontroller und Digitale Elektronik Eingang prüfen


von michele (Gast)


Lesenswert?

Hallo
Ich versuche schin seit Stunden, zu prüfen ob am Eingang PA0 eine 
Spannung anliegt, falls ja, sollte eine LED an PB0 angehen. Jedoch 
leuchtet die LED immer!
So sieht mein C-Code aus:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
  DDRA  &= ~ (1<<PA0); 
6
           // (3)
7
  DDRB = 1<<PB0;
8
  // (4)
9
10
  
11
12
13
  while (1)
14
  {
15
    if(PINA & (1<<PINA0)) 
16
    {                // (5)
17
      PORTB = 1<<PB0;
18
    }
19
  }
20
    
21
  return 0;
22
}

von Thomas E. (thomase)


Lesenswert?

1
michele schrieb im Beitrag #3074239:
2
> while (1) 
3
>   {
4
>     if(PINA & (1<<PINA0)) 
5
>     {                // (5)
6
>       PORTB = 1<<PB0;
7
>     }
8
>   }

Wenn eine Spannung anliegt schaltet der Controller die LED an.
Und was soll er machen, wenn keine Spannung anliegt?
Ich sehe da nichts. Der Controller auch nicht.

mfg.

von Christoph B. (nuke)


Lesenswert?

Hallo,

michele schrieb:
1
while (1)
2
  {
3
    if(PINA & (1<<PINA0)) 
4
    {                // (5)
5
      PORTB = 1<<PB0;
6
    }
7
  }

Um dir mal eine Lösung zu liefern... So müsste es gehen:
1
while (1) {
2
    if(PINA & (1<<PINA0)) {
3
        PORTB |= (1 << PB0);
4
    } else {
5
        PORTB &= ~(1 << PB0);
6
    }
7
}

Viele Grüße,
Christoph

von Thomas E. (thomase)


Lesenswert?

Und noch was:

Der Eingang darf nicht offen sein. Denn "Nichts" ist nicht gleich Low.

"Nichts" ist einfach nur ein offener Eingang und somit ein undefinierter 
Zustand. Da kann auch in Abhängigkeit vom dem, was da an magnetischen 
Wellen durch die Luft schwirrt, High rauskommen oder besser gesagt 
reingehen.
Gerade gings noch, jetzt klingelt das Handy und schon gehts nicht mehr.

mfg.

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.