Вольтметр на PIC микроконтроллере « схемопедия
Этот вольтметр собран на микроконтроллере PIC16F688. Диапазон измерения от 0 до 20 вольт, его можно расширить или наоборот уменьшить в зависимости от потребностей. На один из восьми аналоговых каналов микроконтроллера, поступает измеряемое напряжение, далее оно преобразуется в 10-ти битный сигнал внутренним АЦП. Измеренное напряжение отображается на символьном ЖК дисплее HD44780.
Микроконтроллер питать 20-тью вольтами нельзя так как он выйдет из строя, нам нужен будет делитель напряжения (он приведен ниже). С помощью резисторов R1 и R2 напряжение понижается до 5 вольт. Если же напряжение в 20 вольт будет превышено то на выходе делителя будет больше 5 вольт и тогда микроконтроллер может сгореть. При подключении стабилитрона на 5.1вольт, выходное напряжение не может быть больше 5.1 вольта, это позволит защитить микроконтроллер от всевозможных скачков входного напряжения. Напряжение, снимаемое с точки Va надо подключить к 11 ножке микроконтроллера.
ЖК дисплей работает в 4–х битном режиме. Регулировка контрастности осуществляется переменным резистором на 5 кОм между +5 вольтами и землей. Схема собрана на макетной плате,также надо иметь регулируемый источник питания +5вольт. Например на LM7805.
Программное обеспечение
Перед написанием прошивки я провел некоторые математические вычисления. Любое приложение использующее АЦП требует стабилизированного опорного питания. В этом проекте, опорного напряжения для работы АЦП выбирается Vdd (=+5 V). Резисторы R1 = 1267 Ω и R2 = 3890 Ω.
0 – 5 аналоговых I / P отображается в одном из 1024 уровней (0-1023 цифровой графы)
=> Разрешение = 5/1024 = 0,0049 V / граф
Кроме того, Va = 1267 * Vin / (1267 +3890) = 0,2457 * Vin
=> I / P напряжение = 4,07 * Va = 4,07 * Цифровая графа * 0,0049
= 0,01994 * Цифровая графа
= 0,02 * Цифровая графа(прибл.)
Чтобы избежать плавающей точкой, надо использовать I / P напряжение = 2 * Цифровая графа.
Как это работает?
Предположим, Vin = 4,6 В. Тогда,
Va = 0,2457 * Vin = 1.13V
=> Цифровые графы = 1.13/0.0049 = 231
=> Расчетные I / P напряжение = 2 * 231 = 0462
Измеренное напряжение будет 04,62 V. Будут отображаться только первые три цифры (04,6 В).
Прошивка разработана в С и скомпилирована с MikroC Pro для PIC, компилятор Микроэлектроника. Микроконтроллер PIC16F688 использует внутренний тактовый генератор на 4,0 МГц. MCLR включен и таймер включения питания. Вам нужно определить RA2/AN2 вход, аналоговый, установив соответствующий бит в ANSEL регистре. ADCON0 = 8 соединяет AN2 входной канал для внутренней выборки-хранения цепи. порты А и С компараторы, контакты должны быть тоже отключены (присвоение CMCON0 = 7). Биты конфигурации для предохранителей приведены ниже. Вы можете установить их в MikroC через Project-> Project Edit.
Oscillator -> Внутренний RC, не часы
Watchdog Timer -> выключено
Power Up Timer -> С
Master Clear Enable -> включено
Code Protect -> выключено
Data EE Read Protect -> выключено
Brown Out Detect -> BOD Enabled, SBOREN включено
Internal External Switch Over Mode -> включено
Monitor Clock Fail-Safe -> включено
Полная программа, написанная на MikroC приведена в архиве ниже
Проверка цифрового вольтметра
Переменный источник питания
Скачать исходник и прошивку
Оригинал статьи на английском языке (перевод:
Все своими руками Самодельный вольтметр и амперметр на PIC16F676
Опубликовал admin | Дата 16 апреля, 2016Прошлым летом по просьбе знакомого разработал схему цифрового вольтметра и амперметра. В соответствии с просьбой данный измерительный прибор должен быть экономичный. Поэтому в качестве индикаторов для вывода информации был выбран однострочный жидкокристаллический дисплей. Вообще этот ампервольтметр предназначался для контроля разрядки автомобильного аккумулятора. А разряжался аккумулятор на двигатель небольшого водяного насоса. Насос качал воду через фильтр и опять возвращал ее по камушкам в небольшой прудик на даче.
Вообще в подробности этой причуды я не вникал. Не так давно этот вольтметр опять попал ко мне у руки для доработки программы. Все работает как положено, но есть еще одна просьба, чтобы установить светодиод индикации работы микроконтроллера. Дело в том, что однажды, из-за дефекта печатной платы, пропало питание микроконтроллера, естественно функционировать он перестал, а так как ЖК-дисплей имеет свой контроллер, то данные, загруженные в него ранее, напряжение на аккумуляторной батарее и ток, потребляемый насосом, так и остались на экране индикатора. Ранее я не задумывался о таком неприятном инциденте, теперь надо будет это дело учитывать в программе устройств и их схемах. А то будешь любоваться красивыми циферками на экране дисплея, а на самом деле все уже давно сгорело. В общем, батарея разрядилась полностью, что для знакомого, как он сказал, тогда было очень плохо.
Основой схемы являются микроконтроллер PIC16F676 и индикатор ЖКИ. Так, как все это работает исключительно в теплое время года, то индикатор и контроллер можно приобрести самые дешевые. Операционный усилитель выбран тоже соответствующий – LM358N, дешевый и имеющий диапазон рабочих температур от 0 до +70.
Для преобразования аналоговых величин (оцифровки) напряжения и тока выбрано стабилизированное напряжение питания микроконтроллера величиной +5В. А это значит, что при десятиразрядной оцифровке аналогового сигнала каждому разряду будет соответствовать – 5В = 5000 мВ = 5000/1024 = 4,8828125 мВ. Эта величина в программе умножается на 2, и получаем — 9,765625мВ на один разряд двоичного кода. А нам надо для корректного вывода информации на экран ЖКИ, чтобы один разряд был равен 10 мВ или 0,01 В. Поэтому в схеме предусмотрены масштабирующие цепи. Для напряжения, это регулируемый делитель, состоящий из резисторов R5 и R7. Для коррекции показаний величины тока служит масштабирующий усилитель, собранный на одном из операционных усилителей микросхемы DA1 – DA1.2. Регулировка коэффициента передачи этого усилителя осуществляется с помощью резистора R3 величиной 33к. Лучше, если оба подстроечных резистора будут многооборотными. Таким образом, при использование для оцифровки напряжения величиной ровно +5 В, прямое подключение сигналов на входы микроконтроллера запрещено. Оставшийся ОУ, включенный между R5 и R7 и входом RA1, микросхемы DD1, является повторителем. Служит для уменьшения влияния на оцифровку шумов и импульсных помех, за счет стопроцентной, отрицательной, частотно независимой обратной связи. Для уменьшения шумов и помех при преобразовании величины тока, служит П образный фильтр, состоящий из С1,С2 и R4. В большинстве случаев С2 можно не устанавливать.
В качестве датчика тока, резистор R2, используется отечественный заводской шунт на 20А – 75ШСУ3-20-0,5. При токе, протекающем через шунт в 20А, на нем упадет напряжение величиной 0,075 В (по паспорту на шунт). Значит, для того, чтобы на входе контроллера было два вольта, коэффициент усиления усилителя должен быть примерно 2В/0,075 = 26. Примерно — это потому, что у нас дискретность оцифровки не 0,01 В, а 0,09765625 В. Конечно, можно применить и самодельные шунты, откорректировав коэффициент усиления усилителя DA1.2. Коэффициент усиления данного усилителя равен отношению величин резисторов R1 и R3, Кус = R3/R1.
Скачать “Вольтметр и амперметр на PIC16F676” Voltmetr-i-ampermetr-PIC16F676.rar – Загружено 3055 раз – 143 КБ
.
Один из вариантов готового устройства, реализованного Алексеем. К сожалению фамилии не знаю. Спасибо ему за работу и фото.
Обсудить эту статью на — форуме «Радиоэлектроника, вопросы и ответы».
Просмотров:14 169
Вольтметр на PIC16F676
Вольтметр на PIC16F676 – статья, в которой расскажу о самостоятельной сборке цифрового вольтметра постоянного тока с пределом 0-50В. В статье приводится схема вольтметра на PIC16F676, а также печатная плата и прошивка. Вольтметр использовал для организации индикации в лабораторном блоке питания.
Технические характеристики вольтметра:
- Дискретность отображения результата измерения 0,1В;
- Погрешность 0,1…0,2В;
- Напряжение питание вольтметра 7…20В.
- Средний ток потребления 20мА
За основу конструкции взята схема автора Н.Заец из статьи «Миливольтметр». Сам автор очень щедрый и охотно делится своими разработками, как техническими, так и программными. Однако одним из существенных недостатков его конструкций (на мой взгляд) является морально-устаревшая элементная база. Использование которой, в нынешнее время, не совсем разумно.
Далее в статье я расскажу, как переделать вольтметр автора под современную элементную базу. Правки будут внесены и в рабочую программу.
На рисунке 1 показана принципиальная схема авторский вариант.
Рисунок 1 – Авторский вариант схемы.
Бегло пробегусь по основным узлам схемы. Микросхема DA1 – регулируемый стабилизатор напряжения, выходное напряжение которого регулируется подстроенным резистором R4. Такое решение не очень хорошее, так как для нормальной работы вольтметра необходим отдельный источник постоянного тока напряжением 8В. И это напряжение должно быть неизменным. Если входное напряжение будет меняться, то и выходное напряжение будет изменяться, а это не допустимо. В моей практике такое изменение привело к перегоранию PIC16F676 — микроконтроллера.
Резисторы R5-R6 – это делитель входного (измеряемого) напряжения. DD1 — микроконтроллер, HG1-HG3 – три отдельных семисегментных индикатора, которые собраны в одну информационную шину. Применение отдельных семисегментных индикаторов сильно усложняют печатную плату. Такое решение тоже не очень хорошее. Да и потребление у АЛС324А приличное.
На рисунке 2 показана переделанная принципиальная схема цифрового вольтметра.
Рисунок 2 – Схема принципиальная вольтметра постоянного тока.
Теперь рассмотрим, какие изменения были внесены в схему.
Вместо регулируемого интегрального стабилизатора КР142ЕН12А было принято решение использовать интегральный стабилизатор LM7805 с постоянным выходным напряжением +5В. Тем самым удалось надежно стабилизировать рабочее напряжение микроконтроллера. Еще один плюс такого решение — это возможность применения входного (измеряемого) напряжения для питания схемы. Если, конечно, это напряжение больше 6В, но меньше 30В. Чтобы подключиться к входному напряжению, достаточно только замкнуть перемычку(jamper). Если сам стабилизатор сильно греется, его необходимо установить на радиатор.
Для защиты входа АЦП от перенапряжения в схему был добавлен стабилитрон VD1.
Резистор R4 совместно с конденсатором С3 — рекомендованы производителем, для надежного сброса микроконтроллера.
Резистор R3 был введен в схему, для надежной защиты от паразитных помех.
Вместо трех отдельных семисегментных индикаторов был применен один общий.
Для разгрузки отдельных ножек микроконтроллера были добавлены три транзистора.
В таблице 1 можно ознакомиться со всем перечнем деталей и возможной их заменой на аналог.
Позиционное обозначение | Наименование | Аналог/замена |
С1 | Конденсатор электролитический — 470мкФх35В | |
С2 | Конденсатор электролитический — 1000мкФх10В | |
С3 | Конденсатор электролитический — 10мкФх25В | |
С4 | Конденсатор керамический — 0,1мкФх50В | |
DA1 | Интегральный стабилизатор L7805 | |
DD1 | Микроконтроллер PIC16F676 | |
HG1 | 7-ми сегментный LED индикатор KEM-5631-ASR (OK) | Любой другой маломощный для динамической индикации и подходящий по подключению. |
R1* | Резистор 0,125Вт 91 кОм | SMD типоразмер 0805 |
R2* | Резистор 0,125Вт 4,7 кОм | SMD типоразмер 0805 |
R3 | Резистор 0,125Вт 5,1 Ом | SMD типоразмер 0805 |
R4 | Резистор 0,125Вт 10 кОм | SMD типоразмер 0805 |
R5-R12 | Резистор 0,125Вт 330 Ом | SMD типоразмер 0805 |
R13-R15 | Резистор 0,125Вт 4,3 кОм | SMD типоразмер 0805 |
VD1 | Стабилитрон BZV85C5V1 | 1N4733 |
VT1-VT3 | Транзистор BC546B | КТ3102 |
XP1-XP2 | Штыревой разъем на плату | |
XT1 | Клеммник на 4 контакта. |
Печатная плата вольтметра постоянного тока разрабатывалась с учетом воздействия возможных паразитных помех. На рисунке 3 показана печатная плата сторона проводников (плата на рисунке не в масштабе).
Рисунок 3 – Плата печатная вольтметра на PIC16F676 (сторона проводников).
На рисунке 4 – печатная плата сторона размещения деталей.
Рисунок 4 –Плата печатная сторона размещения деталей (плата на рисунке не в масштабе).
Что касается прошивки, то изменения были внесены не существенные:
- Добавлено отключение незначащего разряда;
- Увеличено время выдачи результата на семисегментный LED индикатор.
Вольтметр, собранный из заведомо рабочих деталей, начинает работать сразу же и в наладке не нуждается. В отдельных случаях возникает необходимость подстроить точность измерения подбором резисторов R1 и R2.
Внешний вид вольтметра показан на рисунках 5-6.
Рисунок 5 – Внешний вид вольтметра.
Рисунок 6 – Внешний вид вольтметра.
Вольтметр, рассматриваемый в статье успешно прошел испытания в домашних условиях, проверялся в автомобиле с питанием от бортовой сети. Сбоев не было. Может отлично подойти для длительного использования.
Интересное видео
Подведу итоги. После всех изменений получился совсем не плохой цифровой вольтметр постоянного тока на микроконтроллере PIC16F676, с пределом измерения 0-50В. Всем кто будет повторять данный вольтметр, желаю исправных компонентов и удачи в изготовлении!
Повторили изобретение? Присылайте фото на media собака pichobby.lg.ua.
Файлы к статье:
Вольтметр на PIC16F676(статья)
Архив с проектом
Фотографии вольтметра
ВОЛЬТМЕТР ЦИФРОВОЙ
Не каждый автомобиль обладает хорошим и многофункциональным бортовым компьютером, способным точно измерить и вывести на экран показания напряжения автоаккумулятора, поэтому некоторые авторадиолюбители снабжают панель простыми вольтметрами на светодиодах (разряжен-норма), которые не обеспечивают должной точности, и являются, по сути, простыми контрольками, а не вольтметрами. Здесь же описывается, как сделать качественный цифровой вольтметр с помощью PIC микроконтроллера. А на основе символьного ЖК-дисплея HD44780 будет проводиться отображение измеряемого напряжения АКБ. Конечно, кроме авто, эта схема пойдёт и в обычный регулируемый блок питания.
Схема цифрового вольтметра на PIC16F688
Микроконтроллер, используемый в этом проекте — PIC16F688. Он имеет 12 I/O выводов, 8 из которых можгут служить в качестве входных аналоговых каналов встроенного 10-разрядного АЦП. И измеряемое напряжение подается на один из 8 аналоговых каналов. Для упрощения схемы, опорным напряжением для аналого-цифрового преобразования выбирается напряжение питания Vdd (+5 V). Резистор делителя используется на входе, чтобы сопоставить диапазон входного напряжения для АЦП с диапазоном входного напряжения (0-5 В). Испытания продемонстрировали отличную работу при входном напряжении в диапазоне от 0-20 В, но оно может быть увеличено и далее при правильном подборе резисторов.
Так как PIC порт не может принять более 20 В, входное напряжение уменьшается с помощью простого резистивного делителя. Резисторы R1 и R2 уменьшают напряжение в диапазоне от 0-20 В. Стабилитрон, подключенный параллельно между портом AN2 и землей обеспечивает защиту PIC в случае, если входное напряжение случайно выходит за рамки 20 В. ЖК-дисплей подключен в 4-х битном режиме. Опытный образец вольтметра построенный на макетке, показан ниже, а прошивка контроллера находится здесь.
Вы можете получить питающее напряжение +5V используя линейный стабилизатор на LM7805. Напряжение не должно колебаться, так что обычный китайский адаптер с выпрямителем не пойдёт. Точность показаний вольтметра зависит от точности резисторов на входе и стабильности опорного напряжения Vdd +5V. При измерении R1 и R2 их значения были 1267 и 3890 Ом соответственно.
Originally posted 2018-10-15 10:41:20. Republished by Blog Post Promoter
Термометр+вольтметр с системой предупреждений для АВТО
Устройство создавалось для использования в автомобиле и предназначено для измерения и отображения напряжения бортовой сети и температуры, при чем это может быть как температура охлаждающей жидкости авто, так и внешней среды (то что вокруг авто). Точность измерения 0,1 градус и это конечно условно, потому, что даже такая точность нам не нужна в этих условиях.В устройстве есть система предупреждений: О выходе за пределы рабочих напряжений, о перегреве, о гололеде (при переходе через ноль температуры). Устройство собрано на МК PIC16F676 и ЖК индикаторе WH0802.
Контроль пределов напряжения сопровождается звуковым сигналом и индикацией на 3 секунды предупреждающего сообщения. Низкое напряжение установлено — менее 9 вольт, высокое — более 16В. Предупреждение однократное, т.е. устройство не будет постоянно пищать. Температура имеет предупреждение при температуре 100 Градусов (конечно по Цельсию) и выше — перегрев. И предупреждение о гололеде — переход через 0.
Ну и последнее, джампер JMP1 управляет выбором языка сообщений. Если снят — английский, установлен — русский.
Масса датчика должна приходить строго к плате и нигде больше не контактировать с общим проводом автомобиля. При прошивке микроконтроллера нужно обязательно сохранить заводскую калибровочную константу!
Реклама10 пар 5 мм ИК светодиодов и ИК-приемников
Реклама2 шт., динамик, 3 Вт, 4 Ом, диаметр 40 мм Отзывы: ***Заменил старые, звук норм.***
Подстроечным резистором нужно установить правильные показания вольтметра сравнивая их с показаниями мультиметра.
Прошивка, печатная плата
Источник
Есть конечно такое дело, как лень и тут наши Китайские друзья в помощь:
Вариант в прикуриватель:
Вариант в панель:
Простой цифровой вольтметр ch-c3200 — Схемы на МК — Микроконтроллеры — Каталог схем
В этой статье рассмотрен пример создания простого вольтметра постоянного тока на печатной платы ch-c0030pcb. Дан краткий принцип построения цифровых вольтметров, описание схемы, прошивки контроллеров, а также программа на ассемблере с комментариями. Большой популярностью пользуются цифровые вольтметры среди автолюбителей для контроля напряжения бортовой сети автомобиля. Поэтому рассматриваемая конструкция, ориентирована на возможность питания от бортовой сети автомобиля (12-24 вольта) и для индикации и контроля питающего напряжения.
Для реализации этого проекта нам потребуется PIC-контроллер с аналого-цифровым преобразователем (АЦП). По монтажному месту нам подойдут из серии PIC16 — PIC16F819 или PIC16F88.
Схема вольтметра.
Позиционное обозначение элементов сохранено согласно монтажной
схемы платы. Питание подается на контакты 1,2 соединителя, контакты 3,4
используются для подключения индикатора или исполнительного устройства.
Подается контролируемое напряжение на контакт 9. Контролируемое
напряжение не должно превышать 100 вольт.Измерение напряжения. Для
измерения напряжения будем использовать вход AN0. При помощи перемычек
R20 и R18 сконфигурируем входную цепь. В качестве делителя входного
напряжения будем использовать резисторы R1 и R2. Соотношение 20/1
позволит нам измерять постоянные напряжения до 100 вольт. В качестве
опорного напряжения будем использовать напряжение стабилизатора питания
контроллера.
В выбранных нами контроллерах встроен десяти разрядный АЦП, это значит, что выбранный нами диапазон опорного напряжения 5.0 вольт он «разделит» на 1024 значения. Т.е. если на вход контроллера AN0 подавать напряжение от 0 до 5 вольт, то с регистров АЦП ADRESH и ADRESL сможем сосчитать значение от 0 до 1023.
Значит, в нашем случае весовое значение одного разряда АЦП составит 5/1024 =0,0048828125 вольта.
Для вычисления напряжения необходимо полученное значение АЦП умножать на0,0048828125.
Например, при измерении мы получили значение 359. Для вычисления напряжения нам необходимо 359*0,0048828125 = 1,7529296875. Или округленно 1,8 вольта.
Но как нам измерять напряжения выше 5 вольт? Для этого и используется входной делитель на резисторах R1 и R2. Выберем R2=10 кОм, почему 10, потому если входные цепи АЦП требуют, что бы источник имел сопротивление не ниже 10 кОм. А в целях уменьшения входного тока, возьмём максимальное значение. R1 выберем равное = 200 кОм для обеспечения необходимого диапазона входного напряжения.
Коэффициент деления 200/10=20. Это значит, что напряжение, поступающее на вход делителя, будет уменьшено на его выходе в 20 раз. При максимальном входном напряжении на входе контроллера 5 вольт мы сможем измерять напряжения 5*20=100 вольт,(или для нашего случая 99,9 вольта). Такой диапазон достаточен для многих устройств, включая и автомобильную технику.
И так если мы выбрали для индикации минимального значения 0,1 вольт, то диапазон индицируемых значений составит от 0,1 до 99,9 вольт.
Для измерения переменного напряжения необходимо на вход добавить выпрямительный диод и изменить входной делитель, но в этой публикации создание вольтметра переменного тока рассматриваться не будет.
Программа.
Для работы контролера, необходимо программа, которая будет выполнять все наши требования по работе устройства. Программа написана на ассемблере с применение среды MPLAB IDE v8.83.
Наша программа кроме измерения напряжения и вывода его значения на индикатор будет выполнять и необходимые функции по контролю напряжения. Так как параметры по контролю напряжения необходимо задавать во время эксплуатации устройства, то добавим к нашему устройству кнопки управления. Кнопки управления подключаются к порту B микроконтроллера и используются для ввода параметров работы и калибровочных констант. Для сохранения параметров в отключенном состоянии используется EEPROM контроллера. Запоминание происходить при выходе из режима настройки.
Выбор PIC-контроллера.
Прошивка и текст на ассемблере выполнены для контроллера PIC16F88, но с незначительными изменениями в программе можно приметить и PIC16F819. Для этого в тексте программы есть пометки позволяющие переключиться с одного процессора на другой.
Сборочный чертеж верхняя сторона платы.
Сборочный чертеж нижняя сторона.
Программирование контроллера.
Программирование PIC контроллера можно выполнить непосредственно в плате, для этого можно использовать любой программатор позволяющий выполнять внутрисхемное программирование.
Для этого применяется соединитель CON1 (отверстие в плате).
От того как правильно будет выполнена калибровка зависит точность паказаний нашего вольтметра. Для этого необходимо выполнить три правила:
1. Калибруют по максимальному значению измеряемого диапазона.
Что
это значит? Если вы планируете измерять диапазон напряжений например,
от 0 до 30 вольт, то необходимо выставить 30 вольт и по этому уровню
калибровать вольтметр.
2. Калибровать надо по прибору более высокого класса.
Если
вы желаете получить точность +/- 0,1 вольта выставить с точностью до
сотых — 30,00. Реально это сделать из того что есть под руками сложно,
поэтому надо попытаться установить максимально точно.
3. Подгонять показания надо как можно точнее выбирать точку смены индикации.
Вольтметр и амперметр повышенной точности — Eddy site
Затеял я навести порядок на рабочем столе и радикально упрятать в корпус привода для чтения CD-ROM лабораторный блок питания, блок питания паяльника TS-100, USB-хаб и USB-зарядку. Но в последний момент возникла трудность — китайский вольтметр с амперметром не влезли по ширине передней панели привода. Решил я сделать свой, снова на PIC16F690, схему которого я давно публиковал на моём старом сайте. Но под руку попали сдвоенные 7-сегментные индикаторы, которые замечательно вписались по ширине корпуса 30мм. Пришлось ставить четырехразрядные индикаторы и переписывать программу контроллера для более точного расчета напряжения и тока…
Как выяснилось уже в процессе эксплуатации нового измерителя, повышенное разрешение приборов очень удобно при диагностике ремонтируемых устройств или отладке новых. Реже приходится пользоваться тестером для замера тока потребления.
Схема нового вольтметра и амперметра для лабораторного блока питания мало отличается от схемы старого. Но софт переписал с нуля и радикально. Главное отличие в схеме амперметра применен шунт не 0,1 Ом, а 0,01. Это очень уменьшило падение напряжения на нём, но повысило требования к преобразователю тока в напряжение. Так как в качестве усилителя я применил «народный» LM358, пришлось для компенсации напряжения смещения вводить программную коррекцию. При первом включении прибора (обязательно без нагрузки) он измеряет падение напряжения на шунте и смещение ОУ и принимает этот уровень за ноль и сохраняет значение в энергонезависимую память. Далее все измерения производятся относительно запомненного уровня.
Если по какой-то причине Вы захотите произвести снова калибровку нуля, сделать это можно подав питание на плату с нажатой кнопкой калибровки. Прибор сотрет старое значение. Следующее включение амперметра приведет к измерению и сохранению напряжения условного нуля отсчета.
Резистор, подключенный к выводу 4 микроконтроллера, определяет тип используемого экрана — с общим анодом или общим катодом.
Плата рассчитана на индикатор высотой знака 0,36″.
Мой неудачный первый опыт сборки прибора показал, что зелёные индикаторы почему-то светят весьма слабо. Видимо потому, что яркость слабого свечения зеленых индикаторов делится во времени не на три, а на восемь разрядов двух индикаторов.
В архиве три платы (индикатор и два варианта процессорной платы для контроллеров в корпусах SSOP и SOIC), схема и прошивка прибора.
Если у Вас возникнут вопросы или Вы захотите связаться со мной, сделайте это с помощью формы на страничке «Обратная связь»
Схема и проект цифрового вольтметрас использованием микроконтроллера PIC
В этой статье мы представили новый проект микроконтроллера PIC. Наш автор Митхун создал схему цифрового вольтметра с использованием PIC16F73A и мультиплексированных 7-сегментных дисплеев. Схема хорошо объяснена схемами, а исходный код (написанный на языке Embedded C) доступен для загрузки. Если у вас возникнут сомнения при реализации этого проекта, не стесняйтесь спрашивать в комментариях.
Примечание: — Вы также можете прочитать наш цифровой вольтметр , используя 8051 , созданный ранее.В этой схеме мы создали вольтметр с использованием AT89S51. Кроме того, вы узнаете о подключении 7-сегментных дисплеев и АЦП к микроконтроллеру 8051.
Как работает мультиплексированный семисегментный дисплей ?
Прежде всего, нам нужно понять, как работает мультиплексированный 7-сегментный дисплей. Когда 4-сегментные дисплеи подключены как один сегмент, шина данных всех сегментов идет параллельно, и разрешающий контакт различен для всех сегментов. Таким образом, мы контролируем отдельные сегменты.Давайте посмотрим на изображение ниже:
Здесь данные отправляются по линиям «a, b, c, d, e, f, g», а «s1, s2, s3, s4» — это разрешающие линии. Когда данные отправляются через шину данных и на s1 устанавливается высокий уровень, данные отображаются в первом сегменте. Точно так же, когда s2 становится высоким, данные будут отображаться во втором сегменте. Так работает мультиплексированный семисегментный дисплей. Но теперь вопрос в том, как мы можем отображать разные данные в этих 4 сегментах одновременно? Помните, человеческий глаз не может найти разницу в пределах 10 мс.Надеюсь, вы уже знаете о постоянстве зрения . Если мы сможем изменить данные с помощью соответствующих разрешающих контактов всех этих 4 сегментов в течение 10 мс, наши глаза увидят набор из 4 цифр в этом сегменте. Другими словами, мы сделаем следующее в течение 10 мс, чтобы отобразить 1234. Подайте на шину данных значение 1 и установите S1 в высокий уровень. Подайте шину данных с помощью 2, установите низкий уровень S1 и высокий уровень S2. Подайте на шину данных 3, установите S2 в низкий уровень и установите S3 в высокий уровень. Подайте шину данных с помощью 4, установите S3 в низкий уровень и установите S4 в высокий уровень. Все это должно происходить за 10 мс.Наконец, процесс повторяется, чтобы дисплей оставался стабильным.
Давайте сделаем программу:
Прежде всего, нам нужно написать коды для правильной синхронизации, чтобы мы могли отправлять разные данные в разное время, сохраняя высокий уровень на соответствующем выводе включения сегмента. Итак, нам нужно использовать прерывание по таймеру.
Настройка прерывания по таймеру приведена ниже.
Перейдем к оставшейся части программы. Следующий шаг программы — инициализация порта. Вы можете инициализировать порты с помощью следующего сегмента кода.
Следующим шагом является установка других начальных значений. Следующий сегмент кода инициализирует все необходимые переменные.
Окончательный набор инициализации для канала АЦП внутри PIC, как указано ниже.
Теперь мы выполнили все шаги инициализации, и их нужно вызывать внутри основной функции void main (). В следующих шагах мы будем создавать другие важные разделы программы, такие как цикл для чтения ввода. Прочтите сегменты кода, указанные внутри цикла while (1).
Вы понимаете, что здесь происходит? В первой строке мы инициализируем канал 0 АЦП для приема входного аналогового сигнала. Вторая строка — принять сигнал, преобразовать его и сохранить в регистре АЦП. Третья строка кода, tlong = (float) adc_rd0 * 1.9607843, на самом деле является преобразованием выходного сигнала АЦП в милливольты. Коэффициент умножения 1,9607843 получается из уравнения (5/255) X100; где 5 = VDD, 255 для 8 бит и 100 для уменьшения дробной ошибки.
В сегменте кода, который вы видите, преобразованное значение в милливольтах сохраняется в переменной «число».Итак, что здесь «число»? Чтобы узнать, что такое «число», нам нужно увидеть, что делает подпрограмма display ().
Анализируя сегмент кода, вы могли понять, что «число» используется для извлечения данных. Итак, «число» — это временная переменная, используемая для хранения данных в подпрограмме отображения. Каждая извлеченная цифра проходит через подпрограмму под названием «маска». Эта подпрограмма «маски» на самом деле является LUT (поисковой таблицей), которая выбирает точный семисегментный шаблон отображения для соответствующей цифры.Подпрограмма «маски» приведена ниже.
Краткое содержание проекта
Я предпочитаю, чтобы вы сейчас подробно рассмотрели принципиальную схему. Микроконтроллер получает аналоговый сигнал через вывод AN0 PIC16F73. Встроенный АЦП PIC16F73 преобразует аналоговый вход в его цифровое значение. К этим цифровым данным применяется дробное преобразование с использованием уравнения, и данные преобразуются в милливольты. Каждая цифра извлекается одна за другой с помощью подпрограммы void display (). Извлеченная цифра сопоставляется, и соответствующий шаблон из семи сегментов выбирается из LUT, записанного внутри подпрограммы маски.Затем данные из LUT передаются на шину данных мультиплексированного 7-сегментного дисплея с использованием контактов 21–28 PIC16F73. Разрешающие контакты подключаются к микроконтроллеру к контактам 11, 12, 13 и 14. Наконец, разные данные отправляются на разные сегментные дисплеи путем попеременного переключения разрешающих контактов в течение 10 мс. Таким образом, наши глаза видят всего 4-значное число. Итак, вот наш полный проект.
Исходный код
Мы предоставили полный исходный код этого проекта, цифрового вольтметра с микроконтроллером PIC для бесплатной загрузки.Вы можете скачать код по ссылке ниже.
Цифровой вольтметр — Проект [Исходный код]
Примечание: — Если у вас есть сомнения по поводу этого проекта, не стесняйтесь задавать свои вопросы в разделе комментариев. Мы будем рады Вам помочь.
Простой цифровой вольтметр — Проекты на базе микроконтроллеров
Простой цифровой вольтметр может быть построен с использованием микроконтроллера PIC и нескольких дискретных компонентов. Для этой цели использовался 10-битный модуль АЦП PIC16F877A, мы будем работать только с 8 старшими битами, чтобы преобразовать входное напряжение в цифровую форму и отправить его на светодиодный дисплей.Аппаратная часть этой конструкции очень похожа на аппаратную часть проекта цифровых часов (требуются минимальные изменения). Для тестирования дисплея был реализован только SW4. SW 3, 2,1 все еще на схеме, но не использовались для DVM.
Аналоговое напряжение подключается к AN1 (вывод 3) через простой делитель напряжения с коэффициентом затухания 1:10. С 8 битами данных максимальное значение после АЦП будет 255 — все биты равны «1». Для отображения результата это число должно быть разделено на отдельные цифры: 100, 10, 1 — это делается путем вычитания 100 из числа результат и увеличение счетчика 100.Затем мы переходим к точкам 10 и 1. Шестнадцатеричные файлы и файлы сборки можно скачать внизу страницы. Единственная необходимая настройка — это для R1. Подайте 5 В постоянного тока на вход делителя напряжения и настройте R1, пока не получите 0,5 В на аналоговом входе (контакт 3). Технические данные LTC3710HR можно найти здесь. Если LTC3710HR недоступен, как в предыдущем проекте, схему можно легко изменить для различных 7-сегментных дисплеев. Просто сопоставьте выходные контакты PIC с каждым сегментом и подключите параллельно все сегменты цифр (убедитесь, что для каждого сегмента требуется менее 25 мА).Я также рекомендовал бы посмотреть на 7-сегментный дисплей с сообщением SPI для соответствующей процедуры мультиплексирования. Диапазон входного напряжения для этой версии составляет 0-25 В постоянного тока. Схема DVM была протестирована с парой 9-вольтовых батареек, и результат кажется многообещающим.
Та же батарея была измерена с помощью UNI-T UT71D, как вы можете видеть, измерения близки. По сравнению с реальным цифровым мультиметром есть небольшое смещение около 0,1 В. Для повышения точности можно использовать более точные резисторы для делителя напряжения, и вместо использования схемы VDD в качестве источника опорного напряжения для аналого-цифрового преобразователя следует использовать более стабильный источник. быть построенным.Файлы Hex и Assembly доступны здесь. Вы также можете быть заинтересованы в более продвинутой версии DVM, доступной здесь.
Цифровые часы, СХЕМА МОДУЛЯ Аннотация: оптический передатчик mitsubishi 40G 300pinmsa OC-768 STM-256 приемник mitsubishi oc768 MSA VSR20003R2 VSR2000-3R2 | Оригинал | AV0-0002D 40KMXA-001xA СТМ-256 ОС-768.MF-40KMXA Цифровые часы МОДУЛЬ-СХЕМА mitsubishi оптический передатчик 40 г 300пинмса OC-768 mitsubishi приемник oc768 MSA VSR20003R2 VSR2000-3R2 | |
300-контактный opnext Аннотация: ИК-передатчик и приемник LVDS MONITOR trv5020 TRV5020CN-S opnext l trv5010 OpNext trv F28-F29 OC192 | Оригинал | TRV5010 / 5020 / 5030CN-xx OC-192 TRV5010CN-xx: OC192 TRV5020CN-xx: TRV5030CN-xx: OC-192 300-контактный 300-контактный opnext МОНИТОР LVDS ИК-передатчик и приемник trv5020 TRV5020CN-S opnext l trv5010 OpNext trv F28-F29 | |
CH520G2 Аннотация: Транзистор CH520G2-30PT цифровой 47к 22к PNP NPN FBPT-523 транзистор npn коммутирующий транзистор 60в CH521G2-30PT R2-47K транзистор цифровой 47k 22k 500ma 100ma Ch4904T1PT | Оригинал | A1100) QFN200 CHDTA143ET1PT FBPT-523 100 мА CHDTA143ZT1PT CHDTA144TT1PT CH520G2 CH520G2-30PT транзистор цифровой 47к 22к ПНП НПН FBPT-523 транзистор npn переключающий транзистор 60 в CH521G2-30PT R2-47K транзистор цифровой 47k 22k 500ma 100ma Ch4904T1PT | |
1995 — XDS510 Аннотация: C2000TM C5000TM TMS320F206 Программное обеспечение DSP TMDS00510PP TMS320TM Processor Guide процессор цифрового видеосигнала | Оригинал | TMS320TM XDS510 XDS510, XDS510PP C5000TM C2000TM Программное обеспечение TMS320F206 DSP TMDS00510PP Руководство по процессору процессор цифровых видеосигналов процессор | |
2012 — бт.656 в CVBS малый размер Аннотация: DVDD3318 DVDD15 видео масштабатор портативный rgb bt.656 в RGB ЖК-дисплей ЖК-телевизор T-con плата 41 контактное имя | Оригинал | ENA2000 LC74900 LC74900 10 бит 24 бит 16 бит A2000-14 / 14 bt.656 в CVBS малого размера DVDD3318 DVDD15 видео масштабатор портативный rgb bt.656 на ЖК-дисплей RGB LCD TV T-con board 41 pin имя | |
DVDD33 Аннотация: абстрактный текст недоступен | Оригинал | ENA2000 LC74900 LC74900 10 бит 24 бит 16 бит A2000-14 / 14 DVDD33 | |
2012 — FTLX8573D3BTL Аннотация: абстрактный текст недоступен | Оригинал | 50 микрон MTP12) MTP24) FTLX8573D3BTL | |
EZ 644 Аннотация: 300-контактный opnext OpNext 10gbase sr opnext l I64.1 / 10GBASE trv501 A0304 I-64.1 2p 2,54 8D910 | Оригинал | TRV5026EZ-xx-x 10 Гбит / с TRV5026EZ-xx-x: OC192 10GbE 10GBASE-L P23-32 Стол 14 TRV5016 / 26BS-xx-x, 53 МГц EZ 644 300-контактный opnext OpNext 10gbase sr opnext l I64.1 / 10GBASE trv501 A0304 I-64.1 2п 2,54 8D910 | |
2013 — герконовое реле Аннотация: абстрактный текст недоступен | Оригинал | продлить3109 ПЛЕКС-13-000440-02 герконовое реле | |
Нет в наличии Аннотация: абстрактный текст недоступен | Оригинал | ENA1885 LC749402PT LC749402PT 24 бит 16 бит 24 бит 18 бит / 24 бит / 24 бит A1885-10 / 10 | |
2008 — датчик компаса 1490 Аннотация: dinsmore 1490 схема компаса dinsmore 1490 датчик компаса 1490 датчик компаса Dinsmore 1490 dinsmore 1490 цифровой датчик компаса датчик компаса компас 1490 магнитный компас ПРОКРУТКА СВЕТОДИОДНЫЙ ДИСПЛЕЙ ЦЕПЬ ЦЕПЬ | Оригинал | AN016502-0608 датчик компаса 1490 схема компаса dinsmore 1490 dinsmore 1490 датчик компаса 1490 датчик компаса Dinsmore 1490 цифровой датчик компаса dinsmore 1490 датчик компаса компас 1490 магнитный компас СХЕМА ПРОКРУТКИ СВЕТОДИОДНОГО ДИСПЛЕЯ | |
2011 — Нет в наличии Аннотация: абстрактный текст недоступен | Оригинал | ENA1948 LC749403BG LC749403BG 15 кадров в секунду 30 кадров в секунду 24 бит 16 бит 18 бит / 24 бит 16 бит / 24 бит A1948-13 / 13 | |
мсм 5562 Аннотация: sc 1091 SC11091 CE530N | OCR сканирование | SC11083 ST3201 ST3200 DSP56001 мсм 5562 sc 1091 SC11091 CE530N | |
ENA2000 Аннотация: DVDD3318 | Оригинал | ENA2000 LC74900 LC74900 10 бит 24 бит 16 бит A2000-14 / 14 ENA2000 DVDD3318 | |
1995 — ЦСП Аннотация: C5000TM DSP TMS320C6416T TMS320VC5509 TMS320LC546A TMS320VC541 TMS320LC545A | Оригинал | TMS320TM TMDSSUB2000 C5000TM DSP DSP TMS320C6416T TMS320VC5509 TMS320LC546A TMS320VC541 TMS320LC545A | |
2010 — FTLX8571D3BNL Аннотация: FTxL2025S1xUS FTGL202xPxxUN VCSEL 40G 40G 300-контактный FWLF-1621 FTLX1471D3BCV 1571 FTLX8511D3 300-контактный | Оригинал | 12RZAAU4MALCB 12DBAAU4MALCB 300-PIN DM200-01-3 / 4 DM80-01-0 50 микрон FTLX8571D3BNL FTxL2025S1xUS FTGL202xPxxUN VCSEL 40G 40G 300-контактный FWLF-1621 FTLX1471D3BCV 1571 FTLX8511D3 300-PIN | |
SNAP-IDC-16 Аннотация: абстрактный текст недоступен | Оригинал | SNAP-IDC-32N 32-канальный SNAP-ODC-32-SNK SNAP-ODC-32-SRC SNAP-ODC-32-SNK SNAP-IDC-16 | |
2003 — лазерный диод stm 64 1550 нм Аннотация: 300pin msa dwdm | Оригинал | CB64-Тип 16-гл.ОС-192 / СТМ-64 300-контактный DS03-014 DS02-145) stm 64 лазерный диод 1550 нм 300pin msa dwdm | |
2003 — таблица истинности демультиплексора Аннотация: 10GBASE-LR GR-63-CORE TxTRACE LW khz приемник мультиплексорный транспондер | Оригинал | TB64LR-Тип 300-контактный 16-гл. 10GBASE-LR 16-канальный 3ae-2002 300-контактный, DS03-013 DS02-233) таблица истинности демультиплексора 10GBASE-LR GR-63-CORE TxTRACE LW khz приемник транспондер мультиплексора | |
2009 — FTLF8524E2 Аннотация: ftlx1412 FTLX1412M3BCL FTGL2025P1TUN FTLF8528P2BCV FTLF1419P1xCL FTLF1323 DFB-LASER dfb Laser FTLF8524 | Оригинал | 300-PIN, FTLF8524E2 ftlx1412 FTLX1412M3BCL FTGL2025P1TUN FTLF8528P2BCV FTLF1419P1xCL FTLF1323 DFB-ЛАЗЕР dfb лазер FTLF8524 | |
Нет в наличии Аннотация: абстрактный текст недоступен | Оригинал | ENA1885 LC749402PT LC749402PT 24 бит 16 бит 24 бит 18 бит / 24 бит / 24 бит A1885-10 / 10 | |
1996 — аналоговый тюнер Аннотация: абстрактный текст недоступен | Оригинал | ||
2002 — 3052a Аннотация: QFP48A | Оригинал | LC89080, 89080Q LC89080 LC89080Q 3025B-DIP42S LC89080] DIP42S 052A-QFP48A LC89080Q] 3052a QFP48A | |
Нет в наличии Аннотация: абстрактный текст недоступен | OCR сканирование | TDA1373H A1373H | |
1996 — TSC5000 Аннотация: DCS1800 PCS1900 PDC1500 TMS320 TMS470 1995 TMS470 | Оригинал | SPRY006 TSC5000 DCS1800 PCS1900 PDC1500 TMS320 TMS470 1995 TMS470 |
Как сделать цифровой вольтметр (0-30) V с использованием микроконтроллера и Mickro C
В этом уроке мы узнаем, как заставить цифровой вольтметр использовать микрокроллер pic.Здесь я использую ЖК-дисплей PIC16F877A и LM16x2. Микроконтроллер PIC16F877A имеет 8-канальный аналоговый вход. В этом проекте я использую аналоговый канал 0 для аналого-цифрового преобразования. Вы можете посмотреть видео или прочитать письменное руководство ниже.
Вольтметр — это электронное устройство, которое измеряет напряжение между двумя выводами.
Микроконтроллер PIC16F877A имеет 8-канальный модуль АЦП (аналого-цифровой преобразователь). Модуль АЦП имеет программно выбираемый опорный вход высокого и низкого напряжения для некоторой комбинации VDD, VSS, RA2 и RA3.Модуль АЦП принимает аналоговый сигнал и преобразует 10-битные двоичные числа. Он может измерять (0-5) В постоянного тока
PIC16F877A может измерять от 0 до 5 В. При измерении высокого напряжения нам понадобится схема делителя напряжения. В этом проекте мы измеряем напряжение от 0 до 30 В.
Схема делителя напряжения
- Прежде всего позвольте мне обсудить, как мы измеряем напряжение? На самом деле АЦП PIC может измерять от 0 В до + 5 В , но здесь наш диапазон напряжений составляет от 0 В до + 30 В .
- Следовательно, мы не можем подавать входное напряжение напрямую на контакты АЦП контроллера. Вместо прямого питания входное напряжение снижается за счет комбинации резисторов делителя напряжения .
Максимально допустимое падение будет 5В
Схема делителя напряжения
5 = Vin (макс.) * R2 / (R1 + R2)
Здесь
Vin (макс.) = 30 В; и предположим, что R2 = 22k;
5 = 30 * 22 К (R1 + R2)
R1 + R2 = (30 * 22 КБ) / 5
= 132000
= 132 К
R1 = 132 К — R2 = 132 К — 22 К = 110 КФактическое вычисление входного напряжения от цепи делителя напряжения.
PIC Микроконтроллер считывает напряжение на резисторе 22 кОм. Итак, рассчитайте напряжение на резисторе 22 кОм по правилу делителя напряжения.
предполагаем падение напряжения V22 на резисторе 22 кОм.
V22 = (Vin / (110K + 22K)) * 22K
V22 = (Vin / (132K) * 22K)
Этот V22 читается в модуль АЦП микроконтроллера
Следовательно,
Фактический вход
Vin = (V22 * 132 ) / 22K
Vin = V22 * 6
Схема схем цифрового вольтметра
схема цифрового вольтметра |
Сопоставление значений АЦП с входным напряжением
- АЦП микроконтроллера
- PIC — это 10-битный АЦП , это означает, что выходной сигнал АЦП может варьироваться от 0 до 1023 максимум, а входной сигнал — от 0 до 5 В .-3 = 4,89 м
Фактическое значение = значение АЦП * 4,89 м * 6
Например, допустим, значение АЦП 1023
.Фактическое = 1023 * 4,89 м * 6
= 30,014 В.
Код Mikro C для цифрового вольтметра
Нажмите кнопку загрузки, чтобы увидеть исходный код:
Цифровой вольтметр— Часть 18 Основы микроконтроллера…
#include «p10f200.inc»
i EQU 10; переменная задержки
j EQU 11; переменная задержка
bit_count EQU 12; Счетчик обработанных битов
tw_data EQU 13; Данные для приема / передачи через TWI
порт EQU 14; вспомогательный регистр для реализации 1-Wire и TWI
ack EQU 15; Подтверждение получено от устройства TWI
цифр EQU 16; цифра для декодирования на дисплее
num_l EQU 17; Младший байт числа
num_m EQU 18; Средний байт числа
num_h EQU 19; Старший байт числа
dio EQU GP0; вывод DIO дисплея
clk EQU GP1; вывод CLK дисплея
RC EQU GP2; RC-цепь
comp EQU GP3; выход компаратора
#define CALIBRATION; Режим калибровки
; #undefine CALIBRATION; Раскомментировать для нормального режима
__CONFIG _WDT_OFF & _CP_OFF & _MCLRE_OFF
ORG 0x0000
INIT
MOVLW ~ ((1 << T0CS) | (1 << PSA)); включить GPIO2
OPTION; и установите предварительный делитель таймера на 256
MOVLW (1 << dio) | (1 << clk) | (1 << comp)
Порт MOVWF; используется для переключения направления контактов DIO / CLK
TRIS GPIO; установите clk, dio и comp в качестве входов
CLRF GPIO; Очистите GPIO, чтобы установить для всех контактов значение 0
LOOP; Основной цикл программы
MOVLW (1 << rc); Установите высокий уровень на выводе rc для зарядки конденсатора
MOVWF GPIO
MOVLW D’255 ‘; Задержка на 200 мс, чтобы убедиться, что он заряжен
ЗАДЕРЖКА ЗВОНКА
CLRF GPIO; Очистите GPIO, чтобы установить низкий уровень «rc» и начать разрядку
CLRF TMR0; Сброс таймера
WAIT_FOR_COMPARATOR; И начать ждать, пока компаратор установит низкий уровень
MOVLW 0xFF; Проверить, становится ли значение таймера 255
XORWF TMR0, Вт
СТАТУС BTFSC, Z
GOTO CHECK_RESULT; и выйти из цикла ожидания в этом случае
BTFSC GPIO, comp; в противном случае проверьте выход компаратора
GOTO WAIT_FOR_COMPARATOR; Если по-прежнему 1, вернуться к ожидающему
CHECK_RESULT; Проверить значение таймера
MOVF TMR0, W; Скопируйте значение TMR0
MOVWF num_l; в ‘num_l’
#ifndef КАЛИБРОВКА; В нормальном режиме
CALL DECODE_VOLTAGE; напряжение декодирования
MOVWF num_l; И скопируйте значение регистра W в ‘num_l’
#endif
CALL SPLIT_NUM; Затем разделите num_l на цифры
; Отправьте первую команду на светодиодный дисплей
CALL TW_START; Выдача Условие запуска
MOVLW 0x40; Отправить команду 0x40 —
CALL TW_WRITE_BYTE; «Записать данные в регистр отображения»
CALL TW_STOP; ошибка Состояние остановки
; Отправить вторую команду и данные на светодиодный дисплей
CALL TW_START; Выдача Условие запуска
MOVLW 0xC0; Отправить адрес 0xC0 —
CALL TW_WRITE_BYTE; Первый адрес дисплея
#ifdef КАЛИБРОВКА; В режиме калибровки
MOVLW 0; Пустую первую цифру
#else; В обычном режиме
MOVF num_m, W; отобразить значение ‘num_m’
CALL DECODE_DIGIT; Получить данные отображения
#endif
CALL TW_WRITE_BYTE; Записать первую цифру на дисплей
#ifdef КАЛИБРОВКА; В режиме калибровки
MOVF num_h, W; Показать значение ‘num_h’
#else; В обычном режиме
MOVF num_l, W; Показать значение ‘num_l’
#endif
CALL DECODE_DIGIT; Получить данные отображения
CALL TW_WRITE_BYTE; Записать вторую цифру на дисплей
#ifdef КАЛИБРОВКА; В режиме калибровки
MOVF num_m, W; Показать значение ‘num_l’
#else; В обычном режиме
CLRW; Загрузить 0 в регистр W
BTFSC num_l, 1; если бит 1 num_l равен 1 (если num_l равен 2 или 7)
MOVLW 5; затем загрузить 5 в регистр W
#endif
CALL DECODE_DIGIT; Получить данные отображения
CALL TW_WRITE_BYTE; Записать третью цифру на дисплей
#ifdef КАЛИБРОВКА; В режиме калибровки
MOVF num_l, W; Показать значение ‘num_l’
#else; В обычном режиме
MOVLW 0; Отображение ‘0’
#endif
CALL DECODE_DIGIT; Получить данные отображения
CALL TW_WRITE_BYTE; Записать четвертую цифру на дисплей
CALL TW_STOP; ошибка Состояние остановки
; Отправить команду яркости на светодиодный дисплей
CALL TW_START; Выдача Условие запуска
MOVLW 0x8F; Отправить байт управления отображением 0x8F —
CALL TW_WRITE_BYTE; «Display ON»
CALL TW_STOP; ошибка Состояние остановки
MOVLW D’255 ‘; Задержка 200 мс
ЗАДЕРЖКА ВЫЗОВА; до следующего измерения
GOTO LOOP; цикл навсегда
; ————- Вспомогательные подпрограммы —————
DIO_HIGH; Установить высокий уровень вывода DIO
BSF port, dio; Установите бит ‘dio’ в ‘port’, чтобы он стал входом
Порт MOVF, W; Копировать ‘порт’ в регистр W
TRIS GPIO; И установите его как значение TRISGPIO
RETLW 0
DIO_LOW; Установить низкий уровень на выводе DIO
BCF порт, dio; Сбросить бит ‘dio’ в ‘port’, чтобы он стал выходным
Порт MOVF, W; Копировать ‘порт’ в регистр W
TRIS GPIO; И установите его как значение TRISGPIO
RETLW 0
CLK_HIGH; Установить высокий вывод CLK
BSF port, clk; Установите бит clk в порт, чтобы он вводился
Порт MOVF, W; Копировать ‘порт’ в регистр W
TRIS GPIO; И установите его как значение TRISGPIO
RETLW 0
CLK_LOW; Установить низкий уровень на выводе CLK
BCF port, clk; Сбросить бит clk в порту, чтобы он выводил
Порт MOVF, W; Копировать ‘порт’ в регистр W
TRIS GPIO; И установите его как значение TRISGPIO
RETLW 0
; ————- Условие запуска TW —————
TW_START
CALL CLK_HIGH; Установить высокий уровень CLK
CALL DIO_LOW; Затем установите низкий уровень DIO
RETLW 0
; ————- Условие остановки TW —————
TW_STOP
CALL DIO_LOW; Установить низкий уровень DIO
CALL CLK_HIGH; Установить высокий уровень CLK
CALL DIO_HIGH; Затем установите максимумы DIO и отпустите шину
RETLW 0
; ———— TW запись байта ———————
TW_WRITE_BYTE
MOVWF tw_data; Загрузить tw_data из регистра W
MOVLW 8; Загрузить значение 8 в bit_count
MOVWF bit_count; чтобы указать, что мы собираемся отправить 8 бит
TW_WRITE_BIT; Запись одного бита в TW
CALL CLK_LOW; Установите низкий уровень CLK, теперь мы можем изменить DIO
BTFSS tw_data, 0; Проверить младший бит tw_data
GOTO TW_WRITE_0; Если это 0, перейдите на ярлык TW_WRITE_0
TW_WRITE_1; Иначе продолжить с ‘TW_WRITE_1’
CALL DIO_HIGH; Установить высокий DIO
GOTO TW_SHIFT; И перейдите на ярлык TW_SHIFT
TW_WRITE_0
CALL DIO_LOW; Установить низкий уровень DIO
TW_SHIFT
CALL CLK_HIGH; Установите высокий уровень CLK, чтобы начать новый импульс
RRF tw_data, F; Сдвиг ‘tw_data’ на один бит вправо
DECFSZ bit_count, F; Уменьшить значение bit_count, проверить, 0
GOTO TW_WRITE_BIT; Если нет, то вернитесь к ‘TW_WRITE_BIT’
TW_CHECK_ACK; Иначе проверьте бит подтверждения
CALL CLK_LOW; Установить низкий уровень TW для завершения последнего импульса
CALL DIO_HIGH; Установите высокий уровень DIO для освобождения шины
CALL CLK_HIGH; Установите TW high, чтобы начать новый импульс
MOVF GPIO, W; Скопируйте значение регистра GPIO в ack
MOVWF ack; Теперь бит ‘dio’ сообщения ‘ack’ будет содержать бит
подтверждения.CALL CLK_LOW; Установите низкий уровень CLK, чтобы завершить бит подтверждения
RETLW 0
; ———— Расшифровать напряжение ——————
DECODE_VOLTAGE
MOVLW D’9 ‘; Если значение’ num_l ‘меньше 9
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’35 ‘; тогда U = 3.5V, загрузить 35 в регистр W
MOVLW D’12 ‘; Если значение’ num_l ‘меньше 12
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’32 ‘; тогда U = 3,25 В, загрузить 32 в регистр W
MOVLW D’16 ‘; Если значение’ num_l ‘меньше 16
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’30 ‘; тогда U = 3.0V, загрузить 30 в регистр W
MOVLW D’20 ‘; Если значение’ num_l ‘меньше 20
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’27 ‘; тогда U = 2.7V, загрузить 27 в регистр W
MOVLW D’24 ‘; Если значение’ num_l ‘меньше 24
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’25 ‘; тогда U = 2,5 В, загрузить 25 в регистр W
MOVLW D’31 ‘; Если значение’ num_l ‘меньше 31
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’22 ‘; тогда U = 2.25V, загрузить 22 в регистр W
MOVLW D’38 ‘; Если значение’ num_l ‘меньше 38
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’20 ‘; тогда U = 2.0V, загрузить 20 в регистр W
MOVLW D’46 ‘; Если значение’ num_l ‘меньше 46
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’17 ‘; тогда U = 1,75 В, загрузить 17 в регистр W
MOVLW D’58 ‘; Если значение’ num_l ‘меньше 58
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’15 ‘; тогда U = 1,5 В, загрузить 15 в регистр W
MOVLW D’63 ‘; Если значение’ num_l ‘меньше 63
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’12 ‘; тогда U = 1.25V, загрузить 12 в регистр W
MOVLW D’73 ‘; Если значение’ num_l ‘меньше 73
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’10 ‘; тогда U = 1.0V, загрузить 10 в регистр W
MOVLW D’87 ‘; Если значение’ num_l ‘меньше 87
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’7 ‘; тогда U = 0,75 В, загрузить 7 в регистр W
MOVLW D’148 ‘; Если значение’ num_l ‘меньше 148
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’5 ‘; тогда U = 0.5V, загрузить 5 в регистр W
MOVLW D’240 ‘; Если значение’ num_l ‘меньше 240
SUBWF номер_л, Вт
СТАТУС BTFSS, C
RETLW D’2 ‘; тогда U = 0,25 В, загрузить 2 в регистр W
RETLW 0; в противном случае U = 0V, загрузить 0 в регистр W
; ———— Разделить номер ——————
SPLIT_NUM
#ifdef КАЛИБРОВКА; У нас сотни только в режиме калибровки
CLRF num_h; Очистить регистр num_h
MOVLW D’100 ‘; Загрузить 100 в регистр W
DIVIDE_100; Запуск цикла операции деления
SUBWF num_l, F; вычесть W из num_l
BTFSS STATUS, C; И проверьте, произошел ли статус заимствования
GOTO END_SPLIT_100; Если было, то завершить операцию
INCF num_h, F; в противном случае увеличить num_h
GOTO DIVIDE_100; и вернуться к метке «DIVIDE_100»
END_SPLIT_100
ADDWF num_l, F; Добавить W к num_l
#endif
CLRF num_m; Очистить регистр num_m
MOVLW D’10 ‘; Загрузить 10 в регистр W
DIVIDE_10; Запуск цикла операции деления
SUBWF num_l, F; вычесть W из num_l
BTFSS STATUS, C; И проверьте, произошел ли статус заимствования
GOTO END_SPLIT_10; Если было, то завершить операцию
INCF num_m, F; в противном случае увеличить num_m
GOTO DIVIDE_10; и вернуться к метке «DIVIDE_10»
END_SPLIT_10
ADDWF num_l, F; Добавить W к num_l
RETLW 0; И возврат из подпрограммы
; ———— Цифра декодирования ———————-
DECODE_DIGIT
Цифра MOVWF; скопируйте W в ‘цифру’
Цифра MOVF, F; Проверить, равно ли ‘цифра’ 0
BTFSC STATUS, Z; Если да, то вернитесь с кодом
RETLW B’00111111 ‘; для отображения цифры 0
DECFSZ digit, F; Уменьшите цифру и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’00000110 ‘; В противном случае вернуть с кодом’ 1 ‘
DECFSZ digit, F; Уменьшите ‘цифру’ и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’01011011 ‘; В противном случае верните код’ 2 ‘
DECFSZ digit, F; Уменьшите ‘цифру’ и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’01001111 ‘; В противном случае верните код’ 3 ‘
DECFSZ digit, F; Уменьшите цифру и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’01100110 ‘; В противном случае верните код’ 4 ‘
DECFSZ digit, F; Уменьшите ‘цифру’ и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’01101101 ‘; В противном случае верните код’ 5 ‘
DECFSZ digit, F; Уменьшите ‘цифру’ и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’01111101 ‘; В противном случае верните код’ 6 ‘
DECFSZ digit, F; Уменьшите ‘цифру’ и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’00000111 ‘; В противном случае верните код’ 7 ‘
DECFSZ digit, F; Уменьшите цифру и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’01111111 ‘; В противном случае верните код’ 8 ‘
DECFSZ digit, F; Уменьшите ‘цифру’ и проверьте, 0
GOTO $ + 2; если нет, пропустить следующую строку
RETLW B’01101111 ‘; В противном случае верните код’ 9 ‘
RETLW 0x00; в любом другом случае вернуть 0
; ————- Подпрограмма с длительной задержкой —————
ЗАДЕРЖКА
MOVWF i; Скопируйте значение в регистр i
MOVWF j; Копируем значение в регистр j
DELAY_LOOP; Цикл задержки запуска
DECFSZ i, F; уменьшите i и проверьте, не равно ли оно нулю
GOTO DELAY_LOOP; Если нет, перейдите к метке DELAY_LOOP
DECFSZ j, F; уменьшите j и проверьте, не равно ли оно нулю
GOTO DELAY_LOOP; Если нет, перейдите к метке DELAY_LOOP
RETLW 0; В противном случае возврат из подпрограммы
END
Последовательный вольтметр
Последовательный вольтметр с использованием
PIC16C71Построить серийный измеритель напряжения для измерения от 0 до 5 вольт постоянного тока на самом деле довольно просто.Использование MeLabs PicBasic и Microsoft Visual Basic версии 5 Pro. Вам нужна версия Visual Basic Pro, потому что вам придется использовать элемент управления Basic MSComm. Этот элемент управления недоступен в Visual Basic 5 «Learning» Edition. PIC16C71 еще больше упрощает задачу, имея встроенный аналого-цифровой преобразователь. Контакты 17,18,1,2 являются аналоговыми входами AIN0, AIN1, AIN2, AIN3 соответственно.
Программное обеспечение для последовательного вольтметра контролирует последовательный порт на предмет входящей информации, отправляемой PIC micro.После того, как получил , отображаемый результат вычисляется путем умножения полученного значения на 0,02. Аналого-цифровой преобразователь PIC16C71 является типом последовательного приближения и обеспечивает 8-битный результат. Только с 8-битным результатом наш диапазон ограничен от 0 до 255, что соответствует от 0 до 5 вольт соответственно.
Вот схема PIC16C71
Вот код PicBasic:
‘Доступ к PIC16C71 A / D с помощью Peek and Poke
Символ ADCON0 = 8′ Регистр конфигурации A / D 0
Символ ADRES = 9 ‘Результат аналого-цифрового преобразования
Символ ADCON1 = $ 88 ‘Регистр конфигурации A / D 1
Символ SO = 0 ‘Последовательный выход на порт B0poke ADCON1, 0′ Установите PortA 0-3 на аналоговые входы
poke ADCON0, $ 41 ‘Установить A / D на Fosc / 8, Channel 0, OnLoop:
poke ADCON0, $ 45′ Начать преобразование
pause 1 ‘Подождите 1 мс для преобразования
peek ADRES, B0 ‘Получить результат для переменной B0serout SO, N2400, (# B0,10)’ Отправить переменную на последовательный выход
goto Loop ‘Начать заново
Код был написан с использованием Micro Engineering PicBasic и очень прост.Используя команды PEEK и POKE в PicBasic, мы можем напрямую обращаться к внутренним регистрам AD PIC16C71 и контактам порта A. После настройки регистров AD для использования AN0 для приема нашего аналогового входа программа остается в простом цикле и непрерывно отправляет аналоговое значение, выбранное на выводе # 17 RA0 / AN0.
Вот код Visual Basic:
Создавая простую форму с использованием Visual Basic, подобную приведенной выше, мы просто размещаем элемент управления MSComm, таймер, текстовое окно и кнопку, которую мы используем для выхода из программы.Обратившись к окну кода выше и к форме Form1, вы можете создать собственное приложение VB, подобное тому, которое мы сделали здесь.
Если вы предпочитаете использовать другой com-порт, просто изменить код, как показано выше, где мы выбираем CommPort 1. Просто измените его на любой com-порт, который вы предпочитаете. Обратите внимание на строку кода Text1.Text = Asc (DataIn) * 0,02 & «Volts DC» . Эта строка кода преобразует входящие данные от PIC в значение, которое мы можем отобразить в текстовом поле (черная область).Поскольку аналого-цифровой преобразователь PIC16C71 имеет 8-битное разрешение , мы знаем, что у нас может быть только 256 возможных комбинаций (от 0 до 255).
Поскольку 5 вольт разделить на 256 = 0,0195, мы знаем, что возвращаемое значение 250 будет равно 4,87 вольт, или 250 X 0,0195 для 4,87 В. Значение 255 соответствует 5,0 вольт (4,9725), а значение 52 означает 1,0 14 вольт.
8-битное разрешение: Для большинства целей 8-битное разрешение более чем достаточно.С 8-битным разрешением мы можем измерять значения аналогового входа с шагом 0,0195 В. У нас есть 0, представляющий 0 вольт, и 255, представляющий 5 вольт. Наше фактическое разрешение составляет 0,0195 или 19,5 мВ. С 256 возможными показаниями, начиная с 0 и доходя до 5 В при 19,6 мВ на показание, этого более чем достаточно для большинства приложений.
Хорошо, тогда почему я использовал значение 0,02 для моих расчетов …? Я округлил это число до 0,02, потому что я использовал свой вольтметр Fluke, чтобы получить точные показания во время работы схемы.Я обнаружил, что при использовании 0,02 мои результаты были более точными. Ваша схема может немного отличаться, поскольку никакие два устройства никогда не кажутся одинаковыми. Хорошая идея — немного поэкспериментировать и использовать качественный вольтметр, чтобы уточнить свои расчеты.
Это увлекательный проект, в котором есть много возможностей для улучшения, особенно визуальный базовый код. Однако это хорошая отправная точка для тех, кто плохо знаком с концепцией аналого-цифрового преобразования с использованием микроконтроллера PIC16C71.Это также хорошее введение в интерфейс микроконтроллера с внешним миром.
ПРИМЕЧАНИЕ. Представленное здесь программное обеспечение Visual Basic является 32-разрядным и работает в Windows 95 или Windows 98 с использованием Com1.
Вот HEX-файл для PIC16C71, готовый для записи в PIC16C71. Щелкните ЗДЕСЬ , чтобы увидеть файл HEX.
Вот код VB5 . Это полная программа установки / настройки для проекта, показанного выше. Щелкните ЗДЕСЬ , чтобы просмотреть файлы Visual Basic.
Если вы хотите создать свою собственную версию или просто иметь код VB для игры, вот другая версия (без таймера), представленная Бобом Каттером. Он включает в себя полный код VB для последовательного вольтметра. Щелкните ЗДЕСЬ , чтобы загрузить версию Bobs.
Ознакомьтесь с нашим новым программным обеспечением для регистрации данных для терминала RS-232 и измерителя последовательного напряжения с полным набором функций просмотра и регистрации.Кликните сюда.
Авторские права © 1998 Reynolds Electronics
.Международный журнал научных и технологических исследований
ДОБРО ПОЖАЛОВАТЬ В IJSTR (ISSN 2277-8616) —
Международный журнал научных и технологических исследований — это международный журнал с открытым доступом из различных областей науки, техники и технологий, в котором особое внимание уделяется новым исследованиям, разработкам и их приложениям. Приветствуются статьи, содержащие оригинальные исследования или расширенные версии уже опубликованных статей конференций / журналов. Статьи для публикации отбираются на основе экспертной оценки, чтобы гарантировать оригинальность, актуальность и удобочитаемость.
IJSTR обеспечивает широкую политику индексирования, чтобы опубликованные статьи были хорошо заметны для научного сообщества.
IJSTR является частью экологически чистого сообщества и предпочитает режим электронной публикации, так как он является «ЗЕЛЕНЫМ журналом» в Интернете.
Мы приглашаем вас представить высококачественные статьи для обзора и возможной публикации во всех областях техники, науки и технологий.Все авторы должны согласиться с содержанием рукописи и ее представлением для публикации в этом журнале, прежде чем она будет отправлена нам. Рукописи следует подавать в режиме онлайн
IJSTR приветствует ученых, заинтересованных в работе в качестве добровольных рецензентов. Рецензенты должны проявить интерес, отправив нам свои полные биографические данные. Рецензенты определяют качественные материалы.Поскольку ожидается, что они будут экспертами в своих областях, они должны прокомментировать важность рецензируемой рукописи и внести ли исследование в знания и продвинуть как теорию, так и практику в этой области. Заинтересованным рецензентам предлагается отправить свое резюме и краткое изложение конкретных знаний и интересов по адресу [email protected]
.IJSTR публикует статьи, посвященные исследованиям, разработкам и применению в областях инженерии, науки и технологий.Все рукописи проходят предварительное рецензирование редакционной комиссией. Вклады должны быть оригинальными, ранее или одновременно не публиковаться где-либо еще, и перед публикацией они должны быть подвергнуты критическому анализу. Статьи, которые должны быть написаны на английском языке, должны иметь правильную грамматику и правильную терминологию.
IJSTR — это международный рецензируемый электронный онлайн-журнал, который выходит ежемесячно. Цель и сфера деятельности журнала — предоставить академическую среду и важную справочную информацию для продвижения и распространения результатов исследований, которые поддерживают высокоуровневое обучение, преподавание и исследования в области инженерии, науки и технологий.Поощряются оригинальные теоретические работы и прикладные исследования, которые способствуют лучшему пониманию инженерных, научных и технологических проблем.