вопрос по работе с АЦП. У меня возникла проблема с кодом преобразования данных с АЦП в реальные вольты. описывать проблему не буду там целая карусель. мой вопрос в чем. вот у меня устройство на пик16ф1827 с приделанным к его каналу АЦП делителем напряжения 1 к 4 (то есть при максимальном подводимом к нему напряжении в 16 вольт он на ножку пика дает ровненько 4 вольта.). растолкуйте мне как мне правильно настроить АЦП модуль посредством того же самого МСС и какая граммотная формула перевода значения снимаемого с АЦП в милливольты и вольты. каковы ваши подходы?
Нужно просчитывать значения относительно опорного напряжения (Vref). Т.е., если входное напряжение равно опорному, получаете максимальное значение с АЦП. А дальше - приводите значения к реально измеряемому напряжению... В вашем случае, лучше пересчитать номиналы в делителе и принять за максимум 16,384V. Т.е., при входном на делителе 16,384V на входе АЦП напряжение соответствует опорному. Так будет удобнее считать и проще выбрать источник опорного напряжения.
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Я тоже как-то заинтересовался. МСС создал кучу файлов с вызовами подпрограмм из одного файла в другой. Причем по одной функции в каждом файле. Пока я из мейна дошел до последнего файла, забыл по поводу чего был первый вызов.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
В такой избыточности нет ничего удивительного. Потому что подобные конфигураторы создают максимально независимый от МК код. Как это ни покажется странным. Собственно, подход программистов МСС (самого МСС, а не его пользователей) основан на максимально АБСТРАГИРОВАННЫХ сущностях. Попробуйте разобрать какой нибудь стек протоколов (например USB или TCP/IP) из MLA/MAL (Microchip Library Aplication) и Вы обнаружите там совершенно аналогичный генерируемый код. Зато один и тот же набор исходников элементарно подгоняется под любую платформу (хоть 8-, хоть 16-, хоть 32-разрядную). Ясен пень, что можно написать ЧАСТНУЮ реализацию гораздо короче и понятней. Понятней ДЛЯ СЕБЯ. Патамушта для тех, кто привык всегда писать платформонезависимый код, такого рода конструкции не вызывают трудностей в понимании.
Карма: 90
Рейтинг сообщений: 1337
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4558 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
КРАМ писал(а):
подход программистов МСС (самого МСС, а не его пользователей) основан на максимально АБСТРАГИРОВАННЫХ сущностях.
Ага, то-то в МСС нет поддержки даже половины существующих чипов
О какой платформонезависимости может идти речь, если я выбираю в конфигураторе конкретный МК и генерю под него код ? Я же не универсальный код создаю, в какой-то отдельной программе Скорее, программеры МСС оооочень далеки от программирования под МК и могут быдлокодить только под всякие винды и т.б., юзая всяческие библиотеки. Отсюда и код у них - как у лузеров-начинаек.
КРАМ, в том-то и дело, что "частнику", который любитель, эта платформонезависимость не нужна, а пользуются МСС те, кто не желает заглянуть в ДШ. Сомневаюсь, что разработчик на производстве будет этим пользоваться.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Выбор платформы в КОНКРЕТНОЙ реализации никак не влияет на платформонезависимость ГЕНЕРАТОРА КОДА. И ограничения поддерживаемых МК тут никак не влияют, потому что требуют неких таблиц для привязки универсального кода в частной реализации. Я так же точно беру стек USB, который поддерживает кучу классов устройств и делаю ОДИН КЛАСС СВОЕГО устройства. Но код остается универсальным и избыточным.
Добавлено after 3 minutes 11 seconds:
Zhuk72 писал(а):
который любитель, эта платформонезависимость не нужна, а пользуются МСС те, кто не желает заглянуть в ДШ.
Не совсем так. Есть множество разработчиков, которые готовы пользоваться генераторами кода с целью сокращения времени на разработку. И такой метод очень неплохо работает для устройств с простыми драйверами периферии, то есть когда ничего замысловатого из периферии делать не надо и существенная часть кода занимается исключительно счетными задачами. То есть МК по сути работает как калькулятор, а не как управляющий автомат.
Карма: 90
Рейтинг сообщений: 1337
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4558 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
RoboC писал(а):
Получаю: adc L : 255 adc H : 3
Встречный вопрос. А что Вы хотели получить ? Если значение Vdd, в пересчёте на АЦП-попугаи, то Вы его и получили. Если что-то другое, то расскажите нам, что конкретно. А заодно покажите схему подключения входа АЦП.
Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35 Сообщений: 157 Откуда: не с Уфы
Рейтинг сообщения:0
RoboC писал(а):
Насколько я понимаю при
Код:
CHS2=1; CHS2=1; CHS1=1; CHS0=1; // FixedRef
Вход АЦП подключен к VDD....
что именно подразумевается под этой фразой?
Сейчас специально в текущем проекте на 886-ом включил работу по 15-му каналу и проверил в реальном железе. Всё работает чётко, как в том документе. Результат преобразования в моём случае - .119, и Vdd как раз где-то 5,12.
Судя по всему, ты делаешь свои эксперименты на основе удобных предположений, используя по большей части метод тыка, а надо бы для начала понять как именно это всё работает, прочитать 10 раз и вникнуть в тот документ, на который ссылаешься. Тем более пишешь на си.
Я вот, например за рамки ассемблера никогда не выходил, и фишку из этого документа использовал впервые (кстати, благодарю за наводку), но прочитав и поняв о чём там речь, я тут же добавил пару строк кода и был уверен заранее что сейчас мне покажет чип.
Я был бы вам премного благодарен, если бы вы поделились рабочим кодом . Мне все равно что это ассемблер. Я сам понимаю, что я что то не правильно понял или не дочитал, поэтому я и спрашивал что я неправильно сделал .
Даже осознание моего заблуждения о том, что вход АЦП подключен к Vdd, хотя на самом деле он подключен к 0.6V internal reference никак не помогает мне получить результат схожий с вашим
_________________ У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Алекс же объяснил уже. Опорное напряжение - это самый максимум, что можно измерить, значит его результат равен 11 1111 1111, что и делает при правом выравнивании 3 и 255, если вы это же самое опорное, т.е. Vdd, подали на вход АЦП.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Карма: 3
Рейтинг сообщений: 21
Зарегистрирован: Чт ноя 26, 2015 23:22:35 Сообщений: 157 Откуда: не с Уфы
Рейтинг сообщения:0
RoboC писал(а):
Я был бы вам премного благодарен, если бы вы поделились рабочим кодом . Мне все равно что это ассемблер. ...
Дело в том, что у меня нет конкретного единого куска кода, где происходит вся работа с ацп. Настройки входов, например, находятся в старте программы, сами преобразования, их запуск, настройка конфига и выбор канала в основном цикле, задержек как таковых нет, весь код сквозной, сама программа и есть как бы задержка, всё происходит всегда и одновременно. Канал для следующего преобразования назначается (через подпрограмму) сразу после считывания предыдущего результата. "Прыжок" на текущий результат по текущему каналу [0...15], если он уже готов, происходит через таблицу. Заложены все 16 меток, но в работе только те, что необходимы, и соответственно настроены как входы ацп. К примеру, правое выравнивание я делаю через отдельную подпрограмму, а по-умолчанию всегда левое. Казалось бы - зачем, если достаточно adfm изменить. Но не всё так просто, и чтобы только этот момент разъяснить надо будет затронуть кучу всяких аспектов. Иными словами, я даже не представляю какой именно код выкладывать, да и честно говоря это ещё больше отвлечёт от сути вопроса.
Zhuk72 писал(а):
....т.е. Vdd, подали на вход АЦП.
Не подавал он его на вход, хотя да, так могло показаться по его словам. Судя по-всему здесь он всё делает правильно, но такое ощущение, что перед преобразованием выбирается не 15-й канал, а нечто иное, дающее в итоге FF. Либо источник не включен, либо vcfg не так настроены. Я по си не шарю, и могу лишь только предполагать.
А какая разница Си или асм, если имена битов и регистров одинаковые. Не все ли равно, как писать: bsf ADCON0,0 или ADON=1, смысл-то понятен. В его настройке АЦП ничего сугубо Сишного нет, обычная арифметика.
И тут я заметил нечто:
Код:
CHS2=1; CHS2=1; CHS1=1; CHS0=1;
Очевидно предполагалось, что измеряться будет 0.6V fixed reference, для которого канал CHS<3:0> равен 1111, но по невнимательности автора получается канал AN7
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения