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
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 | }
|
;-) also das mit dem PORTB = (PORTB<<1)|(PORTB>>7); hab ich aus meinem Buch, wo einführung in c beschrieben wird ;-) also deswegen ich hab das mal einfach so übernommen und es funzt auch also was will man mehr trotzdem danke ich werd sofort ausprobieren danke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.