Страница 1 из 1

Зависает АЦП

Добавлено: Пн дек 21, 2015 08:15:58
y2056
Всем доброго времени суток. Прошу помощи опытных спецов по AVR. Проблема в следующем мне надо оцифровывать два входных синусоидальных сигнала, примерно 2048 выборок ну можно немного и другое число но два сигнала одновременно. Ацп настроил как надо в режиме автоматической работы и генерации прерывания. По одиночке каждый канал работает отлично все расчеты все выполняется но когда я пытаюсь переключиться с 0 входа АЦП на 1, АЦП перестает генерировать прерывание перепробовал все даже специально настроил 13 вывод ардуинки чтоб мигал светодиод когда попадаем в прерывание. он не мигает. В чем может быть проблема. И второй вопрос если при автоматической работе АЦП после генерации прерывания что преобразование завершено изменить вход АЦП, то после следующего преобразования какие значения будут в регистрах результата АЦП. Значение предыдущего входа так как преобразование уже перезапущено автоматически или нового входа. Заранее благодарен за ответы.

Re: Зависает АЦП

Добавлено: Пн дек 21, 2015 08:43:40
y2056
Приметно так. Что закоментировано это разные варианты что я пробовал как раз с переключениями входов Пишу на ардуино.ISR(ADC_vect){
//// if (ADMUX == 0x40){ ADMUX = 0x41;
// ADCSRA = (1 << ADIF) |(1 << ADSC);
//}
// else {
// ADMUX = 0x40;
// ADCSRA = (1 << ADIF) | (1 << ADSC);
// }

if( ( UCSR0A & (1<<UDRE0)) ){
umoment = ADCL;//copy result.
umoment += (ADCH<<8);
...................
расчеты
...................

N++;
if (N == 4095){
...................
расчеты
...................
digitalWrite(13, !digitalRead(13));
}

}
}

Re: Зависает АЦП

Добавлено: Пн дек 21, 2015 10:04:04
НАПАЛМ
Попробуйте такой алгоритм:
- переключение на канал 0
- запуск одиночного преобразования
- переключение на канал 1 после выполнения одиночного преобразования
- запуск одиночного преобразования
- переключение на канал 0 после выполнения одиночного преобразования

Re: Зависает АЦП

Добавлено: Пн дек 21, 2015 10:55:59
y2056
Так то я понял но хотелось на автомате тем более аппаратные средства позволяют.

Re: Зависает АЦП

Добавлено: Пн дек 21, 2015 14:19:17
Z_h_e
Вы же обработчике прерывания сами отключаете АЦП. Зачем Вы изменяете регистр ADCSRA?

Re: Зависает АЦП

Добавлено: Пн дек 21, 2015 21:21:50
Jack_A
Хоть давно на С не писал, но вот этот оператор кажется подозрительным :

Код: Выделить всё

if( ( UCSR0A & (1<<UDRE0)) )
Возможно, имелось в виду :

Код: Выделить всё

if( ( UCSR0A && (1<<UDRE0)) )

Re: Зависает АЦП

Добавлено: Вт дек 22, 2015 05:09:45
Z_h_e
Вы Jack_A неправы, как раз предложенная Вами конструкция работать не будет.

Re: Зависает АЦП

Добавлено: Вт дек 22, 2015 10:44:34
Jack_A
Может быть. Давно на Си не писал, а для АВР - вообще никогда.

Re: Зависает АЦП

Добавлено: Сб дек 26, 2015 12:14:37
YS
этот оператор кажется подозрительным
Все нормально, это проверка бита.

if (UCSR0A & (1<<UDRE0)) - если в UCSR0A стоит бит UDRE0, то результат побитового И будет ненулевым (что в классическом Си интерпретируется как true), и if сработает. Если интересующий бит нулевой, то результатом побитового И будет ноль, что интерпретируется как false.