Forum: Mikrocontroller und Digitale Elektronik 10KHz Rechteck Signal -> 20 KHz Timer? --> 8Bit oder 16 Bit Timer?


von Dieter Neumann (Gast)


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

von Michael W. (retikulum)


Lesenswert?

Hilfreich wäre den Controller und die Taktfrequenz zu wissen.

Michael

von Andreas (Gast)


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

von Dieter Neumann (Gast)


Lesenswert?

Hallo Micha

ATMega128 und 4MHz Kann aber auch 5 Mhz oder den internen Ozillator 
benutzen

Gruß

Dienter

von Falk B. (falk)


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

von Dieter (Gast)


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

von Falk B. (falk)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.