Forum: Mikrocontroller und Digitale Elektronik dynamische Wertübergabe an _delay_us


von Helmut Br (Gast)


Angehängte Dateien:

Lesenswert?

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.

von HildeK (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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.

von HildeK (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

Nachtrag. Für die Erzeugung unterschiedlicher Frequenzen nimmt man 
besser einen Timer und die Output-Compare Funktion. Das ist variabel 
einstellbar.

von Helmut Br (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.