Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Термометр на датчике SE97B и AVR-микроконтроллере

Думаю, многие могут могут найти у себя в закромах отголоски щедрости компании NXP semiconductors в виде бесплатных образцов электронных компонентов. Раздавали они и красиво оформленные наборы I2C микросхем для различных классов приложений. В одном из таких наборов (computer applications) имелись датчики температуры под маркировкой SE97BTP. Помимо датчика температуры эта микросхема выполняет функции EEPROM памяти. Так вот, если есть такая микросхема, то почему бы не попробовать ее использовать где-либо в своих разработках? Мельчайший корпус датчика HWSON8 позволит без труда встроить термометр в любое устройство, ну или почти в любое.

Размер корпуса HWSON8 термодатчика SE97B составляет 2 на 3 миллиметра.

Рассмотрим эту микросхему и ее характеристики. Как указывалось выше, это не только датчик температуры, но и память EEPROM. Последнее нас не очень то и волнует. SE97B позиционируется производителем как температурный сенсор для DDR модулей памяти. Объем EEPROM памяти составляет 256 байт. Вся эта память разделена на 2 части - 128 байт имеют защиту от записи, остальные 128 байт не имеют защиты. Интерфейс передачи данных используется I2C. При этом микросхема имеет три адреса - один для обращения к регистрам термометра, остальные два для обращения к памяти EEPROM с защитой от записи и без нее. При этом адрес микросхемы в общем учитывает состояние выводов A0, A1, A2 - подключены к земле или к питанию и в зависимости от этого в адрес ставятся единички или нолики в соответствующие места.

 Максимальное разрешение информации о температуры составляет 0,125 градусов Цельсия или 11 бит. Период обновления регистров хранения информации о температуре 0,125 секунды или 8 Гц. Также аналогично температурному датчику LM75 того же производителя имеется вывод EVENT. Сигнал на этом выводе появляется при условии превышения заданной температуры. В карте регистров имеется верхний и нижний предел срабатывания, отдельно задается гистерезис для этого ввода - 6, 3 или 1,5 градуса Цельсия. Также может задаваться активный уровень для этого вывода - высокий или низкий уровень.

Характеристики микросхемы температурного датчика SE97B:

  • напряжение питания от -0,5 до 4,3 вольт
  • допустимое напряжение на выводах SCL, SDA, A1, A2, EVENT от -0,5 до 4,3 вольт
  • допустимое напряжение на выводе A0 от -0,5 до 12,5 вольт
  • ​допустимый ток на выводах SDA, EVENT 10 мА
  • точность измерения температуры в диапазоне от 75 до 95 градусов - ±0,5%
  • точность измерения температуры в диапазоне от 40 до 125 градусов - ±1%
  • точность измерения температуры в диапазоне от -40 до +125 градусов - ±2%
  • потребляемый ток 250 мкА
  • частота работы протокола I2C от 0 Гц до 400 кГц
  • 100000 периодов перезаписи памяти EEPROM или 10 лет службы
  • защита от записи памяти EEPROM

По характеристикам четко просматривается заданная область применения датчика температуры - компьютерные приложения, а именно модeли памяти DDR. дело в том, что максимальная точность измерения температуры находится как раз в рабочей области температур компьютерной техники (от 75 до 95 градусов - критический предел рабочей области, который необходимо максимально точно контролировать).

Спустимся с небес высокой технологии компьютерной техники и перейдем к более насущным проблемам - контроля температуры в домашних условиях. К слову LM75 в диапазоне от -40 до +125 градусов имеет такую же точность, даже чуть хуже - до ±3%, но чуть больший диапазон отрицательных температур. Так что если бы стоял выбор между LM75 и SE97B, скорее всего бы я выбрал второй датчик, хоть и специфический, но более точный, да и корпус много более мелкий. 

​Таким образом, схема термометра выглядит следующим образом:

Схема термометра на датчике SE97B и AVR-микроконтроллере

Микроконтроллер был выбран Atmega8 за свою широкую распространенность и небольшую цену, а также весь необходимый функционал для построения данной схемы. Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в SMD исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей. Марка дисплея 2004А - 4 строки по 20 символов. Большой размер дисплея был использован для построения пользовательского шрифта высотой в 4 строки дисплея. При использовании такого шрифта на экран помещается всего 5 символов, зато больших. Этот шрифт можно найти в исходном коде прошивки микроконтроллера, прилагающемся ниже. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод "А" и "К" на плате дисплея. Подсветка включается через резистор, ограничивающий ток - R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Для питания схемы используется микросхема линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой - AMS1117 в исполнении, дающей на выходе 3,3 вольта. Применение второго стабилизатора обусловлено максимальным рабочим напряжением датчика температуры.

Схема была собрана и отлажена на макетной печатной плате для микроконтроллера Atmega8:

Датчик температуры был собран в виде отдельного модуля с необходимой обвязкой:

Логика работы устройства не сложная - извлечение данных по I2C интерфейсу из температурного датчика и вывод их на LCD дисплей с использованием большого шрифта. Для того, что бы получить данные от датчика необходимо передать условие старта при помощи I2C, далее передать адрес устройства (температурный сенсор) с битом записи, далее передать адрес регистра хранения данных о температуре. Потом, чтобы считать данные из этого регистра, нужно либо передать условие остановки и следом условие старта, либо просто рестарт. Далее передаем адрес устройства с битом чтения, ну и наконец считываем старший и младший байт данных. В конце передаем условие остановки. Информация в двух байтах располагается следующим образом:

Биты 15 - 13 использовать не будем. Биты с 12 по 1 содержат информацию о температуре - целую и дробную часть. Бит 0 зарезервирован и не используется, всегда равен нулю.

Программно все это выглядит на языке Си так:

void Read_temper (void) {


	i2c_start_cond();               // запуск i2c
	i2c_send_byte(adr_write);   	// передача адреса устройства, режим записи
	i2c_send_byte(0x05);	        // передача адреса памяти 
	i2c_stop_cond();                // остановка i2c

	i2c_start_cond();               // запуск i2c
	i2c_send_byte(adr_read);   		// передача адреса устройства, режим чтения
	t1 = i2c_get_byte(0);           // чтение MSB температуры
	t2 = i2c_get_byte(1);           // чтение LSB температуры
	i2c_stop_cond();                // остановка i2c

	buf1=t1;
	buf2=t2;
	temp1=(buf1*16)+(buf2/16);
	buf2=t2;
	temp2=buf2*16;
	temp2=temp2/128;
	temp2=temp2*5;

}

Далее в бесконечном цикле эта функция вызывается и полученная информация выводится на дисплей. Период обновления данных на экране составляет 7,5 секунд. Информация о текущей температуре выводится на экран с разрешением в 0,5 градуса. Учитывается только один бит дробной части.

Для программирования микроконтроллера Atmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio):

К статье прилагается прошивка для микроконтроллера ATmega8, документация на датчик температуры SE97B, исходный код прошивки в программе AVR Studio, печатная плата для модуля SE97B, а также видео работы термометра (при контакте с теплой поверхностью температура возрастает, при прекращении контакта с теплой поверхностью температура медленно понижается).

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК AVR 8-бит
ATmega8
1 Поиск в магазине ОтронВ блокнот
IC2 Датчик температуры
SE97BTP
1 Поиск в магазине ОтронВ блокнот
VR1 Линейный регулятор
L7805AB
1 Поиск в магазине ОтронВ блокнот
VR2 Линейный регулятор
AMS1117-3.3
1 Поиск в магазине ОтронВ блокнот
C1 Электролитический конденсатор470 мкФ1 Поиск в магазине ОтронВ блокнот
C2, C3, C5, C6, C9 Конденсатор100 нФ5 Поиск в магазине ОтронВ блокнот
C7, C8 Электролитический конденсатор10 мкФ2 Поиск в магазине ОтронВ блокнот
C4 Электролитический конденсатор220 мкФ1 Поиск в магазине ОтронВ блокнот
R1 Резистор
22 Ом
1 Поиск в магазине ОтронВ блокнот
R2 Подстроечный резистор10 кОм1 Поиск в магазине ОтронВ блокнот
R3-R6 Резистор
10 кОм
4 Поиск в магазине ОтронВ блокнот
HG1 LCD-дисплей2004A1 Поиск в магазине ОтронВ блокнот
S1 Тактовая кнопкаTC-A1091 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.5 Проголосовало: 1 чел.

Комментарии (6) | Я собрал (0) | Подписаться

0
Zlodey #
А чего такие цифры кривые?
Ответить
0

[Автор]
Gauss #
На что терпения хватило, можно скруглений всяких наделать, но по-моему вроде же и так не плохо
Ответить
0
Zlodey #
Криво. Надо цифры сделать моноширинные
Ответить
0

[Автор]
Gauss #
Ладно... на будущее учту, эргономика... при следующем применении переработаю! Спасибо за конструктивную критику
Ответить
0
si4karuk #
Оу! Я тоже такие циферки хочу... А эта библиотека обычный шрифт умеет показывать?
Ответить
0

[Автор]
Gauss #
Могет все что хочешь - и простой и не простой шрифт
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Осциллограф DSO138 Лазерный модуль 650нм 5мВт
вверх