Цифровой термометр на базе контроллера PIC16F877
Содержание
Введение
Техническое задание
1. Структурная схема цифрового
термометра
2. Выбор микропроцессорного
комплекта
. Описание и расчёт схемы
электрической принципиальной
Список литературы
Принципиальная схема
Перечень элементов
Блок-схема алгоритма программы
Текст программы
Введение
В настоящее время более тридцати зарубежных фирм
выпускают микроконтроллеры массового применения с разрядностью 8 бит, недорогие
и пригодные для использования в самых разнообразных приложениях. Однако именно
микроконтроллеры серии PIC
фирмы Microchip®
Technology
Inc. переживают
последние три-четыре года в России поистине взрывной рост популярности. Эти
микроконтроллеры также крайне популярны во всём мире, как у производителей
электронной техники, так и среди радиолюбителей.
Причиной такой популярности является мощная и
продуманная поддержка разработчиков со стороны фирмы и низкая стоимость
микросхем. Кроме того сам продукт обладает целым рядом неоспоримых достоинств.
Микроконтроллеры PIC
фирмы Microchip®
объединили в себе все передовые технологии, применяемые в производстве
микроконтроллеров: развитую RISC-архитектуру,
минимальное энергопотребление при высоком быстродействии, ППЗУ, программируемое
пользователем, функциональную законченность. Немаловажное значение имеет возможность
защиты кода программы от несанкционированного копирования и использования.
Чёткая и продуманная внутренняя структура
контроллеров и небольшая, но мощная система команд с интуитивно понятной
мнемоникой значительно облегчают процесс изучения контроллеров PIC
и написание для них программ.
Для производителей электронной аппаратуры
микроконтроллеры PIC
интересны обширным и законченным функциональным рядом, возможностью заказа
дешёвых масочно-программируемых кристаллов при наличии отладочных кристаллов с
флэш-памятью и УФ-стиранием
Микроконтроллеры серии PIC
идеально подходят для организации и развития малого и среднего бизнеса в
области производства электронной аппаратуры
Техническое задание
В работе рассматривается возможность создания
устройства - «цифровой термометр» для измерения комнатных температур в
диапазоне от 0…50°С с точностью измерений 7% с использованием в данном
устройстве современного микропроцессорного комплекта.
Измерение температур при помощи цифрового
термометра на базе микроконтроллера PIC16F877 может быть широко использовано
для ряда задач в области радиотехники и других отраслях науки и техники.
Внешнее исполнение устройства может быть любым, в зависимости от предъявляемых
требований. При достаточно простом программном и схемотехническом исполнении
устройства за основу были взяты следующие характеристики:
1. Массогабаритные.
2. Несложная реализация.
. Надежность.
. Невысокая стоимость.
. Удобство в применении.
1.
Структурная схема цифрового термометра
Принцип работы устройства: на входную цепь
подаётся напряжение 5 В, которое далее преобразуется в 0.5 В. Полученное
напряжение поступает на терморезистор, который меняет своё сопротивление в
зависимости от температуры. Далее напряжение усиливается и подаётся на
микроконтроллер PIC16F877, в нем оно преобразуется в кодовую комбинацию,
соответствующую температуре, которая впоследствии преобразуется в десятичное
число и выводится на семисегментные цифровые индикаторы.
2. Выбор микропроцессорного комплекта
Для реализации устройства был выбран PIC16F877,
в корпусе PDIP. Основными факторами при выборе контроллера являлись: стоимость
и достаточное количество линий ввода-вывода.
Характеристика микроконтроллера:
· Высокоскоростная RISC архитектура
· 35 инструкций
· Все команды выполняются за один
цикл, кроме инструкций переходов, выполняемых за два цикла
· Тактовая частота:
Ø DC - 20МГц, тактовый сигнал
Ø DC - 200нс, один машинный цикл
· До 8к х 14 слов FLASH памяти
программ
· До 368 х 8 байт памяти данных (ОЗУ)
· До 256 х 8 байт EEPROM памяти данных
· Совместимость по выводам с
PIC16C73B/74B/76/77
· Система прерываний (до 14
источников)
· 8-уровневый аппаратный стек
· Прямой, косвенный и относительный
режим адресации
· Сброс по включению питания (POR)
· Таймер сброса (PWRT) и таймер
ожидания запуска генератора (OST) после включения питания
· Сторожевой таймер WDT с собственным
RC генератором
· Программируемая защита памяти
программ
· Режим энергосбережения SLEEP
· Выбор параметров тактового
генератора
· Высокоскоростная, энергосберегающая
CMOS FLASH/EEPROM технология
· Полностью статическая архитектура
· Программирование в готовом
устройстве (используется два вывода микроконтроллера)
· Низковольтный режим программирования
· Режим внутрисхемной отладки (используется
два вывода микроконтроллера)
· Широкий диапазон напряжений питания
от 2.0 В до 5.5 В
· Повышенная нагрузочная способность
портов ввода/вывода (25 мА)
· Малое энергопотребление:
Ø < 0.6 мА @ 3.0 В, 4.0 МГц
Ø 20 мкА @ 3.0 В, 32 кГц
Ø < 1 мкА в режиме энергосбережения
Характеристика периферийных модулей:
· Таймер 0: 8-разрядный таймер/счетчик
с 8-разрядным программируемым предделителем
· Таймер 1: 16-разрядный
таймер/счетчик с возможностью подключения внешнего резонатора
· Таймер 2: 8-разрядный таймер/счетчик
с 8-разрядным программируемым предделителем и выходным делителем
· Два модуля сравнение/захват/ШИМ
(ССР):
Ø 16-разрядный захват (макс.
разрешающая способность 12.5 нс)
Ø 16-разрядное сравнение (макс.
разрешающая способность 200 нс)
Ø 10-разрядный ШИМ
· Многоканальное 10-разрядное АЦП
Ø ведущий/ведомый режим 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%
|
3
|
|
R2
|
МЛТ-0,25
- 9 кОм ± 1%
|
1
|
|
R4
|
МЛТ-0,25
- 10 кОм ± 1%
|
1
|
|
R5-R11
|
МЛТ-0,25
-
180
Ом ± 1%
|
7
|
|
R12, R13
|
МЛТ-0,25
- 1.6 кОм ± 1%
|
2
|
|
|
|
|
|
Rt
|
Терморезистор
КМТ-8 - 510 Ом ± 10%
|
1
|
|
|
|
|
|
|
Транзисторы
|
|
|
VT1, VT2
|
КТ315А
|
2
|
|
|
|
|
|
|
Микросхемы
|
|
|
DD1
|
Микроконтроллер
PIC16F877
|
1
|
|
DA1, DA2
|
Операционный
усилитель К140УД6
|
2
|
|
|
|
|
|
|
Индикаторы
знакосинтезирующие
|
АЛ305А
|
2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
НГТУ.ХХХ.ХХХ.21
|
Лист
|
|
|
|
|
|
|
12
|
Изм.
|
Лист
|
№
докум.
|
Подпись
|
Дата
|
|
|
|
|
|
|
|
|
|
|
|
|
Блок-схема алгоритма программы
Объяснение некоторых операций программы:
0°С соответствует сопротивление 340
Ом, следовательно напряжение на входе микроконтроллера будет: . Это
значит, что от полученного кода необходимо отнять комбинацию, соответствующую
этому напряжению. Найдём её:
В/1024 = 4,88 мВ - шаг измерения
напряжения микроконтроллером;
.47/4.88 = 301 - вычитаемая
комбинация.
Найдем шаг, соответствующий
изменению температуры на 1°С:
Т. е. полученную комбинацию нужно
разделить на 14.
Текст программы
p=16f877
include «p16f877.inc»_1 equ 0x21_0 equ
0x22 EQU 0x23 EQU 0x24 EQU 0x25 b'00000000' ;команда
записи в аккумулятор;
movwf ADRESS_1 ;копирует
из аккумулятора в прямоуказанный регистр;
movwf ADRESS_0 ССС ССС2 ССС3
BSF STATUS,
RP0 ;переход в
первый банк
BCF STATUS,
RP1
movlw b'10000000'
movwf ADCON1 ;настройка
АЦП
CLRF TRISC ;обнуление
регистра, настройка PORTC
на выход
movlw b'00000111' OPTION_REG ;настройка
TMR0 STATUS,
RP0 ;переход в
нулевой банк
movlw b'10000001'
movwf ADCON0 ;настройка
АЦП
;----------------- тело цикла
--------------------
preobr BSF ADCON0,
2 ;установка флага GO/DONE
ggg BTFSC ADCON0,
2 ;пропустить следующую инструкцию, если битовое поле 2
;содержит 0
goto ggg
movf ADRESH,
0 ;копировать содержимое регистра в аккумулятор
movwf ADRESS_1 ;и
записать его в переменную
movf ADRESL,
0
movwf ADRESS_0
CLRF STATUS,C ;сброс
флага переноса
;вычитание 301 b'00101101' ;запись
числа 45 в аккумулятор ADRESS_0,1 ;вычитает содержание
аккумулятора из регистра,
;сохраняет результат в регистре.
movf b'00000001' ;
запись числа 256 в аккумулятор (45+256=301)
SUBWF ADRESS_1,1
BTFSC STATUS,
C
DECF ADRESS_1,1 ;команда
декремента, вычитает единицу из
;прямоуказанного регистра с сохранением
результата в
;регистре;
CLRF STATUS,
C
;деление на 14
goto LLL
del INCF CCC,
1 ;команда инкремента, прибавляет единицу к
;содержимому прямоуказанного регистра, сохраняет
;результат в регистре
LLL movf b'00001110' ;
запись числа 14 в аккумулятор
SUBWF ADRESS_0,
1
BTFSC STATUS,
C ADRESS_1,1; выполняет
декремент прямоуказанного регистра,
;осуществляет проверку равенства результата с 0,
если да, ;то, пропускает следующую команду
goto del ;результат
деления хранится в регистре ССС
movf CCC,
0 ;записываем содержимое регистра ССС в регистр ССС2
movwf CCC2
;выделение единиц и десятков
goto LLL1 INCF CCC3, 1 ;десятки CCC2 movlw b'1010' ;единицы CCC2,
0 STATUS,
C
;вывод температуры на индикаторы
goto
LLL2
movf CCC2, 0 dec7 PORTA PORTE
CALL delay ;команда
вызова подпрограммы;
BCF PORTE, 1 CCC3,0 dec7 PORTA PORTE,
0 delay PORTEpreobr 0x02 ;подпрограмма
задержки на 2 мс.
return
;подпрограмма табличной конвертации, принимает и
возвращает данные в аккумулятор PCL, f ;прибавляем
к PCL число, которое нужно преобразовать b'1111110' ;цифра
"0" b'0110000' ;цифра "1" b'1101101' ;цифра
"2" b'1111001' ;цифра "3" b'0110011' ;цифра
"4" b'1011011' ;цифра "5" b'1011111' ;цифра
"6" b'1110000' ;цифра "7" b'1111111' ;цифра
"8" b'1111011' ;цифра "9"
end