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
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.
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
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.
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
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.
> 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
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.
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?
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.