Mega8 Timer <-> Proteus

OP #760317
Lesenswert?

Hallo zusammen,

irgendwie stimmen meine Berechnungen mit der Messung mit Proteus nicht 
ganz überein.

Ich benutze folgende Timer0 Einstellungen:

der Mega8 läuft mit 8 Mhz.

void init_timer0(void)
{
    /* Timer0 mit 1024 Prescaler starten */
  TCCR0 |= (1<<CS00)|(1<<CS02);
  TCNT0 = 78;
    /* Timer0-Overflow-Interrupt aktivieren */
    TIMSK |= (1 << TOIE0);
}

ISR( TIMER0_OVF_vect )                                 //Timer Interrupt 
Vector Timer0 8-bit
{
  TCNT0 = 78;
   PORTB ^= ( 1 << PB0 );
}


Das heißt es sollte ca. 100.1 hz Takt ergeben.
Wenn ich aber unter Proteus das Oszilloskop benutze kriege ich da 43.8 
hz raus.
Hat einer eine Idee woran das liegt? An meinen Berechnungen oder an 
Proteus?

Gast #760366
Lesenswert?

Da liegt das Problem:
> TCNT0 = 78;
Denn so zählt der Timer (256-78) schritte (der zählt ja aufwärts!).
Also
- du lädst mit "-78" vor (!)
- du benutzt den CTC-Mode (Datenblatt verrät mehr)

hth. Jörg
Gast #760417
Lesenswert?

>> Aber seid wann hat der Timer0 einen CTC-Mode? Der ist doch nur beim
Da hast du recht (und ich nicht gleich ins Datenblatt geschaut).

Aber z.B. die Atmega48/88/168 haben den (und sind Pinkompatibel..).

hth. Jörg

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