АЦП - выбор лапки

Обсуждаем контроллеры компании Atmel.
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

АЦП - выбор лапки

Сообщение kobzar »

Добрый день!
В процессе изучения микроконтроллеров практикуюсь в создании ампервольтметра!
Читаю про ацп и так далее! В связи с чем вохникло несколько вопросов:

1. Планируется снимать показания с трех точек - следовательно мне необходимо по очереди подключать определенную ногу (ADC0-ADC2)
Для удобства хотелось бы написать макросы их для использования в коде!
согласно даташита мне нужно сконфигугрировать 4 бита MUX0-MUX3 !
Но пока никак не пойму как в одной строке указать явный ноль и явную единицу!
То есть мне нужно три значения
//Макросы

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

#define Volt (ADMUX	&= ~(1 << MUX3) ~ (1 << MUX2) ~ (1 << MUX1) ~ (1 << MUX0)) // вход ADC0
#define Amper (ADMUX |= (0 << MUX3) | (0 << MUX2) | (0 << MUX1)) | (1 << MUX0)) // вход ADC1
#define Watt (ADMUX |= (0 << MUX3) | (0 << MUX2) | (1 << MUX1) | (0 << MUX0)) // вход ADC2
Но если я в цикле буду их выибирать для обработки сигнала то после третьей переменной биты сумирутся и я получу не 3 а другую лапку!
Как правильно записать данные биты Явным образом?

#define Watt (ADMUX |= &~(1 << MUX3) &~ (1 << MUX2) | (1 << MUX1) &~ (1 << MUX0)) // вход ADC2 -- но это я вно неправильная запись :(

2. Обрабатывать полученные данные можно либо по прерыванию либо просто функцией! Есть ли разница что предпочтительней использовать?
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: АЦП - выбор лапки

Сообщение Gudd-Head »

Почему нельзя явно задавать ADMUX присвоением?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

Re: АЦП - выбор лапки

Сообщение kobzar »

Что вы имеете в виду?
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: АЦП - выбор лапки

Сообщение Gudd-Head »

Что-то вроде
ADMUX = 0b10101010
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Эиком - электронные компоненты и радиодетали
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

Re: АЦП - выбор лапки

Сообщение kobzar »

Ето не трувей которым пользуются только КВАВР-щеки! :)
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АЦП - выбор лапки

Сообщение Engineer_Keen »

Gudd-Head писал(а):Что-то вроде
ADMUX = 0b10101010
Фууу, это же магические числа... Конечно все так делали (даже я в начале), но это же не читабельно...
А зачем в

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

#define Volt (ADMUX   &= ~(1 << MUX3) ~ (1 << MUX2) ~ (1 << MUX1) ~ (1 << MUX0)) // вход ADC0
#define Amper (ADMUX |= (0 << MUX3) | (0 << MUX2) | (0 << MUX1)) | (1 << MUX0)) // вход ADC1
#define Watt (ADMUX |= (0 << MUX3) | (0 << MUX2) | (1 << MUX1) | (0 << MUX0)) // вход ADC2
такая сложность? почему просто не написать одинаково (точные комбинации не знаю, т.к. непонятно что за контроллер):

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

#define Volt (ADMUX= (0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(0 << MUX0)) // вход ADC0
#define Amper (ADMUX= (0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(1 << MUX0)) // вход ADC1
#define Watt (ADMUX= (0 << MUX3)|(0 << MUX2)|(1 << MUX1)|(0 << MUX0)) // вход ADC2
Ну и если нужно, там же REF и ADLAR прописать?
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: АЦП - выбор лапки

Сообщение Gudd-Head »

Engineer_Keen писал(а):

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

#define Volt (ADMUX= (0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(0 << MUX0)) // вход ADC0
Я это и имел в виду: присвоением. А дальше кому как нравится.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Dr. Alex
Это не хвост, это антенна
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков
Контактная информация:

Re: АЦП - выбор лапки

Сообщение Dr. Alex »

Gudd-Head писал(а):

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

#define Volt (ADMUX= (0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(0 << MUX0)) // вход ADC0
Эта запись некорректна!

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

(0 << MUX3)
Вы таким образом никогда 0 не выставите!!! Как известно 0 выставляется

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

ADMUX&= ~(1 << MUX3)
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АЦП - выбор лапки

Сообщение Engineer_Keen »

Тут как бы присвоение, а не чтение-модификация-запись... Хотя хрен вас сишников знает :)))
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

Re: АЦП - выбор лапки

Сообщение kobzar »

Ну так изначально так и было

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

#define Volt (ADMUX= (0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(0 << MUX0)) // вход ADC0
#define Amper (ADMUX= (0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(1 << MUX0)) // вход ADC1
#define Watt (ADMUX= (0 << MUX3)|(0 << MUX2)|(1 << MUX1)|(0 << MUX0)) // вход ADC2
Но я планирую например использовать опрос лапок в цикле. Тогда получится что
опросили первую лапку - все окей
потом записали идиницу и опросили вторую лапку - тоже окей
но потом пробуем опросить третью, а у нас ведь уже висит единичка со второй и в итоге мы получим не 0010 а 0011 ну и когда опять вернемся к первой то уже там нули не выставяться!

Все верно - что бы записать ноль - нужно использовать инверт

ADMUX &= ~(1<<MUX0)

Вопрос в том как в ожнйо строке дефайна явно указать где ноль а где один ?

Есть конечно вариант ето сделать вот так

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

#define Volt (ADMUX&= ~((0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(0 << MUX0))) // вход ADC0 - Явно ноль!
#define Amper (ADMUX= (0 << MUX3)|(0 << MUX2)|(0<< MUX1)|(1 << MUX0)) // вход ADC1
#define Watt (ADMUX= (0 << MUX3)|(0 << MUX2)|(1 << MUX1)|(0 << MUX0)) // вход ADC2
И потом если опрашиваем вторую или третью ногу предварительно обнулять! Но тоже не тру вей !
Последний раз редактировалось kobzar Чт янв 23, 2014 15:34:08, всего редактировалось 1 раз.
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: АЦП - выбор лапки

Сообщение Gudd-Head »

kobzar писал(а):Но я планирую например использовать опрос лапок в цикле.
А зах*я цикл, можно спросить?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АЦП - выбор лапки

Сообщение Engineer_Keen »

Счетчик есть, который для цикла используется? Я б его значение в ADMUX и писал, вообще без заморочек :)
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

Re: АЦП - выбор лапки

Сообщение kobzar »

а что вы предлагаете вместо цикла кейс использовать?
Это ж бред !
Так запускаем цыкл - он все время крутиться и выдает нам значения а мы и потом на екран пуляем в зависимости от других условий !
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: АЦП - выбор лапки

Сообщение Gudd-Head »

Я предлагаю не высасывать проблему из пальца, а писать подряд.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

Re: АЦП - выбор лапки

Сообщение kobzar »

Я предлагаю помочь мне с ответом по моему вопросу - если это вохможно а не предлагать альтернативные варианты которые у меня и так будут работать! :)
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: АЦП - выбор лапки

Сообщение pyzhman »

Комментарий от нетрувэйщика ( :) ):
напишите так

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

#define Watt (ADMUX= (ADMUX & 0xF0) | (0 << MUX3) | (0 << MUX2) | (1 << MUX1) | (0 << MUX0)) // вход ADC2
, т.е. сброс бит перед их установкой.
Docendo discimus
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

Re: АЦП - выбор лапки

Сообщение kobzar »

Ну вот я к тому же и пришел ! Просто как то читал в книге како-то что можно прямо в однйо строке явно указывать 0 и 1
Знать бы как
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: АЦП - выбор лапки

Сообщение zero648 »

kobzar писал(а):Знать бы как
Напиши так как предлагают

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

#define Volt  (ADMUX=(ADMUX & 0xF0) | (0b0000 << MUX0)) // вход ADC0
#define Amper (ADMUX=(ADMUX & 0xF0) | (0b0001 << MUX0)) // вход ADC1
#define Watt  (ADMUX=(ADMUX & 0xF0) | (0b0010 << MUX0)) // вход ADC2
kobzar
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев
Контактная информация:

Re: АЦП - выбор лапки

Сообщение kobzar »

благодарю - натолкнули на светлую мысль !
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: АЦП - выбор лапки

Сообщение pyzhman »

Обратите внимание, там есть , что не есть трувэй. :))
Docendo discimus
Ответить

Вернуться в «AVR»