mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer, Warum 3600Hz statt 7200Hz? Faktor 2 fehlt irgendwo im Code?


Autor: Flori (Gast)
Datum:

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

Autor: Flori (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups wie formatiert man nochmal den code hier fürs forum ?

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DIV/2 Fuse gesetzt

Autor: Flori (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
what?

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Mega 8 hat eine Fuse Bit DIV2. Wenn das gesetzt ist, läuft er mit 
halber Taktfrequenz.

Autor: Flori (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie komme ich an den fusebit? Mein avrprog zeigt mir den nicht an :-)

Autor: Hannes (Gast)
Datum:

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

Autor: Flori (Gast)
Datum:

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

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Schwingung hat braucht 2 mal Toggeln. Einmal high, einmal low.

Autor: Flori (Gast)
Datum:

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

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das bedeutet, eine Periode der erzeugten Frequenz braucht 2 Interrupts. 
Dadurch wird die Interrupt-Frequenz halbiert.

Autor: Flori (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könnte ich vielleicht irgendwas am startwert des timers rütteln? Nicht 
von 0-255 sondern von 127-255?

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde lieber im CTC-Modus arbeiten. Da bist Du viel flexibler.

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.