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

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.