Forum: Mikrocontroller und Digitale Elektronik Timer in Sekunden


von Mechatronaut (Gast)


Lesenswert?

hallo zusammen,

ich bastel an meiner diplomarbeit und habe da eine frage was den umgang 
bzw. die korrekte verwendung eines timers angeht.

hier die situation:

- 4 Prozesse laufen nacheinander ab
- das ganze wird zyklisch wiederholt
- die dauer der einzelprozesse ist nicht genau gleich und lässt sich 
nicht      beeinflussen (ca 10ms pro prozess)
- die 4 prozesse sollen immer wieder nach 4 sekunden aufgerufen werden 
das heißt die zeit zwischen dem aufruf von prozess 2 und dem nächsten 
aufruf von prozess 2 soll 4 sekunden sein

ich wolle nun zu beginn jedes prozesses einen timer starten und den dann 
eine Sekunde laufen lassen wenn er fertig ist den nächsten prozess 
starten und den timer neu laden. damit würde ich ja erreichen dass die 
gesamtzykluszeit 4 sekunden wäre oder?? =)

nur jetzt hab ich nen 16-bit timer der kann ja bis 65534 zählen mit nem 
vorteiler käme ich im längsten fall auf 2,6µs.
65534 * 2,6µs = 170ms =(

wahrscheinlich ist das problem ganz einfach zu lösen nur steh ich aufm 
schlauch... =)

wäre schön wenn ihr mir nen netten tip geben könntet =)

von Chris K. (chrisk86)


Lesenswert?

Zähle doch im Timer eine Variable hoch. Wenn du z.B. alle 100ms um 1 
erhöhst, musst du nur noch prüfen, ob 10 erreicht wurde.
Dann einfach die Variable zurücksetzen und den passenden Prozess 
starten...

Du kannst natürlich auch bei 10 den ersten Prozess, bei 20 den zweiten, 
usw. starten und bei 40 wieder von vorne anfangen zu zählen...

Chris

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Quick and Dirty: Lass dir alle 100ms einen Interrupt erzeugen und zähl 
auf 40. Dann sind 4 Sekunden vergangen.

Ich mache das üblicherweise so, dass z.B. jede ms ein Interrupt erzeugt 
wird, der eine Variable ulong tiAkt hochzählt. Und alle anderen Zeiten 
berechnen sich relativ zu diesem durchlaufenden Zähler. So etwa:
1
if (tiAkt > tiProzess2) {
2
  Prozess2();
3
  tiProzess2 = tiAkt+4000;
4
}

von Mechatronaut (Gast)


Lesenswert?

hmmm gott wie blöd... =)

naja ich bin schon ne weile wacht heute =)

danke das werd ich mal versuchen

von Mechatronaut (Gast)


Lesenswert?

ein problem ist nur bei dem 1ms-interrupt dass die 4 prozesse nicht 
unterbrochen werden dürfen =(

von Chris K. (chrisk86)


Lesenswert?

Dann mach's doch alle 100ms ;)

von Mechatronaut (Gast)


Lesenswert?

jupp dass versuch ich jetzt auch gleich mal =)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> dass die 4 prozesse nicht unterbrochen werden dürfen
Das würde mir aber zu denken geben  :-/

Diese Timer-Hochzähl-Interrupt-Routine dauert nicht sehr lange (ein paar 
us). Wenn das deine Prozesse 1-4 nicht vertragen, dann wirst du aber 
garantiert irgendwo anders ins offene Messer laufen.

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.