Zdravím. Zajímalo by mě, jak lze spočíta frekvenci PWM kanálu.
Konkrétně jsem nyní zděšen:
Mám tiny2313, u ní 12MHz XTAL. //FUSES jsou OK//, procesor normálně běží.
Mám zapnutý timer1, oba PWM kanály v režimu FAST PWM 8 bitů.
Předpokládal bych tedy, že frekvence bude dána
Fxtal / divider / 2 ^ bits
kde Fxtal je frekvence procesoru, divider je dělící koeficient a 2^bits je počet kombinací, pro 8 bitů tedy 256.
Děličku jsem nastavil na 1, čítání by tedy mělo běžet rychlostí Xtalu, tj 12MHz.
12 000 000 / 1 / 256 = 46875x za sekundu nám přeteče časovač. PWM tedy běží na frekvenci 46,9kHz. DObře, proč jsem tedy multimetrem naměřil přibližně polovinu? 23,53kHz mi ukazje měřák. Proč?
Ještě pro jistotu dám kus zdrojáku, jak mám nastavené registry:
TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10);
TCCR1B = (1<<CS10);
Co kde mám špatně?
EDIT: Zksuil jsem ještě dát jiný Xtal, změnit na interní oscilátor, a sakra proč mi to furt měří poloviční frekvenci?
EDIT2: Prohledal jsem datasheet, a našle tam v podstatě stejný vzoreček jako mám já. Frekvenci měřím tak, že jsem na výstup PWM poslal 50% střídu (OCR1A = 128), na výstup dal kondík, a za kondík odpor proti zemi. A na tom odporu se již vyskytuje střídavý signál, který měřím multimetrem.