Hallo Wie kann ich während der Laufzeit der Funktion _delay_us Werte übergeben? Diese Werte ändern sich mit der Laufzeit des Programmes und werden aus einem Array [30][2] ausgelesen? Text der Fehlermeldung: __builtin_avr_delay_cycles expects an integer constant. Im Anhang der Programmauszug.
Helmut Br schrieb: > Wie kann ich während der Laufzeit der Funktion _delay_us Werte > übergeben? Meines Wissens gar nicht. Wie die Fehlermeldung schon sagt: die Funktion will eine Integer-Konstante zur Compile-Zeit.
@ Helmut Br (Gast) >Wie kann ich während der Laufzeit der Funktion _delay_us Werte >übergeben? Gar nicht. >Diese Werte ändern sich mit der Laufzeit des Programmes und werden aus >einem Array [30][2] ausgelesen? Solche kleinen, VARIABLEN Verzögerungen muss man wohl oder übel selber per Inline ASM machen. Workaround. Anstatt die einzelnen Delays aus dem Array auzulesen und zuzuweisen (was nicht funktioniert), schreibt man für alle Möglichkeiten die Sequenz komplett mit konstanten Werten hin und wählt mittels Array die Sequenz aus, welche ausgeführt werden soll.
Nachtrag: entweder eine eigene delay_us() mit Timern erstellen oder, so mache ich es gelegentlich der Einfachheit halber und wenn die absolute Genauigkeit keine große Rolle spielt, das ganze in einer Schleife mit der festen Grundeinheit unterbringen, z.B. mit:
1 | for (i=0; i<Dauer; i++) |
2 | {
|
3 | _delay_us(100); |
4 | }
|
kannst du n*100µs über die Variable Dauer dynamisch verändern. Bei sehr kleinen Grundzeiten ist da natürlich ein Overhead durch die Schleife vorhanden.
Helmut Br schrieb: > Wie kann ich während der Laufzeit der Funktion _delay_us Werte > übergeben? Garnicht und das ist auch gut so. Idealerweise benutzt man diese vermaledeiten Delay-Funktionen überhaupt nicht. Und für die (relativ wenigen) Fälle, bei denen es einen Sinn ergibt, sie zu verwenden, reicht es aus, das Delay statisch zur Entwurfszeit konfigurieren zu können.
Nachtrag. Für die Erzeugung unterschiedlicher Frequenzen nimmt man besser einen Timer und die Output-Compare Funktion. Das ist variabel einstellbar.
Hallo Falk, danke für Deine Antwort. Ich habe jetzt 2 Tage gesucht und alles mögliche ausprobiert. Na ja eben Anfänger
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.
