Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Вопрос по АЦП

Вт мар 21, 2017 21:18:42

вопрос по работе с АЦП. У меня возникла проблема с кодом преобразования данных с АЦП в реальные вольты. описывать проблему не буду там целая карусель.
мой вопрос в чем. вот у меня устройство на пик16ф1827 с приделанным к его каналу АЦП делителем напряжения 1 к 4 (то есть при максимальном подводимом к нему напряжении в 16 вольт он на ножку пика дает ровненько 4 вольта.). растолкуйте мне как мне правильно настроить АЦП модуль посредством того же самого МСС и какая граммотная формула перевода значения снимаемого с АЦП в милливольты и вольты. каковы ваши подходы?

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

Вт мар 21, 2017 22:27:42

Нужно просчитывать значения относительно опорного напряжения (Vref).
Т.е., если входное напряжение равно опорному, получаете максимальное значение с АЦП.
А дальше - приводите значения к реально измеряемому напряжению...
В вашем случае, лучше пересчитать номиналы в делителе и принять за максимум 16,384V. Т.е., при входном на делителе 16,384V на входе АЦП напряжение соответствует опорному.
Так будет удобнее считать и проще выбрать источник опорного напряжения.

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

Ср мар 22, 2017 13:42:05

Изображение
Изображение
вот здесь под 4х в МСС понимается внутреннее опорное 4,096 вольт?

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

Чт мар 23, 2017 08:34:31

Да.

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

Чт мар 23, 2017 17:27:32

Как то, ради интереса, попробовал этот МСС. Столько лишнего кода я не видел даже у самых глупых быдлокодеров :facepalm:

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

Чт мар 23, 2017 17:36:37

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

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

Пт мар 24, 2017 03:55:12

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

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

Пт мар 24, 2017 07:43:17

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

О какой платформонезависимости может идти речь, если я выбираю в конфигураторе конкретный МК и генерю под него код ? Я же не универсальный код создаю, в какой-то отдельной программе :facepalm:
Скорее, программеры МСС оооочень далеки от программирования под МК и могут быдлокодить только под всякие винды и т.б., юзая всяческие библиотеки. Отсюда и код у них - как у лузеров-начинаек.

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

Пт мар 24, 2017 07:46:35

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

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

Пт мар 24, 2017 15:10:02

Аlex писал(а):О какой платформонезависимости может идти речь.

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

Добавлено after 3 minutes 11 seconds:
Zhuk72 писал(а):который любитель, эта платформонезависимость не нужна, а пользуются МСС те, кто не желает заглянуть в ДШ.

Не совсем так. Есть множество разработчиков, которые готовы пользоваться генераторами кода с целью сокращения времени на разработку. И такой метод очень неплохо работает для устройств с простыми драйверами периферии, то есть когда ничего замысловатого из периферии делать не надо и существенная часть кода занимается исключительно счетными задачами. То есть МК по сути работает как калькулятор, а не как управляющий автомат.

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

Пн апр 03, 2017 18:49:31

Пожалуй, задам свой ламерский вопрос тут :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: ?

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

Пн апр 03, 2017 21:07:13

RoboC писал(а):Получаю:
adc L : 255
adc H : 3
Встречный вопрос. А что Вы хотели получить ?
Если значение Vdd, в пересчёте на АЦП-попугаи, то Вы его и получили.
Если что-то другое, то расскажите нам, что конкретно. А заодно покажите схему подключения входа АЦП.

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

Вт апр 04, 2017 07:11:39

Насколько я понимаю при
Код:
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

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

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

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

Вт апр 04, 2017 11:19:00

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

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

Вт апр 04, 2017 11:38:23

RoboC писал(а):Я был бы вам премного благодарен, если бы вы поделились рабочим кодом :oops: . Мне все равно что это ассемблер. ... :(

Дело в том, что у меня нет конкретного единого куска кода, где происходит вся работа с ацп. Настройки входов, например, находятся в старте программы, сами преобразования, их запуск, настройка конфига и выбор канала в основном цикле, задержек как таковых нет, весь код сквозной, сама программа и есть как бы задержка, всё происходит всегда и одновременно. Канал для следующего преобразования назначается (через подпрограмму) сразу после считывания предыдущего результата. "Прыжок" на текущий результат по текущему каналу [0...15], если он уже готов, происходит через таблицу. Заложены все 16 меток, но в работе только те, что необходимы, и соответственно настроены как входы ацп. К примеру, правое выравнивание я делаю через отдельную подпрограмму, а по-умолчанию всегда левое. Казалось бы - зачем, если достаточно adfm изменить. Но не всё так просто, и чтобы только этот момент разъяснить надо будет затронуть кучу всяких аспектов.
Иными словами, я даже не представляю какой именно код выкладывать, да и честно говоря это ещё больше отвлечёт от сути вопроса.

Zhuk72 писал(а):....т.е. Vdd, подали на вход АЦП.

Не подавал он его на вход, хотя да, так могло показаться по его словам. Судя по-всему здесь он всё делает правильно, но такое ощущение, что перед преобразованием выбирается не 15-й канал, а нечто иное, дающее в итоге FF. Либо источник не включен, либо vcfg не так настроены. Я по си не шарю, и могу лишь только предполагать.

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

Вт апр 04, 2017 12:24:54

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

И тут я заметил нечто:
Код:
CHS2=1;        CHS2=1;        CHS1=1;        CHS0=1;

Очевидно предполагалось, что измеряться будет 0.6V fixed reference, для которого канал CHS<3:0> равен 1111, но по невнимательности автора получается канал AN7 :)

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

Вт апр 04, 2017 13:37:48

Родэрик писал(а):Либо источник не включен, либо vcfg не так настроены.

источник включен
FVREN=1;
vcfg настроены
VCFG1=0;//VREF+ на +5
VCFG0=0; //VREF- на земле
Zhuk72 писал(а):И тут я заметил нечто:

Огромное Вам спасибо! Все работает!

adc H : 0
adc L : 235


Для мня нет разницы асеемблер или Си. Хватает флеша пишу на си, не хватает на асемблере.

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

Вт апр 04, 2017 14:24:41

5000/1024*235=1147 мВ
Почему не 600?
Ответить