Forum: Compiler & IDEs Mega8 Timer <-> Proteus


von Richard B. (rbrose)


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?


von Jörg X. (Gast)


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

von Richard B. (Gast)


Lesenswert?

Danke dor Jörg.
Das mit 256-78 stimmt.
Aber seid wann hat der Timer0 einen CTC-Mode? Der ist doch nur beim 
16-bit Timer1 und 8-bit Timer2

von Jörg X. (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.