Timer, Warum 3600Hz statt 7200Hz? Faktor 2 fehlt irgendwo im Code?

Gast #1048056
hallo leuts,

ich habe ein Problem,

#define  F_CPU 3686400
#define M_CPU Atmega8
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

volatile uint16_t zaehler=0;

ISR (TIMER0_OVF_vect)
{
zaehler++;
}

int main (void) {

  //Atmega8
  TCCR0 |= (1<<CS00); //noprescaler 3686400/8bit= 14400
  TIMSK |= (1<<TOIE0); //Timer0 Overflow Interrupt ON
  sei(); //Interrupts ON
  DDRD = 0xFF;
  PORTD = 0x00;

  while (1)
  {

    if (zaehler==2)
    {
      PORTD^=(1<<PD7);
    zaehler=0;
     }
  }
  cli();
  return 0;
}



wenn mein Zähler 14400 erreicht hat wird PD7 getoggelt, das entspricht 
einer Sekunde. Nun möchte ich ein Signal von 7200Hz an PD7 erhalten. 
Also müsste mein zähler doch bis 2 zählen??? Ich bekomm aber am Oszi ein 
Signal von der hälfte also 3600Hz??? Was übersehe ich?
Danke schon mal und schönes Weochenende...
Gast
Aber der Fehler ist woanders. Wenn Du mit 1440 Hz toggelst, kommst Du 
auf 7200 Hz.n Du toggelst aber mit der halben Frequenz, erhältst also 
14400/4=3600 Hz.
Gast
verstehe ich nicht ganz, aber klingt erstmal richtig :-) Danke dir für 
den hinweis, aber warum ist das so? Ich denke ich bekomme pro sekunde 
14400 Interrupts, die kann ich doch auch nutzen oder nicht, dass heisst 
1 Interrupt (sprich ich zähl bis 1) entspricht 1/14400s??? was übersehe 
ich?

Danke nochmal und Gruss
Flo
Gast
ich glaub ich geh lieber pennen, danke nochmal, jetzt ist der groschen 
ins bett gefallen :-)
aber eine Frage hätte ich noch, mit dem verwendeten Quarz 3686400 wäre 
also  bestenfalls ohne prescaler ein Interrupttakt von 14400Hz möglich 
oder komme ich irgendwie höher ? Nur mit einem größeren Quarz oder?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.