www.mikrocontroller.net

Forum: Compiler & IDEs period. ereignisse aus free running counter ?


Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe eine Timerinterrupt der nach ablauf einer bestimmten Zeit eine
Variable "A" erhöht ( ergibt einen free-Running counter ) der sich all
x millisekunden erhöht.

Aus "A" wuerde ich mir gerne einige periodische Ereignisse ableiten.

ich suche jetzt ne idee das eleganter zu machen als:

if ( "A" == n ) { ... }

im Besonderen, da ein Ereignis nicht nicht nur bei n sondern auch bei
2n, 4n, 6n eintreten soll, ein anderes Ereigniss bei m, 3m, 6m, 9m etc
...

Vieleicht hat ja jemand eine idee hierzu.

Grüße,

Stefan

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
switch (a % modn)

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
** GRR!

Nochmal von vorne:

Angenommen, Dein "A" wäre ein Int-Wert, dann känntest Du das so
erledigen:

  if (!((a / n) % 2))
    Ereignis_n;

  if (!((a / m) % 3))
    Ereignis_m;

Ereignis_n wird aufgerufen für a = 0, a = 2n, a = 4n etc.

Ereignis_m wird aufgerufen für a = 0, a = 3m, a = 6m etc.

Wär' das was?

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder z.B. so: (modulo und divisionen sind ziemlich teuer)

if ( A == event_n3) {
  event_n3 += 3;
  ...
}

if ( A == event_n7) {
  event_n7 += 7;
  ...
}

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder auch one-shot timers:

http://www.sax.de/~joerg/avr-timer/

(Hatten wir schon mal diskutiert.  Peter Danneger hat auch noch eine
Variante davon vorgestellt.)

Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Erst mal vielen Dank für Eure Antworten.

Die Idee von Werner ist das was ich mir als "Gotcha" ;-) aus meiner
Frag erhoft habe.

An die Modulo Rechnerei hatte ich auch schon lose gedacht, hab mich
aber nicht wirklich dran gewagt, das so zu machen wegen des
befürchteten code/rechen/Zeitaufwandes ( die division ).

Die One-Shot Timer Bibliothek ist auch interessant,
mit Werners Vorschlag komme ich aber , da er hinreichend für mein
Problem ist mit deutlich weniger Code weg.

Grüße,

     Stefan

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.