Timer1 Problem mit ATMEGA1280

OP #2060350
Lesenswert?

Hallo zusammen,

versuche seit Stunden Timer1 im Compare-Betrieb laufen zu lassen, sodass 
ein Interrupt alle 1ms ausgelöst wird.
Mein Programm unterbricht beim Initialisieren des Timers schon alles und 
führt nichts weiter aus!
In die Interrupt-Routine zählt ich bis zu einer Sekunde hoch und gebe 
einen STring aus. Das ist später nicht die Aufgabe der Routine, sondern 
gerade nur zum testen.
Quarz: 8000000

Was mache ich falsch?

Mein Code:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4
#include <stdio.h>
5
#include <avr/pgmspace.h>
6
#include <string.h>
7
#include <stdlib.h>
8

9
#include "main.h"
10

11
uint8_t mssec = 0;
12
  
13
int main (void) 
14
{
15
  
16
  init_uart0( (u16)(XTAL / BAUD0 / 16 - 0.5) );      
17

18
  TIMSK1 |= (1<<OCIE1A);
19
  
20
  OCR1A = 124;
21
  TCNT1 = 0;                        
22
  
23
  TCCR1A |= (1 << WGM12);
24
  TCCR1B |= (1<<CS11) | (1<<CS10);
25
  sei();  
26
  while(1){}
27
}
28

29

30
ISR(TIMER1_COMPA_vect)
31
{
32
  mssec++;
33
  if(mssec == 1000)
34
  {
35
    mssec = 0;
36
    uputs0("1 sec vergangen");
37
  }
38
}

Vielen Dank für eure Hilfe!
Gast #2060376
Lesenswert?

> Mein Programm unterbricht beim Initialisieren des Timers schon alles und
> führt nichts weiter aus!

Bug in (Endlosschleife?) oder beim Rücksprung (Stack falsch 
initialisiert? falscher AVR im Projekt eingestellt?) aus der nicht 
gezeigten Funktion init_uart0()?

Hardwareprobleme beim RS232 Transfer AVR <-> PC? Funktioniert UART im 
Hello World Programm?

> ISR(TIMER1_COMPA_vect)
>     uputs0("1 sec vergangen");

Angenommen die Interrupts kommen alle ms. Wie viele Interrupts verlierst 
du durch uputs0() bei Baudrate BAUD0? Funktioniert das Toggeln einer LED 
alle Sekunde in der ISR?

>  TCCR1A |= (1 << WGM12);
>  TCCR1B |= (1<<CS11) | (1<<CS10);

CTC1 Modus OK. Prescaler 64. 8000000/64/(124+1) = 1ms OK.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren