Как пользоваться программами для расчета уставок таймеров AVR
AVRCalc (входит в комплект ICC) и AndyRate?
____________________________________________________
Пояснения к вопросу.
___________________
Допустим я хочу запустить таймер в режиме CTC
(Clear Timer on Compare) на мега16.
Хочу получить период прерываний 100 мксек
при кварце 4 МГц и предделителе 8.

Смотрю даташит на мегу16 (doc2466.pdf) на стр.74..75 об CTC.
Там приводится формула для нахождения частоты на выводе OCn (Toggle).
fOCn=fclk_IO / (2*N*(1+OCRn))

Отсюда период сигнала на выводе OCn
T = 1/fOCn = (2*N*(1+OCRn))/fclk_IO
так как мне надо 100 мксек не на выводе в режиме переключений (Toggle),
то мне двойка в формуле не нужна
T = (N*(1+OCRn))/fclk_IO

отсюда находим уставку OCRn
OCRn= (T*fclk_IO/N)-1 = (100e-6)*(4e6)/8 - 1= 49

Симулирую в AVR Studio, действительно 100 мксек.
___________
Поленился сам считать решил попользоваться программами для расчета
уставок таймеров.

Взял программу AndyRate
http://pages.zoom.co.uk/andyc/andyrate.zip
ввел 4 МГц, 100 мксек
выдает при делителе 8, уставку CMP8=0x32 (то есть 50).
(CMP8 - 8 bit timer compare value)

Взял программу AVRCalc
http://www.avrfreaks.net/index.php?func=vi...=Freaks%20Tools
(которая, кстати, входит в комплект Image Craft Compiler)
тоже пишет
For Output Compare mode Use -> OCR1AL=0x32 OCR1AH=0x00
то есть то же самое.

Но подставив это число получаю в симуляторе 102 мксек
вместо 100 обещанных.
Прошив код который должен мигать раз в 10 сек,
получаю 10 миганий за 102 секунды
(частоту кварца правда не проверял).
_____________________________________
Где ошибка?
___________
Александр