36Khz-Signal bei Atmega8 mit CPU 16Mhz

Gast #3320513
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.
Gast #3320520
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
Gast #3320530
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
Gast #3320536
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
OP #3320543
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?
Gast #3320556
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

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