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.
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
Ja, aber das dürfte sich ja eigentlich nicht ändern.
Warum nicht? Wenn der Timer richtig eigestellt ist sollte sich das Flag ändern.
Könntest du den aktuellen Code posten?
MfG Hannes
Ach so, ja stimmt.
Die LED ist dann dauerhaft an.Code:#ifndef F_CPU #define F_CPU 1000000 #endif #include <avr/io.h> #include <util/delay.h> #include <stdint.h> #include <avr/interrupt.h> ISR(TIMER2_OVF_vect) { PORTB ^= (1<<PB0); } int main(void){ DDRB |= (1<<PB0); TCCR2 = (1<<CS22) | (1<<CS20); TIMSK |= (1<<TOIE2); sei(); while(1){ if((TIFR & TOV2) == 0) PORTB |= (1<<PB0); if((TIFR & TOV2) == 1) PORTB &= ~(1<<PB0); } }
Geändert von avrrobot (27.09.2011 um 17:49 Uhr)
Lesezeichen