Исправлюсь по поводу своего высказывания:
Цитата
Так, стоп. Вы меня уже совсем запутали. Где Вы нашли в таймере2 вход внешнего тактирования? Или Вы подаете их на ножку TOSC1?? Если так, то этого делать нельзя.
Использовать таймер 2 в асинхронном режиме для счета секундных импульсов если и правильно, то уж точно не целесообразно. Вообще он предназначался для работы от кварца или от внешего генератора частотой 32768. Работа этого таймера в асинхронном режиме требует от программиста мер по синхронизации асинхронной логики таймера2 с ядром контроллера, особенно перед входом в спящий режим. А на это нужно не менее 2х тактов таймера 2 (в Вашем случае - 2 сек). Подробнее - в даташите в разделе 17.9 Asynchronous Operation of the Timer/Counter2, стр.128.
У Вас убран вектор прерываний по Int1, но сами прерывания вы не запретили. Поэтому возможны ложные вызовы следующего после Int1 вектора прерывания - TIM2COMPA
При вычислении среднего Вы используете 255 отсчетов, а сумму делите на 256
В прерывании TIM2COMPA у Вас будет переполнение стека при ошибках передачи по TWI
Вы не дожидаетесь завершения формирования условия СТОП на шине TWI перед стартом
ДЛя чего у Вас используется АЦП? На него подвешаны кнопки? Если да, зачем использовать ADC noise canceler ? При 8 кнопках "расстояние" между ними составляет в идеальном случае 32 LSB при 8-битном преобразовании. Этого более чем достаточно и без режима уменьшения шума. В крайнем случае, с шумом справится и внешний конденсатор. Покажите схему, по которой у Вас подключены кнопки. С указанием номиналов компонентов.
Как часто вы опрашиваете кнопки? судя по программе, 1 раз в минуту. Это так и задумывалось или я чего-то пропустил в коде? Таймер2 у Вас считает внешние импульсы от DS1337 с интервалом 1 секунда. Период переполнения таймера2 - 60 секунд.(OCR2A). На каждой 2-й секунде у вас запускается опрос кнопок (OCR2A = 1).
P.S.
Подход, который Вы избрали для написания программы, в корне неверный. Может в Вашем конкретном случае он приемлимый, но лучше сразу писать правильно.
Прерывания обычно используются для того, чтобы по-быстрому отвлечься от текущей задачи, быстренько сделать
самое необходимое (принять и буферизировать данные, выстивить флаги, подсчитать имульсы и т.п)и выйти. А обработку данных,которая требует значительно времени, уже делать в основном цикле. Извините, может я и слишком резко выразился, но я бы нокогда не делал прием/передачу данных по медленному интерфесу I2C в прерывании. То же касется и 256 преобразований АЦП.
Если есть желание зделать устройство работоспособным, стучитесь в личку. Или лучше на аську - 275-707-581. Только при обращении укажите, что Вы с этого форума, а то забаню

. Помогу, чем смогу. Но для этого нужно сначала сформулировать задачу, которая стоит перед микроконтроллером в целом.