erweiterte Frage zu Led lauflicht

OP #1178283
Lesenswert?

hallo, bin auch so langsam in das thema mikrocontroller eingestien. bin 
auch schon fleißig am programmieren üben und hab da mal folgende frage. 
habe bereits ein led lauflichtprogramm in c geschrieben für einen 
atmega32
jedoch leuchten bei diesem alle leds nur 1 geht dann jeweils aus was das 
lauflicht dann auch ausmacht ;-) aber jetzt möchte ich das immer nur 1 
led anist und hin und herläuft kann mir da jm helfen????
hier der jetzige code


#include <avr/io.h>
#include <util/delay.h>

void wait(void)
{
   unsigned int i;
   _delay_ms(50);
}

void main(void)
{
   DDRB=0xFF;

   PORTB = 1;

   while(1)
   {
     PORTB = (PORTB<<1)|(PORTB>>7);
     wait();
   }
}

schon mal im voruas danke
#1178297
Lesenswert?

mal Hand aufs Herz.
Hast du wirklich verstanden, wie das hier

>     PORTB = (PORTB<<1)|(PORTB>>7);

tatsächlich funktioniert?
(Wenn ja, dann Hut ab. Ich hab 3 mal hinschauen müssen um zu sehen was 
da abgeht. Und ich programmiere seit 20 Jahren)

Ansonsten: Schmeiss das raus und mach dein Lauflicht konventionell:
Du hast im Programm eine Variable, die du nach Herzenslust manipulieren 
kannst. Und erst dann, wenn der neue Inhalt deiner uint8_t Variablen 
feststeht, gibst du das auf den Port raus. Dabei kannst du dann mittels 
~ ganz einfach alle Bits bei der Ausgabe umdrehen, da bei dir eine LED 
anscheinend dann leuchtet, wenn das entsprechende Bit eine 0 aufweist.
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
void wait(void)
5
{
6
   unsigned int i;
7
   _delay_ms(50);
8
}
9

10
void main(void)
11
{
12
   uint8_t Licht;
13

14
   DDRB=0xFF;
15

16
   Licht = 1;
17

18
   while(1)
19
   {
20
     PORTB = ~Licht;      // Bei der Ausgabe alle Bits umdrehen
21

22
     Licht = Licht << 1;  // um 1 Stelle nach links verschieben
23
     if( Licht == 0 )     // wenn alle Bits durch, wieder von vorne anfangen
24
       Licht = 1;
25

26
     wait();
27
   }
28
}

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