mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interruptmakros ansteuern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Thitzen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Sascha W. (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk B. (dirkb)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.