Gast
#319579
hallo spezialisten! ich habe ein grosses problem mit dem ctc mode vom attiny2313. ich habe rtfm mehrfach gemacht und verstehe es immer noch nicht. zunächst eine übersicht was ich vorhabe, dann das problem, meine beobachtung und die belohnung: folgende fern-ziele möchte ich erreichen: 1) 4 unabhängige amplitudenmodulierte 400 hz sinus mit min. 7 bit amplituden auflösung. 2) 2 gleich amplitudenmodulierte 400 hz sinus mit 3 - 4 bit amplituden auflösung. zum experimentieren soll zuerst ein kanal auf einem attiny2313 funzen. ich benutze absichtlich den 8 bit timer 0, um ein gefühl für die mögliche auflösung und das zeitverhalten zu bekommen. später soll dann alles auf 16 bit timern laufen, evtl. auf einen pwm3. hw: attiny2313, quarzfrequenz 4 mhz, ckdiv8 inaktiv. sw: avr-gcc 4.0.1, binutils 2.15.97, avr-libc 1.4.3 auf mandrake linux 2006. laut doku 2543h-avr-02/05 hat der timer 0 zwei unabhängige oc register. bei mir ist nur der oc0b pin verfügbar: // set oc0b as output pin DDRD |= (1 << PD5); TCCR0A = 0x21; // mode 1 pwm phase correct on oc0b/db5 TCCR0B = 1; // prescaler = 1 => 4 mhz/510 = 7,8 khz = 127 usec period OCR0B = 127; // 50% duty cycle je nach wert von ocr0b ändert sich das tastverhältnis - soweit fein und verstanden! nun im ctc mode eine frequenz mit 400 hz erzeugen: // set oc0b as output pin DDRD |= (1 << PD5); TCCR0A = 0x12; // mode 2 ctc on oc0b/db5 TCCR0B = 3; // prescaler = 64 OCR0B = 77; // 4 mhz / 2 64 (1 + 77) = 400,64 hz mit meinem hameg 312 messe ich am oc0b 158 hz = 6,33 msec periode, unabhängig vom wert von ocr0b?????? in http://www.mikrocontroller.net/articles/AVR_PWM fand ich unter ctc folgende bemerkung: Für PWM: Wenn eingestellt ist, daß der OC Ausgang bei jedem Match umschaltet (toggle) entspricht der eingestellt Wert dem Pulsweitenverhältnis. Bei OCRnx=128 des 8 Bit T/C wäre also etwa die Hälfte der Zeit der Pin eingeschaltet. Allerdings kann das beim T/C 0 des tiny2313 nur der Ausgang A (OC0A). Also ins Datenblatt gucken! der erste satz stimmt imho nicht, durch toggle ist das pulsweitenverhältnis immer 50%. im ctc modus lässt sich die frequenz durch den wert im ocr genau einstellen. den zweiten hinweis aufgegreifend habe ich folgendes probiert: OCR0A = 77; und bekomme exakt 400 hz auf oc0b!??!??!?!?!??!?!?!??! habe ich die doku von atmel falsch verstanden? oder ist die doku falsch oder noch schlimmer - der chip?!?!? kann mir jemand diese zusammenhänge erklären? sachdienliche hinweise, die zum verständnis führen, werden mit flüssig-naturalien belohnt! buenas noches, jörg