Здравствуйте, Гуру. Вроде простая тема, но не получается изменять входной канал по положению переключателя. В программе, написанной в 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" канал. В чём я не прав?
Применение ADC в AVR с изменением входного канала
Модератор: KopylovSergey
Применение ADC в AVR с изменением входного канала
Последний раз редактировалось Valer5 27 мар 2017, 20:13, всего редактировалось 1 раз.
-
- Сообщения: 44
- Зарегистрирован: 08 мар 2015, 19:43
Re: Применение ADC в AVR с изменением входного канала
Доброго!
Возможно и ошибаюсь, но нелья просто так написать Компилятор понимает это не как опрос бита в регистре, а просто его наличие в данном МК. Попробуйте написать так:
Возможно и ошибаюсь, но нелья просто так написать
Код: Выделить всё
if (PINC2==1)
Код: Выделить всё
if (bit_is_set(PINC, PINC2))
Re: Применение ADC в AVR с изменением входного канала
CvAvr не знает такого оборота (bit_is_set) и воспринимает эту строку за необъявленную переменную.
Вообще такой запрос " if (PINC2==1" определения состояния бита применялся многократно.
Вообще такой запрос " if (PINC2==1" определения состояния бита применялся многократно.
Re: Применение ADC в AVR с изменением входного канала
Спасибо, KopylovSergey. Я забыл поставить точку в условии if (PINC.2==1). А так прекрасно всё работает.
Тема закрыта.
Тема закрыта.