Timer1 von ATMEGA16

Gast #181088
Lesenswert?
• ▲
▼
Hallo,

in meinem Projekt nutze ich ADC, Timer0 und Timer2 (jeweils PWM), RS232
- quasi fast alles was es gibt und es funktioniert einwandfrei ...

Nur der Timer1 bereitet mir Probleme.

Hier mein code:

void CTimer::Init()
{
  TCCR1A = 0x00;
  TCCR1B = 0x1d; // Prescaler 1024

  OCR1AH = (15625 & 0xff00) >> 8;
  OCR1AL = (15625 & 0x00ff);  // 2sec bei 8MHz

  Start();
}

void CTimer::Start()
{
  TCNT1H = 0x00;  // timerval auf 0 zurücksetzen
  TCNT1L = 0x00;
  TIMSK |= 0x10;  // Timer erneut aktivieren
}

ich hab dazu noch eine Interruptroutine:
SIGNAL (SIG_OUTPUT_COMPARE1A)
{
// blabla
}

Der Timer läuft von 0 bis 0xfffe und bleibt dann stehen - die
Interruptroutine wird nie ausgeführt ... Normalerweise hab ich in
meiner Interruptroutine noch ein TIMSK |= 0x10 drin ...

Laut dem Datenblatt des ATMEGA16 hab ich alles richtig gemacht ...

Weiß jemand, wo mein Problem liegt?

Wie gesagt - alles andere funktioniert ...
Gast #181089
Lesenswert?
• ▲
▼
Das habe ich übersehen:
TCCR1B = 0x0d; // Prescaler 1024
statt
TCCR1B = 0x1d; // Prescaler 1024

bei 0x1d wird ICR1 statt OCR1A für den Compare verwendet ...
Der Timer läuft jetzt von 0 - 15625 und setzt sich dann sauber wieder
auf 0 zurück und läuft weiter ...

Trotzdem krieg ich noch keinen Interrupt...

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