Timer in Sekunden

Gast #1230535
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 =)
#1230545
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
Moderator (Firma: Titel) Persönliche Seite #1230552
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
}
Moderator (Firma: Titel) Persönliche Seite #1230610
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.