Вот здесь смотри http://www.compcar.ru/forum/showthread.php?t=5869
Вот здесь смотри http://www.compcar.ru/forum/showthread.php?t=5869
Понял, спасибо!
Флаг переполнения таймера будет срабатывать с частотой 31000Гц
Последний раз редактировалось Chip; 11.12.2010 в 12:20.
Ага, понял, а частота ШИМ будет зависеть от переполнения либо обнуления pwm_time.
Тогда осталось не понятно, в формуле
tcnt2 = 256 - (16000000/31000/X)
что означает параметр X?
это регистр таймера, он имеет один байт то есть 256 отсчетов до переполнения, флаг прерывания таймера установится после переполнения. По этому мы считаем по остатку до переполнения.
Проще говоря чем больше значение положенное в регистр тем быстрей переполнится.
P.S.
Только сейчас дошло что ты спрашивал про значение 64 , это предделитель таймера , делящий основную тактовую частоту
Последний раз редактировалось Chip; 11.12.2010 в 12:27.
Попытался покопать документацию, но так и не пришло ясного осознания, как манипулировать TCCR2A, TCCR2B и сколько класть на прерывании в TCNT2, чтобы иметь конкретную (хотя бы приблизительно) частоту софтового ШИМ. С TCNT2 и pwm_time в общем-то разобрался, но при условии что знаю частоту таймера. Частота таймера, как понимаю, получается из частоты кварца, делённой на некий делитель, запрятанный в регистрах TCCR2A и/или TCCR2B. А вот с ними запутался...
Chip, можно прокомментировать строки:
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));
TCCR2B &= ~(1<<WGM22);
Последний раз редактировалось ka-5; 11.12.2010 в 18:36.
регистр TCCR2B имеет три бита предделителя CS20,CS21,CS22
0 | 0 | 0 - таймер/счетчик остановлен
0 | 0 | 1 - нет предделителя
0 | 1 | 0 - предделитель 8
0 | 1 | 1 - предделитель 64
1 | 0 | 0 - предделитель 256
1 | 0 | 1 - предделитель 1024
Последний раз редактировалось Chip; 12.12.2010 в 01:03.
Спасибо!
Эдуард, а подскажи пожалуйста как запрограмировать ШИМ на 300 гц и на 200 гц? Если не в тягость!
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)