Hallo liebe Gemeinde, ich habe folgendes Problem das ich mit Hilfe des „clock_prescale_set(x)“ den CPU Takt reduzieren kann und meine Anwendung damit abarbeiten. Nach dem Abarbeiten möchte ich die CPU wieder in ausgangs Frequenz setzten das ich die Daten senden kann. Leider Taktet aber die CPU weiter in reduzierter Geschwindigkeit. Mit Oszi gemessen. Bei mir Handelt es sich um einen ATmega644 der ohne Takt Reduzierung mit 20MHz läuft. Den Quellcode habe ich auch ohne Optimierung generiert aber das leider keinen Einfluss. Ich bin inzwischen verzweifelt, kann bitte mir einer von euch helfen? int main( void ) { //Alle Unterprogrammen initialisieren init_prog(); //Alle Variablen in den Unterprogrammen initialisieren init_var(); /* loop forever */ for( ; ; ){ if (timer2_get_ISR_flag(1) == TRUE){ //CPU Takt reduzieren while(clock_div_8 != clock_prescale_get()){ cli(); clock_prescale_set(clock_div_8); sei(); } //Programm Abarbeitung ftaste1(); ftaste2(); ftaste5(); //CPU Takt zurücksetzten while(clock_div_8 != clock_prescale_get()){ cli(); clock_prescale_set(clock_div_8); sei(); } if (timer2_get_ISR_flag(2) == TRUE){ Custom_1bis8_Standard(); } } } Vielen Dank schon im Voraus
Simon Reiser schrieb: > Leider Taktet aber die CPU weiter in > reduzierter Geschwindigkeit. Nicht weiter verwunderlich, wenn du bei "CPU Takt zurücksetzten" den gleichen Teiler benutzt, wie bei "CPU Takt reduzieren".
Vielen Dank Herr Ernst, Entschuldigung das habe ich leider gerade falsch zusammen kopiert. int main( void ) { //Alle Unterprogrammen initialisieren init_prog(); //Alle Variablen in den Unterprogrammen initialisieren init_var(); /* loop forever */ for( ; ; ){ if (timer2_get_ISR_flag(1) == TRUE){ //CPU Takt reduzieren while(clock_div_8 != clock_prescale_get()){ cli(); clock_prescale_set(clock_div_8); sei(); } //Programm Abarbeitung ftaste1(); ftaste2(); ftaste5(); //CPU Takt zurücksetzten while(clock_div_1 != clock_prescale_get()){ cli(); clock_prescale_set(clock_div_1); sei(); } } if (timer2_get_ISR_flag(2) == TRUE){ Custom_1bis8_Standard(); } } } Vielen Dank
Simon Reiser schrieb: > Entschuldigung das habe ich leider gerade falsch zusammen kopiert. Dann kopier' nichts zusammen, sondern gib uns genau den Code, der nicht läuft. Die Schleifen um den Clock Prescaler sind auch nicht gerade sinnvoll. Entweder lässt sich das Register setzen, dann musst du den Wert nicht noch abfragen, oder sie lassen sich nicht setzen, dann kannst du auch gleich "while (1)" da hin schreiben.
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.