Hallo zusammen,
irgendwie stehe ich gerade im Wald und zwar, will der Timer1 meines Atmega32 nicht so, wie ich will.
Die Idee: Der Timer1 läuft im CTC-Modus und löst alle 1 Sekunde einen Interrupt aus. Meine MCU läuft mit 1,7456MHz.
Einstellungen für den Timer:
Prescaler: 1024
OCR1A: 14399
Hier ist die Funktion, die den Timer initialisiert:
Sieht ganz okay aus.
Hier ist mein Interrupt:
Die Variable counter ist als volatile int counter = 0; definiert, vor der Main, der Interrupt kann auch drauf zugreifen. In der gibt es auch eine sei(); drin.
Hier ist die Auswertung für die Variable:
Problem: Es passiert nichts.
Für die Berechnung des Timers habe ich AVR-timer-Calc verwendet. Und dort folgendes eingegeben:
Frequenz: 14745600
Interrupt-Time: 1000000 (ist doch in Mikrosekunden oder?)
Interrupt: Compare
Timer: 16-bit
Was stimmt denn nicht?
Danke Euch.
Grüsse
Heinrich
irgendwie stehe ich gerade im Wald und zwar, will der Timer1 meines Atmega32 nicht so, wie ich will.
Die Idee: Der Timer1 läuft im CTC-Modus und löst alle 1 Sekunde einen Interrupt aus. Meine MCU läuft mit 1,7456MHz.
Einstellungen für den Timer:
Prescaler: 1024
OCR1A: 14399
Hier ist die Funktion, die den Timer initialisiert:
Code:
void timer1_init (void) {
TIFR |= (1<<OCF1A); // Interruptrequest löschen
TIMSK |= (1<<OCIE1A); // Interrupt einschalten
OCR1A = 14399; // TOP-Wert setzen
TCNT1 = 0;
TCCR1A |= (1 << WGM12);
TCCR1B |= (1 << CS12)|(1 << CS10);
}
Sieht ganz okay aus.
Hier ist mein Interrupt:
Code:
ISR (TIMER1_COMPA_vect) {
counter ++;
}
Die Variable counter ist als volatile int counter = 0; definiert, vor der Main, der Interrupt kann auch drauf zugreifen. In der gibt es auch eine sei(); drin.
Hier ist die Auswertung für die Variable:
Code:
switch (counter) {
case 30:
sendIKEReady ();
break;
case 60:
sendIKEReady ();
status = RTC_read();
RTC_getTime();
sendTime();
counter = 0;
break;
}
Problem: Es passiert nichts.
Für die Berechnung des Timers habe ich AVR-timer-Calc verwendet. Und dort folgendes eingegeben:
Frequenz: 14745600
Interrupt-Time: 1000000 (ist doch in Mikrosekunden oder?)
Interrupt: Compare
Timer: 16-bit
Was stimmt denn nicht?
Danke Euch.
Grüsse
Heinrich