Forum: Compiler & IDEs Timer TCCR0 Zeit einstellen bei 1 MHz?


von Henni (Gast)


Lesenswert?

Hi,

im beispiel von Peter Dannegger in der comfort Entrprell-Routine, wird 
der ISR( TIMER0_OVF_vect ) alle 10ms ausgelöst (Deklaration im 
Quelltext). Aber wie muss ich das rechnen.
1
ISR( TIMER0_OVF_vect )                            // every 10ms

Er hat ne Frequenz von 1 MHz. Ich denke mal das ist ein 8 Bit Register 
was er verwendet. Den Teiler hat er auf 1024 eingestellt.
1
int main( void )
2
{
3
  DDRB = 0x00;
4
  PORTB = 0xFF;
5
 
6
  TCCR0 = (1<<CS02)|(1<<CS00);      // divide by 1024
7
  TIMSK = 1<<TOIE0;        // enable timer interrupt

Ich rechne das so 1 MHz / 1024 = rund 1 KHz
Das ich für ein 8 Bit Interrupt 256 Zyklen brauche sind das doch dann 
irgendwie 1 KHz / 256 Zyklen = das sind 3,90 Hz pro Interrupt !?
In Sekunden würde ich das hoch - 1 rechnen und auf 0,256 Sekunden 
irgendiwe, als 25,6ms für ne Interrupt.

Ich hab da irgendwie nen Gedankenfehler kann mir jemand helfen???

von Karl H. (kbuchegg)


Lesenswert?

Henni wrote:

> Ich rechne das so 1 MHz / 1024 = rund 1 KHz
> Das ich für ein 8 Bit Interrupt 256 Zyklen brauche sind das doch dann
> irgendwie 1 KHz / 256 Zyklen = das sind 3,90 Hz pro Interrupt !?
> In Sekunden würde ich das hoch - 1 rechnen und auf 0,256 Sekunden
> irgendiwe, als 25,6ms für ne Interrupt.

0.256 Sekunden sind 256ms

>
> Ich hab da irgendwie nen Gedankenfehler kann mir jemand helfen???

Deine Überlegungen sind schon richtig.
Prinzipiell.

Was du übersehen hast ist, dass in der ISR der Timer vorgeladen
wird. Der Timer zählt nicht von 0 bis 255 bis der nächste
Interrupt kommt, sondern beginnt bei einer höheren Zahl.
Dementsprechend vergeht auch weniger Zeit

von Vronili (Gast)


Lesenswert?

ich versuche einen timer einzuprogrammieren auf meinen AVR . ich sehe im 
Tutorial einfach nicht durch:

er soll...
1. nebenbei 3 sekunden zählen
2. nach den drei sekunden einen interrupt auslösen
3. wieder neu gestartet werden können, also so dass kein interrrupt 
ausgeköst wird
...können

und ich willdie interrupt routine selber schreiben. da ich auf diesem 
gebiet nen neuling bin hoffe ich mir kann da einer helfen :)

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.