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