Hallo zusammen ich bin gerade dabei meinen RGB-LED Cube zu programmieren. jetzt wollte ich die Funktion programmieren dass er langsam heller wird und danach langsam dunkler. nun ist meine Idee gewesen. int i; int Zeit = 0; for(i=0; i<10;i++) {Zeit = Zeit +1 for(i=0;i<50;i++) {PORTB=0xFF _delay_ms(Zeit) PORTB=0x00 _delay_ms(10) } } aber dieses Funktioniert nicht kann es sein dass ich die _delay_(Zeit) nicht abhängig machen kann ?? muss diese immer eine Konstante Zahl sein ?? für Lösungsvorschläge wäre ich sehr sehr dankbar
Die Grundidee wäre in deinem Fall, dass du einen Wert nimmst und diesen auf 0 setzt. In einer for-Schleife erhöhst du dann den Wert zb um +5. Wenn du die Höchstzahl erreicht hast, muss du wieder herunterzählen. Um eine LED zu dimmen brauchst du übrigens auch eine PWM. Am Besten du wählst den variablen Wert auch in der gleichen Range der Periode deines Timercounters für das PWM Signal, um die Rechnung einfach zu halten.
Das Problem ist dass ich mich noch nicht so gut auskenne mit der Programmiererei ist dass ein aufwendiges Programm mit der PWM ??
ms schrieb: > kann es sein dass ich die _delay_(Zeit) nicht abhängig machen kann ?? Delay(Variable) funktioniert nur bei höheren Sprachen wie Arduino.
ms schrieb: > muss diese immer eine Konstante Zahl sein ?? Ja Verwende aber besser Timer, da der Prozessor in Deinem Beispiel nichts mehr nebenher machen kann.
ms schrieb: machs mal so: > for(i=0; i<10;i++) > { > Zeit = Zeit +1; // man könnte auch gleich i statt Zeit nehmen > for(i=0;i<50;i++) > { > PORTB=0xFF; > _delay_ms(Zeit); > PORTB=0x00; > _delay_ms(10-Zeit); > } > }
Meines wissens nach (ist schon ne weile her das ich das nachgeschaut hab) funktioniert die delay_(us/ms) auf dem AVR nur mit konstanten Werten. Ich empfehle dir, dir die Zeit zu nehmen und dich in PWM oder die Timer einzulesen und diese Optimaler weise über Interrupte auszuwerten. Hierzu gibt es auch auf dieser Seite entsprechende Tutorials: https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR https://www.mikrocontroller.net/articles/AVR_PWM https://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM viel Erfolg :)
Mustafa Meyer schrieb: > Delay(Variable) funktioniert nur bei höheren Sprachen wie Arduino. Interessante Sicht.. Aber leider knapp daneben. Arduino ist keine Sprache. Es nutzt C++. Und C++ kennt erst mal auch kein Delay(Variable). Es ist also eher keine Spracheigenschaft, sondern ein Feature der Umgebung. Punktum: Wenn man ein flexibles delay() braucht, dann baut man sich eins. Und wenn das zu Problemen führt, dann sind die eigentlichen Schwierigkeiten ganz woanders
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.