Цифровой термометр на базе контроллера 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;подпрограмма задерж