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

Gast #1417698
Lesenswert?

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
Lesenswert?

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
Lesenswert?

@  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
Lesenswert?

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
Lesenswert?

@  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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren