mikrocontroller.net

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


Autor: Henni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
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.
int main( void )
{
  DDRB = 0x00;
  PORTB = 0xFF;
 
  TCCR0 = (1<<CS02)|(1<<CS00);      // divide by 1024
  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???

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Vronili (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.