Atmega8 36kHz erzeugen per Timer2

Gast #1440434
Lesenswert?

Hallo Leute,

bräuchte mal eure Hilfe bei einem kleinen Problem.

Und zwar habe ich hier einen Atmega8 bei welchem ich per Timer2 ein 
36khz Signal zur IR Modulation erzeugen möchte.Er rennt mit 16 MHz.

Die Initialisierung sieht wie folgt aus:
1
void timer2_init(void)
2
{
3
  TCCR2 |= (1<<WGM21)|(1<<COM20); // clear timer on compare match
4
  OCR2 =F_CPU / (36000 * 2) - 1;
5
  TCCR2 |= (1<<CS21); 
6
}

Mein Problem ist nun das ich nicht weis ob meine Einstellung für das 
OCR2 Register korrekt ist da ich ja einen Prescaler von 8 bei diesem 
Tackt nutzen muss soweit ich weiss.

Könntet ihr mir dabei Hilfestellung geben?

MfG
Karl
#1440460
Lesenswert?

Karl schrieb:

> Könntet ihr mir dabei Hilfestellung geben?

Einfach mal nachrechnen.
Dein Haupttakt ist 16000000 (=16 Mio) Pulse pro Sekunde
Durch den Vorteiler werden daraus 2000000 (= 2 Mio) Pulse pro Sekunde. 
Würdest du den Timer einfach laufen lassen und mal angenommen er könnte 
das, dann würde er in 1 Sekunde bis 2 Mio zählen.
Du willst ein Ereignis alle 1/36000 Sekunde
Wie weit muss daher der Timer zählen, bis 1/36000 Sekunde vergangen sind 
und er das Ereignis auslösen soll?

(Den Faktor 2 für den Pin-Toggle musst du noch berücksichtigen, aber das 
sollte kein Problem sein, wenn du den Rechengang erst mal verstanden 
hast)
#1440476
Lesenswert?

Karl schrieb:
> Es müsste meiner Meinung nach dann so aussehen:
>
> (F_CPU/8) / (36000 * 2) - 1;
>
> Oder wie seht ihr das?

ausprobieren!
Zahlen einsetzen und es kommt 26 raus (nur das ganzzahlige Ergebnis 
zählt!).

Ein Timer der in 1 Sekunde bis 2000000 zählen könnte, benötigt

      2000000   ....    1
           27   ....    x
     ---------------------
           1 * 27
     x = -----------  = 0.0000135 Sekunden
           2000000

um von 0 bis 26 zu zählen (das sind 27 Zählvorgänge).

Den Wert nehmen wir mal 2 (weil ja nach dieser Zeit der Pin nur 
getoggelt wird, und es 2 Togglevorgänge benötigt um 1 Schwingung der 
Frequenz zu erzeugen) und wir haben 0.000027 Sekunden bis eine 
Schwingung fertig ist. Die Frequenz ergibt sich zu f = 1/T = 37037 Hz.

Interessantes Rechenbeispiel:
Was passiert, wenn du nicht den Vorteiler 8 benutzt, sondern einen 
Vorteiler von 1? Welchen OCR Wert musst du dann benutzen und welche 
Frequenz ergibt sich daraus?
Welchen Vorteiler wirst du daher benutzen?
#1440493
Lesenswert?

Karl schrieb:
> Da das näher an der Vorgabe ist würde ich einen Teiler von 1 nutzen.

Ah, siehst du.
Genau darauf wollte ich hinaus.

Aus deinem Eröffnungsposting:
> da ich ja einen Prescaler von 8 bei diesem
> Tackt nutzen muss soweit ich weiss.

Davon dürfte nach dem Nachrechnen nicht mehr viel übrig geblieben sein 
:-)

Aber ich denke, du hast jetzt verstanden wie so ein Timer funktioniert 
und wie man das rechnen kann, wenn man nicht einfach stumpfsinnig 
Formeln aus dem Datenblatt anwenden will, sondern sich die Formel aus 
der Funktion 'herleitet'.

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