реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Странное поведение МК при работающем АЦП
demiurg1978
сообщение Nov 9 2016, 03:42
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



При работающем АЦП МК периодически сбрасывается, либо вообще наглухо зависает. Визуально это видно как сброс прибора в исходное состояние и работа сначала. Либо вообще зависает. Что самое интересное, сторожевой таймер включен. Как только выключаю измерения АЦП, прототип работает как часики. На семисегментном дисплее по кругу поочередно выводит состояние 3 переменных.

Блок питания трансформаторный. Не импульсный, чтобы грешить на выбросы напряжения. Входы АЦП: подключен один, остальные сначала висели в воздухе, затем просто капельками припоя посадил на минус.

Непонятное происходит. И проблема в том, что вообще непонятно куда рыть.

Код
//========================================================================
//#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. Картина та же. Убираю измерение ацп, мк работает как часики.

Сообщение отредактировал demiurg1978 - Nov 9 2016, 03:44
Go to the top of the page
 
+Quote Post
@Ark
сообщение Nov 9 2016, 04:06
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 688
Регистрация: 13-05-16
Пользователь №: 91 710



Цитата(demiurg1978 @ Nov 9 2016, 06:42) *
Убираю измерение ацп, мк работает как часики.

Уберите зацикливание по биту готовности результата АЦП-преобразования.
Вместо него, после пуска АЦП, сделайте временнУю паузу, заведомо достаточную для завершения преобразования.
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Nov 9 2016, 04:39
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Цитата(@Ark @ Nov 9 2016, 10:06) *
...

Хм... Понял. Видел такое решение в примерах. Благодарю.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Nov 9 2016, 06:13
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Для улучшения точности преобразования рекомендуется "засыпать"
на время преобразования и просыпаться по прерыванию окончания преобразования.
Можно и не засыпать, но все равно работать по прерыванию.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
smalcom
сообщение Nov 9 2016, 06:38
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Не видно, чтобы был включен АЦП: ADEN в ADCSRA.
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Nov 10 2016, 16:30
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Вычислил причину. Срыв стека. В настройках IAR есть настройка задания стека. Самое смешное, что я сразу заподозрил это. Но стал грешить на срабатывание сторожевого таймера. Я сегодня игрался со скоростью преобразования АЦП, потом переделал на прерывания, после запуска преобразования перевод мк в спячку. При смене скорости МК сбрасывается. Но стало меняться время сбрасывания МК. Когда перевел на прерывания со спячкой, сброс МК прекратился, но показания периодически показывали какой сигнал на входе, хотя входы намертво на минус припаяны. Вот тут уже все стало показывать на срыв стека. Меняю параметры стека и усе заработало. Да едрить ево в качель! Три дня псу под хвост! Такие вот дела...

Проверил программу как на опросе флага, так и на прерываниях со спячкой. Как ни странно на последнем варианте светодиодный дисплей перестал мерцать. При опросе флага видно некоторое мерцание дисплея. В принципе, терпимо, но хотелось полностью исключить мерцание.
CODE

bool adc_complete;

void set_proc_meter_on (void)
{
ACSR = (1<<ACD);

ADCSRA = ((1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (1<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0));

_proc_meter = 1;
}

//========================================================================
//#pragma inline = forced
u16 read_adc (u08 channel) // Эта функция вызывается в обработчике прерывания по таймеру.
{
ADMUX = ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR) | channel);

set_bit (ADCSRA, ADSC);

// while (ADCSRA & (1<<ADSC))
// {

// }

// set_bit (ADCSRA, ADIF);

while (1)
{
__enable_interrupt ();

sleep_mode_enable ();

if (adc_complete)
{
adc_complete = false;
break;
}
}

return ADC;
}
//========================================================================

//========================================================================
#pragma vector = ADC_vect
__interrupt void adc_interrupt_handler (void)
{
adc_complete = true;
}
//========================================================================
Go to the top of the page
 
+Quote Post
Aldec
сообщение Nov 17 2016, 07:05
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



Цитата(demiurg1978 @ Nov 10 2016, 16:30) *
Как ни странно на последнем варианте светодиодный дисплей перестал мерцать. При опросе флага видно некоторое мерцание дисплея. В принципе, терпимо, но хотелось полностью исключить мерцание.

LDM-208
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 04:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016