Problem mit delay funktion

Gast #365808
Lesenswert?
• ▲
▼
Hallo,

Ich benutze AVRStudio4.12 + WinAVR (GCC).
Mein Problem ist folgendes: ich benutze die delay funktion in moment so
: _delay_ms(5);
Dies funktioniert eigentlich auch so, allerdings scheint die
verzögerung ( mit dem Oszi nachgemessen ) fast wahrlos zu geschehen.
wenn ich 10ms einstelle messe ich eine verzögerung von ca. 18ms, wenn
ich µs einstelle ( _delay_us(40); ) macht er ungefähr 1-2 ms.
irgendwie funktioniert das nicht wirklich genau.

Ich hatte vorher mit CodeVision zu tun. Hier ging das einwandfrei.
"Auch wenn man es damit nicht tut," habe ich in CodeVision mit der
delayfunktion schon 1 sekunde und so verzögert. alles kein problem
gewesen.
Aber irgendwie bekomm ichs mit AVRStudio und WinAVR nicht gebacken. was
könnte ich falsch gemacht haben???
versteh das einfach nicht.

schonmal vielen dank für hilfreiche antworten!!!

Gruß,
Thomas
Gast #365810
Lesenswert?
• ▲
▼
Habs gerade ausprobiert. Danke funktioniert super jetzt!!
für kurze tests werde ich nicht einen Timer nehmen, sondern die Delay
funktion. ein delay alla : _delay_s(1) geht wahrscheinlich trotzdem
nicht.
Gruß,
Thomas
Gast #365812
Lesenswert?
• ▲
▼
hmm okay. dein Codebeispiel ist jetzt aber kein Timer, oder?
habe vielleicht vergessen zu sagen, das ich nicht wirklich auskenne.
kann nur paar ports ein und ausschalten und mit dem delay rumspielen.
mit dem Tutorial (Timer) komme ich nicht klar. versteh das irgendwie
nämlich nicht.
Aber dein Beispiel sieht gar nicht so schwer aus.
Gruß,
Thomas
Moderator Persönliche Seite #365813
Lesenswert?
• ▲
▼
> dein Codebeispiel ist jetzt aber kein Timer, oder?

Ja, ist es nicht.

> mit dem Tutorial (Timer) komme ich nicht klar.

Die Applikation wird damit "multi-threaded".  Der Timer wird
typischerweise benutzt, um nach Ablauf einer bestimmten Zeit
einen Interrupt auszulösen, der das Hauptprogramm (gewissermaßen
die Vordergrund-Task) unterbricht.  Ab diesem Moment läuft ein
anderer Codezweig bis zum Ende der Interruptroutine.

Der Vordergrundjob könnte auch in einem sleep_mode() enden,
wenn gerade nichts weiter zu tun ist.

Schau dir doch mal das simple demo der avr-libc an.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.