Go Down

Topic: millis() Langzeit (Read 375 times) previous topic - next topic

lightbluecrab

Hey,
Ich bin momentan an einem Projekt dran, bei dem ich gezwungenermaßen Multitasking betreiben muss.
Allerdings soll der Arduino (Pro Mini) für eine längere Zeitspanne aktiv sein. Ist die millis-Methode für
lange Laufzeiten (6 Monate+) noch geeignet oder gibt es bessere Alternativen?
Vielen Dank, LG Emil

Tommy56

Solange eine einzelne Zeit nicht länger, als 49 Tage ist und Du alles richtig machst, gibt es keine Probleme.

Für mehr hast Du zu wenig Infos geliefert.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

lightbluecrab

#2
Feb 21, 2019, 04:29 pm Last Edit: Feb 21, 2019, 04:31 pm by lightbluecrab
Danke für die schnelle Antwort!
Was ist mit "einzelne Zeit" gemeint?

Ich überprüfe einen Parameter jede Sekunde, während der Rest des Codes simultan
und ohne delay läuft.

agmue

#3
Feb 21, 2019, 04:57 pm Last Edit: Feb 21, 2019, 05:28 pm by agmue
Bei Dir "einzelne Zeit" = 1 Sekunde

if(jetzt - vorhin >=1000)
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

combie

Quote
Ist die millis-Methode für lange Laufzeiten (6 Monate+) noch geeignet oder gibt es bessere Alternativen?
Ist sie nicht.
Für ca 49 Tage, niicht mehr.

Alternativen?
Nennt sich "Programmieren!"
Der Pessimist sieht die Wolke vor der Sonne.
Der Optimist sieht die Sonne hinter der Wolke.

Mantra: Die Sonne scheint immer!

michael_x

Bei längeren Laufzeiten ( 6 Monate+ ) würde ich erstmal davon ausgehen, dass
- man mit 1 Sekunde Zeit-Auflösung vermutlich hinkommt (kein Problem mit uint32_t)
- man nur mit Aufwand einen absolut ungestörten Dauer-Betrieb hinkriegen wird. Das wird die größere Herausforderung.

Tommy56

Ohne weitere Infos vom TO wird das hier mal wieder eine der berüchtigten Raterunden, die im Endeffekt meist am eigentlichen (unbekannten) Thema vorbei gehen.

Der TO sollte also noch ein paar Infos nachreichen, wenn er sinnvolle Hilfe haben will.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

postmaster-ino

Hi

Nun denn - will ich auch Mal.

Millis wird Dir auch in 6 Monaten einen (ungefähren) Sekunden-Takt geben.
Wenn Du jede Sekunde eine Variable +1 zählst, kannst Du berechnen, wann die 6 Monate um sind.
millis() selber wird nach 49,batsch Tagen wieder auf Null überlaufen - wird also öfter binnen der 6 Monate passieren - was aber egal ist, da mit korrekter Abfrage sich der Überlauf rausrechnet.

Nur kann Es Dir passieren, daß Dein Versuch zwar um 12:00h startet, die 6 Monate aber nicht um 12:00h wieder vorbei sind (... ein 6er im Lotto wird wahrscheinlicher sein, selbst eine RTC wie die DS3231 wird hier Lücken aufweisen).

Wenn's Dir auf die recht exakte Sekunde ankommt - also Dein Arduino über die 6 Monate immer eine sehr genaue Uhrzeit 'kennt', nimm eine DS3231 und lasse Dir von Dieser einen Sekundentakt ausgeben - Den kann der Arduino erfassen und darauf hin Seine Arbeit erledigen.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Tommy56

Raten wir weiter. Wenn ihm das noch zu ungenau erscheint, kann er die DS3231 ja täglich mit NTP stellen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

michael_x

Woher kriegt ein Arduino Pro Mini NTP?
Aber eine batteriegepufferte RTC ist sicher eine gute Ergänzung zum erkennen, wann 6 Monate rum sind.

Whandall

Viele RTC Module haben auch einen eigenen zusätzlichen EEPROM.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Tommy56

Woher kriegt ein Arduino Pro Mini NTP?
Über ein angeschlossenes Ethernet- oder WLAN-Modul? Was sonst?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up