Hallo ich verzweifel hier gerade ein bisschen.
Ich versuche den Timer0 des ATMEGA32 zu verwenden. allerdings habe ich so das Gefühl, dass nur einmal die ISR ausgelöst wird und danach nichts mehr passiert.
ich währe euch sehr dankbar wenn ihr mir bei dem Problem helfen könntet.
Das Problem ist, das die Variable t in der ISR nicht hochgezählt wird und somit auch die Variable nicht am PORTD ausgegeben wird und auch nicht incrementiert wird. Das PORTD = 0x03; welches in der ISR steht wird allerdings ausgeführt.Code:#include <avr/io.h> #include <avr/interrupt.h> uint16_t t = 0; uint8_t c = 0x00; void servo_init() { //Die Steuersignale der Servos liegen an Port D an! //Port D als Ausgang definieren DDRD = 0xff; PORTD = 0x00; //Timer initialisieren TCCR0 = (1<<CS00); TCNT0 = 96; TIMSK|=(1<<TOIE0); //Intrerrupts einschalten sei(); PORTD = 0x01; } //ISR beim überlauf des Timers T0 ISR(TIMER0_OVF_vect){ TCNT0 = 96; PORTD = 0x03; t++; if(t>999){ PORTD = c; t = 0; c++; } sei(); } int main( void ) //Funktion die automatisch ausgeführt wird { //PORTD DDRD = 0xff; //PORTD = 0b11111111; //PortC DDRC = 0x00; PORTC = 0b11111111; // Pull ups -> High && reie 3 aktiviert //PORTA DDRA = 0b11100000; PORTA = 0b01011111; servo_init(); sei(); while( 1 ) { // Endlosschleife ' verhindert unkontrollierten zustand } return 0; // Wird von int main() verlangt }







Zitieren

Lesezeichen