mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Alternative zu delay_ms()


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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().

Autor: bla (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: Timer!

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas macht man in jedem Fall mit einem Timer.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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>...

Autor: Valentin Buck (nitnelav) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/avrtimerca...
verwenden.
Mit freundlichen Grüßen,
Valentin Buck

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.