Pic16f676 схемы своими руками

PicHobby.lg.ua

Полезные изобретения на микроконтроллерах

Вольтметр на 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 – Перечень деталей для вольтметра на PIC16F676
Позиционное обозначение Наименование Аналог/замена
С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 с открытым программным кодом. Часть 1

Статья предназначена для широкого круга радиолюбителей, желающих освоить азы работы и программирования микроконтроллеров (МК), а также тех, кто желает «облагородить» свои радиолюбительские устройства. Конструкция базируется на PIC16F676, легко повторяется, изучается и видоизменяется.

Микроконтроллерная техника все больше овладевает умами радиолюбителей. Число тех, кто с ними работает, понемногу растет благодаря пополнению рядов молодыми специалистами, которые изучают микроконтроллеры в высших учебных заведениях, но многие все еще в большинстве случаев смотрит на них искоса.
К написанию статьи меня побудило наличие времени и, конечно же, давние мечты, которые возникли у меня когда я впервые столкнулся с желанием/необходимостью (ненужное зачеркнуть) использовать в своей конструкции те маленькие, иногда не совсем понятные, но всем известные микроконтроллеры.

Первый мой опыт по созданию вольтметра на МК уже запечатлен на сайте Датагора. После радостей от первой победы возник вопрос, на который не было ответа: а как сделать вольтметр на 50 Вольт или на 300 Вольт или амперметр?
В сети я находил только готовые конструкции с откомпиллированными прошивками, которые подходили их авторам, но часто совсем не подходили мне. Хотелось понять, как оно работает изнутри.

В то время решить подобные вопросы мне было не под силу, но желание где-то «застряло» в моем подсознании. Дополнительным стимулом разобраться в теме и написать статью стало множество писем с вопросами от читателей моих предыдущих статей.

Содержание / Contents

Предлагаю изучить и повторить известную в Сети конструкцию широкого применения — вольтметр на микроконтроллере фирмы Microchip PIC16F676. Хочу сразу предупредить, что данные разработки проверялись мной только на макетке, по сему привычных всем фоток не будет, только знания. В данном случае это не главное. Здесь главное – получение практических навыков программирования и симуляции того что наваяли.

Микросхема PIC16F676 отлично подходит для целей создания компактного вольтамперметра. Имея всего 14 ног, даже в наипростейшем исполнении, чип способен выдать стабильный результат на 3-разрядный светодиодный индикатор.

Во всемирной сети таких наработок несколько, но, в большинстве случаев, радиолюбителю редко подходит то, что подошло кому-то другому. Всегда есть какой-то нюанс, который не устраивает, да и просто ”попугайничать” далеко не всем интересно. Хочется все приспособить для своих, как всегда уникальных, условий. При этом в свободном доступе, за редким исключением, нет полных исходных текстов программ. Либо они написанные в стиле не всегда понятном для понимания начинающих осваивать программирование радиолюбителей. То немногое, что есть, написано на языке Ассемблер, которым на практике владеют ограниченный круг специалистов (да и не прост он в процессе отладки), либо СИ, но со сложными лексемами, структурами и прерываниями. То есть смотришь на программу… она такая маленькая, компактная, но чтобы понять, где что-то изменить/использовать для своих нужд, нужны хорошие знания языка, особенно в части годами накатанных эмбедерами всевозможных сокращений, а тем более тонкостей работы структур и массивов.

К таким эталонам компактности мы все конечно будем стремиться, а пока освоим тот же случай простыми методами/способами, с допустимой потерей в качестве программного кода. Зато будет шанс не бросить все в середине пути от безысходности.

↑ Схема 1

Переделывать ее на свой лад нет смысла. Она отлажена и способна в динамическом режиме индицировать значение входного напряжения на 3 разряда светодиодных индикаторов. Здесь важно понимать, что из-за отсутствия буферных транзисторов не удастся подключить индикаторы с большим током потребления. В принципиальную схему заведомо заложено использования небольших индикаторов с малым током потребления. То есть во «главу угла» поставлена компактность готового изделия. От нее и оттолкнемся. Особенно в случае использования деталей в SMD исполнении. При желании, сможем конструктивно ”уложить” МК под сам гибридный индикатор на односторонней плате, даже если он в DIP корпусе.

Читайте также:  Автомоделизм своими руками для начинающих

↑ Описание принципиальной электрической схемы вольтметра и логики его работы

Схема в целом стандартная и особых пояснений не требует. Как видно из рисунка, вольтметр состоит из микроконтроллера IС1, трехразрядного индикатора с общим анодом, ”кучки” резисторов, транзистора, конденсаторов по питанию и стабилитрона.

IС1 выполняет две основные функции:
— измерения входного напряжения с помощью встроенного аналогово-цифрового преобразователя (АЦП);
— формирование динамической индикации для вывода результата измерения.

Сигналы для сегментов индикатора формируются на порте RC0 — RC5. К сожалению, в данном МК он не полон. На него невозможно возложить всю задачу формирования индицируемой цифры. Не хватает одной лини. Выход один: использование возможностей порта RA. Возьмем для этой цели RА2, как физически наиболее близко расположенного к соответствующей ножке индикатора в случае плотного монтажа. Формирование цикла последовательного ”зажигания” разрядов выполняют порты RА0, RА1 и RА5. Немного в разброс, но при монтаже самое то. Для формирования запятой в среднем разряде используется инверсия сигнала включения второго разряда индикатора с помощью отдельного транзистора, ибо свободных портов в микроконтроллере способных выполнить такую задачу уже не осталось. Порт RA3 – работает только на вход, о нем еще расскажем.

Измеряемое напряжение подается на порт RA4 МК, к которому подключен аналоговый вход с АЦП. В РIС16F676 модуль аналого-цифрового 10 разрядного преобразователя имеет восемь каналов, входы которых совмещены с портами ввода/вывода AN0/RA0, AN1/RA1, AN2/RA2, AN3/RA4. AN4/RС0, AN5/RС1, AN6/RС2, AN7/RС3. Физически в микроконтроллере преобразователь АЦП один, но он может поочередно коммутироваться к указанным входам. Модуль АЦП преобразует входное напряжение методом последовательного приближения, при этом возможно использовать опорное напряжение с вывода, совмещенного с портом Vref+/RA2 либо шиной питания Vdd. В нашем случае воспользуемся именно последним вариантом.

Помните, что на вход нельзя подавать напряжение больше 5 Вольт положительной полярности и ни в коем случае — отрицательной. Посему используется ограничительная цепь, состоящая из делителя напряжения на R14, R15, R16, сглаживающего конденсатора С2 и защитного стабилитрона VD1 на 5,1 Вольт . Предложенные на схеме номиналы резисторов рассчитаны на входное напряжение до 50 Вольт. В случае других измеряемых напряжений их надо соответственно пересчитать. По сравнению со схемой в (2) немного изменены номиналы резисторов делителя напряжения в сторону увеличения. Это уменьшит влияние вольтметра на измеряемую цепь в результате большего входного сопротивления.

Следует помнить о свойствах порта RA4 по причине его многофункциональности. Он не может устанавливать на своем выходе высокий уровень сигнала (выход с открытым коллектором). Конечно, опытные специалисты-программисты не видят в этом никаких проблем, ибо все это можно учесть либо изменить схемотехнически. Скажем, подключить к ножке RA4 внешний подтягивающий резистор к положительной линии питания и сымитировать сигнал высокого уровня либо поставить дополнительный буферный транзистор, который также умощнит выход МК в целом.

На порт RA3 подсоединен резистор на плюсовую шину питания. Микроконтроллер имеет возможность вместо него присоединять так называемый внутренний резистор подтяжки, подключаемый программным способом, но учитывая, что мы идем от простоты понимания, пока ставим обычный резистор. О третьей причине такого решения станет понятно, когда захочется детально изучить работу схемы в симуляторе. Я указал оба варианта, а какой из них использовать, — решение за Вами в зависимости от уровня практических навыков и знаний. Важно помнить, что к нему по умолчанию подключена цепь VPP – входа напряжения программирования микроконтроллера, а значит, он играет важную роль в т.ч. при внутрисхемном программировании. Если сказать все это коротко – пока не используйте этот порт без крайней на то необходимости.

Не малым преимуществом микроконтроллера является встроенный тактовый генератор, возможностями которого мы и воспользуемся из-за малого количества ног МК.

Читайте также:  Как сделать дверной короб своими руками

В заключение данного раздела хочется сказать, что нет необходимости всё это сразу детально запоминать, все встанет на свои места по мере практического освоения микроконтроллера.

↑ Программная часть проекта

Самый важный и сложный для начинающих раздел. Не буду перечислять все виды существующих компиляторов и трансляторов разных языков программирования, а также их слабые и сильные стороны. Исходя из поставленных задач, предлагаю воспользоваться возможностями продукта фирмы MikroElektronika — ”MikroC PRO” любой доступной версии. При этом акцентирую внимание именно с окончанием ”PRO”. Ибо она имеет встроенную возможность автоматически формировать командный файл для симулятора с расширением типа «*.cof». Для этого необходимо выставить галочку в основных настройках компилятора. Поскольку объем памяти данного МК всего 1Кбайт, на законных основаниях воспользуйтесь бесплатной версией на официальном сайте (3).

Итак, запускаем компилятор, открываем файл проекта (см. раздел «Файлы»). Смотрим текст программы в листинге №1.
Листинг №1

Как видите, в программе нет сложных команд. Все числа и регистры в двоичном формате, который мысленно легко переносится прямо на выводы портов, в отличие от других систем исчисления чисел.

В начале объявлены функции подпрограмм (строки 1-3) и глобальные переменные (4-6). Сроки 7-15 – выведенные в отдельную функцию/подпрограмму команды настройки всех портов и регистров МК. Такая организация подготовки программы дает возможность искать либо изменять начальные команды только здесь, в одном месте, а не по всему телу программы. Практически всю работу с настройки внутренних регистров взял на себя компилятор.

Для удобочитаемости задача формирования динамической индикации выполнена с помощью двух взаимосвязанных функций. Первая – (16-40) генерирует цикл активации соответствующих портов RA (разряды индикатора). Строки 19-20 каждый раз инвертируют полярность выходного напряжения для четкого гашения индицируемой цифры. 25, 29 и 33 строчка — связующее звено с иной подпрограммой: ”void Cod_to_PORT (char DIGIT_NUMBER)”. Отвечает за вывод кода на порт RC для подключения соответствующих сегментов индикатора (формируются цифры измеряемого напряжения).

Самый сложный для понимания остался формат изменения конкретного значения бита в регистре порта в ”ноль”, например:
и чуть попроще конструкция для формирования логической единицы. Смотри строку 26 и ей подобные. Используйте их на практике как готовый шаблон. Чтобы понять, как изменить конкретный разряд регистра, не вникая в суть происходящих логических операций, смотрите приложенное схематическое пояснение в ремарке.

Поскольку все операции циклические, а функция вывода кода сегментов шаблонна, последующих детальных объяснений не требуется. Присмотритесь только к способу подключения сегмента ”G” через отдельный порт порта RA с соблюдением временных интервалов.
Главная функция (62-74) в 64 строке обращается к подпрограмме инициализации портов и регистров. После чего переходит в цикл постоянного измерения и индикации полученного результата.

С помощью усилий программистов от фирмы MikroElektronika, в компиляторе работа с АЦП организована «скрытно», по умолчанию, и представлена всего одной строчкой — №66. Очень удобно для начинающих. Строки 67-71 демонстрируют принцип укладки полученных данных регистра АЦП в шкалу вольтметра, а также отделения каждой конкретной цифры из полученного результата для последующей их индикации.

В архивах вы также найдете файлы проекта для симуляции работы цифровых систем ”PROTEUS” от Labcenter Electronics. Используйте его возможности для пошаговой симуляции. При этом просматривайте исполняемую строчку на языке Си, а также выходной потенциал на нужном вам порте. (Смотрите папку «no_тр_ОE_50V»).

Вот в этом случае и станет понятно, зачем порт RA3 подтянут резистором на плюсовую шину питания и не использован внутренний подтягивающий резистор. Проблема кроется в том, что симулятор не станет симулировать работу данного МК, пока к указанному порту не будет приложено положительное напряжение. Чтобы акцентировать на этом внимание и не тратить время на поиски причин неверных сигналов симулятора, при макетировании этот элемент оставлен на схеме. В дальнейшем при желании, можете учесть внутренний резистор в программе (см. даташит).

При желании поставить крупные индикаторы, придется решать вопрос ограничения тока потребления через порты МК. В данном случае необходимо ставить буферные транзисторы на каждый разряд индикатора.

Источник

Оцените статью