Forum: Projekte & Code AVR: Delay 7 ... 65542 Zyklen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Oft werden kurze Verzögerungszeiten benötigt.

Manche Softwareentwickler stehen jedoch mit der Mathematik auf Kriegsfuß 
und haben damit so ihre Schwierigkeiten, solche Verzögerungsschleifen zu 
berechnen.

Was liegt da näher als das den Assembler selbst erledigen zu lassen.

Mit dem beiliegenden Macro können alle Verzögerungen im Bereich
von 7 ... 65542 Zyklen generiert werden.

Größere Zeiten muß man ja eh mit einem Timerinterrupt machen, sonst wäre 
die CPU zu lange blockiert.


Peter

von Andreas S. (andreas) (Admin) Benutzerseite Flattr this


Angehängte Dateien:

Lesenswert?

Und wenn man nicht Zyklen sondern Zeiten angeben will, siehe Anhang.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Wie es scheint, hat das noch keiner ausprobiert.

Es hat sich nämlich ein Fehler eingeschlichen, die Loop dauert 4 Zyklen 
und nicht 3.

Anbei nun das richtige Programm.



Peter

von mikki merten (Gast)


Lesenswert?

@andreas
Macro calls Macro ist ja in der Form beim ATMEL AVR Studio in dieser 
Form ja nicht möglich.

von Andreas S. (andreas) (Admin) Benutzerseite Flattr this


Lesenswert?

Tatsächlich? Ich verwende tavrasm, da ist es kein Problem.

von Klaus 2. (klaus2m5)


Angehängte Dateien:

Lesenswert?

Meine Version für kurze Delays von 1 Taktzeit bis 38µs mit Einberechnung 
der bereits verbrauchten und auf die Wartezeit anrechenbaren Takte. 
Leichte Umstellung auf andere CPU-Frequenz ohne Veränderung des Timings.

von Bernd (Gast)


Lesenswert?

Bekomme ich dieses Macro auch in C Unter eclipse eingebunden ?
Wenn ja wie mache ich das?

Gruss und Danke
Bernd

von Klaus 2. (klaus2m5)


Lesenswert?

Glaube ich nicht, ist ja ein Assembler Macro und läuft im Assembler vom 
Atmel.

von Simon K. (simon) Benutzerseite


Lesenswert?

Bei WinAVR sind entsprechende Funktionen dabei.
_delay_us & _delay_ms

von gtf (Gast)


Lesenswert?

8 Jahre später...
Vielen Dank an Peter und Andreas für die tollen Routinen.
@ Andreas
in deinem Post vom (Datum: 15.12.2002 11:41) ist ein Fehler enthalten,
weil deine Routine(mdelay) wohlmöglich eine Ergänzung zum ersten Post 
von Peter ist.

Korrigierter Version:
1
.listmac
2
3
;delay 8 ... 65543 cycle
4
5
.macro  mdelay
6
  ldi    r24, low( @0 - 8 )
7
  ldi    r25, high( @0 - 8 )
8
  sbiw  r24, 4
9
  brcc  pc - 1
10
  cpi    r24, 0xFD
11
  brcs  pc + 4
12
  breq  pc + 3
13
  cpi    r24, 0xFF
14
  breq  pc + 1
15
.endmacro
16
17
18
19
.macro delayus
20
  mdelay ((MCU_CLK * @0) / 1000000)
21
.endmacro
22
23
.macro delayms
24
  mdelay ((MCU_CLK * @0) / 1000)
25
.endmacro
26
27
28
29
/*********************************************************************/
30
//  *****Beispiele für Programmaufrufe:*****
31
32
//  1) Wenn eine feste Zyklenzahl erforderlich ist
33
34
   mdelay 10    // Verzögern um 10 Taktzykle
35
36
//  2) Wenn eine Verzögerung in µSekunden(10^-6) erforderlich ist
37
38
  delayus 8    // Verzögerung von 8 µSec
39
40
//  3) Wenn eine Verzögerung in Milisekunden(10^-3) erforderlich ist
41
42
  delayms 8    // Verzögerung von 8 mSec

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hi, ich hatte mal was gebastelt, das von 0 Ticks bis 0x5000007 = 
83.886.087 Ticks ein passendes Delay erzeugt (für den GNU-Assembler 
avr-as), das auch von C aus anwendbar ist:

Beitrag "Re: Delay: Exakt n Ticks erzeugen (avr-gcc)"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.