LED seltener umschalten

#1206266
Lesenswert?
• ▲
▼
Konrad wrote:
> das ist mir klar, das will ich doch

Ja, und. Wo ist jetzt das Problem?

eine Variable muss her, welche als Zähler fungiert.
Bei jedem ISR Aufruf zählst du 1 zum Zähler dazu.
Ist der Wert des Zählers danach 100, dann schaltest du die Led um
und setzt den Zähler wieder auf 0.

1
uint8_t cnt;
2

3
ISR( ... )
4
{
5
  cnt++;
6
  if( cnt == 100 ) {
7
    cnt = 0;
8
    ... LED toggeln
9
  }
10

11
  ....
12
}
Gast #1206892
Lesenswert?
• ▲
▼
Warum soll das "schöner" sein...

ist doch nur ne test-routine.. würde das ganze so lokal wie möglich 
machen, damit man es einfach auch wieder rausschmeissen kann..
1
timer_isr(){
2
  
3
  #ifdef LED_TEST
4
  static unsigned char counter = 0;
5
  counter += 1;
6
  if (counter == 100) /* 1 kHz: Alle 100 ms wird getoggelt -> 10 Hz -> sichtbar */
7
  {
8
     LED_PORT ~= LED_PORT;
9
  }   
10
  #endif
11

12
}
#1207145
Lesenswert?
• ▲
▼
Dominique Görsch wrote:
> Wärs nicht schöner das Toggeln und Rücksetzen nicht in der ISR zu
> machen, sondern in der Main-Loop?

Über Schönheit kann man streiten.
Aber komplizierter wärs auf jeden Fall.
Ganz abgesehen davon, dass das dann am Sinn der Sache, nämlich möglichst 
genau zu messen in welchen Abständen die ISR aufgerufen wird, vorbei 
geht. Vom Setzen des Job-Flags bis zum Zeitpunkt an dem Die Mainloop 
darauf anspricht vergeht ja auch Zeit. Blöd nur, dass dieser Zeitversatz 
davon abhängt, wo dir Mainloop genau war, als das Jobflag gesetzt wurde.
#1207182
Lesenswert?
• ▲
▼
Dominique Görsch wrote:
> Hmm stimmt auch wieder, in dem Fall ists wohl andersherum echt besser.
> Ich hab mir ansonsten generell angewöhnt die ISRs so kurz wie möglich zu
> halten, also einfach nur Zähler hochsetzen und gut und den Rest dann in
> der Mainloop abfragen.

Das ist ja auch grundsätzlich eine gute Strategie.
Nur muss man immer auch aufpassen, dass der Aufwand nicht höher als der 
Nutzen ist. Eine LED umschalten dauert ein paar Taktzyklen. Ein Jobflag 
setzen dauert auch ein paar Taktzyklen. Kommt sich also im Endeffekt 
mehr oder weniger aufs gleiche raus. Und dann gewinnt die einfachere 
Lösung.

Antwort schreiben

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.

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.