Warum nicht? Wenn der Timer richtig eigestellt ist sollte sich das Flag ändern.
Könntest du den aktuellen Code posten?
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 18:49 Uhr)
Ich habe den Code etwas geändert. Es funktioniert so. Das Flag wird gesetzt. Ich schaue noch warum der Int nicht ausgeführt wird.
Hier mein Code (den Prescaler habe ich geändert dadurch es schneller geht).
MfG HannesCode:#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<<CS20); //(1<<CS22) | (1<<CS20); TIMSK |= (1<<TOIE2); sei(); while(1) { while(TIFR & TOV2) { PORTB ^= (1<<PB0); _delay_ms(500); TIFR |= (1<<TOV2); } } }
In dem Fall liegt an B0 immer 0 an.
Edit: Nur so, die LED ist aktiv, wenn 1 an B0 anliegt.
Ich habe es mit dem Simulator getestet. Da hat es funktioniert. Leider habe ich keinen Mega32 zur Hand.
MfG Hannes
Ja, ich werde mal nen andren mega32 reintun.
Hatte doch grad nur nen mega16 da, es gibt einen astreines rechtecksignal an B0.
Edit: Hab doch noch nen mega32 gefunden, bei dem gehts auch nicht.
Geändert von avrrobot (27.09.2011 um 19:52 Uhr)
Da fragt man sich nur noch, warum das so ist?
Habe gerade das Datenblatt angeschaut (Errata). Hier ist das Datenblatt http://www.atmel.com/dyn/resources/p...ts/doc2503.pdf
Auf Seite 336 steht das es Probleme mit dem Timer geben kann. Es steht auch eine Lösung dort.
Füge im Code diese Zeile ein "TCNT2 = 0xff;"
Diese Zeile muss vor der Zeile mit TCCR-Register sein.
MfG Hannes
Lesezeichen