4. Разработка алгоритма работы микроконтроллера

Программа работы микроконтроллера заключается в следующем:

при нажатии кнопки RESET (SB1) производится непрерывный (циклический) опрос датчика и сохранение полученных значений температуры в ОЗУ.

непрерывлый вывод полученных значений температуры на ЖКИ индикатор (цифровое отображение информации на экране)

формирование сигнала предупреждения с помощью блока светодиодов в случае выхода значения температуры за пределы 300С<Т<400С (согласно техническому заданию).

Алгоритм программы приведен на рисунке 4.1.

Первым действием в программе производятся начальные установки микроконтроллера. В них устанавливается указатель стека на последнюю ячейку ОЗУ, исходное состояние каналов связи с датчиками температуры и UART, скорость обмена по UART, разрешаются прерывания от таймера/счетчика0 и от UART, переписывается количество и индивидуальные адреса датчиков температуры из EEPROM в ОЗУ, в регистры записываются необходимые константы.

Когда начальные установки завершены, начинается часть программы, которая производит опрос датчика температуры. Она будет циклически повторятся, пока подводится питание к микроконтроллеру или пока не возникнет запрос на прерывание. Опрос датчика температуры начинается с сигнала сброса на линии (блок 2 рисунок 4.1) Затем следует команда игнорирования адреса датчика температуры SKIP ROM [CCh].

Команда начала измерения температуры CONVERT T [44h] (блок 4, рисунок 4.1) разрешает преобразование значений температуры в цифровой вид для датчика.

Рисунок 4.1 – Алгоритм работы микроконтроллера

Аналого-цифровое преобразование значений температуры занимает время от 750 мс до 800 мс. Поэтому, чтобы получить правильное значение температуры, необходимо выждать паузу 800 мс (блок 5, рисунок 4.1). Пауза выдерживается с помощью таймера/счетчика 0. Во время паузы можно совершать другие действия (например, произвести обмен данными с компьютером или вывести результаты на ЖКИ).

После паузы производится опрос датчика. Опрос датчика начинается с сигнала сброса на линии связи с датчиком (блок 6, рисунок 4.1). После сигнала сброса и ответного сигнала от датчика следует команда MATCH ROM [55h]. Эта команда сообщает датчику, что после неё на линии связи будет выставлен индивидуальный 64-х битовый адрес датчика. После того, как адрес выставлен на линии, датчик температуры сравнивает выставленный адрес со своим собственным адресом, и, после этого к работе с микроконтроллером датчик готов.

В блоке 7 производится чтение значения температуры и запись его в соответствующие ячейки ОЗУ.

В блоке 8 производится ветвление программы: если измеренное значение температуры не выходит за пределы 300С<Т<400С , то результат выводится на экран ЖКИ (блок 9). Если же измеренное значение температуры выходит за пределы диапазона, то загорятся световые индикаторы: VD1- если температура меньше 30 0С или VD2 –если больше 400С (блок 10).

Если необходимо продолжать измерять температуру (блок 11), то переходят к блоку 4, если нет, то тогда происходит завершение программы.

Программа работы микроконтроллера для измерения температуры приведена в приложении А.


Заключение

В данном курсовом проекте был разработан цифровой термометр, позволяющий снимать температуру датчиком температуры ТМР35, обрабатывать полученную информацию и выводить результат измерений в цифровом виде на экран ЖК индикатора. Также с помощью последовательного интерфейса возможна их передача на экран персонального компьютера для получения и сохранения неограниченного количество этих значений, проведения статистического анализа и слежение за изменением температуры во времени для разных этапов измерения.

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

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


Список источников информации

1. Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному. Изд.2-е, испр. И доп. – М.: СОЛОН- Пресс, 2006. 304с.- (Серия «Биб-лиотека инженера»).

2. Китаев Ю.В. Основы программирования микроконтроллеров AT MEGA128 и 68HC908. Учебное пособие : СПб: СпбГУ ИТМО, 2007, 107с.

УДК 681.32

3. Low Voltage Temperature Sensors. TMP35/TMP36/TMP37

4. http://pdfserv.maxim-ic.com/arpdf/DS18S20.pdf. Датчики для измерения температуры.

5. Температурные измерения. Справочник./ Геращенко О.А. Гордов А.Н., Еремина А.К., и др.; отрв. Ред. Геращенко О.А.; АН УССР Ин-т проблем энергосбережения. – Киев: Наук. думка, 1989г. 704 с.

6. http://www.chip-dip.ru/product0/61922.aspx Кнопки тактовые.


Приложение А

Текст программы

; Системные определения для 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(Бит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 для S232

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 &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 ;INC указат.на знач.в таб.cопрот.

DADD #1,R13 ;Десятичный инкремент счётчика

FIRST_CMP CMP RESIS_TAB(R12),RESULT

;Сравнить табличное значение с вычисленным сопротивлением

JNC CHECK_R ;Переход,если R датч.<табличного

;по адресу указателя

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

DISPLAY MOV.B #A+E+F+D,LCDM1+1 ;”С” ? дисплейная память ЖК

MOV.B #A+B+F+D,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 ; Переход к началу программы

; ЖКИ модуля STK

LCD_TYPE

A EQU01H

B EQU02H

C EQU10H

D EQU04H

E EQU80H

F EQU20H

G EQU08H

H EQU40H

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”

; Табл.сопротив.30–40 °C. Значения = KОмыX1000–в 3 децимальных цифры

.EVEN ; Выравнивание по чётному адресу

RESIS_TAB

.WORD 12953 ;300C

.WORD 12666

.WORD 12378

.WORD 12090

.WORD 11858

.WORD 11626

.WORD 11393

.WORD 11161

.WORD 10929

.WORD 10353 ;400C

; Вектора прерываний

.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


Информация о работе «Цифровой термометр на микропроцессоре AVR-MEGA 128»
Раздел: Коммуникации и связь
Количество знаков с пробелами: 32312
Количество таблиц: 0
Количество изображений: 8

Похожие работы

Скачать
31387
2
0

... Какие специализированные команды необходимо применять для опроса датчика? 2.3 Запуск и выполнение Скомпилированная программа представляет собой файл типа cof, который прошиваем на микроконтроллер ATmega 128 семейства AVR. Соединяем компоненты рабочей модели прибора, получаем сигнал с температурного датчика, считываем температуру окружающей среды. 3. Список используемой литературы ...

Скачать
114489
21
10

... : следить за загрязненностью и загазованностью производственных помещений, поддержание температурно-влажностного режима. Заключение В данном дипломном проекте, который называется “охранная система с дистанционным управлением” разработано устройство, предназначенное для охраны материальных ценностей от пожара и проникновения злоумышленников. Устройство подключается к персональному компьютеру ...

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


Наверх