Цифровой вольтметр на базе микроконтроллера HT46R63
на базе микроконтроллера HT46R63
В данной статье рассматривается применение микроконтроллера HT46R63 фирмы Holtek
Semiconductor для разработки цифрового вольтметра. Основная идея заключается в использовании микроконтроллера для преобразования измеряемого напряжения
в соответствующее цифровое значение и отображения на ЖКиндикаторе после программной обработки. Так как HT46R63 имеет встроенный аналогоцифровой преобразователь и драйвер ЖКИ, схема вольтметра очень проста.
HT46R63 представляет собой восьмиразрядный однократно программируемый (ОТР) микроконтроллер Holtek нового поколения со встроенным АЦП и драйвером ЖКИ. Внутренняя ОТР-память емкостью 4 К и 32 линии ввода-вывода
значительно упрощают построение интерфейса с внешними устройствами, например, с клавиатурой. Возможность напрямую работать с ЖК-индикатором 19*4 обеспечивается встроенным драйвером ЖКИ. С помощью этого микроконтроллера можно управлять внешними достаточно мощными приборами (симисторами или реле). Встроенный
восьмиканальный АЦП может непосредственно контролировать внешние аналоговые сигналы (индикаторы состояния батарей, измерители тока и температуры), четырехканальным восьмиразрядным ШИМ с цифро-аналоговым преобразователем можно управлять внешними устройствами или оборудованием.
Рабочее напряжение HT46R63 составляет 2,2–5,5 В, что позволяет использовать этот микроконтроллер для различных устройств потребительского рынка
и промышленности с индикацией на ЖК-панелях, например, в водонагревателях, печах СВЧ, цифровых камерах, автомобильных системах и т. п.
Набор программных и аппаратных средств, объединенных в систему разработки HT-IDE30000, дополняет линейку микроконтроллеров Holtek. Эмуляция
в реальном времени, модификация регистров памяти, аппаратная реализация точек останова, трассировочные анализаторы и т. д. являются стандартными
составляющими HT-IDE30000 и предоставляют разработчикам средства, необходимые для быстрой и эффективной разработки и отладки изделия. Дополнительная возможность моделирования ЖК-панели позволяет разработчику полностью провести наладку без подключения непосредственно к ЖКИ.
Основные характеристики HT46R63
Тактовая частота HT46R63 определяется внешней RC-цепью или кварцевым резонатором. В качестве
опорного напряжения AVDD используется напряжение питания VDD. Структура микроконтроллера приведена на рис. 1, варианты конструктивного оформления — на рис. 2.
В случаях повышенной нагрузки на источник питания, провалов напряжения питания
и электрических помех точность преобразования будет ниже, чем определено в технических характеристиках. Встроенный АЦП имеет в своем составе три регистра — ADR (21H), ADCR
(22H) и ACSR (23H). В регистр ADR заносятся результаты аналого-цифрового преобразования. Его содержимое для получения данных должно быть считано после завершения работы АЦП. Номер канала АЦП, выбор аналогового канала, установка бита запуска преобразования и флага окончания преобразования задаются регистром управления ADCR. Чтобы запустить аналого-цифровое преобразование, надо после выбора аналогового канала, сигнал
с которого необходимо обработать, установить бит запуска START. По окончании работы АЦП бит ЕОСВ очищается и устанавливается запрос на прерывание от АЦП (если оно предварительно установлено). Для выбора источника тактирования АЦП предназначен регистр ACSR.
Ввод-вывод данных в микроконтроллере HT46R63 осуществляется через 32 двунаправленные линии ввода-вывода, обозначенные РА-РD и отображаемые в областях памяти [12Н], [14Н], [16Н] и [18Н] соответственно.
Все эти порты, имеющие собственные регистры управления РАС, РВС, РСС и РDС, могут использоваться как для операций ввода, так и операций вывода с каждой линией ввода-вывода.
Принцип работы цифрового вольтметра
Основной принцип работы цифрового вольтметра прост — преобразование аналогового сигнала в цифровой, результат отображается в цифровом виде. Наличие АЦП в соста-
ве HT46R63 позволяет обойтись без дополнительного преобразователя.
Помимо аналого-цифрового преобразователя необходимо программное и аппаратное обеспечение для отображения результата
на ЖКИ, так как после преобразования сигнал имеет шестнадцатеричный вид, а для отображения на ЖК-панели он должен быть в десятичной форме. Эта проблема снимается наличием в составе HT46R63 драйвера ЖКИ.
Более того, фирма Holtek поставляет программу моделирования ЖК-панели, что позволяет разработчику полностью отладить систему без «живого» ЖКИ.
Чтобы вывести результат измерения на ЖКИ, необходимо установить ВР (Bank pointer) в 1 и выбрать соответствующую таблицу из памяти ЖКИ. Отображаемые данные будут храниться по адресу 40Н – 53Н.
Принципиальная схема
Принципиальная схема цифрового вольтметра, состоящая из микроконтроллера, ЖКИ и нескольких внешних элементов, показана на рис. 3.
При разработке устройства и его тестировании использовались микросхемы TICE46SER0000A и HT-IDE3000.
Программа цифрового вольтметра состоит из четырех основных блоков:
- выполнение АЦ-преобразования;
- чтение регистра ADR;
- преобразование результата измерения в десятичную форму;
- отображение результата измерения на ЖК- панели.
Аналогоцифровое преобразование
Чтобы использовать АЦП микроконтроллера HT46, необходимо выполнить следующее:
- сконфигурировать каналы порта В установкой PCR2, PCR1 и PRC0;
- выбрать канал для АЦП установкой ACS2, ACS1 и ACS0. Выбранный канал должен быть сконфигурирован;
- установить бит ADCR.7 = 0>1>0 для запуска преобразования, ЕОС будет находиться в 1, пока будет идти этот процесс;
- ожидать завершения 76 тактов АЦП для окончания преобразования, после чего ЕОС устанавливается в 0 (завершение процесса). Если разрешено прерывание от АЦП, то устанавливается флаг запроса на прерывание от АЦП;
- считать результат преобразования в регистре ADR.
Каждое аналого-цифровое преобразование занимает 76 тактов, длительность которых задается установкой битов ADCS1 и ADCS0 (табл. 2).
Моделирование ЖКдисплея
Как уже упоминалось, на ЖК-дисплей выводится результат измерения напряжения.
Экран компьютера при моделировании этого ЖКИ приведен на рис. 4, а на рис. 5 дано обозначение сегментов 7-сегментного знакоместа.
Отображение 7-сегментного индикатора в памяти ЖКИ приведено на рис. 6.
Исходный код программы приведен ниже.
INCLUDE HT46R63.INC
;—————————————————
;HT46R63/HT46C63 8 bit A/D with LCD Type MCU
;An MCU-based digital voltage meter
;—————————————————
DATA. SECTION AT З0Н ‘DATA’ ;start of data block
CLR_MEM_COUNTER DB ? ; d e c l a r e
CLR_MEM_COUNTER register
AD_VALUE DB ? ;declare AD_VALUE register
;—————————————————
CODE. SECTION AT 0 ‘CODE’ ;start of program block
ORG 00Н
JMP START
START:
MOV A,0FFH-30H
MOV CLR_MEM_COUNTER,A
MOV A,31H
MOV MP0,A
CLR_MEM:
CLR R0
INC MP0
DZ CLR_MEM_COUNTER
JMP CLR_MEM
MAIN:
MOV A,48H
MOV ADCR,A ;set AN0 as the only input channel
SET ADCR.7
CLR ADCR.7 ;start of A/D transformation
LOOP:
SZ ADCR.6 ;EOCB = 0, indicating the end of A/D transformation
JMP LOOP ;if EOCB = 1, then go to LOOP
CLR РАС ;set PA as OUTPUT
CLR PA ;set PA to be LOW VOLTAGE
NOP
MOV A,ADR ;read the value of ADR
MOV TBLP,A
TABRDL [36H] ;read from data base
ORG OF00H ;data base for measurement results
DC
0000H,0002H,0004H,0006H,0008H,0010H,0012H,0014H,0016H,0018H,00
20H,0022H,0024H,0025H,0027H,0029H
ORG 0F10H
DC
0031H,0033H,0035H,0037H,0039H,0041H,0043H,0045H,0047H,0049H,00
53H,0053H,0055H,0057H,0059H,0061H
ORG 0F20H
DC
0063H,0065H,0067H,0069H,0071H,0073H,0075H,0076H,0078H,0080H,00
82H,0084H,0086H,0088H,0090H,0092H
ORG 0F30H
DC
0094H,0096H,0098H,0100H,0102H,0104H,0106H,0108H,0110H,0112H,01
14H,0116H,0118H,0120H,0122H,0124H
ORG 0F40H
DC
0125H,0127H,0129H,0131H,0133H,0135H,0137H,0139H,0141H,0143H,01
45H,0147H,0149H,0151H,0153H,0155H
ORG 0F50H
DC
0157H,0159H,0161H,0163H,0165H,0167H,0169H,0171H,0173H,0175H,01
76H,0178H,0180H,0182H,0184H,0186H
ORG 0F60H
DC
0188H,0190H,0192H,0194H,0196H,0198H,0200H,0202H,0204H,0206H,02
08H,0210H,0212H,0214H,0216H,0218H
ORG OF70H
DC
0220H,0222H,0224H,0226H,0228H,0230H,0231H,0233H,0235H,0237H,02
39H,0241H,0243H,0245H,0247H,0249H
ORG 0F80H
DC
0251H,0253H,0255H,0257H,0259H,0261H,0263H,0265H,0267H,0269H,02
71H,0273H,0275H,0276H,0278H,0280H
ORG 0F90H
DC
0282H,0284H,0286H,0288H,0290H,0292H,0294H,0296H,0298H,0300H,03
02H,0304H,0306H,0308H,0310H,0312H
ORG 0FA0H
DC
0314H,0316H,0318H,0320H,0322H,0324H,0325H,0327H,0329H,0331H,03
33H,0335H,0337H,0339H,0341H,0343H
ORG 0FB0H
DC
0345H,0347H,0349H,0351H,0353H,0355H,0357H,0359H,0361H,0363H,03
65H,0367H,0369H,0371H,0373H,0375H
ORG 0FC0H
DC
0376H,0378H,0380H,0382H,0384H,0386H,0388H,0390H,0392H,0394H,03
96H,0398H,0400H,0402H,0404H,0406H
ORG 0FD0H
DC
0408H,0410H,0412H,0414H,0416H,0418H,0420H,0422H,0424H,0425H,04
27H,0429H,0431H,0433H,0435H,0437H
ORG 0FF0H
DC
0471H,0473H,0475H,0476H,0478H,0480H,0482H,0484H,0486H,0488H,04
90H,0492H,0494H,0496H,0498H,0500H
;—————————————————————
;Data base for LCD display
;—————————————————————
FUNC .SECTION ‘CODE’
LCD PROC
MOV A,01H ;set BP to be 1
MOV BP,A
MOV A,[36H]
MOV [70H],A
MOV A,0FH
AND A,[70H]
MOV TBLP,A
TABRDL [50H] ;store the 2nd digit after decimal point into [50H]
SWAPA [70H]
AND A,0FH
MOV TBLP,A
TABRDL [51H] ;store the 1st digit after decimal point into [51H]
MOV A,TBLH
MOV [71H],A
MOV A,0FH
AND A,[71H]
MOV TBLP,A
TABRDL [52H] ;store the 1st digit before decimal point into [52H]
;—————————————————————
;LCD Display part
;—————————————————————
MOV A,44H ;display the 2nd digit after decimal point
MOV MP1,A
MOV A,[50H]
MOV R1,A
INC MP1
SWAPA [50H]
MOV R1,A
INC MP1
MOV A,42H ;display the 1st digit after decimal point
MOV MP1,A
MOV A,[51H]
MOV R1,A
INC MP1
SWAPA [51H]
MOV R1,A
INC MP1
MOV A,40H ;display the 1st digit before the decimal point
MOV MP1,A
MOV A,[52H]
MOV R1,A
INC MP1
SWAPA [52H]
MOV R1,A
INC MP1
MOV A,46H ;display the decimal point
MOV MP1,A
MOV A,01H
MOV R1,A
ORG 0F00H ;data base for LCD display
DC 07DH,060H,03EH,07AH,063H
ORG 0F05H
DC 05BH,05FH,070H,07FH,07BH
LCD ENDP
END