Forum: Mikrocontroller und Digitale Elektronik Alternative zu delay_ms()


von Michael (Gast)


Lesenswert?

Hallo,

ich hab mir mich hier grade gefragt ob es nicht auch noch sinnvollere 
Möglichkeiten gibt als delay_ms() um eine Zeitspanne von mehreren 
Minuten abzuwarten.
Konkret möchte ich folgendes machen:

Mit einem LM50 und einem LM335 messe ich die Umgebungstemperatur (LM50 
sitzt direkt neben dem Atmega, LM335 ist etwa nen Meter weit weg). Das 
möchte ich aber nicht ständig machen sondern nur alle 30 Minuten. Wird 
eine spezieller Wert unterschritten so möchte ich für einige Minuten ein 
Heizelement einschalten.

Ich habe hierzu einen Atmega88 der seinen Takt durch einen formschicken 
8 MHz Quarz bekommt. Und wie gesagt frage ich mich ob delay_ms wirklich 
sinnvoll für Minuten ist oder ob es nicht besseres gibt. Für meine 
Anwendung ist Genauigkeit nicht soo wichtig (mir ists wurscht ob das 
Messintervall nun exakt 30 Minuten ist oder obs nur 29.3 Minuten sind) 
aber es interessiert mich nun ob und wie man es besser machen kann als 
mit delay_ms().

von bla (Gast)


Lesenswert?

Du könntest einen hohen presacler für T1 timer und den overflow flag 
auswerten oder den Interrupt nutzen.

prescaler=1024 bringt z.B. (8000000/1024)/65536 = 0.119... Hz

von Marius W. (mw1987)


Lesenswert?

Stichwort: Timer!

von Michael (Gast)


Lesenswert?

OK, Timer selbst aufbauen ist ja auch kein Ding. Das hab ich schon bei 
PICs gemacht. Dachte hier halt nur ich frag mal, nicht dass es da was 
gibt, dass ich nicht kenne (z.B. ein delay_min() oder so). Dank euch für 
die Info.

von Purzel H. (hacky)


Lesenswert?

Sowas macht man in jedem Fall mit einem Timer.

von Klaus W. (mfgkw)


Lesenswert?

Schon alleine deshalb, weil delay_<irgendwas> nicht <irgendwas>
an abgelaufener Zeit wartet, sondern letztlich entsprechend
CPU-Zeit abwartet bzw. sinnlos verbrät.
Laufen keine Interrupts, dann dauert delay_<irgendwas> tatsächlich
die erwartete Zeit.
Hat man dagegen 50% Rechenleistung in den ISRs, dann dauert
es 2*<irgendwas>, brauchen die ISRs 90% Rechenleistung, dann
ist man schon bei 10*<irgendwas>...

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Guck dir mal CTC an.
Also Count To Compare.
Damit kannst du wirklich extrem kleine Zeitspannen machen.
Meistens löst man aber eher auf Sekunden auf, und zählt damit dann einen 
Zähler für Sekunden und ggf. einen für Minuten hoch.
Zur Einstellung für deine Taktfrequenz kannst du
http://apexys-toan.blogspot.com/2011/01/avrtimercalculator.html
verwenden.
Mit freundlichen Grüßen,
Valentin Buck

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.