Hallo Leute, habe seit kurzem ein stk500 und versuche mich gerade an der c_programmierung mit avr-studio. Nun taucht mein erstes Problem auf. Habe ein kleines prog geschrieben mit dem der Controller (Atmega8L) sekunden zählen soll. Und zwar mit der _delay_ms()-Funktion. Funktioniert auch wunderbar, solange der Atmega bei 1MHz läuft. Ändere ich aber die Taktfrequenz über die Fusebits auf 8MHz zählt er zu schnell. Ist ja auch klar. Habe dann in der delay.h F_CPU auf 8000000 geändert, was allerdings nichts geändert hat, zählt immernoch zu schnell. Kann mir jemand erklären wie ich die _delay_ms()-Funktion ändern muss, damit sie auch bei 8MHz richtig funktioniert? Hoffe ihr habt mein Pronlem verstanden. MfG Mich-Beck
Lass mich raten: dein Delay ist größer als als ca. 32 ms. Lies dir bitte in der Doku durch, wie groß die maximale Verzögerung werden kann. Wenn du eine Sekunde verzögern willst, nimm: 1. am besten einen Timer 2. zur Not folgendes:
1 | for (uint8_t i = 0; i < 100; i++) |
2 | _delay_ms(10); |
10 ms sind für alle derzeit zulässigen AVR-Taktfrequenzen immer im zulässigen Bereich (der letztlich durch die 16-Bit- Zahl begrenzt wird, die an _delay_loop_2() übergeben wird).
Ich danke wie verrückt, hatte schon bemerkt, dass da ein wert zu groß wird, konnte mir aber trotzdem nicht helfen. Jetzt hab ich nur das Problem, dass er bei 1MHz zu langsam zählt. Wahrscheinlich aufgrund der Durchlaufzeit der for-Schleife. Werd wohl doch mal mit Timern experimentieren müssen. Vielen Dank jedenfalls erstmal
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.