Forum: Compiler & IDEs Lauflicht überspringt LEDs - Anfängerfrage


von Benedikt K. (benek)


Lesenswert?

Hallo Forum,
ich bin gerade dabei mich in AVR GCC einzuarbeiten. Bis jetzt habe ich 
auch nur LEDs zum Blinken gebracht und Taster abgefragt.
Das Programm, das ich heute für ein Lauflicht geschrieben habe, 
funktioniert aber nicht bzw. ich finde den Fehler nicht. Vielleicht hat 
ja gerade jemand Zeit über meinen Code zu schauen :).
1
#define F_CPU 16000000L
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
7
int main(void)
8
{
9
  
10
  DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4) | (1 << DDB5);
11
  PORTB = 0x00;
12
  
13
    while(1)
14
    {
15
    for(int i = 0; i <= 5; i++){
16
      PORTB = (1 << PORTB + i);
17
      _delay_ms(100);
18
      PORTB &= ~(1 << PORTB + i);
19
      _delay_ms(100);
20
    }
21
    }
22
}

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Benedikt K. schrieb:

>       PORTB = (1 << PORTB + i);
>       ...
>       PORTB &= ~(1 << PORTB + i);

Richtig:

        PORTB |= (1 << i);
        ...
        PORTB &= ~(1 << i);

Gruß,

Frank

von Benedikt K. (benek)


Lesenswert?

Frank M. schrieb:
> Benedikt K. schrieb:
>
>>       PORTB = (1 << PORTB + i);
>>       ...
>>       PORTB &= ~(1 << PORTB + i);
>
> Richtig:
>
>         PORTB |= (1 << i);
>         ...
>         PORTB &= ~(1 << i);
>
> Gruß,
>
> Frank

Vielen Dank. So funktioniert es jetzt auch :)

MfG Benedikt

von Fabian O. (xfr)


Lesenswert?

Du willst in der Schleife LED i an- bzw. ausschalten. Das geht mit:
1
PORTB |= (1 << i)
bzw.
1
PORTB &= ~(1 << i)
Den aktuellen Wert vom Port brauchst Du auf der rechten Seite nicht.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Benedikt K. schrieb:
> Vielen Dank. So funktioniert es jetzt auch :)

Du weisst, dass der Ausdruck "PORTB" rechts vom Schiebeoperator "<<" 
kompletter Unsinn war?

von Benedikt K. (benek)


Lesenswert?

Frank M. schrieb:
> Benedikt K. schrieb:
>> Vielen Dank. So funktioniert es jetzt auch :)
>
> Du weisst, dass der Ausdruck "PORTB" rechts vom Schiebeoperator "<<"
> kompletter Unsinn war?

Jetzt weis ich es...

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.