Hallo
Ich hätte eine kleine Frage und zwar hab ich folgendes Programm bei dem mit der Zeit die Pulsbreite von Timer2 erhöht werden soll:
Code:#include <avr/io.h> #include <avr/interrupt.h> //Funktionsdeklaration void init(); void init_timer0(); void init_timer2(); //Timer0: #define T0_TEILER64 TCCR0|=0x03;TCCR0 &=0xFB #define T0_NORMAL TCCR0&=0x87 #define T0_RESET TCNT0=0 #define T0_OVL_INT TIMSK|=0x01;SREG|=0x80 //Timer2: #define T2_INT_OVL_ENABLE TIMSK|=0x40;SREG|=0x80 #define T2_FAST_PWM_EIN TCCR2&=0x00;TCCR2|=0x68 #define T2_PULSBREITE OCR2 #define T2_TEILER_1 TCCR2&=0xF8;TCCR2|=0x07 int main()// { //Initialisierung der Baugruppen) init(); init_timer0(); init_timer2(); // Hintergrundschleife bzw. Hintergrundprozess do { } while(1); return 0; } void init() { DDRA &=0x00; //PB5 als Ausgang konfigurieren DDRD |=0xFF; } void init_timer0() { //Normalbetrieb einstellen T0_NORMAL; //Teiler (64) einstellen T0_TEILER64; //Zählerstand Reset T0_RESET; //Interrupt freischalten (Überlaufinterrupt freischalten) T0_OVL_INT; } void init_timer2() { // PWM-Betrieb einstellen T2_FAST_PWM_EIN; // Pulsbreite auf 0 einstellen T2_PULSBREITE = 0; // Maximale Frequenz - Teiler T2_TEILER_1; // Overflow Interrupt freigeben T2_INT_OVL_ENABLE; } //ISR für Timer0 Überlauf (alle 2ms) ISR(TIMER0_OVF_vect) { static unsigned char zaehler=0; zaehler ++; if(zaehler >= 49)//ca alle 98ms { zaehler = 0; if(T2_PULSBREITE<=250) { T2_PULSBREITE += 5; } } }
Das Problem ist das wenn die Variable zaehler den Wert 16 erreicht das Programm wieder zu init springt und dann wieder init_timer0 und init_timer2 durchläuft und das ganze wieder von vorne beginnt.
Vielleicht weiß jemand wo da der Fehler liegt!
Ich bin totaler Anfänger und weiß auch nicht ob ich hier in diesem Forum mit dieser Frage richtig bin...
Aber ich würde mich über die Lösung des Problems freuen!!!![]()







Zitieren


Lesezeichen