Benjamin Schwilling schrieb:
> Ganz im Ernst. Ich hab keine Ahnung. Ich weiss zwar, dass die util/delay
> den F_CPU Wert brauch, aber in wie weit sich eine Veränderung dabei
> auswirkt weiss ich noch nicht so wirklich.
delay_us macht ja an sich nichts weiter als eine Warteschleife, die n
mal wartet. Daraus ergibt sich eine Wartezeit von n * x Taktzyklen,
wobei x die Anzahl an Zyklen pro Schleifendurchlauf ist. Wenn du aber
eine Zeit in Mikro- oder Millisekunden warten willst, mußt du daraus
erstmal die Anzahl an nötigen Schleifendurchläufen berechnen, und dazu
wird natürlich die Taktfrequenz des Prozessors benötigt.
Wenn du da nun einen um Faktor 10 zu niedrigen Wert angibst, wird die
Wartezeit auch nur ein Zehntel der angegebenen Dauer sein.
> BTW: Mir ist gestern noch ein Lösungsweg eingefallen. Ich hab einfach
> das Argument des _delay_us() auf 1 gesetzt und dieses dann in eine for()
> Schleife versteckt. Geht soweit eigentlich ganz schön.
Das ist auch das übliche Vorgehen, wenn man eine variable Anzahl von
Mikro- oder Millisekunden warten will. So wie ich es verstehe, brauchst
du aber nur zwei Wartezeiten, deren Verhältnis du angeben kannst, und
die Dauer in Mikrosekunden ist eigentlich nicht so wichtig. Dann kannst
du auch die Basis-Funktionen verwenden (Siehe avr-libc-Doku
"util/delay_base.h"). Denen kannst du auch Variablen übergeben, dafür
gibst du die Wartezeit eben nicht in Mikrosekunden, sondern je nach
Funktion in Vielfachen von 3 oder 4 Taktzyklen an.