mikrocontroller.net

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


Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:
Angehängte Dateien:

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

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: mikki merten (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tatsächlich? Ich verwende tavrasm, da ist es kein Problem.

Autor: Klaus 2m5 (klaus2m5)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd (Gast)
Datum:

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

Gruss und Danke
Bernd

Autor: Klaus 2m5 (klaus2m5)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei WinAVR sind entsprechende Funktionen dabei.
_delay_us & _delay_ms

Autor: gtf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

.listmac

;delay 8 ... 65543 cycle

.macro  mdelay
  ldi    r24, low( @0 - 8 )
  ldi    r25, high( @0 - 8 )
  sbiw  r24, 4
  brcc  pc - 1
  cpi    r24, 0xFD
  brcs  pc + 4
  breq  pc + 3
  cpi    r24, 0xFF
  breq  pc + 1
.endmacro



.macro delayus
  mdelay ((MCU_CLK * @0) / 1000000)
.endmacro

.macro delayms
  mdelay ((MCU_CLK * @0) / 1000)
.endmacro



/*********************************************************************/
//  *****Beispiele für Programmaufrufe:*****

//  1) Wenn eine feste Zyklenzahl erforderlich ist

   mdelay 10    // Verzögern um 10 Taktzykle

//  2) Wenn eine Verzögerung in µSekunden(10^-6) erforderlich ist

  delayus 8    // Verzögerung von 8 µSec

//  3) Wenn eine Verzögerung in Milisekunden(10^-3) erforderlich ist

  delayms 8    // Verzögerung von 8 mSec




Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.