Forum: Mikrocontroller und Digitale Elektronik Interruptmakros ansteuern


von Thitzen (Gast)


Lesenswert?

Hallo, ich hätte mal eine frage. Kann man beim Atmega8 beim Timer2, die 
beiden Interruptmakros gleichzeitig benutzen?
Wenn ja wie muss ich das umschreiben das es funktioniert (zumindest paar 
Tipps), wäre euch sehr dankbar.
Der Timer2_comp_vect soll hochzählen wenn eine steigende flanke ist und 
der timer2_OVF_vect soll das ergebnis von einer Sekunde oder 5 sekunden 
speichern. dieses wird dann auf einem Display übertragen. Am Timer 1 
befindet sich schon ein Motor mit PWM das man mit einem POTI regelt. 
Oder kann ich am Timer1 noch den Timer1_OVF_vect ansteuern da der ja 16 
Bit und nicht wie timer2 8Bit?

TCCR1A |= (1<<WGM10);        // Fast-PWM (8-Bit)
TCCR1A |= (1<<COM1A1);        // nicht invertieredner PWM-Modus
TCCR1B |= (1<<WGM12);        //
TCCR1B |= (1<<CS12);        // Prescaler 256

  TCCR2 = (1<<CS22)| (1<<CS21) | (1<<CS20);
  TIMSK |=(1<<OCIE2)| (1<<TOIE1);

ISR (TIMER2_COMP_vect)
{
  b=b;
  static unsigned char zustand;
  if (zustand ==0 && !(PINB &(1<<PB3)))
  {

    zustand =1;
    b++;
  }
else if (zustand ==1 && !(PINB &(1<<PB3)))
    zustand = 2;
  }
else if (zustand ==2 && (PINB &(1<<PB3)))
  {
    zustand=0;
  }

}
ISR (TIMER2_OVF_vect)
{

  d=b;
  b=0;
}

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

natürlich kannst du die ISRs gleichzeitig nutzen, allerdings ist die 
Frequenz mit der die ISRs aufgerufen werden identisch nur der Zeitpunkt 
ist unterschiedlich. Auch bei PWM kannst du noch ein OV verwenden - dann 
halt mit der Frequenz der PWM.

Sascha

von Dirk B. (Gast)


Lesenswert?

Thitzen schrieb:
> Kann man beim Atmega8 beim Timer2, die beiden Interruptmakros gleichzeitig 
benutzen?
Nein, die "Interruptmakros" werden gar nicht 'benutzt' sondern sind ... 
also bei einer Uhr wären es Speicherplätze um zu unterschiedlichen 
Weckzeiten unterschiedliche Aktionen auszuführen.
Dein Vorhaben geht, aber ist in der Frageform sehr schlecht zu 
beantworten.
Eine (hoffentlich einfache) Vorstellung wäre, dass jeder Timer 2-3 
Alarmzeiten hat:
a) Timer fängt wieder von vorne an:TIMER_x_OVF
b) Wecker a:TIMERx_COMP_a
c) Wecker b:TIMERx_COMP_b (nicht bei allen Timern)
und vom Prinzip ist die PWM bspw. comp_a ein Interrupt vom Prozessor der 
automatisch genau einen Befehl ausführt (Pin: an/aus/toggle), der aber 
auch gleichzeitig einen 'regulären'
ISR (TIMER1_COMPA_vect)
{...}
ausführen könnte.

Die "Interruptmakros" stehen praktisch für die Zeiten t=comp_a / 
t=comp_b /t=overflow und können dann Programmteile starten...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.