Versuche einmal das sei direkt vor die while Schleife.
in die ISR kannst du auch "PORTB ^= (1<<PB0);" schreiben (Invertiere PB0).
Die Einstellungen habe ich mir nicht angeschaut.
MfG Hannes
Hallo,
Ich brauche nun für einen bestimmten Grund in relativ großen Zeitabständen (0,5-2 sekunden) einen Interrupt.
Dafür wollte ich dann den Beispielcode hier verwenden.
Ich habe ihn noch etwas verändert und nun sieht er so aus:
Ich will damit testweise eine LED an B0 zum blinken kriegen.Code:#ifndef F_CPU #define F_CPU 1000000 #endif #include <avr/io.h> #include <util/delay.h> #include <stdint.h> #include <avr/interrupt.h> volatile int stat=0; ISR(TIMER2_OVF_vect) { if(stat = 0){ stat=1; PORTB |= (1<<PB0); }else{ stat=0; PORTB &= ~(1<<PB0); } } int main(void){ DDRB |= (1<<PB0); sei(); TCCR2 = (1<<CS22) | (1<<CS20); TIMSK |= (1<<TOIE2); while(1){} }
Es geht bloß leider nicht.
Ich verwende einen atmega32 und avr-gcc (avr studio).
Hat da irgendjemand eine Idee?
Versuche einmal das sei direkt vor die while Schleife.
in die ISR kannst du auch "PORTB ^= (1<<PB0);" schreiben (Invertiere PB0).
Die Einstellungen habe ich mir nicht angeschaut.
MfG Hannes
Nee, hat immer noch nicht funktioniert.
Bei dieser Zeile if(stat = 0){ sollte dir der Compiler eigentlich ein Warning ausgeben.
Richtig ist if(stat == 0){
Ja stimmt, hätte er gesollt.
Ich habe aber durch andre Tests herausgefunden, dass die ISR nie aufgerufen wird.
Außerdem habe ich jetzt das ganze if...else durch PORTB ^= (1<<PB0); ersetzt.
In der Simulation läuft es aber. Bist du sicher das da nicht ein anderer HW-Wurm drinnen ist?
Wenn ich das PORTB ^= (1<<PB0); in die while(true) schreibe,
dann leuchtet die LED so mittel. Das Oszi bestätigt ein sehr schnelles PWM.
Also Hardwaremäßig läuft eigentlich alles.
Das ist klar das dann die Led mit etwa halber Kraft leuchtet. Die Led ist so zu 50% ein und zu 50% aus => Tastgrad=50%.
Das war aber schon einmal ein guter Test, so kann man sicher sein das die Led funktioniert.
Versuche einmal ob das TOV2-Flag im Register TIFR sich ändert. Du könntest zusätzlich (damit du das siehst) eine Delay Zeit einfügen.
MfG Hannes
Wann soll ich das ausprobieren, zur Laufzeit?
Du könntest es in der while Schleife das Flag prüfen. So kannst du sicher sein das der Timer läuft.
MfG Hannes
Lesezeichen