Gast
#2271045
Hallo Leute! Ich sitze grad an einer eigentlich einfachen Aufgabe, bei der aber komische Fehler auftreten. Was will ich: Ein Rechtecksignal mit einstellbarer Frequenz und einstellbarer Impulsweite (quasi Duty-Cycle) Zum Quellcode:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Erklärung: Der Timer (CPU-Clock:16MHz) wird ständig bei 15999 resetet, was zu einer Periodendauer von 15999/16MHz=9.999*exp(-4) führt. Also 1KHz. Zusätzlich wird bei 15999 der bin OC1A getogglet. Bei 15839 wird ein Interrupt ausgeführt, der auch OC1A togglet. (Löst eine Compare-match Erreignis von OCR1A aus). Soweit so gut. Bei großer Impulsdauer (OCR1B klein) ist das alles auch exakt genug. Mit 15839 kommt jedoch nicht 10us, sondern eine Impulsdauer von 8.8us heraus. Interessant ist auch, dass wenn ich die Optimierung vom AVR-Studio aussschalte, die Zeit sich plötlich uaf 7.7us ändert. Hab ich da irgendwo einen Denkfehler? Viele Dank für eure Hilfe! Denglmann