Применение ADC в AVR с изменением входного канала

Программирование микроконтроллеров AVR. Программы, библиотеки, документация, средства разработки, отладки и прочее...

Модератор: KopylovSergey

Ответить
Valer5
Сообщения: 3
Зарегистрирован: 27 мар 2017, 02:59

Применение ADC в AVR с изменением входного канала

Сообщение Valer5 » 27 мар 2017, 03:27

Здравствуйте, Гуру. Вроде простая тема, но не получается изменять входной канал по положению переключателя. В программе, написанной в CvAvr 2.05 таймером Т2 организуются циклы, в которых иницилизируется ADC, считываются показания и дальше всё работает. В этот цикл перед запуском ADC вставил опрос переключателя и хочу изменить входной канал. Привожу кусок :
while(1) {
if (PINC2==1)
{ADMUX| = (1 << REFS1)|(1 << REFS0) //Внутренний ИОН 2,56V
|(0 << ADLAR) //Правое выравнивание результата
|(0 << MUX3)|(1 << MUX2)|(0 << MUX1)|(0 << MUX0);} // ..Входной канал ADC4
else
{ADMUX |= (1 << REFS1)|(1 << REFS0) //Внутренний ИОН 2,56V
|(0 << ADLAR) //Правое выравнивание результата
|(0 << MUX3)|(0 << MUX2)|(0 << MUX1)|(0 << MUX0);} // ..Входной канал ADC0

if (p_count>=15) { //Если прошло 15*0,256мс=3.84мс; {общее время замеров 64*3.84=245.76мс (4 замера в сек) //Ожидание завершения предыдущего преобразования

ADCSRA|=0x40; //Пуск АЦП (Кдел=8, f=125 кГц, однократн.)
while((ADCSRA & 0x10)==0); //Ожидание завершения преобразования
value = value + ADCL+(ADCH<<8); //Чтение и накопление результата преобразования
ADCSRA|=0x40;
adc_counter++; //Инкремент счётчика замеров
p_count=0;

}
Независимо от переключателя при проверке в Протеус работает "0" канал. В чём я не прав?
Последний раз редактировалось Valer5 27 мар 2017, 20:13, всего редактировалось 1 раз.

KopylovSergey
Сообщения: 45
Зарегистрирован: 08 мар 2015, 19:43

Re: Применение ADC в AVR с изменением входного канала

Сообщение KopylovSergey » 27 мар 2017, 16:11

Доброго!

Возможно и ошибаюсь, но нелья просто так написать

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

if (PINC2==1)
Компилятор понимает это не как опрос бита в регистре, а просто его наличие в данном МК. Попробуйте написать так:

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

if (bit_is_set(PINC, PINC2))

Valer5
Сообщения: 3
Зарегистрирован: 27 мар 2017, 02:59

Re: Применение ADC в AVR с изменением входного канала

Сообщение Valer5 » 27 мар 2017, 20:04

CvAvr не знает такого оборота (bit_is_set) и воспринимает эту строку за необъявленную переменную.
Вообще такой запрос " if (PINC2==1" определения состояния бита применялся многократно.

Valer5
Сообщения: 3
Зарегистрирован: 27 мар 2017, 02:59

Re: Применение ADC в AVR с изменением входного канала

Сообщение Valer5 » 27 мар 2017, 20:32

Спасибо, KopylovSergey. Я забыл поставить точку в условии if (PINC.2==1). А так прекрасно всё работает.

Тема закрыта.

Ответить