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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren