В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Применение > Микроконтроллеров > MSP430
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Цифровой термометр на базе MSP430

В этом примере описывается разработка цифрового термометра с использованием возможностей slope-аналогово-цифрового преобразования на базе модуля таймера-порта Timer Port микроконтроллеров MSP430x3xx. В общем плане можно рассматривать данную разработку как пример подключения резистивных датчиков и опорных резисторов к модулю таймера – порта Timer Port.

1 Введение

В этом примере описывается разработка цифрового термометра с использованием возможностей slope-аналогово-цифрового преобразования на базе модуля таймера-порта Timer Port микроконтроллеров MSP430x3xx. В общем плане можно рассматривать данную разработку как пример подключения резистивных датчиков и опорных резисторов к модулю таймера – порта Timer Port. Такой модуль входит в состав всех микроконтроллеров серии MSP430x3xx. Таймер – порт позволяет подключать несколько резистивных датчиков и опорных резисторов, как и сделано в данном приборе. Неиспользуемые выводы модуля могут быть использованы в качестве независимых выходов.

1.1 Краткое описание микроконтроллеров со сверхнизким энергопотреблением семейства MSP430

MSP430 это 16-разрядный микроконтроллер с RISC-архитектурой, обладающий дополнительными функциями, облегчающими разработку и ортогональной структурой, обеспечивающей ядру повышенную вычислительную мощность наряду с высокой гибкостью использования. Эти особенности позволяют микроконтроллеру MSP430 потреблять всего 400 мкA в активном режиме в типовой 3-вольтовой схеме. MSP430 потребляет только 2 мкA в спящем режиме и выходит из него в полностью синхронизированный активный режим не более, чем за 6 мкс. Подсемейства серии MSP430 включают различные наборы периферийных модулей, представляя собой высокоинтегрированные системы. На рис.1 показана блок-диаграмма микроконтроллеров MSP430x32x.


Рис. 1 Блок-схема микроконтроллеров серии MSP430x32x

1.2 Описание схемы

Схема состоит из термистора (Radio Shack #271–110), опорного резистора сопротивлением 10кОм и конденсатора 0.1 мкФ. Детали подключаются непосредственно к MSP430, как показано на рис.2. Если требуется визуальное отображение информации, то может быть подключен ЖКИ. Прибор осуществляет измерения путём заряда конденсатора до уровня примерно равного VCC, последующего разряда его через опорный резистор с одновременным подсчётом внутренних тактов до того момента, пока на входе CIN не появится лог. «0». Далее конденсатор снова заряжается до значения, близкого к VCC и разряжается через термистор, при этом также подсчитываются тактовые импульсы. Неизвестное сопротивление резистора вычисляется как отношение числа тактов при разряде конденсатора термистором к числу тактов при разряде через опорный резистор и последующим домножением на известное значение сопротивления опорного резистора. Программа вычисляет сопротивление термистора, переводит это значение в температуру, переводит её в градусы Фаренгейта и отображает значение на ЖКИ. Несмотря на то, что текущее значение отображается непрерывно, MSP430 проводит основную часть времени в режиме пониженного потребления 3 (LPM3). Это время может быть использовано для проведения дополнительных измерений, для связи с другими устройствами или для осуществления вычислений.


Рис.2 Схема цифрового термометра

Все три элемента схемы могут быть подключены непосредственно к отладочной плате Texas Instruments MSP430 starter kit (STK) или evaluation kit (EVK). Остальные соединения, в том числе, требуемые для ЖКИ уже присутствуют на платах STK и EVK. Приведенный пример программы полностью помещается в 512 байт ОЗУ, имеющейся в наличии на отладочных платах STK и EVK, базирующихся на микроконтроллерах MSP430x325. Программа может быть загружена в ОЗУ через последовательный порт компьютера с использованием имеющегося на платах интерфейса.

2 Описание работы

Формула времени разряда конденсатора имеет следующий вид:

Значения C, fclock, и Vref/Vcc известны. Значение резистивного датчика могут быть получены из следующей формулы, с учётом того, что сопротивление опорного резистора это известная и постоянная величина:

Окончательная формула для схемы на рис.2 будет иметь вид:

3 Возможности таймера – порта Timer Port

Модуль таймера – порта поддерживает различные комбинации резистивных датчиков и опорных резисторов. Если требуется проведение нескольких различных измерений в пределах одного диапазона сопротивлений, можно использовать только один опорный резистор. В противном случае, для каждого датчика нужно использовать свой опорный резистор. (см. Рис 3). Все неиспользуемые выводы могут быть использованы в качестве цифровых выходов. Модуль Timer Port также включает в себя 2 8-битных счётчика с возможностью каскадирования в 1 16-битный счётчик. В случае, если эти счётчики не используются таймером – портом, они могут быть использованы для других целей. Дополнительную информацию можно найти в Metering Applications Report (файл SLAAE10C) и Architecture Guide and Module Library User’s Guide (файл SLAUE10B).


Рис. 3 Пример применения модуля таймера-порта.

4 Заключение

Timer Port, присутствующий в семействе MSP430x3xx, представляет собой весьма универсальный модуль. С его помощью можно измерять показания разнообразных резистивных датчиков в комбинациях с опорными резисторами. Детали схемы могут быть непосредственно подключены к модулю Timer Port, формируя, таким образом, полноценную измерительную систему с минимальным количеством навесных элементов. Совместно с модулем таймера-порта, 16-разрядное ЦПУ с ультранизким потреблением демонстрирует непревзойдённые характеристики MIPS на ватт.

;****************************************************************************
;****************************************************************************
; Системные определения для 320 STK/EVK
;****************************************************************************

TOOL        SET     0                   ; 0 = STK/EVK ОЗУ
                                        ; 1 = Симулятор
                                        ; 2 = Встроенное ПЗУ
STACK       EQU     003DEH              ; Указатель стека
RAM_ORIG    EQU     00200H              ; Начальный адрес памяти ОЗУ
ROM_ORIG    EQU     0C100H              ; Начальный адрес памяти ПЗУ
            IF      TOOL = 0
I_VECTORS   EQU     003FFH              ; Вектора прерываний в ОЗУ
MAIN        EQU     RAM_ORIG+20H        ; Стартовый адрес программы в ОЗУ
BTLOAD      EQU     035H                ; Прерывания раз в 0,5 сек.
            ELSEIF  TOOL = 1
I_VECTORS   EQU     0FFFFH              ; Вектора прерываний в ПЗУ
MAIN        EQU     ROM_ORIG            ; Стартовый адрес программы в ПЗУ
BTLOAD      EQU     011H                ; Частые прерывания (не 1 сек)
            ELSE
I_VECTORS   EQU     0FFFFH              ; Вектора прерываний в ПЗУ
MAIN        EQU     ROM_ORIG            ; Стартовый адрес программы в ПЗУ
BTLOAD      EQU     035H                ; Прерывания раз в 0,5 сек.
.ENDIF

;****************************************************************************
; Определения для АЦП на базе модуля TIMER PORT
;****************************************************************************
TPCTL       EQU     04BH                ; Регистр управления модулем
                                        ; TIMER PORT (04BH)
TPSSEL0     EQU     040H                ; Источник тактирования:  0=CMP, 
                                        ; 1=ACLK (Бит 6 в TPCTL)
ENB         EQU     020                 ; Контроль сигнала EN1 в TPCNT1
                                        ; 1(+ENA=1)=CMP (Бит 5 в TPCTL)
ENA         EQU     010H                ; Контроль сигнала EN1 в TPCNT1
                                        ; 1(+ENB=1)=CMP (Бит 4 в TPCTL)
EN1         EQU     008H                ; Сигнал ENABLE в TPCNT1 только 
                                        ; для чтения (Бит 3 в TPCTL)
RC2F        EQU     004H                ; Флаг переполнения TPCNT2 
                                        ; (Бит 2 в TPCTL)
EN1FG       EQU     001H                ; Флаг EN1 (Бит 0 в TPCTL)
TPIE        EQU     004H                ; Разрешение прерываний от TIMER 
                                        ; PORT (Бит 3 в IE2)
TPCNT1      EQU     04CH                ; Младший байт счётчика
TPCNT2      EQU     04DH                ; Старший байт счётчика
TP          EQU     04EH                ; Регистр данных TP (0–5= Выход TP,
                                        ; 6=CPON,7 = B16 = 2x8 Бит или 
                                        ; 1x16Бит счётчик)
B16         EQU     080H                ; Раздельные таймеры (0) или
                                        ; один 16-битный (1)
CPO         EQU     040H                ; Компаратор выкл (0) / вкл (1)
TPDMAX      EQU     002H                ; Позиция бита выхода TPD.MAX
                                        ; (2=Бит1=TPD.1)
TPE         EQU     04FH                ; Регистр разрешения выходов 
                                        ; (0–5 = Биты разрешения TPD
                                        ; 6–7=источник тактирования TPCNT2)
MSTACK      EQU     03D2H               ; 1-е слово стека результата
PRESET      EQU     0E8H                ;Предустановка TPCNT2 для заряда С 
                                        ; счёт останавливается при 
                                        ; переполнении TPCNT2, значение  
                                        ; рассчитано на постоянную
                                        ; времени 6RC

;****************************************************************************
; Определения управляющих регистров
;****************************************************************************
IE1         EQU      0H                 ; Регистр разрешения прерываний 1
IE2         EQU      01H                ; Регистр разрешения прерываний 2
P01IE       EQU      08H                ;Разрешение прерываний от P0.1 в IE1
BTIE        EQU      080H               ; Разрешение прерываний от BASIC 
                                        ; TIMER в  IE2
IFG1        EQU      02H                ; Регистр флагов прерываний 1
IFG2        EQU      03H                ; Регистр флагов прерываний 2
LCDCTL      EQU      030H               ; Регистр управления ЖКИ
LCDM1       EQU      031H               ; Первая ячейка памяти ЖКИ
BTCTL       EQU      040H               ; Регистр управления BASIC TIMER 
BTCNT1      EQU      0046H              ; Счётчик 1 BASIC TIMER
BTCNT2      EQU      0047H              ; Счётчик 2 BASIC TIMER
WDTCTL      EQU      0120H              ; Регистр управления WATCHDOG 
WDTHOLD     EQU      080H               ; Маска останова WATCHDOG
WDT_KEY     EQU      05A00H             ; Ключ доступа к WATCHDOG
WDT_STOP    EQU      05A80H             ; WATCHDOG маска + ключ
GIE         SET      8H                 ; Общее разрешение прерываний
CPUOFF      SET      10H                ; Бит выключения CPU
OSCOFF      SET      20H                ; Бит выключения генератора
SCG0        SET      40H                ; Контроль системного 
; тактирования, бит0
SCG1        SET      80H                ; Контроль системного 
; тактирования, бит1

LPM0        SET      CPUOFF             ; Биты установки режима LPM0
LPM1        SET      SCG0+CPUOFF        ; Биты установки режима LPM1
LPM2        SET      SCG1+CPUOFF        ; Биты установки режима LPM2
LPM3        SET      SCG1+SCG0+CPUOFF   ; Биты установки режима LPM3
LPM4        SET      OSCOFF+CPUOFF      ; Биты установки режима LPM4

;***************************************************************************
; Служебные регистры для вычисления сопротивления датчика
;***************************************************************************

MLTPLR_HW   EQU      R5
TEN_K       EQU      R6
BITTEST     EQU      R7
MRESLT_HW   EQU      R8
MRESLT_LW   EQU      R9
LPCNTR      EQU      R10
RESULT      EQU      R11

;***************************************************************************
; Начало программы
;***************************************************************************
SECT        ”MAIN”,MAIN
RESET       MOV #STACK,SP               ; Инициализация указателя стека
;***************************************************************************
; Конфигурация периферии
;***************************************************************************
SETUP
SETUPINT    MOV.B #P01IE,&IE1           ; Разрешить P0.1/UART для 
; монитора  RS232
            MOV.B #BTIE+TPIE,&IE2       ; Разрешить прерывания от B.TIMER, & TMR. PORT 
            CLR.B &IFG1                 ; Очистить все флаги прерываний
            CLR.B &IFG2                 ; 
            EINT                        ; Разрешить прерывания
SETUPWDT    MOV #WDT_STOP,&WDTCTL 
; Остановить WATCHDOG TIMER
SETUPLCD    MOV.B #0FFH,&LCDCTL         ; ЖКИ STK, все сегменты, 4MUX
SETUPBT     MOV.B #BTLOAD,&BTCTL        ; Загрузить требуемую частоту
; прерываний в BASIC TIMER
            CLR.B &BTCNT1               ; Очистить счётчик BT 1
            CLR.B &BTCNT2               ; Очистить счётчик BT 2
CLEARLCD    MOV #15,R6                  ; Очистить 15 ячеек памяти ЖКИ
CLEAR1      MOV.B #0,LCDM1–1(R6)        ; записав туда «0»
            DEC R6                      ; Вся памяти ЖКИ очищена?
            JNZ CLEAR1                  ; нет, чистим дальше

;***************************************************************************
; Начало основной программы
;***************************************************************************
BEGIN       BIS #LPM3,SR                ; Установить SR-биты для LPM3
;***************************************************************************
;Подпрограмма измерения с запрещёнными прерываниями. TP.2–.5 не используются
;поэтому переписаны. Используются только TPD.0 & 1.
;Начальная инициализация: Указатель стека = 0, Начало с TPD.1
;16–битный таймер, тактирование от MCLK, CIN разрешает счёт
;***************************************************************************

MEASURE     PUSH.B #TPDMAX              ; Сохранить в стеке для 
; последующего  использования
            CLR R8                      ; Указатель для стека результата
MEASLOP     MOV.B #(TPSSEL0*3)+ENA,&TPCTL 
;TPCNT1 CLK=MCLK, EN1=1

;***************************************************************************
; Конденсатор С заряжается на протяжении t > 5 ?. Используются выходы N–1
;***************************************************************************

            MOV.B #B16+TPDMAX–1,&TPD
;один 16-битный счётчик,
; выбор выходов заряда
            MOV.B #TPDMAX–1,&TPE        ; Разрешить выходы заряда
            MOV.B #PRESET,&TPCNT2       ; Загрузить время заряда
            BIS #CPUOFF,SR              ; Режим пониженного потребления
            MOV.B @SP,&TPE              ; Разрешить только текущий датчик
            CLR.B &TPCNT2

;***************************************************************************
; Запретить все прерывания, чтобы обеспечить непрерывную работу таймера и 
; разряд  конденсатора 
;***************************************************************************

            DINT                        ; Запрет прерываний
            CLR.B &TPCNT1               ; Очистить младший байт таймера
            BIC.B @SP,&TPD              ; Переключить все датчики в «0»
            MOV.B #(TPSSEL0*3)+ENA+ENB,&TPCTL 
;TPCNT1 CLK=MCLK,
; разрешить вход CIN
            EINT                        ; Разрешить прерывания, общий старт
            BIS #CPUOFF,SR              ; Режим пониженного потребления

;***************************************************************************
; EN=0:Завершение преобразования: 2X8 бит результата в MSTACK
; Включить следующий датчик : если больше нет, завершение
;***************************************************************************

            MOV.B &TPCNT1,MSTACK(R8) 
; Сохранить результат в стеке
            MOV.B &TPCNT2,MSTACK+1(R8) 
; Сохранить старший байт результата
L$301       INCD R8                     ; Инкремент адреса
            RRA.B @SP                   ; Следующий выход TPD.X
            JNC MEASLOP                 ; Если C=1 – завершение
            INCD SP                     ; Убрать старший TPD из стека

;***************************************************************************
; Вычисление сопротивления датчика
;***************************************************************************
;Подпрограмма беззнакового умножения: MSTACK X TEN_K ? MRESLT_HW/MRESLT_LW
; Использованы регистры MSTACK, TEN_K, MLTPLR_HW, 
; MRESLT_LW, MRESLT_HW, BITTEST
;Подпрограмма беззнакового умножения с накоплением :
; (MSTACK X TEN_K) + MRESLT_HW|MRESLT_LW –> MRESLT_HW|MRESLT_LW
;***************************************************************************

            CALC_RES
            MOV #10000,TEN_K            ;Загрузить 10,000 десятичное в TEN_K
MPYU        CLR MRESLT_LW               ; 0 ? LSBS результата 
            CLR MRESLT_HW               ; 0 ? MSBS результата 

MACU        CLR MLTPLR_HW               ; 0 ? MSBS множителя 
            MOV #1,BITTEST              ; Регистр проверки бит
L$002       BIT BITTEST,MSTACK          ; Проверить текущий бит
            JZ L$01                     ; Если «0» ничего не делать
            ADD TEN_K,MRESLT_LW         ; Если «1» добавить множитель
                                        ; к результату
            ADDC MLTPLR_HW,MRESLT_HW
L$01        RLA TEN_K                   ; Множитель X 2
            RLC MLTPLR_HW               ;

            RLA BITTEST                 ; Проверить следующий бит
            JNC L$002                   ; Если бит в CARRY: завершить

;***************************************************************************
; Подпрограмма беззнакового деления 32–бита на  16-бит
; Использованы регистры (MSTACK+2), MRESLT_LW, RESULT, LPCNTR, MRESLT_HW
; MRESLT_HW MRESLT_LW / (MSTACK+2) ? RESULT Остаток в MRESLT_HW
; По выходу: CARRY = 0: OK CARRY = 1: Частное > 16 Бит
;***************************************************************************

DIVIDE      CLR RESULT                  ; Очистить RESULT
            MOV #17,LPCNTR              ; Инициализация счётчика
DIV1        CMP MSTACK+2,MRESLT_HW 
            JLO DIV2
            SUB MSTACK+2,MRESLT_HW
DIV2        RLC RESULT
            JC RES_2_F                  ;Ошибка: RESULT > 16 Бит
            DEC LPCNTR                  ; Декремент счётчика
            JZ DIV3                     ; 0: выход без ошибки
            RLA MRESLT_LW
            RLC MRESLT_HW
            JNC DIV1
            SUB MSTACK+2,MRESLT_HW
            SETC
            JMP DIV2
DIV3        CLRC                        ;Ошибки нет, C = 0

;***************************************************************************
; Перевод сопротивления датчика в градусы Фаренгейта для отображения
;***************************************************************************

RES_2_F
            CLR R12                      ; Указатель на значение в таблице R
            MOV #064H,R13                ; Поместить мин. темп.-1 в темп. 
                                         ; индикатор 
            JMP FIRST_CMP                ; При первом сравнении 1 не добавлять
CHECK_R     INCD R12                     ; Инкремент указателя на значение
                                         ; в таблице сопротивлений
            DADD #1,R13			; Десятичный инкремент счётчика
FIRST_CMP   CMP RESIS_TAB(R12),RESULT 
; Сравнить табличное значение
; с вычисленным сопротивлением
            JNC CHECK_R                  ; Переход, если R датчика 
; < табличного значения
; по адресу указателя

;***************************************************************************
;Отобразить ”F” и знак «°» на ЖКИ
;***************************************************************************

DISPLAY     MOV.B #A+E+F+G,LCDM1+1       ; ”F” ? дисплейная память ЖК
            MOV.B #A+B+F+G,LCDM1+2       ; ” °” (знак градуса) ? дисплейная 
                                         ; память ЖК

;***************************************************************************
; Отобразить значение, хранящееся в R13 в формате BCD на ЖКИ
;***************************************************************************

            MOV R13,R12                  ; Копировать число в виде  BCD в R12
            MOV #LCDM1+4,R14             ;Младшая цифра в памяти ЖКИ? R14
            BIC #0FFF0H,R13              ; Погасить всё, кроме младшей цифры
            MOV.B LCD_TAB(R13),0(R14) 
; Отправить младшую цифру в ЖКИ
            MOV R12,R13                  ; Восстановить значение в R13
            RRA R13                      ; 4 сдвига 
            RRA R13
            RRA R13
            RRA R13
            BIC #0FFF0H,R13              ; Погасить всё, кроме младшей цифры
            MOV.B LCD_TAB(R13),1(R14) 
; Отправить старшую цифру в ЖКИ
            JMP BEGIN                    ; Переход к началу программы

;***************************************************************************
; Подпрограмма обработки прерываний базового таймера BASIC TIMER:
; ЦПУ по возвращении остаётся в активном режиме благодаря очистке битов LPM3 в 
; статусном регистре  SR в стеке. 
;***************************************************************************

BTINT       BIC #LPM3,0(SP)	             ;Очистить в SR биты LPM3, вверху стека
RETI
;***************************************************************************
; Подпрограмма обработки прерываний  таймера – порта TIMER PORT:
; ЦПУ при возвращении по RETI остаётся в активном режиме 
;***************************************************************************

TPINT       CLR.b &TPCTL                 ; Очистить флаги прерываний TP, 
                                         ; остановить счёт
            BIC #LPM3,0(SP)              ;Очистить в SR биты LPM3, вверху стека
            RETI

;***************************************************************************
; ЖКИ модуля STK
;***************************************************************************
LCD_TYPE
A           EQU	01H
B           EQU	02H
C           EQU	10H
D           EQU	04H
E           EQU	80H
F           EQU	20H
G           EQU	08H
H         EQU	40H
LCD_TAB BYTE A+B+C+D+E+F            ; Отображает”0”
.BYTE B+C                           ; Отображает”1”
.BYTE A+B+D+E+G                     ; Отображает”2”
.BYTE A+B+C+D+G                     ; Отображает”3”
.BYTE B+C+F+G                       ; Отображает”4”
.BYTE A+C+D+F+G                     ; Отображает”5”
.BYTE A+C+D+E+F+G                   ; Отображает”6”
.BYTE A+B+C                         ; Отображает”7”
.BYTE A+B+C+D+E+F+G                 ; Отображает”8”
.BYTE A+B+C+D+F+G                   ; Отображает”9”
;******************************************************************************
; Таблица сопротивлений 65–99 °F. Значения = KОмы X1000 – в 3 децимальных цифры
;******************************************************************************

.EVEN                               ; Выравнивание по чётному адресу
RESIS_TAB           WORD    12953   ;65 F
.WORD   12666
.WORD   12378
.WORD   12090
.WORD   11858
.WORD   11626                        ;70 F
.WORD   11393
.WORD   11161
.WORD   10929
.WORD   10697
.WORD   10464                        ;75 F
.WORD   10232
.WORD   10000
.WORD   9813
.WORD   9625
.WORD   9438                        ;80 F
.WORD   9250
.WORD   9063
.WORD   8875
.WORD   8688
.WORD   8500                        ;85 F
.WORD   8313
.WORD   8161
.WORD   8008
.WORD   7856
.WORD   7703                        ;90 F
.WORD   7551
.WORD   7398
.WORD   7246
.WORD   7093
.WORD   6941                        ;95 F
.WORD   6817
.WORD   6694
.WORD   6570
.WORD   6446		;99 F

;*****************************************************************************
; Вектора прерываний 
;*****************************************************************************
.EVEN                          ; Выравнивание по чётному адресу
.SECT ”INT_VECT”,I_VECTORS–31
.WORD RESET                    ; PORT0, Биты 2 .. 7
.WORD BTINT                    ; BASIC TIMER
.WORD RESET                    ; Нет источника
.WORD RESET                    ; Нет источника 
.WORD RESET                    ; Нет источника
.WORD TPINT                    ; TIMER PORT
.WORD RESET                    ; Нет источника
.WORD RESET                    ; Нет источника	
.WORD RESET                    ; Нет источника	
.WORD RESET                    ; Нет источника
.WORD RESET                    ; WATCHDOG/TIMER, Режим таймера
.WORD RESET                    ; Нет источника
.WORD RESET                    ; UART
.WORD RESET                    ; P0.0
.WORD RESET                    ; NMI, Сбой генератора
.WORD RESET                    ; POR,Внеш. Reset, WATCHDOG
.END

плазменные телевизоры