Timer1: nach 1. Sekunde Interrupt auslösen

OP #2186870
Lesenswert?

Hallo Leute,
kann mir jemand bitte helfen den Fehler zu finden.

Ich will nach 1. Sekunde einen Overflow Interrupt auslösen.
Dabei verwende ich 16-Bit Timer1 und einen Arduino mini mit Atmega328P.

Wegen dem ARduino habe ich hier einen Hybridcode.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
 
4
bool counter = false;
5
int pin = 13;
6

7

8
int main(void)
9
{
10
 //pin 13 als LED
11
  pinMode(pin,OUTPUT);
12
  
13

14
  //Serialübertragung einstellen
15
  Serial.begin(9600);
16
  
17
 //TCCR1 mit null intialisieren
18
  TCCR1A = 0x00;
19
  TCCR1B = 0x00;
20
  
21
  TCCR1B |= (1<<WGM12) | (1<<WGM13); //CTC Modus aktivieren
22
  TCCR1B |= (1<<CS12); //Prescaler 256
23
  
24
  //Vergleichswert
25
  OCR1A = 62500;
26
  
27
  //Interrupts aktivieren und damit Timer starten
28
  TIMSK1 = (1<<OCIE1A);
29
  sei();
30
  
31
  while(1)
32
  {
33
   
34
    /*
35
   if(counter == true){
36
     digitalWrite(pin, HIGH);
37
   }
38
    else{
39
      digitalWrite(pin,LOW);
40
    }
41
      
42
    /* Sonstige Aktionen */
43
  
44
  }
45
}
46
 
47
/*Interrupt wird nach 1 sekunde aufgerufen*/
48
 
49
ISR (TIMER1_OVF_vect)
50
{
51
  Serial.println("test");
52
  counter ^= counter;
53
}

schöne Grüße aus Dieburg

Mischa
Gast #2187145
Lesenswert?

>> pinMode(pin,OUTPUT);
>> Serial.println("test");
>Was ist das?

Das sind Funktionen aus der Arduino-Bibliothek.

>  TCCR1B |= (1<<WGM12) | (1<<WGM13); //CTC Modus aktivieren
>  TCCR1B |= (1<<CS12); //Prescaler 256
>
>  //Vergleichswert
>  OCR1A = 62500;

Arduino Mini mit 16 MHz?

16000000 Hz durch Prescaler 256 ergibt 62500 Takte pro Sekunde. Den 
Vergleichswert musst du aber um Eins vermindern: OCR1A = 62500-1;

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