alfik777 Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 Необходимо измерять напряжение питание контроллера. Используется pic16f1828 c использованием встроенного опорного напряжения FVR. По старинке хотел заводить питание через делитель на один из входов АЦП чтобы сравнивать с встроенным опорным. Но, кажется, где-то видел, что в новых контроллерах с FVR есть возможность измерить напряжение питание без дополнительного подключения его (через делитель) ко входу АЦП, т.е. совсем ничего не подключая внешне. Прямого ответа в DS не увидел. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 Большинство микроконтроллеров такой плюшки не имеют , поэтому нужно юзать делитель и заводить на ацп . 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
alfik777 Опубликовано 22 апреля, 2018 Автор Поделиться Опубликовано 22 апреля, 2018 Питание автономное, каждый uA на счету, а делитель же по-любому будет подсаживать . Или МегаОмы ставить? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
getshket Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 МОмы ставь. 0 С уважением, А. Ю. Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 (изменено) 4 часа назад, alfik777 сказал: Необходимо измерять напряжение питание контроллера. Используется pic16f1828 c использованием встроенного опорного напряжения FVR. Все очень просто. FVR уже подключен к АЦП, нужно только его выбрать входным мультиплексором. Напряжение питания (если именно оно использовано в качестве опорного АЦП) будет равно 1024*Ufvr/N, где N - измеренное значение. Такие вещи не пишут в ДШ, поскольку они элементарны и следуют из простой формулы измерений: N=Uизм*1024/UопАЦП ЗЫ. Совет применять делитель с мегаомным значением сопротивления совершенно безграмотен, ибо максимально допустимое внутреннее сопротивление источника сигнала ограничено даташитом величиной в 10 кОм. Иначе мы будем измерять "погоду на Кольском полуострове". ЗЗЫ. Учитывая, что включение FVR приводит к заметному росту потребления, следует его включать лишь на время измерения. Как и сам АЦП. В новых контроллерах Микрочипа управление включением периферии обычно делается с помощью специального регистра (PMD), что упрощает процессы администрирования потребления. Но это только начиная с "пятизначного" семейства PIC16F1xxxx Изменено 22 апреля, 2018 пользователем my504 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
alfik777 Опубликовано 22 апреля, 2018 Автор Поделиться Опубликовано 22 апреля, 2018 Что -то я, похоже, в двух соснах затерялся... Т.е. мне нужно ADPREF<1:0> установить в 00 (ADCON1 ) , а на коммутаторе CHS<4:0> установить 11111 (ADCON0) ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 (изменено) Да именно так и плюс к этому еще и ADCON1 <ADNREF> =0 (по умолчанию это и так будет, но следует устанавливать принудительно во избежании коллизий при дальнейших манипуляциях с кодом). Изменено 22 апреля, 2018 пользователем my504 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
alfik777 Опубликовано 22 апреля, 2018 Автор Поделиться Опубликовано 22 апреля, 2018 Ну это отрицательный полюс, как- бы само собой подразумевается что его к Vss надо. Сейчас попробовал в таком варианте...Но что-то не то... Считывается всегда 0. Если в ADCON1 выбираю аналоговый канал, например, AN3 и подключаю тот же переменный резистор как делитель, то нормально считываю байт от 0 до FF, а после установки 11111 =FVR (Fixed Voltage Reference) Buffer 1 Output(2) считываются нули. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 (изменено) Наверное потому, что FVR нужно ВКЛЮЧИТЬ. Причем не только сам модуль, но и коммутатор НА ЕГО ВЫХОДЕ К АЦП, выбрав его выходное напряжение с учетом напряжения питания МК. (FVRCON) Изменено 22 апреля, 2018 пользователем my504 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
alfik777 Опубликовано 22 апреля, 2018 Автор Поделиться Опубликовано 22 апреля, 2018 Включал конечно...Но, видимо, переработался, синтаксическую ошибку сделал и бьюсь...Вместо = минус стоял... Спасибо за помощь, начало считывать, вроде даже правдоподобное что-то. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 Учтите, что точность опорного источника в МК не высока (смотрите даташит в конце). То есть, либо Вы миритесь с такой точностью, либо находите способ калибровки встроенного FVR. И так у всех МК. Настоящий прецизионный источник стоит раза в 3...4 дороже МК. 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
alfik777 Опубликовано 22 апреля, 2018 Автор Поделиться Опубликовано 22 апреля, 2018 Я не просчитывал по точности... ну мне на вскидку кажется что этого достаточно будет, так как мне необходимо будет отловить момент 20% заряда аккумулятора. Т.е. отследить падение питающего напряжения до 3,8в . 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 22 апреля, 2018 Поделиться Опубликовано 22 апреля, 2018 Тогда озвучу величины: -8...+6%. Такой вот разброс. Советую производить калибровку при замене батарейки питания. Тогда 100% станут опорными и измерения весьма точными. 1 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
alfik777 Опубликовано 22 апреля, 2018 Автор Поделиться Опубликовано 22 апреля, 2018 Понял, учту, Спасибо! 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 6 мая, 2023 Поделиться Опубликовано 6 мая, 2023 (изменено) В 22.04.2018 в 13:56, my504 сказал: Все очень просто. FVR уже подключен к АЦП, нужно только его выбрать входным мультиплексором. Напряжение питания (если именно оно использовано в качестве опорного АЦП) будет равно 1024*Ufvr/N, где N - измеренное значение. Такие вещи не пишут в ДШ, поскольку они элементарны и следуют из простой формулы измерений: N=Uизм*1024/UопАЦП ЗЫ. Совет применять делитель с мегаомным значением сопротивления совершенно безграмотен, ибо максимально допустимое внутреннее сопротивление источника сигнала ограничено даташитом величиной в 10 кОм. Иначе мы будем измерять "погоду на Кольском полуострове". ЗЗЫ. Учитывая, что включение FVR приводит к заметному росту потребления, следует его включать лишь на время измерения. Как и сам АЦП. В новых контроллерах Микрочипа управление включением периферии обычно делается с помощью специального регистра (PMD), что упрощает процессы администрирования потребления. Но это только начиная с "пятизначного" семейства PIC16F1xxxx Понимаю тема старая. Но поиском с гугла вышел на эту тему. У меня похожая задача, но с ньюансом. Мне нужно замерять АЦП на ноге, и плюс замерять замерять FVR. (чтоб узнать напряжение питания МК) По отдельности получается замерять и то и то. А вот вместе не получается. Ну естественно пытаюсь по очереди замерять. Микроконтроллер PIC16F1847 Я уже как только не пробовал, но где то косячу. При попытке замера по очереди, один сигнал влияет на другой причем очень сильно. Напряжение питания МК 5.0в (для теста) По отдельности например вот так: FVR 2.048в = ADC 415 мультиметром на ноге RA4 3.950в = ADC 800. Если ничего не меняю физически но включаю замер по очереди то: FVR 2.048в = ADC 685 мультиметром на ноге RA4 3.950в = ADC 640. Код (без лишнего) на данный момент выглядит так: unsigned int read_adc (){//функция чтения ацп int tmp; CHS4_bit=0; //этими битами выбираю канал. page 143 CHS3_bit=0; CHS2_bit=1; CHS1_bit=0; CHS0_bit=0; /* 00000 = AN0 00001 = AN1 00010 = AN2 00011 = AN3 00100 = AN4 00101 = AN5 00110 = AN6 00111 = AN7 01000 = AN8 01001 = AN9 01010 = AN10 01011 = AN11 01100 = Reserved. No channel connected. 11100 = Reserved. No channel connected. 11101 = Temperature Indicator 11110 = DAC output(1) 11111 = FVR (Fixed Voltage Reference) Buffer 1 Output(2) */ ADON_bit=1; //включаю ацп ADGO_bit=1; //этим битом запускаю замер ацп на выбранном канале while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем висим тут. tmp = (unsigned int)ADRESH << 8; //верхний регистр приводим к инту и сдвигаем влево на 8 бит так как это верхний регистр tmp |= ADRESL;//нижний регистр склеиваю ADON_bit=0; //вырубаю ацп CHS4_bit=1; //этими битами выбираю канал. page 143 CHS3_bit=1; CHS2_bit=1; CHS1_bit=0; CHS0_bit=0; return tmp; } unsigned int read_fvr (){//функция чтения fvr int tmp_fvr; ADFVR1_bit=1; ADFVR0_bit=0; FVREN_bit=1; CHS4_bit=1; //этими битами выбираю канал. page 143 CHS3_bit=1; CHS2_bit=1; CHS1_bit=1; CHS0_bit=1; ADON_bit=1; //запускаю работу ацп ADGO_bit=1; //этим битом запускаю замер ацп на выбранном канале while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем висим тут. tmp_fvr = (unsigned int)ADRESH << 8; //верхний регистр tmp_fvr |= ADRESL;//нижний регистр склеиваю ADON_bit=0; //вырубаю ацп TRISA4_bit=1;//RA4 на вход ANSA4_bit=1;//аналоговый пин FVREN_bit=0; //пробую выррубать FVR ADFVR1_bit=0; //пробую вырубать буфер FVR ADFVR0_bit=0; return tmp_fvr; } void main() { while (1) {//основной цикл adc=read_adc(); fvr=read_fvr(); } } Изменено 6 мая, 2023 пользователем Zombie47 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 7 мая, 2023 Поделиться Опубликовано 7 мая, 2023 Умная мысля приходит напосля. К сожалению пока не изложишь вопрос на форуме, мой мозг не структурирует информацию, а вот как изложишь, так нахожу решение. В общем я точно не понял в чем было дело, но решил не умничать с каждым битом отдельно, а целиком весь регистр настраивал. Предположительно тут последовательность конфигурирования и обязательная задержка. В общем вот с этим кодом работает как надо: unsigned int read_adc (){//функция чтения ацп int tmp; ADCON0=0b00010011; //даташит page 143 ниже описание: //7 read as 0 //6-2bit=00100 (канал для АЦП RA4) //1bit=0 (GO/DONE как я понял это что вроде флага, в процессе АЦП или нет ) //0bit=0 (ADON этот бит запускает работу ацп.) Delay_ms(1);//обязательна без нее не работает ADON_bit=1; //еще раз включаю ацп после задержки ADGO_bit=1; //этим битом запускаю замер ацп на выбранном канале while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем висим тут. tmp = (unsigned int)ADRESH << 8; //верхний регистр приводим к инту и сдвигаем влево на 8 бит так как это верхний регистр tmp |= ADRESL;//нижний регистр склеиваю ADCON0=0b01111111; //переконфигурирую под замер FVR return tmp; } unsigned int read_fvr (){//функция чтения ацп fvr int tmp_fvr; FVRCON = 0b11000010; //конфигурирую и включаю FVR page 133 //bit 7 FVREN: 1 = Fixed Voltage Reference is enabled //bit 6 FVRRDY: 1 = Fixed Voltage Reference output is ready for use //bit 5 TSEN: 0 = Temperature Indicator is disabled //bit 4 TSRNG: 0 =VOUT = VDD - 2VT (Low Range) //bit 3-2 CDAFVR<1:0>: 00 = Comparator FVR Buffer is off //bit 1-0 ADFVR<1:0>: 10 = ADC FVR Buffer Gain is 2x, with output VADFVR = 2x VFVR(4) ADCON0=0b01111111; //обязательно еще раз конфигурирую ацп даташит page 143 ниже описание: //7 read as 0 //6-2bit=00100 (канал для АЦП RA4) //1bit=0 (GO/DONE как я понял это что вроде флага, в процессе АЦП или нет ) //0bit=0 (ADON этот бит запускает работу ацп.) while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем висим тут. tmp_fvr = (unsigned int)ADRESH << 8; //верхний регистр tmp_fvr |= ADRESL;//нижний регистр склеиваю FVRCON = 0b00000000; //выключаю FVR page 133 ADCON0=0b00010000; //переконфигурирую под ацп даташит page 143 ниже описание: return tmp_fvr; } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 7 мая, 2023 Поделиться Опубликовано 7 мая, 2023 9 часов назад, Zombie47 сказал: Delay_ms(1);//обязательна без нее не работает Изучить раздел 16.3 A/D Acquisition Requirements датащита религия не позволяет? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.