Timer1 läuft nicht an

Gast #2225027
Lesenswert?

Versuche gerade mit hilfe einens Uhrenquarz 6,5536MHz meinen Timer 1 von 
meinem Atmega644 zum laufen zu bekommen. Doch leider ergebnislos.

void timer1_init()
{
    OCR1A = 6400;         // Vergleichswert setzen

    TCCR1A = 0;           // Modus einstellen, Clear Timer on 
Compare-Mode

    TCCR1B = (1<<CS12) |(1<<CS10) | (1<<WGM12); //Teiler und Modus 
einstellen, Teiler 1024 //CTC-Mode (Clear Timer on Compare-Mode)

    TIMSK0 |= (1<< OCIE1A);// Interrupt zulassen bei TIMER1
}
Gast #2225048
Lesenswert?

ISR (TIMER1_OVF_vect)
{
    sei();
    sekunden++;
    if(sekunden == 60)
    {
      minuten++;
      sekunden = 0;
    }
    if(minuten == 60)
    {
      stunden++;
      minuten = 0;
    }
    if(stunden == 24)
    {
      stunden = 0;
    }
    if((stunden==23)&(minuten==59)&(sekunden==59))
    {
       speichern = 1;
    }
}
Gast #2225091
Lesenswert?

Floh schrieb:
> Außerdem passt das
>> ISR (TIMER1_OVF_vect)
> und das
>> TIMSK0 |= (1<< OCIE1A);// Interrupt zulassen bei TIMER1
>
> nicht zusammen. (Overflow ungleich Compare)

??? Kapier ich gerade nicht.

Admax schrieb:
> Im übrigen must du nicht das Timer Mask Register "0"
> setzen/beschreiben/definieren, sonder das des Timer "1"!

Danke war ein Tipfehler!
Gast #2225131
Lesenswert?

volatile unsigned char sekunden = 0;
volatile unsigned char minuten  = 0;
volatile unsigned char stunden  = 0;

void timer1_init()
{
    sei();
    OCR1A = 6400;

    TCCR1A = 0;

    TCCR1B = (1<<CS12) |(1<<CS10);// | (1<<WGM12);

    TIMSK1 |= (1<< OCIE1A);
}

ISR (TIMER1_OVF_vect)
{

  sekunden++;
  if(sekunden == 60)
    {
      minuten++;
      sekunden = 0;
    }
    if(minuten == 60)
    {
      stunden++;
      minuten = 0;
    }
    if(stunden == 24)
    {
      stunden = 0;
  }
  if((stunden==23)&(minuten==59)&(sekunden==59))
  {
   speichern = 1;
  }
}
Gast #2225140
Lesenswert?

Ich wiederhole mich :-)

> Du aktivierst einen OutputCompare-Interrupt (OCIExx), definierst dir
> aber einen Overflow Interrupt. Das sind zwei verschiedene Sachen.

Ändere mal deinen Interruptheader in
ISR(TIMER1_COMPA_vect)

Hoffe es ist richtig geschrieben, ansosnten kommt "misspelled 
interrupthandler".

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