ВОЛЬТМЕТР НА МИКРОКОНТРОЛЛЕРЕ ATmega8

Характеристики вольтметра

Напряжение питания 4.5 — 5.5 В
Максимальный потребляемый ток 85 мА
Род тока измеряемого напряжения постоянный
Диапазон измеряемых напряжений 0 — 9,99В
Входное сопротивление 680 кОм
Относительная погрешность 1%

Схема вольтметра

Плата вольтметра


Устройство и функционирование вольтметра, настройка

Вольтметр построен на базе микроконтроллера ATmega8. В устройстве используется динамическая индикация на трехразрядном светодиодном семисегментном индикаторе. Полное обновление изображения на индикаторе происходит с частотой примерно 162 Гц. Прибор отображает среднее арифметическое значение напряжения, используя результаты 64 замеров, что позволяет повысить точность. Обновление показаний производится около 4 раз в секунду.
Настройка прибора производиться по образцовому вольтметру (я использовал цифровой вольтметр с относительной погрешностью 0,5%), путем настройки коэффициента деления входного напряжения подстроечным резистором R2.
При программировании устройства необходимо установить частоту генератора 1 МГц (при использовании моей прошивки), также очень желательно включить детектор пониженного напряжения и установить порог срабатывания равным 4В (фьюзы BODEN=0, BODLEVEL=0), для ATmega8L можно установить порог 2,7В (BODEN=0, BODLEVEL=1).
Индикаторы GNS-3011HS можно заменить на их аналоги АЛС324Б без каких-либо изменений в схеме и прошивке. При необходимости можно изменить яркость свечения индикаторов подбором резисторов R9 — R16 или программными методами. Дипазон измерений легко изменить на 0 — 99,9В, для этого достаточно установить необходимый коэффициент деления напряжения подстроечным резистором R2 и установить точку после второго разряда.

Схема в формате KiCad (EESchema)
Плата в формате Sprint Layout 5.0
Прошивка в формате Intel HEX и исходный код (AvrAsm 2)

14 комментариев

  1. Люди подскажите как выставлять фьюзы (жилательно в uniprofв картинке) и как установить точку после второго разряда?

  2. ТОчку надо через транзистор, http://dmitrstas.ucoz.ru/publ….-1-0-10 вольтметры там наглядный пример а унипрог я не пользовался

  3. Её в самой прошивке надо менять ?

  4. не не надо! просто точку (DP) Надо подключить через транзистор , базой на общий анод индикатора на котором нужно зажечь точку.

  5. Большое спасибо ))) Разобрался )

  6. Работает! Собрал на маленькой Atmega8, вместо кт502 — поставил помоему C945, если вообще без транзисторов яркость падает.

  7. Вот фузы для avreal:
    BLEV = 0
    BODEN = 0
    SUT = 1
    CKSEL = 1
    BLB1 = 3
    BLB0 = 3
    RSTDSBL = 1
    WDTON = 1
    CKOPT = 0
    EESV = 1
    BSIZ = 0
    BRST = 1

  8. Кстати идея с транзистором для смещения точки не сработает — тут дело в принципе индикации. Например, отображаем все нули:
    с контроллера идет напряжение на сегмент A, программа считает, что он нужен для всех разрядов и на все аноды идет сигнал и т.д. То есть всегда будет такакя точка, когда задействованы три анода, а это означает что точка будет светиться и на других разрядах, только немного тусклее.
    Правда я не умею писать программы для МК и не смог программно сместить точку sad

  9. когда транзистор базой запитать к общему выводу разряда то точка будет светить именно только на том разряде))) вот пример http://dmitrstas.ucoz.ru/publ….-1-0-10

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

  11. та нет раздницы или катод общий или анод, всегда есть розряд и сигмент розряды по очереди зажигаются а сигменты в зависимости от цыфры а то что катод или анод это просто меняет транзистору полярность и подключение))

  12. прошивка в контроллере дает сигнал на сегмент A (а он у нас общий на все разряды), затем определяет где он нужен (например, отобразить число 750) в итоге напряжение идет на все три анода
    затем подсвечиваем сегмент B — напряжение идет на 1 и 3 аноды
    сегмент C — сигнал на 1, 2, 3
    сегмент D — напряжение на 2, 3

    так вот, когда задействованы все три анода, это означает что
    A) транзистор открыт и подано напряжение на общий вывод индикатора — сегмент точки
    Б) подается напряжение на три отдельных вывода точек

    В итоге — имеет три точки

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