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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.