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
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
#760374
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
Gast
#760417
>> 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.