Цифровой термометр на базе контроллера PIC16F877

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?мер/счетчик с 8-разрядным программируемым предделителем и выходным делителем

Два модуля сравнение/захват/ШИМ (ССР):

16-разрядный захват (макс. разрешающая способность 12.5 нс)

16-разрядное сравнение (макс. разрешающая способность 200 нс)

10-разрядный ШИМ

Многоканальное 10-разрядное АЦП

Последовательный синхронный порт MSSP

ведущий/ведомый режим SPI

ведущий/ведомый режим I2C

Последовательный синхронно-асинхронный приемопередатчик USART с поддержкой детектирования адреса

Ведомый 8-разрядный параллельный порт PSP с поддержкой внешних сигналов -RD, -WR, -CS (только в 40/44-выводных микроконтроллерах)

Детектор пониженного напряжения (BOD) для сброса по снижению напряжения питания (BOR)

 

3.Описание и расчёт схемы электрической принципиальной

цифровой термометр микропроцессорный программирование

Входная цепь вместе с внутренним АЦП микроконтроллера представляет собой схему преобразования напряжение - код. При изменении температуры сопротивление терморезистора изменяется, а, следовательно, изменяется и входное напряжение на микропроцессоре. Напряжение на входе RA0 преобразуется в 10-битный цифровой двоичный код с шагом квантования

Схема включает в себя два операционных усилителя марки К140УД6. DA1 исключает влияние делителя напряжения на сопротивление терморезистора, а DA2 необходим для согласования терморезистора с микроконтроллером.

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

Для измерений используется терморезистор с отрицательным ТКС КМТ-8. Его номинальное сопротивление Rt = 510 Ом.

 

Терморезистор имеет нелинейную зависимость R(T), для её линеаризации параллельно терморезистору поставим резистор R3 = 1000 Ом.

Рассчитаем сопротивления делителя напряжения:

 

,

 

примем R1 = 1 КОмиR2 = 9 КОм.

Рассчитаем R*:

 

 

Рассчитаем конденсатор (на частоте 1 Гц):

4 = 10 КОм - по условию для операционных усилителей.

Рассчитаем ограничивающие сопротивления R5 - R11:

 

 

Рассчитаем значения сопротивлений резисторов R12, R13:

Транзистор КТ315А имеет статический коэффициент усиления тока базы ?=50, Максимальный ток в цепи коллектора равен:

 

 

Список литературы

 

1.Мэклин Э. Д. Терморезисторы.

2.Методические указания Микроконтроллеры PIC 16F877.- Новосибирск: НГТУ, 2002.

.Конспект лекций по дисциплине Вычислительная техника и информационные технологии. Кривецкий А. В.

 

Поз. обозн.НаименованиеКол.ПримечаниеС1Конденсатор КМ5 - 160 мкФ 1%1РезисторыR1, R3, R*МЛТ-0,25 - 1кОм 1%3R2МЛТ-0,25 - 9 кОм 1%1R4МЛТ-0,25 - 10 кОм 1%1R5-R11МЛТ-0,25 - 180 Ом 1%7R12, R13МЛТ-0,25 - 1.6 кОм 1%2RtТерморезистор КМТ-8 - 510 Ом 10%1ТранзисторыVT1, VT2КТ315А2МикросхемыDD1Микроконтроллер PIC16F8771DA1, DA2Операционный усилитель К140УД62Индикаторы знакосинтезирующиеHG1, HG2АЛ305А2НГТУ.ХХХ.ХХХ.21Лист12Изм.Лист№ докум.ПодписьДатаБлок-схема алгоритма программы

 

 

Объяснение некоторых операций программы:

0С соответствует сопротивление 340 Ом, следовательно напряжение на входе микроконтроллера будет: . Это значит, что от полученного кода необходимо отнять комбинацию, соответствующую этому напряжению. Найдём её:

В/1024 = 4,88 мВ - шаг измерения напряжения микроконтроллером;

.47/4.88 = 301 - вычитаемая комбинация.

Найдем шаг, соответствующий изменению температуры на 1С:

Т. е. полученную комбинацию нужно разделить на 14.

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

p=16f877

include p16f877.inc_1equ 0x21_0equ 0x22EQU 0x23EQU 0x24EQU 0x25b00000000;команда записи в аккумулятор;

movwfADRESS_1;копирует из аккумулятора в прямоуказанный регистр;

movwfADRESS_0СССССС2ССС3

BSFSTATUS, RP0;переход в первый банк

BCFSTATUS, RP1

movlwb10000000

movwfADCON1;настройка АЦП

CLRFTRISC;обнуление регистра, настройка PORTC на выход

movlwb00000111OPTION_REG;настройка TMR0STATUS, RP0;переход в нулевой банк

movlwb10000001

movwfADCON0;настройка АЦП

;----------------- тело цикла --------------------

preobrBSFADCON0, 2;установка флага GO/DONE

gggBTFSCADCON0, 2;пропустить следующую инструкцию, если битовое поле 2

;содержит 0

gotoggg

movfADRESH, 0;копировать содержимое регистра в аккумулятор

movwfADRESS_1;и записать его в переменную

movfADRESL, 0

movwfADRESS_0

CLRFSTATUS,C;сброс флага переноса

;вычитание 301b00101101;запись числа 45 в аккумуляторADRESS_0,1;вычитает содержание аккумулятора из регистра,

;сохраняет результат в регистре.

movfb00000001; запись числа 256 в аккумулятор (45+256=301)

SUBWFADRESS_1,1

BTFSCSTATUS, C

DECFADRESS_1,1;команда декремента, вычитает единицу из

;прямоуказанного регистра с сохранением результата в

;регистре;

CLRFSTATUS, C

;деление на 14

gotoLLL

delINCFCCC, 1;команда инкремента, прибавляет единицу к

;содержимому прямоуказанного регистра, сохраняет

;результат в регистре

LLLmovfb00001110; запись числа 14 в аккумулятор

SUBWFADRESS_0, 1

BTFSCSTATUS, CADRESS_1,1;выполняет декремент прямоуказанного регистра,

;осуществляет проверку равенства результата с 0, если да, ;то, пропускает следующую команду

gotodel;результат деления хранится в регистре ССС

movfCCC, 0;записываем содержимое регистра ССС в регистр ССС2

movwfCCC2

;выделение единиц и десятков

gotoLLL1INCFCCC3, 1;десяткиCCC2movlwb1010;единицыCCC2, 0STATUS, C

;вывод температуры на индикаторы

goto LLL2

movfCCC2, 0dec7PORTAPORTE

CALLdelay;команда вызова подпрограммы;

BCFPORTE, 1CCC3,0dec7PORTAPORTE, 0delayPORTEpreobr0x02;подпрограмма задерж