Цитата(ILYAUL @ Apr 29 2010, 23:08)

Не очевидно , там есть маленький подводный камешек . Команда sleep в прерываниях не работает . Вы оцените насколько уж Вам так необходим режим Idle или ADC Noise Reduction.
<...>
Честно говоря, я мало что понял из вашего поста. По-видимому я недостаточно ясно описал проблему.
Во-первых, контроллер ATmega168.
Во-вторых, ADC Noise Reduction мне не нужен, (так же как и накапливание 512 значений) у меня и так шум АЦП не превышает одной единицы.
В-третьих, запуск по таймеру означает запуск АЦП непосредственно таймером минуя процессор. (По-видимому это зачатки event system которую сделали в xmega

) Если в регистре ADCSRA установить бит ADATE, то АЦП будет запускаться каждый раз при возникновении события, выбираемого битами ADTS2:0 регистра ADCSRB, в моем случае Timer/Counter0 Compare Match A. Мне нужно запускать его каждые 33.3 мс и анализировать полученный сигнал. Но при использовании sleep он запускается каждый раз при входе в этот режим и таким образом нарушается равномерность и частота семплирования. Sleep же нужен, так как прибор будет работать при высокой температуре, поэтому хотелось бы уменьшить нагрузку чтобы он не грелся лишнего, а работать он будет по моим прикидкам 5...10% всего времени.
Пока что я вижу из этой ситуации только один выход - разрешить прерывание таймера Timer/Counter0 Compare Match A, а в его обработке запускать АЦП "вручную", то есть установкой бита ADSC в регистр ADCSRA. Но обработка прерывания таймера тоже может задержаться на несколько десятков микросекунд (а может и больше сотни) что приведет к неравномерности семплирования (не говоря уже о том, что такое решение выглядит весьма уродски)