16 bit Timer rasst davon..

Gast #3449672
Lesenswert?
• ▲
▼
Hallo Zusammen

Ich bin gerade dabei bei einem Atmega2560 mit den Timern etwas 
herumzuspielen. Ich habe nun verucht mit timer 3 im CTC modus eine ISR 
im 1 Sekunden Takt auszulösen. Nun ist es aber so dass dauer zwischen 
den Interrupts bei etwa 200mS liegen, also viel zu schnell...
Ich habe nun etwa 10 mal das entsprechende Kapitel im datenblatt gelesen 
und komme einfach nicht weiter. Was mache ich falsch?
1
#define F_CPU  16000000UL
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5

6

7
int main(void)
8
{
9
  uint16_t Timer = (F_CPU/1024) -1;
10
  TCCR3A = (1<<WGM31);      //CTC Mode
11
  TCCR3B = (1<<CS32) | (1<<CS30);    //prescaler 1024
12
  
13
  OCR3AH = (Timer>>8);      //t = 1s
14
  OCR3AL = Timer;
15
  
16
  TIMSK3 |= (1<<OCIE3A);    
17
  sei();
18
  DDRL = 0xFF;
19
    while(1)
20
    {
21
        //Blablabla
22
    }    
23
}
24

25
  ISR(TIMER3_COMPA_vect)
26
  {
27
    PORTL ^= (1<<PL0);
28
  }

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.