Разделы

В сети

Пользователей: 169
Из них просматривают:
Аналоги: 123. Даташиты: 7. Инструкции: 8. Новости: 20. Остальное: 2. Форум: 9.
Участников: 2
Гостей: 167

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Раздел: Компьютеры

Компьютерный термометр с датчиками DS18S20/B20.

Написал MACTEP 14.12.2009 11:40:00 (Просмотров: 54940)

С появлением специализированных микросхем, которые сразу преобразуют температуру в цифровой код, построение термометров значительно упростилось. Например, чтобы оснастить термометром компьютер, потребуется лишь простенький адаптер на COM-порт.



Среди микросхем цифровых термометров наибольшее распространение получили микросхемы семейства DS18x20 фирмы "Dallas" (с недавних пор это уже "Maxim"). Первой из этого семейства была микросхема DS1820, которая выпускалась в корпусе PR-35 (значительно более высокий, чем привычный TO-92) и SSOP. В настоящее время она уже не выпускается, ей на смену пришла микросхема DS18S20. Эта микросхема выпускается в корпусе TO-92 и SOIC. Причем вариант в TO-92 маркируется как "DS1820", распознать модификацию с буквой "S" можно только по низкому корпусу. Еще в этом семействе есть микросхема DS18B20, выпускающаяся в TO-92, SOIC и uSOP, но с маркировкой у нее все в порядке.

Микросхема цифрового термометра DS18S20 обеспечивает измерение температуры в диапазоне –55..+125°C с дискретностью 0.5°C. Путем дополнительных вычислений дискретность представления температуры может быть уменьшена до 0.0625°C. Стоимость микросхемы DS18S20 составляет примерно 2$, а стоимость деталей адаптера для подключения её к COM-порту компьютера - еще меньше. Подробное описание микросхемы DS18S20 можно скачать у нас в даташитах.

 

DS18S20 View

Рис. 1. Внешний вид микросхемы цифрового термометра DS18S20.

Самым привлекательным является то, что такой термометр уже откалиброван на заводе, гарантированная точность составляет ±0.5°C в диапазоне –10...+85°C и ±2°C во всем диапазоне рабочих температур. Типичная кривая ошибки измерения температуры приведена на рис. 2.

 

DS18S20 Error

Рис. 2. Типичная кривая ошибки термометра DS18S20.

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

DS18S20 допускает напряжение питания от +3 до +5.5В. В режиме ожидания потребляемый ток близок к нулю (менее 1мкА), а во время преобразования температуры он равен примерно 1мА. Процесс преобразования длится максимум 750мс.

Принцип действия цифровых датчиков температуры фирмы "Dallas" основан на подсчете количества импульсов, вырабатываемых генератором с низким температурным коэффициентом во временном интервале, который формируется генератором с большим температурным коэффициентом. Счетчик инициализируется значением, соответствующим -55°C (минимальной измеряемой температуре). Если счетчик достигает нуля перед тем, как заканчивается временной интервал (это означает, что температура больше -55°C), то регистр температуры, который также инициализирован значением -55°C, инкрементируется. Одновременно счетчик предустанавливается новым значением, которое задается схемой формирования наклона характеристики. Эта схема нужна для компенсации параболической зависимости частот генераторов от температуры. Счетчик снова начинает работать, и если он опять достигает нуля, когда интервал еще не закончен, процесс повторяется снова. Схема формирования наклона загружает счетчик значениями, которые соответствуют количеству импульсов генератора на один градус Цельсия для каждого конкретного значения температуры. По окончанию процесса преобразования регистр температуры будет содержать значение температуры.

Для DS18S20 температура представляется в виде 9-битного значения в дополнительном коде. Поскольку это значение занимает 2 байта, все разряды старшего байта равны знаковому разряду. Дискретность представления температуры составляет 0.5°C. Зависимость выходного кода DS18S20 от температуры приведена в таблице:

 

Температура
Выходной код (Binary)
Выходной код(Hex)
Ст. байт
Мл. байт
+125°C
0000 0000
1111 1010
00FAh
+25°C
0000 0000
0011 0010
0032h
+0.5°C
0000 0000
0000 0001
0001h
0°C
0000 0000
0000 0000
0000h
-0.5°C
1111 1111
1111 1111
FFFFh
-25°C
1111 1111 
1100 1110
FFCEh
-55°C
1111 1111
1001 0010
FF92h

Более высокая разрешающая способность может быть получена, если произвести дополнительные вычисления на основе значений COUNT_REMAIN (значение, оставшееся в счетчике в конце измерения) и COUNT_PER_C (количество импульсов на один градус для данной температуры), которые доступны. Для вычислений требуется взять считанное значение температуры и отбросить младший бит. Полученное значение назовём TEMP_READ. Теперь действительное значение температуры может быть вычислено по формуле:

 

TEMPERATURE=TEMP_READ - 0.25 + (COUNT_PER_C - COUNT_REMAIN) / COUNT_PER_C

Термометр DS18B20 отличается тем, что температура может быть представлена в виде двоичного числа с разрядностью от 9 до 12 бит. Разрядность результата устананавливается с помощью специального энергонезависимого регистра конфигурации. По умолчанию термометр находится в режиме 12-разрядного результата. Зависимость выходного 12-разрядного кода DS18B20 от температуры приведена в таблице:

 

Температура
Выходной код (Binary)
Выходной код(Hex)
Ст. байт
Мл. байт
+125°C
0000 0111
1101 0000
07D0h
+85°C
0000 0101
0101 0000
0550h
+25.0625°C
0000 0001
1001 0001
0191h
+10.125°C
0000 0000
1010 0010
00A2h
+0.5°C
0000 0000
0000 1000
0008h
0°C
0000 0000 
0000 0000
0000h
-0.5°C
1111 1111
1111 1000
FFF8h
-10.125°C
1111 1111
0101 1110
FF5Eh
-25.0625°C
1111 1110 
0110 1111
FE6Fh
-55°C
1111 1100
1001 0000
FC90h

Если DS18B20 запрограммирован не меньшую разрядность представления температуры, чем 12 бит, то младшие разряды, которые не используются, будут содержать нули.

После включения питания в регистр температуры DS18S20 и DS18B20 загружается значение +85°C, которое сохраняется до завершения первого преобразования.

Каждый экземпляр DS18S20 или DS18B20 имеет уникальный 48-битный номер, записанный с помощью лазера в ПЗУ в процессе производства. Этот номер используется для адресации устройств. Кроме серийного номера в ПЗУ содержится код семейства (10h для DS18S20, и 28h для DS18B20) и контрольная сумма.

Кроме ПЗУ DS18S20 имеет промежуточное ОЗУ объемом 8 байт, плюс два байта энергонезависимой памяти. Карта памяти DS18S20 показана на рисунке:

 

DS18S20 memory map

Рис. 3. Карта памяти DS18S20.

Байты TH и TL представляют собой температурные пороги, с которыми сравниваются старшие 8 бит каждого измеренного значения температуры. С помощью специальной команды можно организовать сигнализацию выхода температуры за пределы этих порогов. Если такая функция не нужна, байты TH и TL можно использовать для хранения любых данных пользователя.

 

 

DS18B20 memory map

Рис. 4. Карта памяти DS18B20.

Карта памяти DS18B20 несколько отличается. тем, что байт 4, зарезервированный у DS18S20, представляет собой энергонезависимый конфигурационный регистр Config, а байты 6 и 7 не используются, и они зарезервированы. Регистр Config DS18B20 имеет следующий формат:

 

D7
D6
D5
D4
D3
D2
D1
D0
R1
R0

Назначение битов R0 и R1 приведено ниже.

 

R1
R0
Разрешение
Макс. время преобраз.
0
0
9 бит
93.75 мс
0
1
10 бит
187.5 мс
1
0
11 бит
375 мс
1
1
12 бит
750 мс

Считывание значения измеренной температуры, а также передача команды начала преобразования и других команд производится с помощью 1-проводного интерфейса (1-WireTM) фирмы DALLAS. На основе этого интерфейса фирма DALLAS даже создала сеть, называемую microLAN (или &microLAN). Для работы в этой сети выпускается целый ряд устройств, таких как адресуемые ключи, АЦП, термометры, часы реального времени, цифровые потенциометры. Кстати, такой же протокол обмена имеют и цифровые ключи IButton (или Touch Memory), которые сейчас широко используются в системах ограничения доступа.

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

Вначале рассмотрим аппаратную конфигурацию. 1-проводная шина является двунаправленной. На рис. 5 показана аппаратная конфигурация интерфейсной части 1-проводного устройства и мастера шины. У каждого 1-проводного устройства к шине подключен вход приемника и выход передатчика с открытым стоком. Открытый сток позволяет подключать к шине множество устройств, обеспечивая логику «монтажное или». Генератор тока 5мкА обеспечивает на входе 1-проводного устройства низкий логический уровень, когда шина не подключена. Так как линия тактового сигнала отсутствует, обмен является асинхронным. Это означает, что в процессе обмена нужно достаточно точно выдерживать требуемые временные соотношения.

 

1-Wire

Рис. 5. Аппаратная конфигурация интерфейсной части 1-проводных устройств.

Логическая единица представлена на 1-проводной шине уровнем напряжения около 5В, а логический ноль – напряжением вблизи 0В. В исходном состоянии на линии присутствует уровень логической единицы, который обеспечивается подтягивающим резистором номиналом около 5 кОм.

Инициатором обмена по 1-проводной шине всегда выступает мастер. Все пересылки начинаются с процесса инициализации. Инициализация производится в следующей последовательности (рис. 6):

 

Reset and presence

Рис. 6. Инициализация обмена по 1-проводной шине.

 

  • Мастер посылает импульс сброса (reset pulse) - сигнал низкого уровня длительностью не менее 480 мкс.
  • За импульсом сброса следует ответ подчиненного устройства (presence pulse) - сигнал низкого уровня длительностью 60 - 240 мкс, который генерируется через 15 - 60 мкс после завершения импульса сброса.

Ответ подчиненного устройства даёт мастеру понять, что на шине присутствует 1-проводное устройство и оно готово к обмену. После того, как мастер обнаружил ответ, он может передать термометру одну из команд. Передача ведётся путём формирования мастером специальных временных интервалов (time slots). Каждый временной интервал служит для передачи одного бита. Первым передаётся младший бит. Интервал начинается импульсом низкого уровня, длительность которого лежит в пределах 1 - 15 мкс. Поскольку переход из единицы в ноль менее чувствителен к ёмкости шины (он формируется открытым транзистором, в то время как переход из ноля в единицу формируется подтягивающим резистором), именно этот переход используют 1-проводные устройства для синхронизации с мастером. В подчиненном устройстве запускается схема временной задержки, которая определяет момент считывания данных. Номинальное значение задержки равно 30 мкс, однако оно может кол[цензура]ся в пределах 15 - 60 мкс. За импульсом низкого уровня следует передаваемый бит. Он должен удерживаться мастером на шине в течение 60 - 120 мкс от начала интервала. Временной интервал завершается переводом шины в состояние высокого уровня на время не менее 1 мкс. Нужно отметить, что ограничение на это время сверху не накладывается. Аналогичным образом формируются временные интервалы для всех передаваемых битов (рис. 7):

 

TX slot

Рис. 7. Передача бита по 1-проводной шине.

Первой командой, которую должен передать мастер темометру после инициализации, является одна из команд функций ПЗУ. Всего DS18S20 и DS18B20 имеют 5 команд функций ПЗУ:

 

  • Read ROM [33h]. Эта команда позволяет прочитать содержимое ПЗУ. В ответ на эту команду термометр передает 8-битный код семейства (10h для DS18S20 и 28h для DS18B20), затем 48-битный серийный номер, а затем 8-битную CRC для проверки правильности принятой информации.
  • Match ROM [55h]. Эта команда позволяет адресовать на шине конкретный термометр. После этой команды мастер должен передать нужный 64-битный код, и только тот термометр, который имеет такой код, будет «откликаться» до следующего импульса сброса.
  • Skip ROM [CCh]. Эта команда позволяет пропустить процедуру сравнения серийного номера и тем самым сэкономить время в системах, где на шине имеется всего одно устройство.
  • Search ROM [F0h]. Эта довольно сложная в использовании команда позволяет определить серийные номера всех термометров, присутствующих на шине.
  • Alarm Search [ECh]. Эта команда аналогична предыдущей, но «откликаться» будут только те термометры, у которых результат последнего измерения температуры выходит за предустановленные пределы TH и TL.

Поскольку у нас всего одно устройство, наиболее подходящей функцией является Skip ROM. Кроме неё ещё может быть полезной функция Read ROM, которая позволяет идентифицировать подключенное на шину устройство по его коду семейства и серийному номеру.

Приняв команду Read ROM, термометр будет готов передать 64-битный код, который мастер должен принять.

При приеме данных от подчиненного устройства временные интервалы для принимаемых битов тоже формирует мастер. Интервал начинается импульсом низкого уровня длительностью 1 - 15 мкс. Затем мастер должен освободить шину, чтобы дать возможность термометру вывести бит данных. По переходу из единицы в ноль 1-проводное устройство выводит на шину бит данных и запускает схему временной задержки, которая определяет, как долго бит данных будет присутствовать на шине. Это время лежит в пределах 15 - 60 мкс. Любая линия передачи обладает некоторой ёмкостью, поэтому для того, чтобы данные гарантированно установились, требуется некоторое время. По этой причине момент считывания данных мастером должен отстоять как можно дальше, но не более чем на 15 мкс от начала временного интервала (Рис 8):

 

RX slot

Рис. 8. Чтение бита по 1-проводной шине.

Прием байта начинается с младшего бита. Вначале идет байт кода семейства. За кодом семейства идет 6 байт серийного номера, начиная с младшего. Затем идет байт контрольной суммы (CRC). В вычислении байта контрольной суммы принимают участие первые 7 байт, или 56 передаваемых бит. Для вычисления используется следующий полином:

 

CRC = X8+X5+X4+1

После вычисления контрольной суммы мастер должен сравнить получившееся значение с переданной CRC. Если эти значения совпадают, значит прием данных прошел без ошибок. Можно также вычислить контрольную сумму для всех 64 принятых бит, тогда результат должен быть равен нулю. Блок-схема алгоритма вычисления контрольной суммы показана на рис. 9. Алгоритм использует операции сдвига и «исключающего или». Квадратиками показаны биты переменной, которая используется для вычисления CRC. Перед вычислением её необходимо обнулить, а затем на вход алгоритма нужно последовательно подать 56 принятых бит в том порядке, в котором они были приняты. В результате переменная будет содержать значение CRC.

 

CRC generator

Рис. 9. Блок-схема алгоритма вычисления контрольной суммы.

На языке Си реализация вычисления контрольной суммы для одного байта будет выглыдеть так:

 

void Th_Crc(char b, char *crc)
{
  for(char i = 0; i < 8; b = b >> 1, i++)
    if((b ^ *crc) & 1) *crc = ((*crc ^ 0x18) >> 1) | 0x80;
     else *crc = (*crc >> 1) & ~0x80;
}

Такой же алгоритм вычисления контрольной суммы используется и в случае чтения промежуточного ОЗУ, только там считанная из термометра CRC (9-й байт) рассчитана для 8-ми байтов данных.

После обработки одной из команд функций ПЗУ, DS18S20 способен воспринимать еще несколько команд:

 

  • Write Scratchpad [4Eh]. Эта команда позволяет записать данные в промежуточное ОЗУ.
  • Read Scratchpad [BEh]. Эта команда позволяет считать данные из промежуточного ОЗУ.
  • Copy Scratchpad [48h]. Эта команда копирует данные из промежуточного ОЗУ в энергонезависимую память. Эта операция требует около 10мс.
  • Convert T [44h]. Эта команда запускает процесс преобразования температуры.
  • Recall E2 [B8h]. Эта команда действует обратным образом по отношению к команде Copy Scratchpad, т.е. она позволяет считать байты TH и TL из энергонезависимой памяти в промежуточное ОЗУ. При включении питания эта команда выполняется автоматически.
  • Read Power Supply [B4h]. Эта команда позволяет проверить, использует ли 1-проводное устройство паразитное питание. Дело в том, что 1-проводное устройство можно подключать всего с помощью двух проводов, в этом случае для питания используется линия данных. Особенности этого режима мы здесь рассматривать не будем.

При использовании DS18S20 или DS18B20 только для измерения температуры нужны всего две команды: Convert T для запуска процесса преобразования и Read Scratchpad для чтения результата. Последовательность действий при измерении температуры должна быть следующей:

 

  • Посылаем импульс сброса и принимаем ответ термометра.
  • Посылаем команду Skip ROM [CCh].
  • Посылаем команду Convert T [44h].
  • Формируем задержку минимум 750мс.
  • Посылаем импульс сброса и принимаем ответ термометра.
  • Посылаем команду Skip ROM [CCh].
  • Посылаем команду Read Scratchpad [BEh].
  • Читаем данные из промежуточного ОЗУ (8 байт) и CRC.
  • Проверяем CRC, и если данные считаны верно, вычисляем температуру.

Если используется термометр DS18S20 и высокая точность измерения не требуется, можно читать только первых два байта Scratchpad, где содержится температура с дискретностью 0.5°C. У DS18B20 в этих двух байтах содержится значение температуры с максимально возможной дискретностью, для этого термометра никаких дополнительнх вычислений производить не нужно. Если считываются всего два байта, то праверить их правильность с помощью CRC не представляется возможным.

Программа термометра, которая работает под под Win95/98/ME/NT/2K/XP, позволяет считывать и отображать показания термометра, а также считывать серийный номер, программировать два пользовательских байта и режим DS18B20. Кроме термометров DS18S20 и DS18B20 программа поддерживает и снятый с производства DS1820.

Для подключения термометра к COM-порту компьютера используется специальный адаптер. Схема адаптера приведена на рис. 10, где показано окно помощи программы.

 

Adapter circuit

Рис. 10. Принципиальная схема адаптера.

Схема этого адаптера не так проста, как, например, схема адаптера DS9097 фирмы Dallas. Это связано в первую очередь с тем, что хотелось иметь общую «землю» компьютера и 1-проводной шины. Для питания термометра используется линия DTR последовательного порта. Адаптер обеспечивает на входе RXD порта компьютера лишь однополярные уровни, что, строго говоря, не соответствует спецификации RS-232C. Однако большинство портов с такими уровнями работают нормально. Вместо указанных на схеме n-канальных МОП-транзисторов можно применить близкие по параметрам транзисторы других типов, например, BSS138. Подойдут также отечественные транзисторы КП501 или КП505. В принципе, можно применить и биполярные транзисторы, добавив в базы ограничительные резисторы сопротивлением примерно 10 кОм. Конструктивно адаптер выполнен в корпусе разъема D-SUB-9 (рис. 11):

 

Adapter view

Рис. 11. Внешний вид адаптера.

Разъем D-SUB-9 паяется прямо на плату, которая входит между рядами контактов. Другая сторона платы выполнена удлиненной и выходит за пределы корпуса разъема. В эту часть платы впаян 3-х контактный винтовой терминал.

К винтовому терминалу подключается микросхема термометра с помощью проводов, длина которых может составлять до нескольких десятков метров. Если датчик термометра используется в комнатных условиях, то никаких мер по его защите применять не нужно, необходимо только изолировать выводы. Если же предполагается измерять температуру наружного воздуха или каких-то агрессивных сред, датчик термометра необходимо упаковать. Например, можно взять алюминиевый корпус электролитического конденсатора подходящего диаметра и поместить туда датчик, заполнив весь свободный объем теплопроводящей пастой. Сверху такой стакан необходимо герметизировать.

Описанный адаптер также подходит для считывания электронных ключей IButton (программа определяет все основные виды ключей) и для подключения других 1-проводных устройств.

Вид главного окна программы показан на рис. 12:

 

Main window

Рис. 12. Вид главного окна программы.

Окно имеет следующие элементы управления:

 

  • Поле Device ID, куда выводится код семейства 1-проводного устройства. Для DS1820 и DS18S20 он равен 10h, для DS18B20 - 28h.
  • Поле Device Name, где приводится расшифровка типа устройства.
  • Поле Serial number, куда выводится серийный номер устройства.
  • Поле CRC, где отображается результат проверки контрольной суммы (OK или FAIL).
  • Поле TH / User byte 1, куда можно ввести значение в шестнадцатеричной форме, которое будет записано в регистр TH.
  • Поле TL / User byte 2, куда можно ввести значение в шестнадцатеричной форме, которое будет записано в регистр TL.
  • Список DS18B20 config, с помощью которого можно выбрать требуемое разрешение термометра. Затем конфигурацию можно записать в его энергонезависимую память.
  • Start запускает процесс измерения температуры. Преобразование выполняется периодически, измеренная величина выводится в поле температуры. Дискретность представления температуры составляет 0.1°C.
  • Кнопка Exit позволяет выйти из программы.

Кроме того, вверху окна имеется меню, состоящее из трех пунктов: Port, Utilites и Help.

 

Menu Port

Рис. 13. Меню Port в развёрнутом виде.

Меню Port в развернутом виде показано на рис. 13. Это меню позволяет открыть один из четырех портов COM1 – COM4. Кроме того, меню позволяет закрыть порт и выйти из программы. В списке активны только доступные порты (т.е. те, которые присутствуют в системе и не заняты в данный момент другими приложениями). Когда порт открывается, проверяется наличие на этом порту адаптера с подключенным термометром. Если термометр не обнаружен, выводится соответствующее сообщение (рис. 14):

 

Error no device

Рис. 14. Сообщение об ошибке при отсутствии термометра.

Меню Utilites (рис. 15) содержит три пункта:

  • Read ROM – считывание содержимого ПЗУ (код семейства, серийный номер), а также считывание TH, TL и конфирурации.
  • Start Conv. – запускает процесс измерения температуры.
  • Write User Bytes – записывает значения TH и TL, которые введены в соответствующих полях. Для DS18B20 записывает и конфигурацию, которая выбрана в списке DS18B20 config.

 

Menu Utilites

Рис. 15. Меню Utilites в развёрнутом виде.

Меню Help содержит рисунок принципиальной схемы адаптера и сведения о разработчике программы.

Для хранения установок программа использует ini-файл, который создается автоматически в том же директории, где расположен exe-файл. В ini-файле содержится информация о положении окна программы и номер используемого COM-порта:

 

[General]
Left=427
Top=295
COM port=2

Обмен, который производится по 1-проводной шине, требует довольно точного соблюдения временных соотношений микросекундного диапазона. Работая под Windows, точно сформировать такие интервалы программным способом невозможно. Поэтому необходимые временные интервалы формируются аппаратно микросхемой приемопередатчика последовательного порта, который используется не совсем обычно.

Для генерации импульса сброса и приема ответа порт настраивается на скорость 9600 бод, длина символа 8 бит, и передается число F0h. Это приводит к формированию импульса сброса низкого уровня (с учетом инверсии адаптера) длительностью примерно 520 мкс (стартовый бит + 4 передаваемых бита). За ним следует импульс высокого уровня такой же длительности (4 передаваемых бита + стоповый бит), в течение которого ожидается ответ термометра. Если термометр не подключен, то порт примет число F0h без искажений. Но если термометр сформировал импульс ответа, то принятое число будет содержать большее количество единиц, чем четыре. Таким образом определяется наличие ответа.

Для генерации интервалов приема и передачи битов, порт настраивается на скорость 115200 бод. Стартовый бит начинает временной интервал, затем идут 8 единичных или нулевых битов, в зависимости от значения бита, который нужно передать. Заканчивается последовательность стоповым битом, который на некоторое время устанавливает на 1-проводной шине высокий уровень. Вид этой последовательности полностью соответствует требуемому виду временного интервала передачи бита, за исключением того, что обмен является более медленным, чем способна обеспечить 1-проводная шина: на один бит затрачивается примерно 87 мкс.

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

Для работы с COM-портом программа пользуется функциями API через специальную «оберточную» динамическую библиотеку comapi32.dll. Однако скорость обмена получается гораздо ниже расчетной из-за того, что переключение скорости COM-порта (вызов функции SetCommState с изменённым значением поля BaudRate структуры DCB) идёт удивительно долго (порядка 200 миллисекунд!). Это весьма неприятное свойство Windows API.

При использовании термометра необходимо учитывать, что корпус DS18S20 или DS18B20 сделан из материала с относительно плохой теплопроводностью. Поэтому утечка тепла через выводы и подключенные к ним провода может быть весьма ощутимой. Для уменьшения ошибки измерения следует использовать провода малого сечения.


Скачать:

программа для работы с термометрами DS1820, DS18S20 и DS18B20.

исходный текст программы (Delphi 5)

исходный текст библиотеки comapi32.dll

Даташит DS1820


Ридико Леонид Иванович
e-mail: wubblick@yahoo.com
13
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
 Компьютерный термометр с датчиками DS18S20/B20.
Главный Технолог
Главный Технолог
Дата регистрации: 18.11.2009
Откуда: Тирасполь
Сообщений: 275
не в сети
цена одной микросхемы ~3 у.е. . Цена готового устройства китайского производства выйдет чуть дороже ,но оно будет полностью готово ,в нормальном корпусе ,автономно и небольшого размера .

ЗЫ: стать хороша для саморазвития ,а с практической точки зрения область применения узкоспециализирована .
 Компьютерный термометр с датчиками DS18S20/B20.
Модератор
Модератор
Дата регистрации: 25.02.2009
Откуда: ПМР Рыбница
Сообщений: 2077
не в сети
Видел в продаже такие китайские термометры,два экземпляра лежали рядом и разница в показаниях была 2 градуса!
 Компьютерный термометр с датчиками DS18S20/B20.
Главный Технолог
Главный Технолог
Дата регистрации: 18.11.2009
Откуда: Тирасполь
Сообщений: 275
не в сети
+/- 2 градуса ,не критично . Зато девайс готовый и полностью автономный (чтоб мерять температуру тела ,ничего лучше ртутного градусника ещё не придумали ) .
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7276
не в сети
а я бы сказал, что китайская безделушка имеет узкую специализацию. Только замер температуры. И ВСЁ! А с датчиков DS18S20 можно снимать данные в цифровом виде, датчики можно использовать для включения - выключения чего нибудь (вентилятора, нагревателя...) практически без дополнительных элементов. Датчик изначально программируется на заданные температуры, далее выводим ключ и вот вам вся схема - датчик и ключ.

PS. А для истинных радиолюбителей дело чести сделать устройство лучше китайского))))) И не отмазываться, что китайское дешевле выйдет...
 Компьютерный термометр с датчиками DS18S20/B20.
Главный Технолог
Главный Технолог
Дата регистрации: 18.11.2009
Откуда: Тирасполь
Сообщений: 275
не в сети
я ещё не видел ни одного радиолюбителя с самодельным мобильным телефоном =x) Самодельный девайс нужен когда заводской выйдет либо очень дорого либо такого нет в продаже или не подходит по параметрам .
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Рыбница
Сообщений: 2502
не в сети
Я ещё не видел ни одного программиста, который бы использовал свой софт вместо Офиса))
Самописный софт используют когда лицензия стоит дорого, либо такой ещё не сделали, либо не подходит под поставленные задачи.
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7276
не в сети
Цитата:
я ещё не видел ни одного радиолюбителя с самодельным мобильным телефоном =x) Самодельный девайс нужен когда заводской выйдет либо очень дорого либо такого нет в продаже или не подходит по параметрам .

Выше я тебе написал достоинства датчика. А какие у китайского?
 Компьютерный термометр с датчиками DS18S20/B20.
Школьник
Школьник
Дата регистрации: 14.02.2010
Откуда:
Сообщений: 1
не в сети
Предлагаемая программа работает отлично, но сам исходник нет. Не может определить порты COM и сам дивайс. Исходный текст библиотеки comapi32.dll попытался перекомпилировать, выдаёт ошибку в строке "Result:=TransmitCommChar(hCom,Chr(data));", не той системы символы, ладно перевёл Chr(data) из Char в AnsiChar, компиляция прошла (при этом comapi32.dll почему то стал весить 28 кбайт вместо 16,5), исходник программы стал с новым comapi32.dll видеть COM порты но не видит дивайс. В чём проблема?

Причём сама прога с новым comapi32.dll не видит COM порты. Похоже исходник не соответствет предлогаемой программе.

Пользуюсь Delphi 2010.
 Компьютерный термометр с датчиками DS18S20/B20.
Младший сотрудник
Младший сотрудник
Дата регистрации: 09.04.2010
Откуда: Комрат
Сообщений: 26
не в сети
Сей девайс работает отлично и главные его достоинства по сравнению с китайским готовым термометром в том что компьютер сам регистрирует температуру и время, заводская точность!, и многое другое.
 Компьютерный термометр с датчиками DS18S20/B20.
Школьник
Школьник
Дата регистрации: 29.09.2010
Откуда:
Сообщений: 1
не в сети
У меня все заработало с полпинка. Правда у меня схема другая: я использовал старый USB дата-кабель для телефона на PL2303 (USB->UART TTL) Поставил резистор 4,7К между Tx и Rx кабеля. Dq датчика припаял к Rx PL2303. Питание 5В брал с платки дата-кабеля через сопротивление 100 Ом. С данной схемой подключения помог форум на homedistiller.ru В программе в процедуре TMainForm.Open_COM после открытия порта добавил установку таймаутов com-порта - SetCOMTo(2,3,5000,100,1000) Если этого не сделать и выбрать не правильный порт или термодатчик не ответил, то программа уходила в бесконечный цикл. А так через 5 секунд программа выдаст сообщение об отсутствии датчика на данном порту. Так же добавил определение всех присутствующих в системе com-портов и работу с ними.
 Компьютерный термометр с датчиками DS18S20/B20.
Школьник
Школьник
Дата регистрации: 08.03.2011
Откуда:
Сообщений: 1
не в сети
+1
тоже исходники не видят COM порт

Windows 7 x64 , Delphi XE
 Компьютерный термометр с датчиками DS18S20/B20.
Школьник
Школьник
Дата регистрации: 19.03.2011
Откуда:
Сообщений: 1
не в сети
Так же как и Вы попробовал сначала на Delphi XE. Но т.к. все писалось на старой версии Delphi решил попробовать скомпилировать в Delphi 7 и все нормально собралось и com порты видятся и т.д. Я думаю проблема в версиях Delphi, в новой версии, что-то по другому интерпретируется, чем в старой.
 Компьютерный термометр с датчиками DS18S20/B20.
Абитуриент
Абитуриент
Дата регистрации: 12.07.2011
Откуда: Харьков
Сообщений: 2
не в сети
Не мог установить разрядность для датчиков DS18B20.
Чекбокс с выбором разрядов был запрещен.
Предлагаю вставить в DS1820_Main.pas строку 442
if Fam=$28 then cbConfig.Enabled := True;
 Компьютерный термометр с датчиками DS18S20/B20.
Старший сотрудник
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 124
не в сети
Я конечно извиняюсь, но COM порты если далеко не в каждом компе.
ИМХО лучше USB термометр.
 Компьютерный термометр с датчиками DS18S20/B20.
Абитуриент
Абитуриент
Дата регистрации: 12.07.2011
Откуда: Харьков
Сообщений: 2
не в сети
Ком-порты есть почти в каждом компе, но не в каждом они выведены на заднюю панель. А навешать на один порт целую кучу датчиков не используя при этом микроконтроллеров, ИМХО гораздо проще и выгодней, ничего для USB и атмела писать не надо.
 Компьютерный термометр с датчиками DS18S20/B20.
Технический Директор
Технический Директор
Дата регистрации: 18.12.2008
Откуда: Тирасполь
Сообщений: 2265
не в сети
1)сказано, что программа проводит измерения периодически...а в цифрах это сколько?
2)Зачем дискретность отображения в программе 0,1 гр., если погрешность датчика +-0,5 гр.?
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7276
не в сети
2.И что? Одно к другому какое отношение? Просто у тебя будет погрешность на полградуса, а если ты хочешь замерить изменение температуры, то тебе как раз надо будет 0.1гр
1.Примерно 2 замера в секунду
 Компьютерный термометр с датчиками DS18S20/B20.
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3926
не в сети
1. Без калибровки датчик врет в диапазоне +-2,5 градуса.
2. После калибровки в указанном диапазоне температур датчик будет врать на 0,5 градуса.
3. Дискретность температуры, измеряемая датчиком-до 0,0625 градуса.
В качестве уличного -комнатного термометра после калибровки можно применять.
 Компьютерный термометр с датчиками DS18S20/B20.
Технический Директор
Технический Директор
Дата регистрации: 18.12.2008
Откуда: Тирасполь
Сообщений: 2265
не в сети
как может быть 2 замера в секунду? если
Цитата:
Формируем задержку минимум 750мс.


ЗЫ: to evildesign зачем калибровать? Написано, что "такой термометр уже откалиброван на заводе"
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7276
не в сети
Ну полтора...
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7276
не в сети
Гром, я не пойму тебя, чего ты хочешь? Взял в руки даташит и зубри от корки до корки...

Чего ты из себя умника строишь?
 Компьютерный термометр с датчиками DS18S20/B20.
Технический Директор
Технический Директор
Дата регистрации: 18.12.2008
Откуда: Тирасполь
Сообщений: 2265
не в сети
никто никого не строит, просто информация появляется даже та, которой в даташите нет.
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7276
не в сети
Ты свои армейские штучки брось)))
До завтра чтоб рассказал нам всё, что выучил об DS18S20
 Компьютерный термометр с датчиками DS18S20/B20.
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3926
не в сети
Вот секретный документ, которого нет на сайте производителя, но тем не менее, который он высылает по запросу от крупных потребителей.
Могу еще много чего интересного рассказать про особенности работы с этими датчиками, но это никто из быдлокодеров-то и не знает. Чтобы знать эти особенности- нужно этим серъезно заниматься, а не делать из них только детские термометры.

Скачать
 Компьютерный термометр с датчиками DS18S20/B20.
Технический Директор
Технический Директор
Дата регистрации: 18.12.2008
Откуда: Тирасполь
Сообщений: 2265
не в сети
Цитата:
в том что компьютер сам регистрирует температуру и время,

что-то не наблюдаю, чтобы компьютер температуру ко времени привязывал...
Если бы прога еще и лог писала и график строила, было бы вообще классно!

PS: даташит на русском http://www.masterkit.ru/zip/ds18b20-rus.pdf
Внимание! Штеккер DE-9, который нужен для втыкания в материнскую плату, лузеры в прайс-листах обозначают как DB-9!
 Компьютерный термометр с датчиками DS18S20/B20.
Технический Директор
Технический Директор
Дата регистрации: 18.12.2008
Откуда: Тирасполь
Сообщений: 2265
не в сети
Цитата:
Вот секретный документ, которого нет на сайте производителя,
что-то не наблюдаю ничего секретного, и где там про 0,5 градуса сказано?
Как я понял из английского текста, у датчиков случаются сбои и по тексту описывается патч, который позволяет поддерживать погрешность хотя бы 2 градуса, а без него вообще капец будет.
Цитата:
К винтовому терминалу подключается микросхема термометра с помощью проводов, длина которых может составлять до нескольких десятков метров.
ой-ли?

Цитата:
цена одной микросхемы ~3 у.е. . Цена готового устройства китайского производства выйдет чуть дороже ,но оно будет полностью готово ,в нормальном корпусе ,автономно и небольшого размера .
+100
 Компьютерный термометр с датчиками DS18S20/B20.
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Рыбница
Сообщений: 2502
не в сети
Цитата:
ой-ли?


По cat7 можно передавать сигнал сети 10 Гб/с до ста метров...
 Компьютерный термометр с датчиками DS18S20/B20.
Практикант
Практикант
Дата регистрации: 28.11.2009
Откуда: Ташкент
Сообщений: 13
не в сети
Было интересно читать некоторые высказывания в теме.
Исходя из собственного опыта работы с этими датчика-
ми могу сказать следующее:
1. Погрешность измерения соответствует данным, заяв-
ленным фирмой-изготовителем. Это проверялось не-
однократно и на серьезном оборудовании в нашем
Госстандарте.
2. Их фактическая погрешность в диапозоне 20-50 гра-
дусов не превышает 0,2 градуса; никакие калиб-
ровки им не нужны.
3. Эти датчики могут использоваться не только в бы-
ту, но и на промышленных объектах (фактически ис-
пользуются не первый год). При этом они зареко-
мендовали как вполне надежные.
 Компьютерный термометр с датчиками DS18S20/B20.
Студент
Студент
Дата регистрации: 20.12.2015
Откуда:
Сообщений: 4
не в сети
Что-то не вижу благодарности MACTEPу, которую отправил вчера. Или сайт уже давно лежит?
 Компьютерный термометр с датчиками DS18S20/B20.
Студент
Студент
Дата регистрации: 20.12.2015
Откуда:
Сообщений: 4
не в сети
Что-то не вижу благодарности MACTEPу, которую отправил вчера. Или сайт уже давно лежит?

Кратко повторюсь. Собрал термометр на DS18B20 и нашел исходник для DS18S20. Немного  помучился  чтобы адаптировать проект под разрядность  микросхемы 12 бит -  не получилось -  с железом работаю недавно.
И удача - исходник для DS18B20 на этом сайте! Не поленился зарегистрироваться на сайте, чтобы выразить свою благодарность автору материала. Удач Вам и успехов!

... и попутно. Подскажите, пожалуйста, ссылку на USB-термометр за 3$  в КОРПУСЕ? Заранее благодарен.
 Компьютерный термометр с датчиками DS18S20/B20.
Студент
Студент
Дата регистрации: 20.12.2015
Откуда:
Сообщений: 4
не в сети
Draken!
Дай, пожалуйста, линк на готовое устройство, если такое существует в природе. Уточню: устройство - это модуль (плата) в корпусе.
 Компьютерный термометр с датчиками DS18S20/B20.
Студент
Студент
Дата регистрации: 20.12.2015
Откуда:
Сообщений: 4
не в сети
......3. Дискретность температуры, измеряемая датчиком-до 0,0625 градуса. ...

Собрал схему на DS18В20 (9-12 бит) и запустил исходник. По умолчанию устанавливается конфигурация на 9 бит. Помогите записать конфигурацию, чтобы отображалась температура хотя бы с дискретностью 0,1 градуса,  не говоря уже о разрешении 0,0625 градуса. Сейчас дискретность 0,5 градуса.
Заранее благодарю.
 Компьютерный термометр с датчиками DS18S20/B20.
Школьник
Школьник
Дата регистрации: 15.01.2016
Откуда: Беларусь
Сообщений: 1
не в сети
Собрал адаптер по схеме на Рис.10 и он НЕ РАБОТАЕТ! Не "видит" датчика. А всё потому, что на данной схеме не правильно указан номинал резистора между 2-м и 3-м выводами DS18b20. Может датчики другого типа и будут работать, но эти - нет. Как только был установлен резистор на 4,7 кОм, всё стало работать. Окно списка DS18B20 config, с помощью которого можно выбрать требуемое разрешение термометра не активно. Подскажие, кто знает, как его сделать активным.  

Разное

Интересно

Пайка SMD резисторов и прочих компонентов обычным паяльником:

Похожие статьи