Сообщения без ответов | Активные темы Текущее время: 20 июн 2019, 05:20



Ответить на тему  [ Сообщений: 4 ] 
 Применение ADC в AVR с изменением входного канала 
Автор Сообщение

Зарегистрирован: 27 мар 2017, 02:59
Сообщения: 3
Здравствуйте, Гуру. Вроде простая тема, но не получается изменять входной канал по положению переключателя. В программе, написанной в 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 раз.



27 мар 2017, 03:27
Профиль

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

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


27 мар 2017, 16:11
Профиль

Зарегистрирован: 27 мар 2017, 02:59
Сообщения: 3
CvAvr не знает такого оборота (bit_is_set) и воспринимает эту строку за необъявленную переменную.
Вообще такой запрос " if (PINC2==1" определения состояния бита применялся многократно.


27 мар 2017, 20:04
Профиль

Зарегистрирован: 27 мар 2017, 02:59
Сообщения: 3
Спасибо, KopylovSergey. Я забыл поставить точку в условии if (PINC.2==1). А так прекрасно всё работает.

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


27 мар 2017, 20:32
Профиль
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 4 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron


Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.
Русская поддержка phpBB