Разработка цифрового измерителя температуры на базе микроконтроллера AT90xx

Автор: Пользователь скрыл имя, 03 Мая 2014 в 19:25, курсовая работа

Краткое описание

В данном курсовом проекте рассматривается проектирование и создание цифрового регулятора температуры на базе микросхемы-термометра DS1620, который совмещает температурный датчик, схему управления и АЦП в одном кристалле, и микроконтроллера фирмы Atmel AT90S2313.

Оглавление

Введение 2
Анализ задачи. Выбор компонентов 3
Микроконтроллер 4
Цифровой датчик-термометр DS1620 6
Жидкокристаллический индикатор mt-10t7-7 10
Схема 15
Вывод 16
Приложение: Программа для микроконтроллера AT90S2313
на языке Assembler 17
Список литературы 39

Файлы: 1 файл

слил.doc

— 238.50 Кб (Скачать)

 

 

Описание интерфейса ЖКИ модуля

Сначала на шине выставляется адрес необходимого знакоместа, который фиксируется в регистре адреса при низком уровне на входе WRx (см.таблицу). Входы WR1 и ^WR2 защелкивают информацию, стоящую на шине, во внутренних регистрах статического типа. Внутри БИС эти входы объединены по схеме WR1 & ^WR2. Таким образом, информация запишется только при WR1 = “H” и WR2 = “L” одновременно. Такое решение осуществить функцию CS (выбор кристалла) при большом количестве модулей на шине, или если на шине имеются другие устройства.

При записи адреса знакоместа указатель тетрады сбрасывается в положение SGx(L). Запись данных производится в младшую тетраду при высоком уровне сигнала на входе А0 сигналом WRx. По этому же сигналу указатель тетрады данных переключается в положение SGx(H), сохраняя при этом тот же адрес знакоместа. Данные в старшую тетраду SGx(H) записываются аналогично младшей тетраде SGx(L). После записи второй тетрады содержимое регистра адреса инкрементируется и можно записывать данные в следующее знакоместо без записи адреса.

По адресу 0Fh расположен триггер блокировки шины. Запись в него DB0=”L” вызывает блокировку записи в БИС адресов и данных на 30 сигналов WRx. Разблокировка шины производится записью DB=”H” по адресу 0Fh.

После подачи питания содержимое регистров SGx не определено, поэтому при включении питания необходимо делать программную очистку регистров. Состояние триггера блокировки тоже не определено, поэтому перед началом вывода информации на индикатор необходимо произвести разблокировку шины. Разблокировка шины производится записью DB0=”H” по адресу 0Fh.

 

Вывод

В ходе данной курсовой работы был разработан цифровой регулятор температуры на базе термостатаDS1620 и микроконтроллера AT90S2313 с рабочим диапазоном температур -55˚С до 125˚С. Поддерживается заданная температура с помощью двух исполнительных органов: «нагревателя» и «охладителя». Текущая температура, а также значение верхнего и нижнего значения температурного коридора отображается на ЖКИ в градусах по Цельсию с точностью 0,5˚С.

 

Приложение: Программа для микроконтроллера AT90S2313 на языке Assembler

;*************************************************************************

;* Термостат на базе  микроконтроллера AT90S2313 *

;* с использованием микросхемы  термодатчика DS1620 *

;*************************************************************************

;*************************************************************************

;* Название: Цифровой регулятор  температуры

;* Дата разработки: 20.06.02

;* Объект: AVR микроконтроллер AT90S2313 и термостат DS1620

;* Автор: Бендюк Максим  Сергеевич

;*

;*

;*************************************************************************

.include "2313DEF.INC"

;***** Константы

.equ preset=192 ;T/C0 Preset constant (256-64)

.def result=r16 ;Result and intermediate data

.def temp=r16 ;временный регистр

.def temp1=r17 ;временный регистр

.def temp2=r18 ;временный регистр

.def temp3=r19 ;временный регистр

.def ramsize=r19 ;размер блока

.def tmode=r22 ;Регистр режима

.def key=r20 ;Регистр нажатой  клавиши

.def keyc=r21 ;Счетчик для прграммы обработки нажатия клавиши

.def TMIN=r22 ;ячейка с содержимым  минимальной температуры термостата

.def TMINL=r22 ;младший

.def TMINH=r23 ;старший

.def TMAX=r24 ;ячейка с содержимым  максимальной температуры термостата

.def TMAXL=r24 ;младший

.def TMAXH=r25 ;старший

.def TNORM=r26 ;ячейка с содержимым  текущей температуры термостата

.def TNORML=r26 ;младший

.def TNORMH=r27 ;старший

.equ DLCD=$66 ;стартовый адрес SRAM для буфера индикатора

;маладшая ячейка соответствует  левому символу

;на дисплее

.def fbinL =r16;двоичное значение, младший байт

.def fbinH =r17;двоичное значение, старший байт

;биты портов

.equ K1 =3 ;бит первой кнопки

.equ K2 =4 ;бит второй кнопки

.equ K3 =5 ;бит третьей кнопки

.equ WR1 =5 ;бит WR1

.equ WR2 =6 ;бит WR2

.equ A0 =7 ;бит A0

.equ DQ =0 ;бит DQ канал данных  термостата

.equ CLK =1 ;бит CLK канал синхронизации  данных

;*************************************************************************

;*

;* PROGRAM START - программа начинает  выполняться с этого места

;*

;*************************************************************************

.cseg

.org $0000

rjmp RESET;Reset handle

.org $0020

RETI

RETI

RETI

RETI

RETI

RETI

RETI

RETI

RETI

RETI

;*************************************************************************

; настройка констант

SETCONST:

ldi temp,20

mov TMINL,temp

ldi temp,0

mov TMINH,temp

ldi temp,25

mov TMAXL,temp

ldi temp,0

mov TMAXH,temp

ret

;*************************************************************************

; передача констант

OUTCONST:

mov temp,TMINl

mov temp1,TMINH

ldi temp2,2 ;запись нижней  температуры

rcall TERMOUT2

mov temp,TMAXL

mov temp1,TMAXH

ldi temp2,1 ;запись нижней  температуры

rcall TERMOUT2

ldi temp1,0xee ; инициализация  термостата

rcall TERMOUT1

ret

;*************************************************************************

; Натройка портов ввода  вывода

port_set:

ldi result,$ff ;PORTB настраивается  на вывод

out DDRB,result ;для работы с  индикатором

ldi result,$00 ;все биты устанавливаются  в ноль

out PORTB,result;PORTD настраивается  для работы

ldi result,0b01000011 ; с клавиатурой  и

out DDRD,result ;микросхемой термометра

ldi result,0b11111001 ; с клавиатурой  и

out PORTD,result ;микросхемой термометра

ret

;*************************************************************************

;* очистка буфера ЖКИ

CLRLCD:

ldi ramsize,10 ;очистка буфера  индикатора

ldi temp,0

ldi ZH,high(DLCD)

ldi ZL,low(DLCD)

clrlcdloop:

st Z+,temp

dec ramsize

brne clrlcdloop ;если не закончили  повторить

rjmp LCDOUT

;*************************************************************************

; Вывод содержимого буфера  на индикатор

LCDOUT:

ldi temp,low(DLCD) ;установить Z как  указатель на буфер

mov ZL,temp ;индикатора

ldi temp,high(DLCD)

mov ZH,temp

ldi ramsize,10

LCDOUT1:

mov temp,ramsize ;запись в индикатор  адреса символа

andi temp,0b00001111

out PORTB,temp

cbi PORTB,A0

sbi PORTB,WR1

cbi PORTB,WR1

ld temp1,Z+ ; получить байт из DLCD

mov temp,temp1

andi temp,0b00001111 ;получить младшую тетраду

sbrs temp,A0

out PORTB,temp

sbi PORTB,WR1

cbi PORTB,WR1

mov temp,temp1

swap temp

andi temp,0b00001111 ;получить старшую тетраду

sbrs temp,A0

out PORTB,temp

sbi PORTB,WR1

cbi PORTB,WR1

dec ramsize ;

brne LCDOUT1 ;если не закончили  повторить

ret

;*************************************************************************

;* вывод готовой строки в буфер и вывод буфера на ЖКИ

;* temp - номер строки

;* ramsize - количество выводимых  символов

STRLCDD:

ldi YH,high(tcstr)

ldi YL,low(tcstr)

add temp,temp

add temp,temp

add YL,temp

ldi ramsize,4

;*************************************************************************

;* вывод готовой строки  в буфер и вывод буфера на  ЖКИ

;* Y - указатель на строку temp - положение

;* ramsize - количество выводимых  символов

STRLCD:

ldi ZH,high(DLCD)

ldi ZL,low(DLCD)

strtolcdloop:

ld temp,Y+

st Z+,temp

dec ramsize

brne strtolcdloop ;если не закончили повторить

rjmp LCDOUT

;*************************************************************************

;* получение данных из  термостата

;* temp2 - команда temp - первые 8 бит temp1 - 9-ый бит

TERMIN:

ldi ramsize,8

terminloop:

sbi PIND,DQ

sbrc temp2,0

cbi PIND,DQ

sbi PIND,CLK

cbi PIND,CLK

ror temp2

dec ramsize

brne terminloop ;если не закончили  повторить

ldi ramsize,0x8

sbi DDRD,DQ

termindloop:

sbi PIND,DQ

sbrc temp,0

cbi PIND,DQ

sbi PIND,CLK

cbi PIND,CLK

ror temp2

dec ramsize

brne termindloop ;если не закончили повторить

sbi PIND,DQ

sbrc temp1,0

cbi PIND,DQ

sbi PIND,CLK

cbi PIND,CLK

cbi DDRD,DQ

ret

;*************************************************************************

;* передача одного байта  данных на термостат

;* temp2 - команда

TERMOUT1:

ldi ramsize,8

termout1loop:

sbi PIND,DQ

sbrc temp2,0

cbi PIND,DQ

sbi PIND,CLK

cbi PIND,CLK

ror temp2

dec ramsize

brne termout1loop ;если не закончили  повторить

ldi ramsize,0x8

ret

;*************************************************************************

;* передача одного байта  данных на термостат и 9 бит

;* temp2 - команда temp - первые 8 бит temp1 - 9-ый бит

TERMOUT2:

ldi ramsize,8

termout2loop:

sbi PIND,DQ

sbrc temp2,0

cbi PIND,DQ

sbi PIND,CLK

cbi PIND,CLK

ror temp2

dec ramsize

brne termout2loop ;если не закончили повторить

ldi ramsize,0x8

termout2loopdat:

clc

sbi PIND,CLK

sbic PIND,DQ

sec

cbi PIND,CLK

ror temp2

dec ramsize

brne termout2loopdat ;если не закончили повторить

ldi temp1,0

sbi PIND,CLK

sbic PIND,DQ

ldi temp1,1

cbi PIND,CLK

cbi DDRD,DQ

ret

;*************************************************************************

;* получение кода нажатой клавиши если она нажата более 20 мс

;* код кнопки находится  в регистре key если сброшен бит Z

KEYPRESS:

ldi temp1,20 ;количество попыток  для гашения

;дребезга контактов

keyloop:

in temp,PIND

andi temp,0b00111000

breq keynopress

sbic PIND,K1

ldi key,1

sbic PIND,K2

ldi key,2

sbic PIND,K3

ldi key,3

dec temp1

brne keyloop ;если не закончили  повторить

keynopress:

and key,key

ret

;*************************************************************************

;* ожидание отпускания  клавиши

KEYUP:

ldi temp1,20 ;количество попыток для гашения

;дребезга контактов

keyuloop:

in temp,PIND

andi temp,0b001110000

breq unpress

dec temp1

brne KEYUP ;если не закончили  повторить

unpress:

and key,key

ret

;*************************************************************************

; программа переводит  температуру в зависимости от  режима

; и выводит на индикатор  для индикации

; calckterm

outTmax:

mov fbinL,TMAXL

mov fbinH,TMAXH

rjmp outterm

outTmin:

mov fbinL,TMAXL

mov fbinH,TMAXH

rjmp outterm

calckterm:

mov temp,tmode

rcall STRLCD

mov fbinL,TNORML

mov fbinH,TNORMH

Информация о работе Разработка цифрового измерителя температуры на базе микроконтроллера AT90xx