So nun konnte ich endlich noch etwas daran machen... Also ich habe den Fehler mit dem WGM bit behoben. Ich setzte nun das WGM32 bit. Nun habe ich aber folgendes problem dass egal welchen wert ich meiner variable Timer gebe, die frequenz gleich bleibt! Und zwar etwa bei 0.3Hz..
Ich habe nun um zu schauen mal das ganze auf den 8 Bit Timer angewendet und da funktioniert es einwandfrei, nur kann ich da natürlich keine 1Hz erreichen. Gibt es irgendwas bei den 16bit Timern was ich berücksichtigen muss? Ich bin kurz vor der Verzweiflung...
Hier der ensprechende Code:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
uint16_t Timer = ((F_CPU/1024) -1); //egal was, frequenz bleibt gleich
TCCR3A = (1<<WGM32); //CTC Mode
TCCR3B = (1<<CS32) | (1<<CS30); //prescaler 1024
OCR3AH = (uint8_t) (Timer>>; //t = 1s
OCR3AL = (uint8_t) Timer;
TIMSK3 |= (1<<OCIE3A); //Compare interupt aktivieren
uint16_t Timer2 = 255; //Frequenz ändert sich
TCCR0A = (1<<WGM01); //CTC Mode
TCCR0B = (1<<CS02) | (1<<CS00); //prescaler 1024
OCR0A = Timer2;
TIMSK0 |= (1<<OCIE0A); //Compare interupt aktivieren
DDRL = 0xFF;
sei();
while(1)
{
//TODO:: Please write your application code
}
}
ISR(TIMER3_COMPA_vect)
{
PORTL ^= (1<<PL0);
}
ISR(TIMER0_COMPA_vect)
{
PORTL ^= (1<<PL1);
}
Lesezeichen