Mehrere Zeitbasen im Projekt verheiraten

Gast #2731175
Hi,

ich hätte mal eine Frage, wie ihr in euren Projekten mehrere 
unterschiedliche Zeitbasen miteinander verheiratet, damit ich in meinem 
Projekt eine möglichst sinnvolle Herangehensweise wählen kann:

Anforderungen:
- Der Controller soll möglichst lange im Sleep-Modus verbringen.

Nachdem eine Messung gestartet wird, soll es ggf. Alarm geben.

Ich hätte gerne zwei unterschiedliche Alarmsignale mit unterschiedlichen 
Frequenzen, beispielhaft 3kHz und 7kHz.

Nun gibt es ja den Capture-Compare Interrupt und die Timer verfügen 
teilweise sogar über mehrere CC-Register, so dass ich jeweils ein 
CC-register für das 3k und das andere für das 7k nutzen könnte.

Problem aber: Wie kann ich es realisieren, dass beide unterschiedliche 
Auslösezeiten durch einen Timer realisiert werden?

Sobald das CC-1 erreicht ist, müsste ich den Timer ja zurücksetzen und 
das CC-2 würde nie erreicht...

Setze ich aber erst nach erreichen von CC-2 den Timer zurück, dann würde 
die Zeitbasis für das CC-1-Signal nicht mehr stimmen...


Also zusammengefasst:
Wie verheiratet man unterschiedliche Zeitbasen, die parallel 
nebeneinander existieren sollen?

mfg
#2731187
Erzeuge dir doch ein periodisches Signal durch einen Timer. Innerhalb 
deiner Interruptroutine zählst du dann Softwaremäßig deinen Timer hoch.

Sprich nen Timersignal mit der kleinsten gemeinsammen Auflösung --> 
1kHz. Dann zählst du in jedem Zyklus +1 und eine einfache IF-Anweisung 
ob der Wert erreicht ist und setzt ggf. die jeweiligen Counter wieder 
zurück.
#2731189
@  Timer (Gast)

>ich hätte mal eine Frage, wie ihr in euren Projekten mehrere
>unterschiedliche Zeitbasen miteinander verheiratet, damit ich in meinem
>Projekt eine möglichst sinnvolle Herangehensweise wählen kann:

Es gibt meist nur eine, daraus wird dann alles abgeleitet.

>Nun gibt es ja den Capture-Compare Interrupt und die Timer verfügen
>teilweise sogar über mehrere CC-Register, so dass ich jeweils ein
>CC-register für das 3k und das andere für das 7k nutzen könnte.

Ja.

>Problem aber: Wie kann ich es realisieren, dass beide unterschiedliche
>Auslösezeiten durch einen Timer realisiert werden?

Hast du doch schon beschrieben.

>Sobald das CC-1 erreicht ist, müsste ich den Timer ja zurücksetzen und
>das CC-2 würde nie erreicht...

Nö

>Setze ich aber erst nach erreichen von CC-2 den Timer zurück, dann würde
>die Zeitbasis für das CC-1-Signal nicht mehr stimmen...

Sicher.

>Also zusammengefasst:
>Wie verheiratet man unterschiedliche Zeitbasen, die parallel
>nebeneinander existieren sollen?

Der Timer läuft immer durch, nix reset. Der CC-Wert wird jeweils 
incrementiert. Also bei 1MHz Timertakt sinngemäß
1
ISR(OCR1A) {
2
  OCR1A+= 333;   // 3 kHz
3
  // etc.
4
}
5

6
ISR(OCR1B) {
7
  OCR1B+= 142;   // 7 kHz
8
  // etc.
9
}

MFG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.