No Image

Ds1621 описание на русском

СОДЕРЖАНИЕ
149 просмотров
12 декабря 2019

Цифровой термометр и термостат

Рекомендовано в новых применениях прибор DS1631

Отличительные Особенности:

  • ±0.5°C точность с 0°C до 70°C
  • 9-битовое разрешение, расширяемое до 12-битового
  • специальный логический выход для термостатирования
  • Настройки термостатирования энергонезависимые и программируются пользователем
  • Данные передаются через I 2 C/SMBus последовательный интерфейс
  • 3 адресных входа (8 DS1621 может быть использовано на одной шине)
  • Диапазон рабочего питающего напряжения от 2.7В до 5.5В
  • 8-контактные PDIP или 150mil, 8-контактные SOIC корпуса
Тип Интерфейс Точность (±°C) Диапазон питающего напряжения (В) Рабочий диапазон (°C) Кол-во темпера-турных порогов Разре-шение (бит) Корпус
DS1621 2-x проводный/ SMBus 0.5 2.7-5.5 от -55 до +125 2, програм., энерго-незав. 9 8/PDIP.300
8/SO.150
8/SO.208

Микросхема DS1621 это термометр и термостат с цифровым вводом/выводом, обеспечивающий точность ±0.5°C. При использовании в качестве термометра, данные считываются через I 2 C/SMBus последовательную шину в дополнительном 9-битном коде с ценой младшего разряда ±0.5°C. Для приложений требующих более высокого разрешения, пользователь может прочитать дополнительные регистры и произвести простые арифметические действия, чтобы достичь более чем 12-битового разрешения (с ценой самого младшего разряда 0.0625°C). Микросхема DS1621 обеспечивает 3 адресных входа, чтобы позволить пользователям подключить до 8 DS1621 к одной шине.

При использовании в качестве термостата, микросхема DS1621 имеет во внутренней энергонезависимой памяти (EEPROM) программируемые пользователем контрольные точки по превышению температуры (TH) и по понижению температуры (TL). Один специальный логический выход сработает, когда TH достигнут, и выход будет оставаться активным до тех пор, пока температура не упадёт ниже TL (программируемый гистерезис).

Микросхема DS1621 предлагается в 300mil, 8-контактном PDIP и 150mil, 8-контактном SOIC. Для приложений, которым не требуется точность ±0.5°C, доступна микросхема DS1721 с пониженной точностью ±1°C, более дешёвая полностью совместимая микросхема (только в корпусе SOIC).

Микросхема DS1621 поддерживается Демонстрационным комплектом DS1702k.

Устройство простое, без калибровки и микроконтроллеров.

Это невероятно простой термометр подключается к любому свободному последовательному порту. В устройстве не применяются какие-либо программируемые компоненты и микроконтроллеры. Точность измерений составляет до 0,5°C без калибровки. Оно так дешево, что я сделал его для каждого используемого мной компьютера. Это так приятно иметь температуру на панели задач Windows, что многие друзья попросили меня сделать такое устройство!

Сделайте себе точный термометр

Данный проект достаточно легок для новичков, только, возможно могут быть трудности, связанные с аппаратной несовместимость последовательного порта на разных компьютерах. В версии с одним датчиком нужна только микросхема датчика, регулятор напряжения и несколько диодов и резисторов. Сделайте его и узнайте секреты IIC шины, как реализовать IIC шину используя только два резистора и пару стабилитронов, как управлять им на последовательном порту используя Visual Basic. Используемые компоненты легко доступны в радио интернет-магазинах.

Характеристики:
Температура отображается как на панели задач Windows, так и за её пределами(см. рисунок).
Устанавливается в любой свободный COM порт ПК.
Диапазон измерений -20 . +125°C (-4 . 257°F).
Базовая точность и разрешение 0.5°C.
Шкала Цельсия(°С) и Farenheit (°F).
Данные записываются в легко читаемый текстовый файл (хорошо для Excel).
Частота дискретизации 1, 5, 30 или 60 секунд.
Один или два датчика температуры (с возможностью расширения до 8)
Питание с COM-порта, внешний источник не требуется.
Легко сделать, не экзотические программные и аппаратные части.
Не требует калибровки.

Сделать ПК термометр легко. Я подробно опишу версию с элементами для поверхностного монтажа. Те, кто не знакомы с пайкой маленьких SMT элементов, будут рады узнать, что плата для выводных элементов также доступна.

Для начала необходимо собрать все элементы кроме плат. Вот список элементов:

Номер

Тип

Описание

DS1621 или DS1631

Цифровой датчик температуры
Пластиковый корпус SO8 (SMD) или DIP (Выводной)

Регулятор напряжения с ультра низкими потерями, корпус ТО92( в обоих вариантах)

Маленький импульсный диод(вроде 1N4148)

Стабилитрон 5,1В 0,5W.

Низковольтный керамический конденсатор (SMD 1206)

Резистор 0,25W (SMD 1206)

9-контактный разъем “мама”, прямой (SMD) или угловой (Выводной)

Это увеличенный вид собранной SMT платы (Небольшая плата это выносной датчик температуры).

Как только я собрал все элементы, я распечатал плату в её реальном размере, чтобы проверить размеры всех элементов относительно неё. Ели элемент слишком большой или маленький, я могу поправить плату или поискать подходящий элемент перед началом работы.

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

Читайте также:  Грунтовка стен сколько раз

Плата должна быть безупречно чистой (без следов окисления и отпечатков пальцев) для хорошего травления и пайки. Протрите её мягким абразивом до блеска (кухонная мочалка, стальная вата и даже офисный ластик). Не забывайте отзеркалить рисунок платы перед печатью! Я люблю SMT платы, потому что необходимо сверлить не так много утомительных отверстий перед пайкой.

Для пайки требуется паяльник с тонким жалом, острый пинцет и твердая рука. Я креплю плату к столу во время пайки. На самом деле я прикрепляю её к распечатке, чтобы облегчить проверку во время пайки.
Для того, чтобы случайно не перепутать элементы, держите их в оригинальной упаковке до необходимости. Я предлагаю вам начать пайку с мелких элементов (резисторы, диоды . ) и закончить большими (электролитический конденсатор), высокие элементы могут усложнить доступ к мелким.

Не наносите слишком много припоя, и будьте осторожны, чтобы не перегреть элементы (особенно диоды и микросхемы). Если необходимо, пусть элемент остынет. Большинство элементов полярные, поэтому будьте осторожны, чтобы не перепутать их. Катод диода (K) отмечен черным кольцом, отрицательный вывод электролитических конденсаторов черной полоской. Если вы предпочитаете использовать танталовые конденсаторы, помните, что их маркировка перевернута, и черной полосой обозначают положительный вывод!

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

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

Я ставлю микросхему на плату, и когда её выводы совпадают с площадками, я чищу жало и грею контакт 1, пока он не припаяется. Я проверяю, что микросхема по-прежнему стоит правильно (все контакты по центру соответствующих площадок). Если она переместилась, я нагреваю контакт 1 и перемещаю её, либо я по-прежнему паяю остальные контакты, очищая жало и используя мало припоя. Последним шагом является пропайка контакта 1, изначально припаянного очень маленьким количеством припоя.

Регулятор напряжения LM2936Z5 нуждается в специальной подготовке к пайке. У меня были сквозные отверстия, но я хотел припаять его на SMT стороне платы. На рисунке показано как согнуть и укоротить контакты.

Печатная плата рассчитана на установку между контактами разъема последовательного порта. Это последняя часть пайки. Не забывайте припаять выводы 7 и 8 на противоположной стороне печатной платы.
Я обычно очищаю плату от остатков флюса при помощи растворителя, например ацетона, и позволяю плате полностью высохнуть перед включением. Как только плата проверена и работает, я наношу слой прозрачного лака-спрея для защиты меди от окисления.

Последний шаг заключается в загрузке и установке программного обеспечения. Если вас смущают подсказки Microsoft Installer (. на итальянском языке) эти скриншоты (первый и второй) помогут сделать всё правильно.

При первом запуске, необходимо выбрать номер последовательного порта, к которому подключена схема, и вы будете готовы к получению температуры. Удачи!

Как это работает?

Схема является производным от программатора Claudio Lanconelli PonyProg. Ключевым компонентом является датчик температуры DS1621 Dallas Semiconductor. Это цифровой датчик температуры, а это значит, что он измеряет температуру и превращает её в цифровые значения (двоичные числа, то есть последовательность из нулей и единиц, как байты в компьютере).

Просто подайте стабилизированное питание 5В, и DS1621 способен передавать температуры окружающей среды через последовательную шину IIC (Inter-Integrated Circuit шину, также пишется I2C). Это стандартная схема передачи разработанная Philips Semiconductors для соединения множества микросхем вместе, используя всего две линии: тактовую (SCL) и данные (SDA).

См. документация чтобы получить более подробную информацию о работе шины, а сейчас достаточно знать, что любой I2C чип имеет свой собственный адрес (число в диапазоне от 0 до 127) и набор команд. Таким образом, вы можете подключить много микросхем параллельно и все еще быть в состоянии общаться с каждой в отдельности, начиная каждое сообщение с соответствующим адресом.

Прямо с завода, все DS1621 поставляется базовым адресом ($40), но вы можете настроить его, соединяя адресные выводы (А0, А1, А2), с 5В или GND соответственно (см. таблицу). Таким образом, вы можете подключить до 8-ми микросхем датчиков параллельно на шину, хотя поставляемое программное обеспечение поддерживает и заносит в таблицу только два (вы можете добавить больше датчиков, изменив программное обеспечение).

Читайте также:  Зарядка лягушка как пользоваться инструкция по применению

Так что мы можем питать DS1621 от 5В постоянного тока и подключить его SCK и SDA проводам I2C интерфейса ПК, верно? К сожалению, компьютеры не имеют разъемов 5В постоянного тока и портов I2C, поэтому мы должны хакнуть их!

Хак#1: Фантомное питание COM-порта

Датчик температуры не требует много энергии для работы, так почему бы не устранить необходимость питания, "крадя" питание с сигналов уже доступных на порте RS232?
+12В от линий RS232 передаются на регулятор через диоды D1, D2, фильтруется C1 и регулируется до +5В на LM2936-Z5. Это специальный регулятор, способный работать с минимальным входным напряжением и сохранять каждый мА. LM2936 способен регулировать с таким низким входным напряжением как 5,2 (больше всего последовательных портов питаются только 6В). Для сравнения, обычные регуляторы 78L05 требуют, по крайней мере, 6.7В на входе и потребляет в 100 раз больше тока, необходимого LM2936-Z5.

Хак#2: Заставляем COM-порт делать вид, что это I2C-шина.

Программное обеспечение ПК термометра эмулирует провода I2C-шины двумя контактами COM-порта, доступного на всех материнских платах.

В качестве линии SCL используется RTS (Request To Send, контакт 7), а для SDA используется линия, первоначально разработанная для DTR последовательного порта (Data Terminal Ready, вывод 4). Эти сигналы доступны из Visual Basic установкой DTR и RTS свойств объекта MSComm.
Вы не можете подать сигнал с COM порта на DS1621 напрямую, так как уровни напряжения должны быть адаптированы. В соответствии со стандартом EIA-RS232, в большинстве компьютеров выходное напряжения достигает +15В постоянного тока и падает до -15В постоянного тока на разъеме COM порта, поэтому мы должны ограничить их более удобными напряжениями от 0 до +5В постоянного тока перед подключением к DS1621 SDA и SCL проводов. Стабилитрона 5.1В и ограничительного резистора 4700 достаточно для этой цели.

Если вы посмотрите на схему внимательно, вы заметите, что вывод SDA соединен также с контактом CTS (Clear To Send, контакт 8). Таким образом, программное обеспечение ПК термометра может контролировать логический уровень SDA, чтобы читать ответы микросхемы, что делает эту линию двунаправленной. Хотя теоретически последовательный порт требует отрицательного сигнала с входа, сигналы в диапазоне 0 . 5В постоянного тока хорошо работают практически на любом компьютере на земле.

Программное обеспечение

Программное обеспечение поставляется предварительно скомпилированным и с инсталлятором (setup.exe), но для тех, кто интересуется программированием, включен исходный код.

Я написал программу в Visual Basic. Я сделал это прямым путем, намеренно избегая оптимизации, которая сделает код менее читабельным.
Функции шины I2C сгруппированы в файл, который может быть повторно использован для других приложений. Он предоставляет функции для всех основных операций I2C шины: таких как запуск и остановка шины, или отправка и получение одного байта.

Основная программа обеспечивает функции, температуры(chipaddress), который дает I2C-шине команду, чтобы получить температуру от микросхемы.
Чтобы прочитать температуру микросхемы в Visual Basic все, что вам нужно, это запросить температуру ($&48), где $ и 48 является адресом для первой микросхемы, $H49 является адресом второй микросхемы, и так далее в соответствии с таблицей выше. Моя программа использует два датчика, но не так трудно изменить её для поддержки до 8 микросхем.

Самый первый раз, когда вы запустите программу, вы получите предупреждение о том, что не существует файла конфигурации (он будет автоматически создан в конце сессии) и настройки будут по умолчанию. Выберите последовательный (COM) порт, который вы используете, если ваше устройство включает в себя U2 для чтения температуры наружного воздуха, интервал между измерениями, единицы измерения и если вы хотите логирование температуры в файл "pc_thermometer.txt" (ASCII текстовый файл, который вы можете импортировать в Excel для обработки или построения графика).

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

Не знал, куда кинуть — то ли в Удачный опыт, то ли сюда — но тут ближе к теме. Столкнулся с необходимостью измерения температуры с высоким разрешением, решил использовать упомянутый в теме датчик. Нижеприведенная библиотека позволяет читать данные с дополнительных регистров датчика (в соответсвии с datasheet на него) и вычислять температуру с высоким разрешением. Функция возвращает значение температуры(целое число), умноженное на 10 (сотые доли не округляются, а отбрасываются). Т.е. при температуре 37.5 °С функция вернет 375. Написано для CodeVision. Буду рад, если кому-то пригодится.

Читайте также:  Arcon eleco 2018 professional torrent

/ *
CodeVisionAVR C Compiler
(C) 2001 Pavel Haiduc, HP InfoTech S.R.L.

#ifndef _1621_INCLUDED_
#define _1621_INCLUDED_

void ds1621_init(void);
void ds1621_start(void);
int ds1621_read(void);

#pragma used-
#pragma library 1621.lib

/ * ЛИРИЧЕСКОЕ ОТСТУПЛЕНИЕ * /
/ * По даташиту на DS1621 максимальное время преобразования — 750мс,
однако, при интенсивной работе с датчиком замечено, что при частых
обращениях, или при работе в режиме непрерывных преобразований, он
несколько завышает показания — видимо, это связано с нагревом самого
кристалла при выполнении различных операций, т.к. при этом растет
потребляемый ток. Также замечено, что реальное время преобразования
гораздо меньше 750 мс, и составляет около 400 мс (выяснение зависимости
от измеряемой температуры или напряжения питания не проводилось).
Если от устройства требуется максимально быстрая реакция на изменение
температуры, имеет смысл после запуска преобразования опрашивать
регистр статуса на предмет единицы в MSB (done). При использовании
стандартной библиотеки CodeVision ds1621.h это будет выглядеть так:

Впрочем, читать регистр статуса можно и самостоятельно, без библиотеки,
но опять-таки непрерывное обращение к датчику вызывает некоторое
завышение измеренной им температуры.
********************************************************************** /

void ds1621_init(void)
<
i2c_start();
i2c_write(0x90|(01)); i2c_write(0xAC);
i2c_write(0b00000001); //в LSB конфигурационного байта пишем 1 — преобр. по запросу.
i2c_stop();

i2c_start();
i2c_write(0x90|(01));
i2c_write(0x22); // остановка преобразования
i2c_stop();
>

void ds1621_start(void)
<
i2c_start();
i2c_write(0x90|(01));
i2c_write(0xEE); // старт преобразования
i2c_stop();
>

int ds1621_read()
<
unsigned char i2c_address;
int read_temp;
float b, cpc, cr;

//читаем старший байт температуры
i2c_address=0x90|(01);
i2c_start();
i2c_write(i2c_address);
i2c_write(0xaa);
i2c_start();
i2c_write(++i2c_address);
read_temp=i2c_read(0);
i2c_stop();

b=read_temp-0.25+(cpc-cr)/cpc; //вычисляем температуру

/ * end of file * /
[/b]

PS: Как есть может работать только с одним датчиком (с нулевым адресом). Но добавить передачу адреса датчика не так уж и сложно.

Спасибо! Сохранил в закрома (или в анналы ), когда-нибудь наверняка пригодится

DS1621 точность если не ошибаюсь 0,5 градуса с погрешностью (плюс минус 1) снимать с него десятые доли бездумно, все равно неправильно будет )))

Если ввести внешнюю поправку (калибровку), думаю, будет все в порядке. Там наверняка разброс параметров такой, а относительное изменение точности по диапазону в процессе работы небольшое.

В моем случае было важно отслеживать относительное изменение температуры (для правильной работы алгоритма регулирования) С уважением, Николай.

Николай Брагин: b=read_temp-0.25+(cpc-cr)/cpc; //вычисляем температуру
А вот как перевести часть после запятой в двоично-десятичный вид , чтоб вывести её на индикатор, предположим хватит 1-го знака после запятой.
Что-то я не смог справиться с этой арифм. задачкой, вернее справился тупо- сделал таблицу из 16 HEX-значений и соотв. им десятичных.
У DS18B20 попроще- никаких формул не надо, дробная часть в 4 млад. разрядах LS Byte, но как ей BIN-BCD сделать что-то никак не въеду.
Например, температура 25.125 град. Датчик выдаст 0192h. 19h переводится в 25 легко, как 2h перевести в 125?
Я передаю значение температуры на комп, там никаких проблем,- (LSByte & 0x0F)/16 и прибавить к целой части, а вот на уровне контроллера что-то я поплыл.

Честно говоря, не озадачивался. Так как использовал форматированный вывод, и в последовательный порт, и на LCD.

Понимаю, что уже не нужно . но может кто поиском себе найдет.
Нашел на одном из форумов.
Преобразование данных ds18b20 в десятичный вид. (температура 36,6 . получаем 366)

При 12 битовой точности получаем температуру в 0,0625 градусах, что бы получить с точностью до десятых нам нужно умножить полученное число на 0,625 .
t = (ds_data>>1)+(ds_data>>3) Как мне понравилось это решение!

ds_data/2 + ds_data/8 = (4*ds_data)/8 + ds_data/8 = ds_data * 5/8 = ds_data*0.625

Если используете другое расширение, то нужно подобрать другие сдвиги — пробовал — получается.

Если работает с отр. температурами, то нужно запоминать и восстанавливать знак (+/-) числа.

AndryG:
"Влад Князев.Умножение без умножения"- толковая статья про умножение на константу, как раз у вас -это частный случай :
http://www.onembedding.com/hints/algorithms/mwom/

Здорово! Спасибо за ссылку!

Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем.

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

Это интересно
Adblock detector