Цитата(Dima_G @ Oct 4 2010, 15:41)

В каком месте программы сбрасываете ватчдог? Надеюсь, не в прерывании?
В прерывании готовности АЦП. Прерывание - freerun. Причем ресетится вочдог после выставления уровня на ноге. В этом же прерывании происходит передача по SPI.
// отправить байт по SPI
if (data_command == command_)
{
data_command = data_;
if (transfer_address <= max_channel) // если номер канала в пределах массива
{
PORTB &= ~(1<<packet_control); // ~SS = 0 - начать передачу
SPDR = transfer_address; // послать 1й стартовый ноль или адрес
} // если за пределами массива - ничего не посылаем
}
else // data_command = data_
{
data_command = command_;
if (transfer_address == 0)
{
SPDR = 0; // второй стартовый ноль
transfer_address++; // увеличить номер канала
}
else
{
if (transfer_address <= max_channel) // если номер канала в пределах массива
{
SPDR = ch_levels_address_send [transfer_address-1]; // послать уровень канала
transfer_address++; // увеличить номер канала
}
else // if transfer_address > max_channel
{
PORTB |= 1<<packet_control; // ~SS = 1, завершить передачу
transfer_address=0;
ch_levels_address_temp = ch_levels_address_change; // переписать указатели на массивы
ch_levels_address_change = ch_levels_address_send;
ch_levels_address_send = ch_levels_address_temp;
wdt_reset(); // <<<<<<<<<<<<---------- WD reset
}
}
}
переменная transfer_address в другом месте не обнуляется, только при старте программы.
Состояние после зависа - уровень 1 на ноге выставлен, передачи нет (ни данных, ни клока).
Когда происходит просто сбой - то ощущение, что меняется код программы: часть данных передается, а часть - нет. Или будто бы память (в котором хранится массив на передачу) запорота и не обновляется.
Цитата(ArtemKAD @ Oct 4 2010, 15:31)

В "подвисшем состоянии" код проходит через точку сброса WDT...
Что помешает ему так-же "подвиснуть" как и с внутреним?
если бы проходил - была бы передача по SPI, чего не наблюдается осциллографом.
Забыл добавить, что мега работает от внешнего кварца 16мгц. Грешил на него - менял, менял конденсаторы обвязки. Но после того, как переключил на внутренний RC и оно зависло все равно - "опустились руки". Завтра попробую поменять мегу, она "не свежая" была, выпаяна из другого проекта.