Forum: Compiler & IDEs delay 1s bei 16 MHz


von TechInfo (Gast)


Lesenswert?

Ich programmiere einen Atmega128 bei 16 MHz.

Wie läßt sich am geschicktesten ein delay von 1 Sekunde erreichen?

Bisher habe ich es mit
1
for (i=0; i<70; i++)
2
  delay_ms(15);

erreicht.

von Johannes M. (johnny-m)


Lesenswert?

Mit einem Timer. Die _delay_xx-Funktionen sind nach wie vor immer noch 
zur Erzeugung kurzer Wartezeiten vorgesehen und nicht für Sekunden. 
Wenn es unbedingt mit den Funktionen sein soll, geht es reproduzierbar 
wohl nur mit Deiner Methode.

von TechInfo (Gast)


Lesenswert?

Es geht um die Menüführung über ein LCD-Display. Zum Beispiel soll das 
Display nach Betätigung einer bestimmten Taste 10 Sekunden auf eine 
Eingabe warten. Da soll das Programm nicht weiter laufen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Da soll das Programm nicht weiter laufen.

Dann lass den Prozessor in dieser Zeit schlafen, statt ihn endlos
sinnlos zu beschäftigen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> nach Betätigung einer bestimmten Taste 10 Sekunden auf eine
> Eingabe warten

Was heißt "auf eine Eingabe warten"?

Mit der Delayfunktion bedeutet es, egal, wie schnell eine Eingabe 
erfolgt, es dauert 10 Sekunden, bis das Programm wieder überhaupt 
irgendwas tut (sofern es nicht Eingaben in Interruptroutinen auswertet).

Ich kenne zwar Geldautomaten, die so programmiert sind (die alten 
NCR-Schrippen der Postbank, die wollen ein kleines Gebet irgendwohin 
hören, bevor man die Geheimzahl eingeben darf), aber benutzerfreundlich 
würde ich so ein Verhalten nicht nennen.


von TechInfo (Gast)


Lesenswert?

Ja ihr habt Recht, da wäre ein Timer besser angebracht.

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.