Hallo, ich möchte nur mal fragen ob es denn technisch möglich ist beim Atmega (16)2 Timer gleichzeitig zu nutzen. Ich möchte den overflow-INT jedes Timers abfragen, im konkreten Fall bei Timer 0 und Timer1. Allerdings scheint das mit WinAVR nicht zu gehen. Jedenfalls wird immer nur ein Timer genutzt. Ichhab schon x mal das Datenblatt gewälzt allerdings kann ich natürlich Fehler meinerseits nicht ausschließen. Quellcode: #include <avr/io.h> #include <progmem.h> #include <avr/signal.h> #include <avr/interrupt.h> //Arbeitstakt angeben #define SYSCLK 8000000UL //usart ansprechen volatile unsigned int count=0; volatile unsigned int count2=0; volatile unsigned int Stellweg=1;//-->ergibt bei 8MHz etwa 1Hz Tak void timer (void){ TIMSK = _BV(TOIE0); //overflow flag setzen--> ab jetzt kan overflow interrupt ausgelöst werden TCNT0 = 0; //Rücksetzen des Timers TCCR0 = _BV(CS01); //Prescaler 8 } void timer1 (void){ TIMSK = _BV(TOIE1); //overflow flag setzen--> ab jetzt kan overflow interrupt ausgelöst werden TCNT1 = 0; //Rücksetzen des Timers TCCR1B = _BV(CS00); //Prescaler 1 } int main(void) { timer (); timer1(); sei (); //interrupts ein DDRB = 0xff;//PortB = Ausgabe PORTB = 0xff; for (;;) { } return 0; } //lässt led blinken SIGNAL (SIG_OVERFLOW0) { count++; if (count==Stellweg){ if(PORTB & (1<<PB0)){ PORTB&=~(1<<PB0); } else{ PORTB|=(1<<PB0); } count=0; } } SIGNAL (SIG_OVERFLOW1) { count2++; if (count2==31){ if(PORTB & (1<<PB1)){ PORTB&=~(1<<PB1); } else{ PORTB|=(1<<PB1); } count2=0; } } Danke für eure Hilfe. Gruß Bomb
Problem gelöst: TIMSK = _BV(TOIE0); ist falsch so muss es sein TIMSK |= _BV(TOIE0); Hab ohne das 'oder' einfach die anderen Werte im Register überschireben. :/ tschö Bomb
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.