Цитата(aesok @ Nov 2 2008, 14:50)

Отключайте прерывания когда обращаетесь к переменным, которые могут измениться в обратотчиках прерываний.
Не совсем понимаю, о каких именно переменных идёт речь. Обращение к count повлиять на результат наврядки может, а к captured я обращаюсь тогда уже, когда прерывание запрещено его же обработчиком.
Цитата(zhevak)

Andrew, у Вас пожоже какой-то периодический процесс живет. И действует как помеха. Попробуйте пределить, на что еще проц отвлекается.
Что у меня ещё есть — так это таймер 0, который срабатывает довольно редко, всё, что он делает — устанавливает флажок в 1. Кроме того, обработчик UART, но через UART ничего в данном случае не шло.
Цитата
И я не совсем понял, зачем чем продиктова такой алгоритм работы
Измеряемый сигнал может быть довольно коротким, более того, он зависит от ШИМа, выдаваемого как раз таймером 1, соответственно, четыре измерения за раз не сделаешь:
0а. ШИМовский выход выставляется в 1
0б. Срабатывает прерывание от таймера 1, но на входе АЦП ещё ничего нет, соответственно, необходима задержка, реализуемая на таймере 2
1. Срабатывает прерывание от таймера 2, обработчик запускает АЦП (на осциллограмме это видно как тонкий импульс 1->0->1)
2. Когда АЦП что-то намерял, забираем результат и ждём дальше.
Цитата
Тогда время четырех отсчетов не будет зависеть от времени преобразования АЦП.
К сожалению так сделать, скорее всего не получится — для этого надо будет как-то засинхронизировать таймеры 1 и 2, чтобы второе, третье и т.д. прерывания от таймера 2 происходили с периодом таймера 1.
Цитата
пожалуйста, указывайте сразу больше данных по своим изделиям (тип МК, частота, компилятор, версия, питание... еще что-нибудь).
У меня ATmega16 на 16МГц, но здесь эти данные не особо важны. Компилятор, очевидно, avr-gcc (hi, aesok!).
--
WBR, Andrew