mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer in Sekunden


Autor: Mechatronaut (Gast)
Datum:

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

Autor: Chris K. (chrisk86)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
if (tiAkt > tiProzess2) {
  Prozess2();
  tiProzess2 = tiAkt+4000;
}  

Autor: Mechatronaut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm gott wie blöd... =)

naja ich bin schon ne weile wacht heute =)

danke das werd ich mal versuchen

Autor: Mechatronaut (Gast)
Datum:

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

Autor: Chris K. (chrisk86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann mach's doch alle 100ms ;)

Autor: Mechatronaut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jupp dass versuch ich jetzt auch gleich mal =)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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.