PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitverzögerung/modifizierte delay.h



Siggi83
17.02.2005, 13:07
Servus alle zusammen!

Hab nun seid einiger Zeit dieses Forum hier abgegrast, und nun denke ich wird es auch mal Zeit selber zu posten.

Hab bis jetzt immer Probleme mit dem "_delay_loop" als Funktion gehabt und mich darüber geägert das das es beim WinAVR einen nicht so einfachen Befehl zur Zeitverzögerung gibt wie beim Bascom. Falls es noch mehr Leute gibt denen es ähnlich geht hier die Lösung:

http://www.tobi1024.de/doc/delay.h

einfach in das Verzeichnis: \WinAVR\avr\include\avr unter beliebigen Namen speichern, und dann im Quellcode als

#include <avr/_delay.h> einbinden (Bei mir im Beispiel habe ich die Datei _delay.h genannt).

Der Befehl zum Verzögern dann so einbinden:

delay_ms (x);

wobei das x für die Zeit in ms steht.


viel Spass damit
gruss Siggi

Kjion
17.02.2005, 13:36
Wobei du noch vielleicht dazu sagen solltest, das das ganze nur für 4 und 8 Mhz Taktfrequenz gilt. Alle anderen muss man sich trotzdem immer noch selbst zusammenbauen...

MfG Kjion

Thorsten
17.02.2005, 14:31
In der neusten libc gibt es den Befehl
_delay_ms (double __ms )
und
_delay_us(double __us )
Wenn F_CPU mit der Quarzfrequenez definiert ist, berechnet er die Pausenzeiten
automatisch.

siehe:
http://www.nongnu.org/avr-libc/user-manual/group__avr__delay.html

Siggi83
17.02.2005, 23:44
Ok, danke für die Antworten.

@Kjion:

hast Recht, dass habe ich vergessen noch zu sagen...

@Thorsten:
danke für den Tipp, rufe ich dann die Funktionen so auf:

_delay_ms (double __"zeitwert")?

Hab da in deinem Link gelesen, dass es aber nur eine max. Verzögerung bis zu 262.14 ms / F_CPU in MHz geben kann. Damit wäre doch die von mir gepostete Lösung hinsichtlich längerer Verzögerungen besser, oder?

gruss Siggi

Thorsten
18.02.2005, 13:29
Hi



rufe ich dann die Funktionen so auf:
_delay_ms (double __"zeitwert")?

Die Funktion wird einfach mit _delay_ms(x) oder _delay_ms(15)
aufgerufen. Die Beschränkung auf 262.14 ms ist mir noch garnicht
aufgefallen, da ein double Wert übergeben werden kann hab ich mit
mehr gerechnet. Ich habe die Funktionen selber auch noch nicht verwendet,
weil sie halt blockierend sind.

18.02.2005, 13:43
Servus Thorsten,

danke für die Antwort. Im Prinzip könnte man ja dann die delay-Funktion mehrmals hintereinander aufrufen *g*.

Ich war halt glücklich was gefunden zu haben mitdem ich eine Verzögerung über mehrere Sekunden schaffen konnte...
Zu dem Thema blockierend:

ist in meinem Fall egal, da solange der delay läuft keine weiteren Eingangssignale an den Controller kommen...
Soll im Prinzip nur einen Motor kurze Zeit ansteuern.

Vielleicht wäre es sinnvoll einen Schrittmotor zu nehmen, hab aber erstmal nach der Lösung mit dem geringsten Aufwand gesucht...

gruss Siggi

Siggi83
18.02.2005, 13:47
komisch, warum wird da eigentlich als Autor "Gast" angezeigt?
Hat da was mit dem einloggen nicht geklappt?

was solls...

gruss Siggi