Forum: Mikrocontroller und Digitale Elektronik Wait - Funktion


von Martin (Gast)


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

von Karl H. (kbuchegg)


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.

von Falk B. (falk)


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

1
#define F_CPU 8000000
2
#include <avr/delay.h>
3
4
void long_delay(uint16_t ms) {
5
  for (; ms>0, ms--) _delay_ms(1);
6
}

MfG
Falk

von Martin (Gast)


Lesenswert?

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

Danke

von Peter (Gast)


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)

von Martin (Gast)


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

von Thorsten P. (torry)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.