PIC Урок 27. Датчик температуры LMT01. Часть 2



В предыдущей части урока мы познакомились с датчиком температуры LMT01 и подключили схему нашего занятия.

Приступим к проекту.

Проект за основу мы возьмём из урока 25 по АЦП с именем ADC, а новый проект назовём по имени датчика LMT01.

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

Первым делом в файлах main.h, i2c.h и i2clcd.h изменим значение частоты тактирования

 

#define _XTAL_FREQ 16000000

 

Удалим функцию delay() вместе с телом.

В функции main() оставим инициализацию шины I2C, инициализацию и очистку дисплея, а также бесконечный цикл без кода в теле. Функция примет вот такой вид

 

 

 

Добавим несколько глобальных переменных

 

 

А в функции main() добавим локальную переменную для хранения показаний температуры

 

 

Произведём инициализацию ножек портов

 

 

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

 

 

У нас только коэффициент у опорного напряжения немного другой.

 

 

Добавим обработчик прерывания от модуля компараторов над функцией main(), в котором мы всего лишь будем инкрементировать значение переменной, которая и будет подсчитывать импульсы от датчика

 

 

В бесконечном цикле функции main() мы запретим прерывания, обнулим счётчик импульсов, а затем прерывания снова разрешим

 

 

Переведём ножку порта, отвечающую за питание датчика, в высокое состояние и подождём 55 милисекунд, чтобы датчик сконвертировал показания в цифровой код

 

 

Глобальную переменную, которая будет считать количество временных отрезков по 5 милисекунд, обнулим, а переменную, которая будет хранить количество импульсов, переведём в -1, чтобы счёт начинался с нуля

 

 

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

В данном цикле мы сначала сохраним текущее значение счётчика

 

 

Сохраним в счётчик количество импульсов, которые сосчитал счётчик в обработчике прерывания, запретив на это время прерывания

 

 

Прерывание мы запрещаем для того, чтобы в момент сохранения не потерять значение.

Подождём 5 милисекунд и проинкрементируем значение количества временных отрезков

 

 

Выйдем из цикла и переведём ножку порта, обеспечивающую питание датчика, в низкое состояние

 

 

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

Посчитаем значение температуры, немного упростив формулу

 

 

Отобразим значение температуры на дисплее, а также отобразим количество импульсов, а затем сделаем паузу в 1 секунду

 

 

Соберём код, прошьём контроллер и посмотрим результат нашей работы на дисплее

 

 

Прикоснёмся на некоторое время к датчику пальцем, и показания температуры начнут подниматься

 

 

Таким образом, мы видим, что датчик прекрасно работает и температура отлично измеряется.

Итак, на данном занятии мы изучили работу интересного датчика с нестандартным способом передачи показаний — датчика температуры LMT01. Также мы лишний раз повторили работу с модулем компаратор. Ну, и также мы повторили на практике закон Ома.

 

Всем спасибо за внимание!

 

 

Предыдущая часть Программирование МК PIC Следующий урок

 

Исходный код

 

Купить программатор (неоригинальный) можно здесь: PICKit3

Купить программатор (оригинальный) можно здесь: PICKit3 original

Отладочную плату PIC Open18F4520-16F877A можно приобрести здесь: PIC Open18F4520-16F877A

Датчик температуры LMT01 можно приобрести здесь: LMT01

Дисплей LCD 20×4 можно приобрести тут: Дисплей LCD 20×4

Переходник I2C to LCD можно приобрести здесь: I2C to LCD1602 2004

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

PIC Датчик температуры LMT01

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*