Taktgeber mit Atmega 8

Gast #2703558
Hallo!

Ich möchte mir gerne einen Rechteckgenerator bauen. Über ein Display 
möchte ich von 1Hz bis 5Khz einstellen können (sprung mit 1Hz)

Ich habe soweit alles fertig und es funktioniert eigentlich recht gut. 
Habe aber fette Probleme mit dem Timer! Wie berechnet man den Reloadwert 
um auf 1Hz zu kommen bzw. auf 5Khz. Macht man sowas überhaupt mit dem 
Reload wert oder gibt es da eine andere Lösung. Zuzeit habe ich das 
Problem dass ich nur min. auf 90Hz komme. Aber das Hauptproblem ist das 
der Anstig nicht Linear ist, im oberen Bereich ist der Sprung schon 
mehrere Khz.

Könnt ihr mir bitte weiter helfen...

Danke!
Gast #2703585
Hi

> Macht man sowas überhaupt mit dem Reload wert

Nein, mit CTC.

>Zuzeit habe ich das
>Problem dass ich nur min. auf 90Hz komme. Aber das Hauptproblem ist das
>der Anstig nicht Linear ist, im oberen Bereich ist der Sprung schon
>mehrere Khz.

Hängt von dem verwendeten Timer, Präscaler und der Taktfrequenz deines 
Controllers ab. Bei 20MHz sind im Bereich um die 5kHz Abstufungen von 
2..3 Hz mit einem 16Bit-Timer möglich.

MfG Spess
#2703598
> Ich setzte und Lösche das bit im Timer ==> PINA.0=!PINA.0;

Du löscht es nicht 'im Timer' sondern in der zugehörigen ISR (Interrupt 
Service Routine)

> In Zukunft würde ich auch gerne einstellen wie viele Pulse
>  ausgegeben werden.

Niemand hindert dich daran, in besagter ISR mitzuzählen, wieviele Pulse 
schon generiert wurden und bei einer bestimmten Anzahl den Timer 
abzuschalten.
Gast #2703665
Der Timer läuft jetzt mit 10Khz, habe das Problem das ich im unteren 
Bereich recht genau bin und um so höher der Sprung größer wird=
1
unsigend int counter;
2
unsigned int freq=50; //100Hz
3

4
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
5
{
6
TCNT1H=0xFD;TCNT1L=184; // läuft nun mit 10Khz
7

8
if (counter==freq)
9
{
10
if (toggle) {toggle=0;PORTA.0=0;} else {toggle=1;PORTA.0=1;}
11
counter=1;
12
} else counter++;
13

14
}
Ich komme nicht drauf wie es gemacht wird das ich wirklich in 1Hz 
Schritten. Wie wird das Gemacht, wird immer der Reloadwert neu berechnet 
?

Danke für eure Hilfe!
#2703687
> TCNT1H=0xFD;TCNT1L=184; // läuft nun mit 10Khz

wie entstehen diese Werte?
Wo hast du sie her? Wie hast du sie berechnet


Und ja: Du wärest besser bedient, wenn du den CTC Modus nehmen würdest, 
wie jetzt schon 2 mal erwähnt wurde. Dann passiert der Reload nämlich 
automatisch und ohne den Zeitversatz vom Auslösen des Overflows bis dann 
endlich in der ISR die neuen Werte zugewiesen werden.

Hast du den Link in der FAQ gelesen (komplett), den ich dir gegeben 
habe?

Und ja: Solange du daran klebst, dass deine ISR mit einer bestimmten 
Frequenz aufgerufen werden muss, so lange wirst du nicht weiter kommen.
Du MUSST aus der gewünschten Frequenz dir den Vorteiler des Timers und 
den CTC-Compare Match Wert ausrechnen (und mgl. den Wert für einen 
Software-Teiler in der ISR). Das ist keine Raketentechnik und wenn dir 
prinzipiell klar ist, wie du deine jetzigen Werte berechnet hast, sollte 
es auch nicht schwierig sein mit einem allgemeinen Schema hochzukommen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.