Delays

[latexpage]

Delay-Funktion

Eine der ersten Funktionen, die man sich für einen neuen und unbekannten Microcontroller schreiben sollte, ist eine Delay-Funktion. Diese Funktion realisiert eine definierte und möglichst exakte Wartezeit innerhalb eines Programmes. Eine solche Delay-Funktion "beschäftigt" den Microcontroller (z.B. mit Zählen) für einen bestimmten Zeitraum. Besonders wichtig sind solche Funktionen für das Debugging von Programmteilen, da hierdurch der Microcontroller gezielt "gebremst" werden kann. Weitere Anwendungsmöglichkeiten sind:

  • State-Machines
  • Initialisierungssequenzen
  • Erzeugung von Testsignalen

Funktionweise bzw. Realisierung

Möglichkeit 1

Jeder Microcontroller arbeitet intern mit einer Taktfrequenz (=Clock, Fcy), die es ihm ermöglicht, eine bestimmte Anzahl von (mehr oder weniger komplexen) Operationen (Instructions) pro Sekunde abzuarbeiten. Kennt man diese Taktfrequenz und die Anzahl der Takte (N), die für eine bestimmte Operation benötigt wird, so lässt sich die Dauer dieser Operation (Tinstr) wie folgt berechnen:
\[
T_c_y=\frac{1}{F_c_y}
\]

\[
T_i_n_s_t_r=N \centerdot T_c_y
\]

Möchte man nun den Microcontroller für einen gewünschten Zeitraum (Tdelay) "beschäftigen", so muss man lediglich berechnen, wieviele dieser Operationen hierfür auszuführen sind (M).
\[
M=\frac{T_d_e_l_a_y}{T_i_n_s_t_r}
\]
Beispiel:
Ein dsPIC33 läuft z.B. mit einer Fcy von 40MHz. Die Operation "Addieren" benötigt einen Takt. Möchte man den Microcontroller beispielsweise für 50µs beschäftigen, so ergibt sich die Anzahl der hierfür benötigten Operationen wie folgt:
\[
M=\frac{50 \mu s}{1/40 \mathrm{MHz}}=\frac{50 \mu s}{25 \mathrm{ns}}=2000
\]
Der schwierigste Teil besteht nun darin, den Microcontroller, abhängig von einer variablen Zeitvorgabe, die nötigen "Warteoperationen" ausführen zu lassen.
Da man auf C-Ebene nicht immer sicher sagen kann, wie der Compiler den C-Code übersetzen wird, ist es meist notwendig, Delay-Funktionen nach diesem Verfahren, auf Assembler-Ebene zu programmieren. Nur so kann man sicherstellen, dass auch wirklich exakt die beabsichtigte Anzahl an Operationen (Instructions) ausgeführt wird.

 

 

[google-translator]

1 thought on “Delays

  1. Pingback: 2preview

Leave a Reply