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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.