Gast
#2371208
Guten Abend, ich habe ein Problem bezüglich der Funktion _delay_us() mit einem ATMega32. Mit dem folgenden Code steuere ich einen Lautsprecher (Port A0) an und möchte einen konstanten Ton ausgeben:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
Mit der auskommentierten delay-Funktion klappt das so auch ganz gut und der Ton ist sauber und liegt wohl auch ungefähr bei 1kHz. Wenn ich jedoch die Funktion mit der for-Schleife benutze, wie ich sie hier im Forum gefunden habe, um eine variable Zeit abzuwarten, geht das irgendwie schief. Bei udelay < 350 funktioniert das auch noch, bis auf das der Ton nicht bei (1000000 / 350) Hz liegt, sondern etwas tiefer ist. Sobald ich jedoch für udelay einen Wert von 360 oder höher eintrage, krisselt der Lautsprecher total und hat keinen guten konstanten Ton mehr, obwohl das ja eigentlich bis 1 kHz kein Problem darstellen sollte. Woran kann das liegen? Ist die for-Schleife soviel langsamer als ein einfaches delay? Aber dann müsste ich ja mit einem anderen Wert ein Äquivalent zur einfachen delay-Funktion schaffen, das ist aber nicht möglich. Gruß, Empage