Цифровой вольтметр позволяет измерять постоянное напряжение от 0 до 25 вольт.
В качестве контроллера используется ATMEGA8 в QFP (планарном) корпусе, которая тактуется внутренним генератором 8мГц. Измерения производятся при помощи встроенного в контроллер АЦП. Измеряемое напряжение, через делитель R9, R10поступает на вход ADC0 (PortC.0 выв.23). После соответствующих преобразований, результат измерения отображается через порт D на 4-х разрядном индикаторе с общим анодом (в моём случае RL-C5620):
Датчиком термометра служит микросхемка DS18B20, считав из нее данные о текущей температуре и сделав необходимые преобразования выводим результат измерения на индикатор.
Переключение между режимами вольтметра и термометра производится кнопкой SW1: один раз нажали - термометр, ещё раз - вольтметр, вот так всё просто.
Немножко опишу принципиальную схему.
Наблюдательный радиолюбитель может заметить несоответствие подключения разрядов индикатора. Дело в том что 3-й разряд индикатора это две точки, которые нужны для часов и они здесь не исспользуются. Поэтому я в программе сделал вывод информации сначала на первый разряд, потом на 2-й, 4-й и затем на 5-й. В этом проекте резистор R15 и транзистор подключенный к третьему разряду индикатора (точки) можно было не рисовать вообще, они тут не нужны (применяться они будут уже в следующем проекте, в который будут дабавлены часы). Кнопка переключения режимов подключена к казалось бы у же занятому индикатором порту, но так и есть, ошибки нет. Поясню: после того как произойдет последовательный выход информации на всех разрядах, порт переключает направление, т.е. становится входом и сканирует наличие нажатой кнопки, а потом опять меняет направление порта и становится выходом.
Прошивка FLASH найдёте в архиве ниже. Отдельно внимание следует уделить FuseBits. В нашем случае (для CodeVision AVR) они выставляются так: