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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.