![]() |
AVR C Problem mit Schleife
Code:
DDRB = (1 << DDB1); // PB1 als Ausgang
DDRB &= ~(1 << DDB3); // PB3 als Eingang // while PORTB = ~(1<<PB3); // wenn low if (!(PINB & (1 << PB3))) // wenn PB3 geschlossen (HIGH) { PORTB = PORTB | (1 << DDB1); //dann LED and PB1 An i++; //i um 1 erhöhen if (i = 15) i =0; //wenn i = 15 dann i = 0 while (1) // solange Button nicht gedrückt {launch_effect(i);} //soll Effekt(i) in einer schleife laufen } else PORTB = PORTB & ~(1 << DDB1); //wenn button nicht gedrückt LED aus } irgendwie blick ich da nicht durch was passieren soll hab ich kommentiert der erste Effekt läuft zwar durch aber schon der Button hat keine Funktion mehr [edit=mkinzler]Delphi-Tag durch C-Tag ersetzt Mfg, mkinzler[/edit] |
Re: AVR C Problem mit Schleife
Hi,
ich weiss nicht was du erreichen willst. Gib doch mal eine kurze Beschreibung was deine Routine machen soll oder macht. Ich habe ehrlich gesagt keine Lust an einem Ratespiel teilzunehmen. Da ich sehr viel mit uP's zu tun hab kann ich dir sicher helfen. Zitat:
Probiers mal so: Zitat:
[edit=mkinzler]C-Tags eingefügt Mfg, mkinzler[/edit] |
Re: AVR C Problem mit Schleife
Soll eigendlich nichts anderes tun wie schon in den Kommentaren erwähnt
Programm soll bei effekt 0 Starten und das solange bis -button an PB3 gedrückt wird (LOW weil gegen GND?) dann -soll kurz die LED an PB1 Leuchten - i um eins erhöht werden (wenn i = 15 ist dann wieder zurück zu 0) und dann wieder der Effekt(i) in einer schleife ablaufen bis der Button erneut betätigt wird die LED an PB1 ist in diesen Zustand aus |
Re: AVR C Problem mit Schleife
Zitat:
Zitat:
|
Re: AVR C Problem mit Schleife
Ich glaube nicht, dass wenn die While-Schleife einmal läuft, der µC noch was anderes ausführt. Der müsste dann eigentlich in der Schleife festhängen.
Eingentlich brauchst du doch für launch_effect gar keine eigene Schleife. Das ganze Programm läuft doch immer im Kreis (zyklisch), sollte es zumindest. In der Hauptschleife ließt du die Eingänge ein, ist die Taste gedrückt zählst du I hoch, dann rufst du launch_effect mit I auf. Solange niemand die Taste drückt läuft das gleiche Programm. |
Re: AVR C Problem mit Schleife
Habs jetzt so geändert tut auch fast was es soll
Code:
außer das nach dem lösen des tasters zwar die LED wieder ausgeht aber das programm gar nicht läuft(launch_effect)
int main (void)
{ int i = 0; ioinit(); bootmsg(); current_layer = 0x00;// Bei unterster Ebene starten sei(); while (1)// Haupt programm loop. { while (!(PINB & (1 << PB3)))// wenn taster an { PORTB = PORTB | (1 << DDB1);//LED an i = i++; //und I erhöhen if (i == 15) i = 0; } launch_effect(i); PORTB = PORTB & ~(1 << DDB1);// LED aus } } |
Re: AVR C Problem mit Schleife
Hi!
Warum hast du denn überhaupt die 2. while-Schleife? Vielleicht verstehe ich ja falsch, was du vor hast. Jetzt ist es ja so, dass solange die Taste gedrückt ist, die LED leuchtet und i hochgezählt wird. Dafür müsste eigentlich eine if-Abfrage besser sein. Wenn Taster gedrückt, dann LED ein, i hochzählen... Da das Hauptprogamm in einer Schleife läuft wird i auch weiter erhöht, wenn die Taste gehalten wird. EDIT: Wie ist denn lauch_effect aufgebaut? |
Re: AVR C Problem mit Schleife
ja hatte ich unterdessen auch geändert Problem ist jetzt noch das der Taster manchmal mehrere sekunden gehalten werden muss bevor die LED angeht bzw. i erhöht wird und nach dem lösen die LED wieder für mehrere sekunden brennnt
ich hab fast das Gefühl das die CPU überlastet ist weil die Dauer je nach Aufwand für den Effekt variiert |
Re: AVR C Problem mit Schleife
Das ist klar, wenn launch_effect eine lange Laufzeit hat, dann reagiert auch die Taste und die LED träge.
Welchen µC setzt du denn eigentlich ein? |
Re: AVR C Problem mit Schleife
ATMega16-16 @14 MHz
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz