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
Hilfreich wäre den Controller und die Taktfrequenz zu wissen. Michael
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
Hallo Micha ATMega128 und 4MHz Kann aber auch 5 Mhz oder den internen Ozillator benutzen Gruß Dienter
@ 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
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
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.