Страница 1 из 2
Вопрос по АЦП
Добавлено: Вт мар 21, 2017 21:18:42
anten89
вопрос по работе с АЦП. У меня возникла проблема с кодом преобразования данных с АЦП в реальные вольты. описывать проблему не буду там целая карусель.
мой вопрос в чем. вот у меня устройство на пик16ф1827 с приделанным к его каналу АЦП делителем напряжения 1 к 4 (то есть при максимальном подводимом к нему напряжении в 16 вольт он на ножку пика дает ровненько 4 вольта.). растолкуйте мне как мне правильно настроить АЦП модуль посредством того же самого МСС и какая граммотная формула перевода значения снимаемого с АЦП в милливольты и вольты. каковы ваши подходы?
Re: Вопрос по АЦП
Добавлено: Вт мар 21, 2017 22:27:42
Albert_V
Нужно просчитывать значения относительно опорного напряжения (Vref).
Т.е., если входное напряжение равно опорному, получаете максимальное значение с АЦП.
А дальше - приводите значения к реально измеряемому напряжению...
В вашем случае, лучше пересчитать номиналы в делителе и принять за максимум 16,384V. Т.е., при входном на делителе 16,384V на входе АЦП напряжение соответствует опорному.
Так будет удобнее считать и проще выбрать источник опорного напряжения.
Re: Вопрос по АЦП
Добавлено: Ср мар 22, 2017 13:42:05
anten89

вот здесь под 4х в МСС понимается внутреннее опорное 4,096 вольт?
Re: Вопрос по АЦП
Добавлено: Чт мар 23, 2017 08:34:31
Zhuk72
Да.
Re: Вопрос по АЦП
Добавлено: Чт мар 23, 2017 17:27:32
Аlex
Как то, ради интереса, попробовал этот МСС. Столько лишнего кода я не видел даже у самых глупых быдлокодеров

Re: Вопрос по АЦП
Добавлено: Чт мар 23, 2017 17:36:37
Zhuk72
Я тоже как-то заинтересовался.
МСС создал кучу файлов с вызовами подпрограмм из одного файла в другой. Причем по одной функции в каждом файле. Пока я из мейна дошел до последнего файла, забыл по поводу чего был первый вызов.
Re: Вопрос по АЦП
Добавлено: Пт мар 24, 2017 03:55:12
КРАМ
В такой избыточности нет ничего удивительного. Потому что подобные конфигураторы создают максимально независимый от МК код. Как это ни покажется странным. Собственно, подход программистов МСС (самого МСС, а не его пользователей) основан на максимально АБСТРАГИРОВАННЫХ сущностях.
Попробуйте разобрать какой нибудь стек протоколов (например USB или TCP/IP) из MLA/MAL (Microchip Library Aplication) и Вы обнаружите там совершенно аналогичный генерируемый код. Зато один и тот же набор исходников элементарно подгоняется под любую платформу (хоть 8-, хоть 16-, хоть 32-разрядную).
Ясен пень, что можно написать ЧАСТНУЮ реализацию гораздо короче и понятней. Понятней ДЛЯ СЕБЯ. Патамушта для тех, кто привык всегда писать платформонезависимый код, такого рода конструкции не вызывают трудностей в понимании.
Re: Вопрос по АЦП
Добавлено: Пт мар 24, 2017 07:43:17
Аlex
КРАМ писал(а):подход программистов МСС (самого МСС, а не его пользователей) основан на максимально АБСТРАГИРОВАННЫХ сущностях.
Ага, то-то в МСС нет поддержки даже половины существующих чипов
О какой платформонезависимости может идти речь, если я выбираю в конфигураторе конкретный МК и генерю под него код ? Я же не универсальный код создаю, в какой-то отдельной программе
Скорее, программеры МСС оооочень далеки от программирования под МК и могут быдлокодить только под всякие винды и т.б., юзая всяческие библиотеки. Отсюда и код у них - как у лузеров-начинаек.
Re: Вопрос по АЦП
Добавлено: Пт мар 24, 2017 07:46:35
Zhuk72
КРАМ, в том-то и дело, что "частнику", который любитель, эта платформонезависимость не нужна, а пользуются МСС те, кто не желает заглянуть в ДШ. Сомневаюсь, что разработчик на производстве будет этим пользоваться.
Re: Вопрос по АЦП
Добавлено: Пт мар 24, 2017 15:10:02
КРАМ
Аlex писал(а):О какой платформонезависимости может идти речь.
Выбор платформы в КОНКРЕТНОЙ реализации никак не влияет на платформонезависимость ГЕНЕРАТОРА КОДА. И ограничения поддерживаемых МК тут никак не влияют, потому что требуют неких таблиц для привязки универсального кода в частной реализации.
Я так же точно беру стек USB, который поддерживает кучу классов устройств и делаю ОДИН КЛАСС СВОЕГО устройства. Но код остается универсальным и избыточным.
Добавлено after 3 minutes 11 seconds:
Zhuk72 писал(а):который любитель, эта платформонезависимость не нужна, а пользуются МСС те, кто не желает заглянуть в ДШ.
Не совсем так. Есть множество разработчиков, которые готовы пользоваться генераторами кода с целью сокращения времени на разработку. И такой метод очень неплохо работает для устройств с простыми драйверами периферии, то есть когда ничего замысловатого из периферии делать не надо и существенная часть кода занимается исключительно счетными задачами. То есть МК по сути работает как калькулятор, а не как управляющий автомат.
Re: Вопрос по АЦП
Добавлено: Пн апр 03, 2017 18:49:31
RoboC
Пожалуй, задам свой ламерский вопрос тут

.
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
В чем может быть ошибка

?
Re: Вопрос по АЦП
Добавлено: Пн апр 03, 2017 21:07:13
Аlex
RoboC писал(а):Получаю:
adc L : 255
adc H : 3
Встречный вопрос. А что Вы хотели получить ?
Если значение Vdd, в пересчёте на АЦП-попугаи, то Вы его и получили.
Если что-то другое, то расскажите нам, что конкретно. А заодно покажите схему подключения входа АЦП.
Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 07:11:39
RoboC
Насколько я понимаю при
Код: Выделить всё
CHS2=1; CHS2=1; CHS1=1; CHS0=1; // FixedRef
Вход АЦП подключен к VDD.
VRef выступает внутренний опорник на 0.6В
Соответственно я хочу получить значение Vdd как в этом документе
AN1072
Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 09:42:56
Родэрик
RoboC писал(а):Насколько я понимаю при
Код: Выделить всё
CHS2=1; CHS2=1; CHS1=1; CHS0=1; // FixedRef
Вход АЦП подключен к VDD....
что именно подразумевается под этой фразой?
Сейчас специально в текущем проекте на 886-ом включил работу по 15-му каналу и проверил в реальном железе. Всё работает чётко, как в том документе. Результат преобразования в моём случае - .119, и Vdd как раз где-то 5,12.
Судя по всему, ты делаешь свои эксперименты на основе удобных предположений, используя по большей части метод тыка, а надо бы для начала понять как именно это всё работает, прочитать 10 раз и вникнуть в тот документ, на который ссылаешься.
Тем более пишешь на си.
Я вот, например за рамки ассемблера никогда не выходил, и фишку из этого документа использовал впервые (кстати, благодарю за наводку), но прочитав и поняв о чём там речь, я тут же добавил пару строк кода и был уверен заранее что сейчас мне покажет чип.
Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 09:55:42
RoboC
Я был бы вам премного благодарен, если бы вы поделились рабочим кодом

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

.
Даже осознание моего заблуждения о том, что вход АЦП подключен к Vdd, хотя на самом деле он подключен к 0.6V internal reference никак не помогает мне получить результат схожий с вашим

Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 11:19:00
Zhuk72
Алекс же объяснил уже.
Опорное напряжение - это самый максимум, что можно измерить, значит его результат равен 11 1111 1111, что и делает при правом выравнивании 3 и 255, если вы это же самое опорное, т.е. Vdd, подали на вход АЦП.
Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 11:38:23
Родэрик
RoboC писал(а):Я был бы вам премного благодарен, если бы вы поделились рабочим кодом

. Мне все равно что это ассемблер. ...

Дело в том, что у меня нет конкретного единого куска кода, где происходит вся работа с ацп. Настройки входов, например, находятся в старте программы, сами преобразования, их запуск, настройка конфига и выбор канала в основном цикле, задержек как таковых нет, весь код сквозной, сама программа и есть как бы задержка, всё происходит всегда и одновременно. Канал для следующего преобразования назначается (через подпрограмму) сразу после считывания предыдущего результата. "Прыжок" на текущий результат по текущему каналу [0...15], если он уже готов, происходит через таблицу. Заложены все 16 меток, но в работе только те, что необходимы, и соответственно настроены как входы ацп. К примеру, правое выравнивание я делаю через отдельную подпрограмму, а по-умолчанию всегда левое. Казалось бы - зачем, если достаточно adfm изменить. Но не всё так просто, и чтобы только этот момент разъяснить надо будет затронуть кучу всяких аспектов.
Иными словами, я даже не представляю какой именно код выкладывать, да и честно говоря это ещё больше отвлечёт от сути вопроса.
Zhuk72 писал(а):
....т.е. Vdd, подали на вход АЦП.
Не подавал он его на вход, хотя да, так могло показаться по его словам. Судя по-всему здесь он всё делает правильно, но такое ощущение, что перед преобразованием выбирается не 15-й канал, а нечто иное, дающее в итоге FF. Либо источник не включен, либо vcfg не так настроены. Я по си не шарю, и могу лишь только предполагать.
Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 12:24:54
Zhuk72
А какая разница Си или асм, если имена битов и регистров одинаковые.
Не все ли равно, как писать: bsf ADCON0,0 или ADON=1, смысл-то понятен.
В его настройке АЦП ничего сугубо Сишного нет, обычная арифметика.
И тут я заметил нечто:
Очевидно предполагалось, что измеряться будет
0.6V fixed reference, для которого канал CHS<3:0> равен 1111, но по невнимательности автора получается канал
AN7 
Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 13:37:48
RoboC
Родэрик писал(а):Либо источник не включен, либо vcfg не так настроены.
источник включен
FVREN=1;
vcfg настроены
VCFG1=0;//VREF+ на +5
VCFG0=0; //VREF- на земле
Zhuk72 писал(а):И тут я заметил нечто:
Огромное Вам спасибо! Все работает!
adc H : 0
adc L : 235
Для мня нет разницы асеемблер или Си. Хватает флеша пишу на си, не хватает на асемблере.
Re: Вопрос по АЦП
Добавлено: Вт апр 04, 2017 14:24:41
Zhuk72
5000/1024*235=1147 мВ
Почему не 600?