Цитата(Slavik_tz @ Jul 10 2009, 15:17)

если закоментровать //set_sleep_mode(SLEEP_MODE_ADC);//инициализировать енергосберегающий режим
то получится Idle (по умолчанию), и все начинает работать так как надо, просмотрев ассемблерный код то биты устанавливаються правельно, в чем траблы.
Да, я вижу Вы ни посты, ни документацию даже и не пытаетесь читать, ну что же, повторюсь еще раз, для
особо одареннных ленивых.
Цитата(ATmega16 DS 2466R–AVR–06/08 стр. 33)
When the SM2..0 bits are written to 001, the SLEEP instruction makes the MCU enter ADC
Noise Reduction mode, stopping the CPU but allowing the ADC, the External Interrupts, the
Two-wire Serial Interface address watch, Timer/Counter2 and the Watchdog to continue operat-
ing (if enabled). This sleep mode basically halts clkI/O, clkCPU, and clkFLASH, while allowing the
other clocks to run.
Краткое содержание абзаца: режим ADC Noise Reduction останавливает ЦПУ, но позволяет фунциклировать АЦП, внешним прерываниям, TWI (в режиме слежения за адресом), Таймеру/Счетчику2 и Сторожевой_собаке (ясный пень если эти модули включены). В данном режиме останавливается тактирование ЦПУ, ввода-вывода (IO), и флеш, остальное тактирование работает.
Цитата(ATmega16 DS 2466R–AVR–06/08 стр. 87)
Timer/Counter1 and Timer/Counter0 share the same prescaler module, but the Timer/Counters
can have different prescaler settings. The description below applies to both Timer/Counter1 and
Timer/Counter0
The Timer/Counter can be clocked directly by the system clock (by setting the CSn2:0 = 1). This
provides the fastest operation, with a maximum Timer/Counter clock frequency equal to system
clock frequency (fCLK_I/O). Alternatively, one of four taps from the prescaler can be used as a
clock source. The prescaled clock has a frequency of either fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O/256, or
fCLK_I/O/1024.
Краткое содержание абзацев: таймер/счетчк0 и таймер/счетчик1 имеют один и тот же модуль предделителя, но могут иметь индивидуальные настройки предделителя. Следующее описание относится к таймеру/счетчику0 и к таймеру/счетчику1.
Таймер/счетчик может татктироаться как напрямую от системного тактового сигнала, так и от поделенного на 8, 64, 256 или 1024. Далее судя по обозначениям предделитель таймеров тактируется от тактового сигнала ввода-вывода, что подтверждает рисунок 39 на следующей (88-ой) странице названного даташита.
Ну и собственно выводы:
Поскольку тактовая ввода-вывода выключена в режиме ADC Noise Reduction, то и таймер считать не будет, ибо на его вход не приходят тактовые импульсы. Считать он начнет только когда эти пресловутые импульсы появятся на его входе, т. е. при выходе из котроллера из sleep. Соответственно таймер, судя по Вашему коду, насчитает совсем немного до того момента когда будет остановлен (ну может еще немного насчитает до момента входа контроллера в слип).
P. S. Наболело.
Сообщение отредактировал smac - Jul 10 2009, 16:52