Блок питания трансформаторный. Не импульсный, чтобы грешить на выбросы напряжения. Входы АЦП: подключен один, остальные сначала висели в воздухе, затем просто капельками припоя посадил на минус.
Непонятное происходит. И проблема в том, что вообще непонятно куда рыть.
Код
//========================================================================
//#pragma inline = forced
u16 read_adc (u08 channel)
{
ADMUX = ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR) | channel);
set_bit (ADCSRA, ADSC);
while (!(ADCSRA & (1<<ADIF)))
{
}
set_bit (ADCSRA, ADIF);
return ADC;
}
//========================================================================
// adc = read_adc (PHASE_Usm); // Комментирую работу АЦП, МК нормально работает.
adc = 512; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//#pragma inline = forced
u16 read_adc (u08 channel)
{
ADMUX = ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR) | channel);
set_bit (ADCSRA, ADSC);
while (!(ADCSRA & (1<<ADIF)))
{
}
set_bit (ADCSRA, ADIF);
return ADC;
}
//========================================================================
// adc = read_adc (PHASE_Usm); // Комментирую работу АЦП, МК нормально работает.
adc = 512; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Цель прототипа измерение переменного тока. Цикл измерения длится 120 мс. Программа выстроена так, что зацикленность только при ожидании окончания преобразования ацп и окончании передачи данных по SPI. Цикл одного измерения длится 25 либо 13 тактов ацп. Это примерно от 60 до 30 мкс. То есть, сброс мк происходит явно из за зацикливания на ожидании окончания преобразования ацп. По сторожевому таймеру. Но иногда мк наглухо вешается. Менял ATMEGA32A на ATMEGA8535. Картина та же. Убираю измерение ацп, мк работает как часики.