mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wait - Funktion


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hy Leute,

gibts für die Atmega Serie so etwas wie eine Wait - Funktion
z.B wait(1000)      //Warte 1000ms

Wenn ja könnte mir jemand den C Synthax sagen

Danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin wrote:
> Hy Leute,
>
> gibts für die Atmega Serie so etwas wie eine Wait - Funktion
> z.B wait(1000)      //Warte 1000ms
>
> Wenn ja könnte mir jemand den C Synthax sagen

Das hängt davon ab, welchen Compiler du benutzt.
In C selbst gibt es keine derartige Funktion. Wenn ein
Compiler sie mitbringt, dann ist das eine compilerspezifische
Ergänzung. Bei verschiedenen Compilern heist die Funktion
daher anders.

PS: Meist will man so eine Funktion nicht benutzen, weil der
Mega in dieser Wartezeit nur Däumchen dreht. Das ist aber
fatal, wenn er in dieser Wartezeit nicht auf andere, wichtige
Ereignisse reagieren kann.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin (Gast)

>gibts für die Atmega Serie so etwas wie eine Wait - Funktion
>z.B wait(1000)      //Warte 1000ms

Jain. Aber du weisst schon, dass owas im allgemeinen schlechter 
Programmierstil ist.

>Wenn ja könnte mir jemand den C Synthax sagen

Im WINAVR gibt es die Funktinen _delay_ms() und _delay_us(), die können 
aber nur begrenze Verzögerungen erzeugen. Für so lange Zeiten muss man 
was stricken

#define F_CPU 8000000
#include <avr/delay.h>

void long_delay(uint16_t ms) {
  for (; ms>0, ms--) _delay_ms(1);
}

MfG
Falk

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Geschichte mit den Däumchen drehen ist mir bekannt^^ (Danke)
Ich verwende einen WINAVR Compiler. Kennt jemand den Befehl dafür!

Danke

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Beispiel....

[C]
#include <avr/io.h>
#include <util/delay.h>

void wait(unsigned short MyWaitTime);

void wait(unsigned short MyWaitTime)
{
  while(MyWaitTime--) _delay_ms(1);
}
[/C)

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnellen Antworten. Bin mir schon im Klaren dass solche 
Wartezeiten sinnvoll genützt werden sollten, aber in meiner Anwendung 
brauche ich sie unbedingt.

Grüße aus Salzburg
Martin

Autor: Thorsten Poser (torry)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Falls DU WinAVR verwendest, gibt es dort sowas und auch in anderen C 
Compilern sicherlich auch.
Bei WinAVR mußt DU erst:
#include <util/delay.h>

und dann kannst DU zwei sachen nutzen !
_delay_us(1.5); //Warte 1.5 Mikrosekunden
_delay_ms(12);  //Warte 12 Millisekunden

Grenzen für _delay_us      768us    / F_Takt(in MHz)
            _delay_ms      262.14ms / F_CPU (in MHz)

LG Thorsten

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.