10KHz Rechteck Signal -> 20 KHz Timer? --> 8Bit oder 16 Bit Timer?

Gast #1417698
Bin Newbee und komme leider mit dem Tutorial und den Beiträgen nicht zu 
recht ein ich möchte eine Rechtecksignal mit 10kHz erzeugen dafür 
brauche ich doch einen Timer der mir im mit 20Khz Rhytmus einen interupt 
erzeugt oder? jetzt habe ich aber probleme einen Timer zu definieren 
Benutze ich einen 16 oder 8 Bit timer im compare oder overflow modus und 
welche start oder nachlade werte benötige ich

Danke für eure hilfe

Dieter

P.S. ich Programmiere in C
Gast #1417718
Hallo Dieter,

für die Berechnung des Timers, insbesondere des Preload-Wertes gibt es 
eine schöne Formel (hier für einen 8-Bit Timer):

Preload = 256 - (t * f_cp / DIV)

Dabei ist:
 - t die gewünschte Periode mit der ein Overflow-Interrupt ausgelöst 
werden soll
 - f_cpu Der Takt deines µControllers
 - DIV der Vorteiler des Timers.

Für deine 20 kHz musst Du also alle t = 50 µs einen Timer-Overflow 
erreichen. Bei einem (angenommenen) Takt von 8 MHz und einem Vorteiler 
von 8 müsstest du demnach einen Preload von 206 ansetzen.

Viele Grüße

Andreas
#1417835
@  Dieter Neumann (Gast)

>recht ein ich möchte eine Rechtecksignal mit 10kHz erzeugen dafür
>brauche ich doch einen Timer

Ja.

>der mir im mit 20Khz Rhytmus einen interupt
>erzeugt oder?

Nein. Das macht der Timer mit Hilfe der der Output Compare Funktion ganz 
allen, ohne Interrupt und CPU.

>jetzt habe ich aber probleme einen Timer zu definieren
>Benutze ich einen 16 oder 8 Bit timer im compare oder overflow modus

8 oder 16 Bit ist egal, aber man nimmt da keinen Interrup.

>welche start oder nachlade werte benötige ich

Kann man leicht im Datenblatt nachlesen. Grundrechenarten sollte man 
schon beherrschen.

MFG
Falk
Gast #1418812
Hallo Falk,

Dazu müsste man ein OC Fähigen Timer mit passendem PIN freihaben, ich 
benötige aber ein Interrupt um etwas auszuführen. Daher danke für deinen 
einwandt ausserdem lerne ich gerade die Grundrechenarten  :-)

für einen 16 Bit Timmer gilt dann

Preload = 2^16 - (t * f_cp / DIV)

Stimmt dass ;-)   (Ach ja ich lerne die Grundrechenarten gerade erst

Gruß

Dieter
#1418826
@  Dieter (Gast)

>Dazu müsste man ein OC Fähigen Timer mit passendem PIN freihaben, ich
>benötige aber ein Interrupt um etwas auszuführen.

Mit 20 kHz? Na hoffentlich nicht zu viel.

> Daher danke für deinen
>einwandt ausserdem lerne ich gerade die Grundrechenarten  :-)

2.Klasse in der Baumschule ? ;-)

>für einen 16 Bit Timmer gilt dann

>Preload = 2^16 - (t * f_cp / DIV)

Vergiss bitte den Begriff Preload. Das ist antiker Murks. Moderne 
Controller und Timer haben spezielle Modi, die das alles selber können. 
Beim AVR heisst der CTC. Siehe Datenblatt.

Der Wert für den Vergleich ist also

(t * f_cp / DIV) - 1

Weil der Timer von 0..N zählt, also N+1 Takte.

MfG
Falk

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.