Interruptmakros ansteuern

Gast #5402229
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;
}
Gast #5402826
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...

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