ATmega8 ignoriert if-Anweisung

OP #3737893
Lesenswert?

Hi Leute,

ich habe gerade damit begonnen mit einem ATmega8 meine ersten 
Erfahrungen in µC-Programmierung zu sammeln. Bisher bin ich ganz froh 
darüber eine LED zum Blinken gebracht zu haben, möchte jetzt aber dass 
sie nur blinkt wenn ein Input-Pin HIGH ist. Dafür habe ich eine 
if-Anweisung eingebaut, aber die wird einfach mal gepflegt ignoriert. 
Die LED blinkt unabhängig davon was am Pin anliegt, obwohl es in der 
Simulation funktioniert hat.

Ich habe das Test-Programm so simpel wie irgend möglich gehalten, hier 
mal der Code:
1
#define F_CPU 1000000
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6
int main(void)
7
{
8
  DDRB = 0x02;
9
  DDRD = 0x00;
10
  
11
    while(1)
12
    {    
13
        if(PD2)
14
        {
15
            _delay_ms(1000);
16
            PORTB = 0x02;
17
            _delay_ms(618);
18
            PORTB = 0x00;
19
        }
20
    }
21
}

Also:
- Pin B1 wird auf Output gesetzt um die LED ansteuern zu können
- in der while-Schleife beginnt sofort die Abfrage, da das ständig 
gemacht werden soll

Wäre bitte jemand so nett mir zu helfen? Ich blick da nicht ganz durch.

Danke
Gast #3737910
Lesenswert?

Eingänge liest man mit PINX. Das liefert den kompletten Port zurück.

Dann kann man binäre Operationen drauf ausführen, um den entsprechenden 
Pin zu erhalten.

Bei Dir also sowas wie
1
 if (PINB & 0x02)
2
{
3
...
4
}
OP #3737937
Lesenswert?

Ok.

Erstmal danke für diese schnellen Antworten.

Ich habe jetzt jede Variation ausprobiert, die mir in den Sinn kam:
1
...
2
if(PD2)
3
{
4
...
5
}
6
...

LED blinkt immer
1
...
2
if(PIND2)
3
{
4
...
5
}
6
...

LED blinkt immer
1
...
2
if(PIND2 == 1)
3
{
4
...
5
}
6
...

LED blinkt nie
1
...
2
if(PIND == 0b00000100) //nur mal auf Nummer Sicher
3
{
4
...
5
}
6
...

LED blinkt nie

In keinem der Fälle reagiert es auf eine Änderung des Inputs.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren