Ампервольтметр на atmega8 с семисегментными индикаторами

Ампервольтметр на atmega8 с семисегментными индикаторами

Ампервольтметр на atmega8 с семисегментными индикаторами

Простой миниатюрный встраиваемый цифровой вольтметр для БП (0…19,99В/0…39,99В)

Автор: SSMix
Опубликовано 17.09.2013
Создано при помощи КотоРед.

В статье описывается простой встраиваемый 4-х разрядный цифровой вольтметр, разработанный для установки в домашний лабораторный БП с выходным напряжением 0…15В, как более дешевая и миниатюрная альтернатива китайским 3-х разрядным поделкам. Вольтметр может быть также использован для контроля напряжения в бортовой сети автомобиля.

Изменением номиналов резисторов делителя и варианта программы прошивки можно выбрать предел измерения 0…19,99 В или 0…39,99 В . Для универсальности предусмотрены прошивки для установки светодиодных индикаторов с ОА и ОК .

Вот фото вольтметра в работе:

Диапазон измерения, В……………. 0…19,99 (0…39,99);

Дискретность измерения, мВ………. 10;

Точность во всём диапазоне, мВ…. ±10;

Напряжение питания, В……………. 7…20*;

Потребляемый ток, мА……………. ≤40**;

Габаритные размеры, мм…………. 43х20х11.

Индикация…………………………. 4-х разрядный 7-сегментный с ОА или ОК.

* — при использовании DA1 78L05A

** — зависит от сопротивлений R4…R11

Схема электрическая вольтметра:

Входное измеряемое напряжение поступает на делитель R1, R2, R3, R13 с коэффициентом деления 1:8, а с него на вход PC4 АЦП микроконтроллера DD1. Конденсатор C2 – помехоподавляющий.

Микроконтроллер выбран широко распространённый ATmega8A в малогабаритном корпусе TQFP-32.

В качестве источника опорного напряжения (ИОН) для АЦП использован внутренний напряжением Vref=2.56В. При этом максимальное измеряемое напряжение на входе делителя составляет 2,56•8=20,48В.

Если применить входной делитель с коэффициентом деления 1:16, максимальное измеряемое напряжение можно увеличить до 2,56•16=40,96В.

В программе МК предусмотрены оба варианта делителя. Максимальный предел измерения программно ограничивается величиной 19,99В (39,99В). При превышении предела на индикатор выводится “ 1 -. — — “ (как в старой доброй КР572ПВ2) или “ 3 -. — — ”.

При 10-ти разрядном АЦП его диапазон измерения составляет 0…1023, что дает дискретность измерения непосредственно на входе АЦП: 2560мВ/1024=2,5мВ. С учётом входного делителя напряжения получается дискретность измерения 2,5мВ•8=20мВ (для предела 0…20В) или 2,5мВ•16=40мВ (для предела 0…40В). Для получения необходимой дискретности 10 мВ использован приём многократных выборок АЦП с усреднением результата. На официальном сайте Atmel есть интересный pdf-документ под названием “AVR121. Enhancing ADC resolution by oversampling” (Расширение разрешающей способности АЦП, используя передескритезацию).

На 8-й странице этого документа в таблице 3-1 (правда для Vref=5В) показано, как растёт разрешающая способность 10-разрядного АЦП при увеличении числа выборок. При 4-х выборках с усреднением результата наш АЦП “превращается” в 11-разрядный (0…2047), при 16-ти выборках – в 12-разрядный (0…4095), при 64-х выборках – в 13-разрядный (0…8191) и т.д.

Общая формула для вычисления необходимого количества выборок для прибавки к разрешению АЦП дополнительных n бит: sf = 2 n .

В данном случае для полного использования переменной накопления результата АЦП типа unsigned int (0…65535) оказалось удобным применить 64 выборки. При этом даже при максимальном коде АЦП 1023 переменная накопления результата никогда не переполнится (1023•64=65472), а разрешающая способность вольтметра для случая (0…40В) улучшится в 8 раз и составит 5 мВ, что вполне подходит.

Для компенсации разброса сопротивлений резистивного делителя и начального напряжения ИОН служит подстроечный резистор R3. Подбором сопротивления резистора R13 можно подстроить точность показаний вольтметра более грубо.

Для варианта (0…19,99)В соотношение сопротивлений верхнего плеча делителя к нижнему должно быть 7:1 , а для варианта (0…39,99)В – 15:1 , т.е. во втором случае сопротивление резистора R1 нужно будет увеличить до 510кОм, и возможно подобрать R13.

Светодиодный 4-х разрядный индикатор HL1 KW4-361AGB (с общим анодом) подключен к МК без дополнительных ключевых транзисторов, учитывая небольшой ток потребления. Резисторы R4…R11 определяют яркость свечения индикатора. Можно применить также индикатор с общим катодом, зашив МК соответствующим вариантом hex-файла прошивки. Схема включения при этом остаётся прежней.

Питание микроконтроллера производится через линейный стабилизатор DA1 78L05A, для которого по DataSheet типовая разность между входом и выходом составляет не менее 1,7 В. Практически минимальное напряжение питания схемы составляет около 7 В. Максимальное – не более 30 В. Если необходимо запитать схему от меньшего напряжения, то следует заменить стабилизатор DA1 на другой тип. Выходное напряжение стабилизатора может находиться в пределах от 3 до 5 В. При питании схемы от большего напряжения, чем 20В, последовательно с цепью питания желательно включить стабилитрон для гашения избыточного напряжения с целью снижения мощности рассеивания на DA1.

Программа для микроконтроллера написана на языке Си в хорошо зарекомендовавшей себя среде WinAVR-20060125. Вот вкраце рабочий вариант программы для индикатора с ОА и пределом измерения 19.99В.

Начинается программа традиционно, с подключения библиотек:

#include //Подключение библиотеки задержек

Определяем константы в flash-памяти микроконтроллера::

//Знакогенератор сегментов светодиодного индикатора с ОА:

static unsigned char __attribute__ ((progmem)) SEGMENTE[] =

Это байты, которые будут выводиться в порт D микроконтроллера для получения различных символов в разряде индикатора. Сегменты индикатора a, b, c, d, e, f, g, h, соответствуют линиям порта D следующим образом:

Так оказалось проще разводить печатную плату.

Для коммутации разрядов для порта B также используется табличный массив в flash-памяти:

//Таблица динамической коммутации разрядов индикатора

static unsigned char __attribute__ ((progmem)) RAZR[] =

//4 разр. 3 разр. 2 разр. 1 разр.

Далее определяем глобальные переменные:

volatile unsigned char segcounter = 0 ; //Счётчик разрядов индикатора (0-младший справа, 3-старший слева)

volatile unsigned char mass_ind[]=< 12, 12, 12, 12 >; //Массив выводимых чисел для каждого индикатора (0-младший справа, 3-старший слева), при включении вывод «—.—«

volatile unsigned char p_count= 0 ; //Счётчик прерываний (каждые 0,256мс)

Буфер mass_ind[] будет использоваться для хранения индицируемых цифр каждого разряда. Заноситься информация в него будет после каждого суммарного замера АЦП и преобразования результата в формат ХХ.ХХ В. Считывание информации будет производиться в прерывании по переполнению таймера-счётчика 2 (каждые 0,256мс) для динамической индикации. Первоначально в mass_ind[] заносим данные для вывода на индикатор при включении питания значков “— -. — —«.

В прерывании выставляем лог.1 на аноде текущего разряда в соответствии с состоянием счётчика segcounter, выводим в порт D байт данных из массива mass_ind[] и увеличиваем на 1 переменную segcounter (с проверкой на переполнение и ограничением до 3). Также инкрементируем счетчик прерываний p_count для отсчёта интервалов времени в 0,256мс. Т.о. в каждом прерывании выводится цифра одного из разрядов через каждые 0,256мс. Для 2-го разряда дополнительно добавляется разделительная точка.

//Прерывание по переполнению T2 (), динамическая индикация

PORTB = (PORTB & 0b11110000 ) | pgm_read_byte(RAZR+segcounter); //Активация текущего разряда индикатора

PORTD = pgm_read_byte(SEGMENTE+mass_ind[segcounter]); //Вывод сегментов текущего разряда

if (segcounter== 2 ) //Если 2-й разряд с точкой

PORTD = PIND & pgm_read_byte(SEGMENTE+ 10 ); //Добавка десятичной точки

Читайте также:  68 Микрорайон кемерово план застройки

segcounter++; //Инкремент разрядов индикатора

if (segcounter> 3 ) segcounter= 0 ; //Ограничение счетчика

p_count++; //Инкремент счётчика прерываний

Никаких сложных вычислений в прерывании специально не делается, чтобы обеспечить минимальное время выполнения. Благодаря этому скорость переключения разрядов индикатора составляет 1/0,256мс=3906,25 Гц, а каждый из четырёх разрядов мигает с частотой 3906,25 Гц/4=976,5625 Гц. Частота довольно высокая, так что никакого мерцания индикатора не заметно.

Далее следует основная функция программы, начинающаяся с конфигурации портов, таймера-счетчика 2 и АЦП:

unsigned char adc_counter= 0 ; //Счётчик замеров АЦП

unsigned int display = 0 ; //Выводимое напряжение ХХХХ В

TCCR2 |= ( 1 = 15 ) //Если прошло 15*0,256мс=3.84мс; общее время замеров 64*3.84=245.76мс (4 замера в сек)

ADCSRA= 0b11000011 ; //Пуск АЦП (Кдел=8, f=125 кГц, однократн.)

while (bit_is_set(ADCSRA, ADSC)); //Ожидание завершения преобразования

value = value + ADC; //Чтение и накопление результата преобразования

adc_counter++; //Инкремент счётчика замеров

После 64 замеров вычисляем напряжение в мВ*10:

Измеренное напряжение для N замеров:

Для отображения 4-х разрядов в формате ХX.ХХ В результат делится на 10 с округлением (прибавляется 5 перед делением)

mVolt=(value+5)/32 (N=64, Кдел=8)

if (adc_counter >= 64 ) //Если прошло 64 замера АЦП

При общем количестве замеров 64 получается суммарное время измерения 3,84мс*64=245,76 мс, т.е. примерно 4 измерения в секунду. Чаще делать нет смысла, иначе показания индикатора будут меняться слишком быстро.

Ну и наконец, заполняем буфер mass_ind[4] для вывода из него информации в прерывании.

//Заполнение массива mass_ind[4] для вывода индикации

if (display > 1999 ) //Если напряжение больше 19,99В

mass_ind[ 1 ] = 12 ; //Вывод «-» в 1-м разряде

mass_ind[ 2 ] = 12 ; //Вывод «-» во 2-м разряде

mass_ind[ 3 ] = 1 ; //Вывод «1» в старший разряд (слева)

mass_ind[ 1 ] = (display/ 10 )% 10 ; //1-й разряд

mass_ind[ 2 ] = (display/ 100 )% 10 ; //2-й разряд

mass_ind[ 3 ] = display/ 1000 ; //Старший разряд (слева)

if (mass_ind[ 3 ]== 0 ) mass_ind[ 3 ]= 11 ; //Если в старшем разряде «0» — гашение старшего разряда

Скриншот симуляции работы программы в Протеусе:


Схема вольтметра собрана на плате из одностороннего фольгированного стеклотекстолита размерами 43х20 мм по лазерно-утюжной технологии:

C1 = 10,0х20В (Танталовый, корпус B)

C2, С4…C6 = 0,47 (0603)

C3 = 22,0х6,3В (Танталовый, корпус A)

DA1 = MC78L05A (SOIC-8)

DD1 = ATmega8A-AU (TQFP-32) или ATmega8

HL1 = KW4-361AGB (4 сегмента, общий анод)

L1, L2 = 22uH (0805)

R1 = 240к или 510к (0805)

R3 = 1к (Подстроечный SMD CV-035, EVM (3×3мм))

R4, R5, R7…R12 = 270* (0603)

Для подключения программатора на плате предусмотрены соответствующие контактные площадки MOSI, MISO, SCK, RESET, GND, +Vcc:

После прошивки программы следует запрограммировать следующие фьюзы («0»-галочки установлены):

CKSEL3…0=0001 (Внутр.RC-генератор 1 МГц),

CKOPT=1 ,

BODEN=1 (схема BOD выключена),

SUT10=10 (16 CK, 65 ms, Slowly rising power),

Подключение вольтметра производится тремя проводниками: +Uизмер. , +Uпит. и Общий . Если измеряемое напряжение не опускается ниже минимального входного напряжения питания стабилизатора DA1, цепи +Uизмер. и +Uпит. соединяются вместе.

В первый момент после включения на индикаторе высветится “ — -. — — “, т.к. измерения и обработка результата ещё не проведены. Это корректнее, чем выводить первоначально нулевое напряжение, как сделано во всех встраиваемых вольтметрах. После завершения первой серии замеров на индикатор будет выведено напряжение в вольтах.

Подключив параллельно измеряемой цепи образцовый цифровой вольтметр, подстроечным резистором R3 необходимо выставить одинаковые с ним показания. Для повышения точности настройки желательно использовать напряжение ближе к верхнему пределу измерения. Регулировка получается довольно плавная. Возможно придётся дополнительно подобрать сопротивление резистора R13 для “попадания” в нужный диапазон подстройки.

Испытания вольтметра совместно с образцовым мультиметром показали, что погрешность измерения не превышает единицы младшего разряда (±10 мВ) во всём диапазоне 0…19.99 В.

AVR Lab устройства на микроконтроллерах AVR

Форум по AVR

АЦП микроконтроллера ATmega8, цифровой вольтметр

Работа с АЦП микроконтроллера ATmega8

АЦП – аналогово-цифровой преобразователь (ADC- Analog-to-Digital Converter). Преобразует некий аналоговый сигнал в цифровой. Битность АЦП определяет точность преобразования сигнала. Время преобразования – соответственно скорость работы АЦП. АЦП встроен во многих микроконтроллерах семейства AVR и упрощает использование микроконтроллера во всяких схемах регулирования, где требуется оцифровывать некий аналоговый сигнал.
Рассмотрим принцип работы АЦП. Для преобразования нужен источник опорного напряжения и собственно напряжение, которое мы хотим оцифровать (напряжение, которое преобразуется должно быть меньше опорного). Также нужен регистр, где будет храниться преобразованное значение, назовем его Z. Входное напряжение = Опорное напряжение*Z/2^N, где N – битность АЦП. Условимся, что этот регистр, как у ATmega8, 10-ти битный. Преобразование в нашем случае проходит в 10 стадий. Старший бит Z9 выставляется в единицу.

Далее генерируется напряжение (Опорное напряжение*Z/1024), это напряжение, с помощью аналогового компаратора сравнивается с входным, если оно больше входного, бит Z9 становиться равным нулю, а если меньше – остается единицей. Далее переходим к биту Z8 и вышеописанным способом получаем его значения. После того, как вычисление регистра Z окончено, выставляется некий флаг, который сигнализирует, что преобразование закончено и можно считывать полученное значение. На точность преобразования могут очень сильно влиять наводки и помехи, а также скорость преобразования. Чем медленнее происходит преобразования – тем оно точней. С наводками и помехами следует бороться с помощью индуктивности и емкости, как советует производитель в даташите:

В микроконтроллерах AVR как источник опорного напряжения может использоваться вывод AREF, или внутренние источники 2,56В или 1,23В. Также источником опорного напряжения может быть напряжение питания. В некоторых корпусах и моделях микроконтроллеров есть отдельные выводы для питания АЦП: AVCC и AGND. Выводы ADCn – каналы АЦП.

С какого канала будет оцифровываться сигнал можно выбрать с помощью мультиплексора.
Теперь продемонстрируем примером сказанное выше. Соорудим макет, который будет работать как вольтметр с цифровой шкалой. Условимся, что максимальное измеряемое напряжение будет 10В. Также пусть наш макет выводит на ЖКИ содержимое регистра ADC.

Схема подключения:


Обвязка микроконтроллера и ЖКИ WH1602A стандартна. X1 – кварцевый резонатор на 4 Мгц, конденсаторы С1,С2 – 18-20 пФ. R1-C7 цепочка на выводе reset по 10 кОм и 0,1 мкФ соответственно. Сигнальный светодиод D1 и ограничивающий резистор R2 200 Ом и R3 – 20 Ом. Регулировка контраста ЖКИ – VR1 на 10 кОм. Источник опорного напряжения мы будем использовать встроенный на 2,56В. С помощью делителя R4-R5 мы добьемся максимального напряжения 2,5В на входе PC0, при напряжении на щупе 10В. R4 – 3 кОм, R5 – 1 кОм, в их номиналу нужно отнестись тщательно, но если не возможности подобрать точно такие, можно сделать любой резистивный делитель 1:4 и программно подкорректировать показания, если это потребуется. Дроссель на 10мкГн и конденсатор на 0,1 мкФ для устранения шумов и наводок на АЦП на схеме не показан. Их наличие подразумевается само собой, если используется АЦП. Теперь дело за программой:

Программа на языке Си:

Так-же есть хитрость, чтобы не работать с дробными числами. Когда производиться вычисления входного напряжения в вольтах. Мы просто будем хранить наше напряжения в милливольтах. Например, значение переменной voltage 4234 означает, что мы имеем 4,234 вольта. Вообще операции с дробными числами кушают очень много памяти микроконтроллера (наша прошивка вольтметра весит чуть больше 4 килобайт, это половина памяти программ ATmega8!), их рекомендуется использовать только при особой необходимости. Вычисления входного напряжения в милливольтах просто: voltage=R_division*2.56*u*1.024;
Здесь R_division – коэффициент резистивного делителя R4-R5. Так, как реальный коэффициент делителя может отличаться от расчетного, то наш вольтметр будет врать. Но подкорректировать это просто. С помощью тестера меряем некое напряжение, получаем X вольт, а наш вольтметр пускай показывает Y вольт. Тогда R_division = 4*X/Y, если Y больше X и 4*Y/X если X больше Y. На этом настройка вольтметра завершена, и им можно пользоваться.

Читайте также:  Fronius transtig 1750 puls

Видео работы устройства:

Также можно доработать свой блок питания. Вставив в него цифровой вольтметр-амперметр на ЖКИ и защиту от перегрузки (для измерения тока нам понадобиться мощный шунт сопротивлением порядка 1 Ом).

В свой блок питания я встроил еще защиту от перегрузки, когда ток превышает 2А, то пьезо пищалка начинает усердно пищать, сигнализируя о перегрузке:

Зачем в этом выражении

Зачем в этом выражении voltage=R_division*2.56*u*1.024;
1,024 ? Кто может объяснить?

Если в этой формуле совсем другие величины. Входное напряжение = Опорное напряжение*Z/2^N, где N – битность АЦП.

Ампервольтметр на atmega8 с семисегментными индикаторами

ВОЛЬТАМПЕРМЕТР НА МИКРОКОНТРОЛЛЕРЕ В ЛАБОРАТОРНЫЙ БП

В наш век прогресса у любого радиолюбителя самый главный прибор при наладке устройств это лабораторный блок питания (БП). БП может быть как самодельный, так и заводского исполнения. Отличаются по сложности, может быть собран всего на одном линейном регуляторе напряжения, например LM317T, может быть собран на операционных усилителях, на транзисторах. БП может иметь защиту от КЗ, или наоборот, регулируемое ограничение выходного тока. А более совершенные БП имеют переключение режима «Защита от КЗ/Ограничение выходного тока». Но почти все БП оборудованы в лучшем случае стрелочным вольтметром. Цифровой вольтметр сложен в изготовлении и настройке, и чаще всего требует применения специализированных микросхем АЦП, например, КР572ПВ2А.

Но вся сложность заключается не в изготовлении платы, а в необходимости применения двухполярного питания +5 В, -5 В для питания указанной микросхемы. Для этого нужен отдельный маломощный БП или отдельные обмотки трансформатора. Таким образом, данные АЦП не очень зарекомендовали себя в радиолюбительской практике. Что же происходит? На дворе XXI-й век, а дизайна любительских БП не коснулся прогресс? Необходимо исправить эту ситуацию! Задумавшись над этим, я пришел к выводу, что надо сделать собственное устройство индикации параметров БП на микроконтроллере. В связи с этим и была разработан модуль – цифровой вольтамперметр. Который и будет рассмотрен далее более подробно. Данная разработка предложена вам для повторения и возможной доработки, так как она выполнена в пилотном варианте и требует доработок..(Планировалась функция вычисления потребляемой мощности и отображение на индикаторе, но до этого не дошли лапы, а при испытании обнаружены баги при измерении тока.) Но даже в таком варианте данная схема вполне работоспособна и может быть предложена для повторения даже начинающим радиолюбителям. Основной упор делался на то, чтобы сохранить минимальную сложность, чтобы не оставить за бортом начинающих радиолюбителей. Вот что у меня получилось.

Схема и рисунок печатной платы представлены далее.

Устройство обеспечивает следующие параметры и функции:

  • 1. Измерение и индикация выходного напряжения блока питания в диапазоне от 0 до 100 В, с дискретностью 0,01 В
  • 2. Измерение и индикация выходного тока нагрузки блока питания в диапазоне от 0 до 10 А с дискретностью 10 мА
  • 3. Погрешность измерения — не хуже ±0,01 В (напряжение) или ±10 мА (ток)
  • 4. Переключение между режимами измерения напряжение/ток осуществляется с помощью кнопки с фиксацией в нажатом положении.
  • 5. Вывод результатов измерения на большой четырехразрядный индикатор. При этом три разряда используются для отображения значения измеряемой величины, а четвертый – для индикации текущего режима измерения.
  • 6. Особенность моего вольтамперметра – автоматический выбор предела измерения. Смысл в том, что напряжения 0-10 В отображаются с точностью 0,01 В, а напряжения 10-100 В с точностью 0,1 В.
  • 7. Реально делитель напряжения рассчитан с запасом, если измеряемое напряжение увеличивается больше 110 В (ну может кому-то надо меньше, можно исправить это в прошивке), на индикаторе отображаются символы перегрузки – O.L (Over Load). Аналогично сделано и с амперметром, при превышении измеряемого тока больше 11 А вольтамперметр переходит в режим индикации перегрузки.

Вольтметр осуществляет измерение и индикацию только положительных значений тока и напряжения, причем для измерения тока используется шунт в цепи «минуса». Устройство выполнено на микроконтроллере DD1 (МК) ATMega8-16PU.

Технические параметры ATMEGA8-16PU:

  • Ядро AVR
  • Разрядность 8
  • Тактовая частота, МГц 16
  • Объем ROM-памяти 8K
  • Объем RAM-памяти 1K
  • Внутренний АЦП, кол-во каналов 23
  • Внутренний ЦАП, кол-во каналов 23
  • Таймер 3 канала
  • Напряжение питания, В 4.5…5.5
  • Температурный диапазон, C 40. +85
  • Тип корпуса DIP28

Количество дополнительных элементов схемы — минимально. (Более полные данные на МК можно узнать из даташита на него). Резисторы на схеме — типа МЛТ-0,125 или импортные аналоги, электролитический конденсатор типа К50-35 или аналогичный, напряжением не менее 6,3 В, емкость его может отличаться в большую сторону. Конденсатор 0,1 мкФ — керамический импортный. Вместо DA1 7805 можно применить любые аналоги. Максимальное напряжение питания устройства определяется максимальным допустимым входным напряжением этой микросхемы. О типе индикаторов сказано далее. При переработке печатной платы возможно применение иных типов компонентов, в том числе SMD.

Резистор R… импортный керамический, сопротивление 0,1 Ом 5 Вт, возможно применение более мощных резисторов, если габариты печатки позволяют установить. Также нужно изучить схему стабилизации тока БП, возможно там уже есть токоизмерительный резистор на 0,1 Ом в минусовой шине. Можно будет использовать по возможности этот резистор. Для питания устройства может использоваться либо отдельный стабилизированный источник питания +5 В (тогда микросхема стабилизатора питания DA1 не нужна), либо нестабилизированный источник +7…30 В (с обязательным использованием DA1). Потребляемый устройством ток не превышает 80 мА. Следует обращать внимание на то, что стабильность питающего напряжения косвенно влияет на точность измерения тока и напряжения. Индикация — обычная динамическая, в определенный момент времени светится только один разряд, но из-за инерционности нашего зрения мы видим светящимися все четыре индикатора и воспринимаем как нормальное число.

Использовал один токоограничительный резистор на один индикатор и отказался от необходимости дополнительных транзисторных ключей, т. к. максимальный ток порта МК в данной схеме не превышает допустимые 40 мА. Путем изменения программы можно реализовать возможность использования индикаторов как с общим анодом, так и с общим катодом. Тип индикаторов может быть любым — как отечественным, так и импортным. В моем варианте применены двухразрядные индикаторы VQE-23 зеленого свечения с высотой цифры 12 мм (это древние, мало-яркие индикаторы, найденные в старых запасах). Здесь приведу его технические данные для справки;

  • Индикатор VQE23, 20x25mm, ОК, зеленый
  • Двухразрядный 7-сегментный индикатор.
  • Тип Общий катод
  • Цвет зеленый (565nm)
  • Яркость 460-1560uCd
  • Десятичные точки 2
  • Номинальный ток сегмента 20mA

Ниже указано расположение выводов и габаритный чертеж индикатора:

  • 1. Анод H1
  • 2. Анод G1
  • 3. Анод A1
  • 4. Анод F1
  • 5. Анод B1
  • 6. Анод B2
  • 7. Анод F2
  • 8. Анод A2
  • 9. Анод G2
  • 10. Анод H2
  • 11. Анод C2
  • 12. Анод E2
  • 13. Анод D2
  • 14. Общ катод К2
  • 15. Общ катод К1
  • 16. Анод D1
  • 17. Анод E1
  • 18. Анод C1
Читайте также:  Алюминиевый профиль v slot

Возможно использование вообще любых индикаторов как одно-, двух-, так и четырехразрядных с общим катодом, придется только разводку печатной платы под них делать. Плата изготовлена из двухстороннего фольгированного стеклотекстолита, но возможно применение одностороннего, просто надо будет несколько перемычек запаять. Элементы на плате устанавливаются с обеих сторон, поэтому важен порядок сборки:

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

Эксплуатация данного модуля вольтамперметра не требует объяснения. Достаточно правильно подключить питание и измерительные цепи. Разомкнутый джемпер или кнопка – измерение напряжения, замкнутый джемпер или кнопка – измерение тока. Прошивку можно залить в контроллер любым доступным для вас способом. Из Fuse-битов, что необходимо сделать, так это включить встроенный генератор 4 МГц. Ничего страшного не случится, если их не прошить, просто МК будет работать на 1 МГц и цифры на индикаторе будут сильно мерцать.

А вот и фотография вольтамперметра:

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

Миниатюрный вольтметр на семисегментном LED индикаторе и PIC16F684

Прочитав статьи Edward Ned’а, я собрал DIP-версию и проверил ее в работе. Действительно вольтметр работал, ток через вывод микросхемы к индикатору не превышал 16 миллиампер в импульсе, так что работа микросхемы без резисторов, ограничивающих токи сегментов, вполне допустима и не вызывает перегрузок элементов.
Не понравилось слишком частое обновление показаний на дисплее и предложенная шкала «999». Хотелось подправить программу, но исходных кодов автор не выкладывает.

В это же мне потребовались вольтметр и амперметр для небольшого блока питания. Можно было собрать на PIC16F690 совмещенный вариант, а можно было собрать два миниатюрных вольтметра, причем габариты двух вольтметров получались меньше совмещенного варианта.
Свой выбор я остановил на микросхеме PIC16F684 и написал исходный код для посегментной развертки индикатора.
В процессе написания кода возникла идея программируемого переключения шкал и положения запятой, что и удалось реализовать.

↑ Что умеет мой вольтметр

• Автоматически определяется тип индикатора, поэтому в схеме будут работать как общий анод, так и общий катод.
• С помощью кнопки выставляется желаемая шкала измерений «1023», «511», «343», «256» или «204». Это означает, что при входном напряжении 5 Вольт будет, зажигается максимальное число из вышеуказанных. Поскольку число 10 зажечь на первом элементе индикатора невозможно, то вместо него зажигается верхний сегмент.
• Кнопкой выставляется желаемое место запятой – после первого, второго знака или без запятой.
• Можно запрограммировать сдвиг значений на постоянную величину – потребовался этот режим для правильного измерения тока (вычитается ток измерителя напряжения). Этот вариант и был применен, что и отображено на блок-схеме приложенном примере.

Питание измерителя осуществляется от источника 7,5 – 12 Вольт, при токе 15 – 25 мA, потребление тока зависит от индикатора. Более яркие индикаторы потребляют больший ток.

↑ Выбор шкал измерителя

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

В измерителе программно реализована посегментная развертка индикатора, поэтому в каждый момент времени зажигается только один из сегментов в каждом из знаков. Это приводит к снижению нагрузки на выводы микроконтроллера по сравнению с поразрядной индикацией.

↑ Полная принципиальная схема измерителя

↑ Конструкция



Кнопка используется только перед установкой в конечное устройство, при эксплуатации ей не пользуются.

↑ Описание программы

При включении происходит измерение падения напряжения на резисторе R4 и по результатам измерений происходит выбор примененного типа индикатора «Общий катод» или «Общий анод».

Для отображения запятой выводов микроконтроллера не хватило, и поэтому запятая формируется переключением катодов или анодов через резистор R5. Величина этого резистора влияет на яркость свечения запятой и подбирается по отсутствию паразитной засветки незажженных запятых.

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

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

Программа написана на «mikroC for PIC» и снабжена достаточным количеством комментариев для понимания ее работы.

↑ Управление кнопкой

• Короткое нажатие вызывает смену шкалы. Шкалы меняются по кругу («1023», «511», «343», «256» или «204»). На индикаторе загорается максимальное значение шкала на 0,5 секунды, а затем высвечивается значение входного напряжения.
• Длительное (0,5 – 1 сек) нажатие перемещает запятую вправо по кругу (после первого, второго знака или без запятой).
• Если кнопка удерживается при включении 0,5 — 2 сек, то измеритель ожидает 3 секунды, пока установятся режимы блока питания и записывает величину паразитного тока в память. При этом нагрузка от блока питания не должна быть подключена.
Если эту коррекцию надо изменить, то операцию можно повторить.
Если коррекцию надо убрать, то кнопку надо удерживать при включении более 3 секунд.

↑ Пример применения

Был собран малогабаритный блок питания, у него получились следующие параметры:
Напряжение 0 – 31,2 Вольта.
Ток 0 – 2,2 Ампера.

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

Для измерения напряжения в этом случае удобными оказались значения: шкала «343» и запятая после 2-го знака. При этом максимальное значение шкалы составит 34,3 Вольта, что вполне приемлемо.

Для измерения тока удобными оказались значения: шкала «255» и запятая после 1-го знака, соответственно максимальное значение шкалы составит 2,55 Ампера. В связи с тем, что по токоизмерительному шунту протекает ток, потребляемый измерителем, показания тока были завышены. После проведения коррекции этот паразитный ток стал вычитаться из общих показаний и показания стали правильными.

После установки шкал в блоке питания были подобраны значения резисторов делителя R2, R3 и коэффициент усиления OP1 так, чтобы показания соответствовали контрольным.

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, главный редактор журнала «Датагор»

Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.


Спасибо за внимание!
Игорь Котов, главный редактор журнала «Датагор»

IC-Stroy.ru