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; }
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.