Вопрос по АЦП

Поклонники продукции Microchip Technology Inc тусуются тут.
anten89
Встал на лапы
Сообщения: 87
Зарегистрирован: Ср ноя 23, 2016 09:50:36

Вопрос по АЦП

Сообщение anten89 »

вопрос по работе с АЦП. У меня возникла проблема с кодом преобразования данных с АЦП в реальные вольты. описывать проблему не буду там целая карусель.
мой вопрос в чем. вот у меня устройство на пик16ф1827 с приделанным к его каналу АЦП делителем напряжения 1 к 4 (то есть при максимальном подводимом к нему напряжении в 16 вольт он на ножку пика дает ровненько 4 вольта.). растолкуйте мне как мне правильно настроить АЦП модуль посредством того же самого МСС и какая граммотная формула перевода значения снимаемого с АЦП в милливольты и вольты. каковы ваши подходы?
Реклама
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Вопрос по АЦП

Сообщение Albert_V »

Нужно просчитывать значения относительно опорного напряжения (Vref).
Т.е., если входное напряжение равно опорному, получаете максимальное значение с АЦП.
А дальше - приводите значения к реально измеряемому напряжению...
В вашем случае, лучше пересчитать номиналы в делителе и принять за максимум 16,384V. Т.е., при входном на делителе 16,384V на входе АЦП напряжение соответствует опорному.
Так будет удобнее считать и проще выбрать источник опорного напряжения.
Реклама
anten89
Встал на лапы
Сообщения: 87
Зарегистрирован: Ср ноя 23, 2016 09:50:36

Re: Вопрос по АЦП

Сообщение anten89 »

Изображение
Изображение
вот здесь под 4х в МСС понимается внутреннее опорное 4,096 вольт?
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопрос по АЦП

Сообщение Zhuk72 »

Да.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопрос по АЦП

Сообщение Аlex »

Как то, ради интереса, попробовал этот МСС. Столько лишнего кода я не видел даже у самых глупых быдлокодеров :facepalm:
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопрос по АЦП

Сообщение Zhuk72 »

Я тоже как-то заинтересовался.
МСС создал кучу файлов с вызовами подпрограмм из одного файла в другой. Причем по одной функции в каждом файле. Пока я из мейна дошел до последнего файла, забыл по поводу чего был первый вызов.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопрос по АЦП

Сообщение КРАМ »

В такой избыточности нет ничего удивительного. Потому что подобные конфигураторы создают максимально независимый от МК код. Как это ни покажется странным. Собственно, подход программистов МСС (самого МСС, а не его пользователей) основан на максимально АБСТРАГИРОВАННЫХ сущностях.
Попробуйте разобрать какой нибудь стек протоколов (например USB или TCP/IP) из MLA/MAL (Microchip Library Aplication) и Вы обнаружите там совершенно аналогичный генерируемый код. Зато один и тот же набор исходников элементарно подгоняется под любую платформу (хоть 8-, хоть 16-, хоть 32-разрядную).
Ясен пень, что можно написать ЧАСТНУЮ реализацию гораздо короче и понятней. Понятней ДЛЯ СЕБЯ. Патамушта для тех, кто привык всегда писать платформонезависимый код, такого рода конструкции не вызывают трудностей в понимании.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопрос по АЦП

Сообщение Аlex »

КРАМ писал(а):подход программистов МСС (самого МСС, а не его пользователей) основан на максимально АБСТРАГИРОВАННЫХ сущностях.
Ага, то-то в МСС нет поддержки даже половины существующих чипов :)))

О какой платформонезависимости может идти речь, если я выбираю в конфигураторе конкретный МК и генерю под него код ? Я же не универсальный код создаю, в какой-то отдельной программе :facepalm:
Скорее, программеры МСС оооочень далеки от программирования под МК и могут быдлокодить только под всякие винды и т.б., юзая всяческие библиотеки. Отсюда и код у них - как у лузеров-начинаек.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопрос по АЦП

Сообщение Zhuk72 »

КРАМ, в том-то и дело, что "частнику", который любитель, эта платформонезависимость не нужна, а пользуются МСС те, кто не желает заглянуть в ДШ. Сомневаюсь, что разработчик на производстве будет этим пользоваться.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопрос по АЦП

Сообщение КРАМ »

Аlex писал(а):О какой платформонезависимости может идти речь.
Выбор платформы в КОНКРЕТНОЙ реализации никак не влияет на платформонезависимость ГЕНЕРАТОРА КОДА. И ограничения поддерживаемых МК тут никак не влияют, потому что требуют неких таблиц для привязки универсального кода в частной реализации.
Я так же точно беру стек USB, который поддерживает кучу классов устройств и делаю ОДИН КЛАСС СВОЕГО устройства. Но код остается универсальным и избыточным.

Добавлено after 3 minutes 11 seconds:
Zhuk72 писал(а):который любитель, эта платформонезависимость не нужна, а пользуются МСС те, кто не желает заглянуть в ДШ.
Не совсем так. Есть множество разработчиков, которые готовы пользоваться генераторами кода с целью сокращения времени на разработку. И такой метод очень неплохо работает для устройств с простыми драйверами периферии, то есть когда ничего замысловатого из периферии делать не надо и существенная часть кода занимается исключительно счетными задачами. То есть МК по сути работает как калькулятор, а не как управляющий автомат.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Вопрос по АЦП

Сообщение RoboC »

Пожалуй, задам свой ламерский вопрос тут :oops: .

PIC16F886

Хочу определить значение Vdd.
Настройка

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

	
	        FVREN=1;
  	  	// настройка ADСON1
  		ADFM=0;// правое выравнивание
  		VCFG1=0;//VREF+ на +5
  		VCFG0=0; //VREF- на земле 
  		// настройка ADСON0
  		ADCS1=1;// частота на 32 
  		ADCS0=0;
		CHS2=1;  		CHS2=1;  		CHS1=1;  		CHS0=1; // FixedRef
  		GO_nDONE=0;
  		ADON=1; // включаем модуль АЦП

Читаем ADC

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

		
                CHS2=1;  		CHS2=1;  		CHS1=1;  		CHS0=1; 
		ADFM=1;
		delay_20us();
 		GO_nDONE=1;//запускаем преобразование

 		while(GO_nDONE)    NOP();//ждем завершения приобразования

		printf("\n\r adc L : %d ",ADRESL);
		printf("\n\r adc H : %d ",ADRESH);
Получаю:

adc L : 255
adc H : 3
adc L : 255
adc H : 3

В чем может быть ошибка :cry: ?
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопрос по АЦП

Сообщение Аlex »

RoboC писал(а):Получаю:
adc L : 255
adc H : 3
Встречный вопрос. А что Вы хотели получить ?
Если значение Vdd, в пересчёте на АЦП-попугаи, то Вы его и получили.
Если что-то другое, то расскажите нам, что конкретно. А заодно покажите схему подключения входа АЦП.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Вопрос по АЦП

Сообщение RoboC »

Насколько я понимаю при

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

CHS2=1;        CHS2=1;        CHS1=1;        CHS0=1; // FixedRef
Вход АЦП подключен к VDD.
VRef выступает внутренний опорник на 0.6В

Соответственно я хочу получить значение Vdd как в этом документе AN1072
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопрос по АЦП

Сообщение Родэрик »

RoboC писал(а):Насколько я понимаю при

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

CHS2=1;        CHS2=1;        CHS1=1;        CHS0=1; // FixedRef
Вход АЦП подключен к VDD....
что именно подразумевается под этой фразой?

Сейчас специально в текущем проекте на 886-ом включил работу по 15-му каналу и проверил в реальном железе. Всё работает чётко, как в том документе. Результат преобразования в моём случае - .119, и Vdd как раз где-то 5,12.

Судя по всему, ты делаешь свои эксперименты на основе удобных предположений, используя по большей части метод тыка, а надо бы для начала понять как именно это всё работает, прочитать 10 раз и вникнуть в тот документ, на который ссылаешься.
Тем более пишешь на си.

Я вот, например за рамки ассемблера никогда не выходил, и фишку из этого документа использовал впервые (кстати, благодарю за наводку), но прочитав и поняв о чём там речь, я тут же добавил пару строк кода и был уверен заранее что сейчас мне покажет чип.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Вопрос по АЦП

Сообщение RoboC »

Я был бы вам премного благодарен, если бы вы поделились рабочим кодом :oops: . Мне все равно что это ассемблер.
Я сам понимаю, что я что то не правильно понял или не дочитал, поэтому я и спрашивал что я неправильно сделал :facepalm: .

Даже осознание моего заблуждения о том, что вход АЦП подключен к Vdd, хотя на самом деле он подключен к 0.6V internal reference никак не помогает мне получить результат схожий с вашим :(
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопрос по АЦП

Сообщение Zhuk72 »

Алекс же объяснил уже.
Опорное напряжение - это самый максимум, что можно измерить, значит его результат равен 11 1111 1111, что и делает при правом выравнивании 3 и 255, если вы это же самое опорное, т.е. Vdd, подали на вход АЦП.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопрос по АЦП

Сообщение Родэрик »

RoboC писал(а):Я был бы вам премного благодарен, если бы вы поделились рабочим кодом :oops: . Мне все равно что это ассемблер. ... :(
Дело в том, что у меня нет конкретного единого куска кода, где происходит вся работа с ацп. Настройки входов, например, находятся в старте программы, сами преобразования, их запуск, настройка конфига и выбор канала в основном цикле, задержек как таковых нет, весь код сквозной, сама программа и есть как бы задержка, всё происходит всегда и одновременно. Канал для следующего преобразования назначается (через подпрограмму) сразу после считывания предыдущего результата. "Прыжок" на текущий результат по текущему каналу [0...15], если он уже готов, происходит через таблицу. Заложены все 16 меток, но в работе только те, что необходимы, и соответственно настроены как входы ацп. К примеру, правое выравнивание я делаю через отдельную подпрограмму, а по-умолчанию всегда левое. Казалось бы - зачем, если достаточно adfm изменить. Но не всё так просто, и чтобы только этот момент разъяснить надо будет затронуть кучу всяких аспектов.
Иными словами, я даже не представляю какой именно код выкладывать, да и честно говоря это ещё больше отвлечёт от сути вопроса.
Zhuk72 писал(а): ....т.е. Vdd, подали на вход АЦП.
Не подавал он его на вход, хотя да, так могло показаться по его словам. Судя по-всему здесь он всё делает правильно, но такое ощущение, что перед преобразованием выбирается не 15-й канал, а нечто иное, дающее в итоге FF. Либо источник не включен, либо vcfg не так настроены. Я по си не шарю, и могу лишь только предполагать.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопрос по АЦП

Сообщение Zhuk72 »

А какая разница Си или асм, если имена битов и регистров одинаковые.
Не все ли равно, как писать: bsf ADCON0,0 или ADON=1, смысл-то понятен.
В его настройке АЦП ничего сугубо Сишного нет, обычная арифметика.

И тут я заметил нечто:

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

CHS2=1;        CHS2=1;        CHS1=1;        CHS0=1;
Очевидно предполагалось, что измеряться будет 0.6V fixed reference, для которого канал CHS<3:0> равен 1111, но по невнимательности автора получается канал AN7 :)
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: Вопрос по АЦП

Сообщение RoboC »

Родэрик писал(а):Либо источник не включен, либо vcfg не так настроены.
источник включен
FVREN=1;
vcfg настроены
VCFG1=0;//VREF+ на +5
VCFG0=0; //VREF- на земле
Zhuk72 писал(а):И тут я заметил нечто:
Огромное Вам спасибо! Все работает!

adc H : 0
adc L : 235


Для мня нет разницы асеемблер или Си. Хватает флеша пишу на си, не хватает на асемблере.
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопрос по АЦП

Сообщение Zhuk72 »

5000/1024*235=1147 мВ
Почему не 600?
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Ответить

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