Forum: Mikrocontroller und Digitale Elektronik 36Khz-Signal bei Atmega8 mit CPU 16Mhz


von Highii H. (highii)


Lesenswert?

Hallo,

mir ist auch nach längerer Suche nicht ganz klar wie ich den Timer 
einstellen muss, um eine 36Khz Frequenz zu erzeugen, wenn mein Atmega8 
mit 16Mhz Quarz läuft.

Könnt ihr mir weiterhelfen?

LG

von Wolfgang (Gast)


Lesenswert?

highii H. schrieb:
> mir ist auch nach längerer Suche nicht ganz klar wie ich den Timer
> einstellen muss, um eine 36Khz Frequenz zu erzeugen, wenn mein Atmega8
> mit 16Mhz Quarz läuft.

So, dass er für eine Runde 1/36kHz, also 27,78 µs braucht, also rund 
16MHz/36kHz = 444 Clockzyklen.

von Spess53 (Gast)


Lesenswert?

Hi

>mir ist auch nach längerer Suche nicht ganz klar wie ich den Timer
>einstellen muss, um eine 36Khz Frequenz zu erzeugen, wenn mein Atmega8
>mit 16Mhz Quarz läuft.

Fragt sich, wo du gesucht hast. Unter

Datenblatt->Timer1/2->Modes of Operation->Clear Timer on Compare Match 
(CTC)
Mode

die Formel nach OCRn umstellen, WGM-Bits auf CTC, COM-Bits auf 'Toggle 
OCn on Compare Match' und OC-Pin auf Ausgang. Fertig.

MfG Spess

von Highii H. (highii)


Lesenswert?

Im Datenblatt habe ich auch schon geblättert. Aber für einen Neuling ist 
es schwer zu verstehen. Kannst du den Code mal posten? Dann versuche ich 
es nachzuvollziehen anhand des Datenblatts.

von Spess53 (Gast)


Lesenswert?

Hi

>Im Datenblatt habe ich auch schon geblättert. Aber für einen Neuling ist
>es schwer zu verstehen.

Welcher Timer?

>Kannst du den Code mal posten? Dann versuche ich
>es nachzuvollziehen anhand des Datenblatts.

Ich benutze Assembler.

MfG Spess

von Wolfgang (Gast)


Lesenswert?

highii H. schrieb:
> Im Datenblatt habe ich auch schon geblättert.

Blättern alleine nützt da wenig.
Guck dir den Abschnitt "Modes of Operation" zu den Timern genauer an. Da 
findest du auch Bildchen und Infos zur Funktion der einzelnen Register.

von g457 (Gast)


Lesenswert?

> Aber für einen Neuling ist es schwer zu verstehen.

Dafür ist das Datenplatt da :-) Einfach mal das komplette Kapitel "8-bit 
Timer/Counter2 with PWM and Asynchronous Operation" lesen und dann die 
Register in der angegebenen Reihenfolge gemäß Text initialisieren.

Zwei Hinweise dazu: Wie Spess53 schon schrub dürfte CTC ('clear timer on 
compare match/auto reload') mit 'toggle on compare match' die passende 
Operationsart sein für Dich. Zweitens klingen '36kHz' nach IR-Led, da 
willst Du zwar ein 36kHz-Blinken an der LED sehen, dazu brauchts aber 
doppel so viele Pegelwechsel, also 72kHz am Pin.

HTH

von Michael (Gast)


Lesenswert?

highii H. schrieb:
> Könnt ihr mir weiterhelfen?

Klar, guck dir im AVR-Tutorial: PWM unter Fast PWM mal die Modes 14 
bzw. 15 an.

von Highii H. (highii)


Lesenswert?

Also mir ist klar, dass ich ca. 444 Clockzyklen warten muss.

Aber kann ich sowas überhaupt mit PWM realisieren? So wie ich PWM 
verstehe, wähle ich anfangs die PWM-Frequenz mit z.B. TCCR0B = 
(1<<CS02). Dann wähle ich aus, wann der PWM-Pin geschaltet wird, z.B. 
OCR0A = 128.

Aber kann ich damit überhaupt eine Frequenz von 36KHz erzeugen? Oder 
gehen damit nur Frequenzen die CK, CK/8, CK/64, usw. sind?

von Highii H. (highii)


Lesenswert?

Ahhh :-)


Michael schrieb:
> Klar, guck dir im AVR-Tutorial: PWM unter Fast PWM mal die Modes 14
> bzw. 15 an.

Modus 14: Fast PWM mit beliebiger Schrittzahl (festgelegt durch ICR1)
Modus 15: Fast PWM mit beliebiger Schrittzahl (festgelegt durch OCR1A)

von Spess53 (Gast)


Lesenswert?

Hi

>Aber kann ich damit überhaupt eine Frequenz von 36KHz erzeugen? Oder
>gehen damit nur Frequenzen die CK, CK/8, CK/64, usw. sind?

Klar geht das z.B. über CTC. Da wird die Frequenz über den Prescaler und 
das OC-Register eingestellt.

Für Timer1 sollte das in C etwa so aussehen:
1
     TCCR1A = 1<<COM1A0;
2
     TCCR1B = 1<<WGM12|1<<CS10;
3
     OCR1A  = 0xDD;
4
     
5
     DDRB = 1<<PB1;

MfG Spess

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.