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

Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 04:10:32

Доброго времени суток собрал вольтметр-амперметр на PIC16F819 + четырехразрядный 7-ми сегментный индикатор для своего зарядного устройства.
Приборчик измеряет ток и напряжение с датчиков,выводит на индикатор попеременно каждые 4 сек.Если какая-то величина изменяется быстрее, чем установлено то показывает только её.Если ток изменяется больше чем +-25%, то показывает только ток.Для напряжения установка +-12,5%. В приоритете ток, т.к. делал для зарядного.
В устройстве использовано два аналоговых канала, соответственно на ток и напряжение.Датчик тока шунт 5А/75mV + ОУ LM2904 в неинвертир. режиме усиления, преимущество данного ОУ в том,что при однополярном питании усиление от 0 вольт. Датчик напряжения - резистивный делитель + ОУ , оу использовал что бы не пропадал зря. Опорное напряжение рез.делитель + кондер, т.к. не требуется точных измерений.Выбирал из условия максимальное напряжение на выходе ОУ + 2-5% запас.(В районе 4 вольт.)

По программе заметки:
-отображение на дисплее происходит в прерываниях,так же и считывание с ацп.
-каналы попеременно переключаются в прерывании,частота опроса одного канала около 250 Гц.
-для более удобного отображения используется оверсем...(забыл как называется). Увеличиваем разряд ацп с 8 bit до 10 bit. Почему с 8 бит, у меня компилятор XC8 не хочет считывать ADRESL, поэтому установил левое выравнивание и читаю только ADRESH.В планах было с 10 бит до 12 бит увеличить.Кусок программы остался в проекте в комментах.
Использовал простенький цифровой фильтр НЧ (RC), иначе неадекватная реакция девайса.
Передаточная фильтра:
Din = Din + adc - Dout
Dout = Din/K
K=T*SPS
T=RC
Fсреза=(1/(2*пи*R*C)
Что бы успевал МК считать деление, сделал на сдвиге регистра для тока и напряжения (>>4=16,коэффициент К).
Fсреза получилось около 2-3Гц.Поэтому показания медленно растут(относительно все).
-выставление точки автоматическое с первого разряда (0.00В>>00.0В>>000В аналогично для тока). Вот тут есть камешек подводный, если в выражении присутствует неопределенный тип переменной,ниже пример из программы:
temp[0]=data_real/(100*Mj_temp);
В данном случае "100" неопределённый, то выражение (100*Mj_temp) не должно превышать 32768.Если это происходит, то приборчик адекватно показывает до 3.27 при дальнейшем увеличении 3.33>>4.44 и т.д. Этого можно избежать определив тип "100" большим.Для моих условий эксплуатации этого не требовалось и я оставил так.
Питание обычный LM7805+стандартный набор кондеров на выходе.
Вывод порта RA2 использовал по своему назначению, в программе его нет.

У меня главный вопрос: как в XC8 прописать FOSC=INTIO2, в таком случае компилятор выдает ошибку.Я прописал FOSC=0x30 и все в принципе ок. Спасибо подсказали, в проекте поправил, перезалил.

Подскажите почему ADRESL не могу считать, в программе все нормально. Дизассемблирование проверял, два раза считывается ADRESH?

Изображение

В файлах сам проект приборчика + схема.
Вложения
Вольт-Ампер.rar
Папка проекта + схема.
(154.98 KiB) Скачиваний: 464
Последний раз редактировалось EclipsV Пт янв 20, 2017 09:37:53, всего редактировалось 2 раз(а).

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 08:53:56

Дичь!
EclipsV писал(а):У меня главный вопрос: как в XC8 прописать FOSC..
Как и всегда, ищем в этом ХС описание чипа.
FOSC = Oscillator Selection bits
EXTRCCLK EXTRC oscillator; CLKO function on RA6/OSC2/CLKO pin (aliases: _EXTRC_CLKOUT)
EXTRCIO EXTRC oscillator; port I/O function on RA6/OSC2/CLKO pin (aliases: _EXTRC_IO)
INTOSCCLK INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin (aliases: _INTRC_CLKOUT)
INTOSCIO INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin (aliases: _INTRC_IO)
EC EXTCLK; port I/O function on RA6/OSC2/CLKO pin (aliases: _EXTCLK)
HS HS oscillator (aliases: _HS_OSC)
XT XT oscillator (aliases: _XT_OSC)
LP LP oscillator (aliases: _LP_OSC)

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 09:16:04

FOSC=INTOSCIO Помогло.Спасибо! Подскажите документ и страницу, где описано.

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 09:24:34

EclipsV писал(а):Подскажите документ и страницу, где описано.
MPLAB_XC8_C_Compiler_User_Guide.pdf стр. 0 - 141 - 5хх :)))

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 09:30:32

По конфигам - ".../docs/pic_chipinfo.html"

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 13:48:49

"Понравился" вывод на индикатор:
Код:
case 0: A=1,B=1,C=1,D=1,E=1,F=1,G=0;

Раз уж для индикатора используется весь порт, то не проще было выводить в порт байт?
Да и архив от мусора почистить не мешало бы...

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 15:06:06

Конечно проще, и быстрее, и меньше памяти жрет...В оригинале для себя, в порт писал значение.Сделал так для наглядности.Думаю надо вернуть прежний нормальный вид, а в комментариях дописать уже А=1,В=1 и т.д. Спасибо, за поправку так и сделаю)
А какие соображения по поводу отказа компилятора читать ADRESL?Эмулятор(SIM) в МPLAB IDE 8.92 нормально все показывает.

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 15:44:52

EclipsV писал(а):так для наглядности.
:facepalm:
EclipsV писал(а):А какие соображения по поводу отказа компилятора читать ADRESL?
Нет такого отказа.

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт янв 20, 2017 18:44:20

Удобнее наверное видеть сразу и напряжение и ток,
и не гадать что там вдруг появилось и мигает на дисплее.

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Вс янв 22, 2017 14:46:11

EclipsV писал(а):Подскажите почему ADRESL не могу считать, в программе все нормально. Дизассемблирование проверял, два раза считывается ADRESH?

Скорее всего вы не заметили переключение банков.
Старший и младший регистры АЦП прописаны в параллельных адресах, но в разных банках.

Re: Вольтметр-Амперметр на pic16f819 + seg_7x4digits

Пт мар 31, 2017 03:35:35

Поправил проект, была ошибка в выводе на дисплей информации.Изменил считывание из АЦП, только старшие 8 бит. Простым усреднением увеличил до 11 бит. Частоту среза изменил fвд около 1,5 Гц.
Вложения
Volt_zar_ver.2.rar
(119.92 KiB) Скачиваний: 358
Ответить