PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Программирование микроконтроллеров » Термометр на DS18B20 (подключение через COM порт)


Термометр на DS18B20 (подключение через COM порт)

Сообщений 1 страница 30 из 36

1

Этот компьютерный COM термометр выполнен на специализированной микросхеме DS18B20 фирмы Dallas. Он подключается к ПК (компьютеру) через последовательный COM порт. Если в вашем компьютере нет COM порта, можете посмотреть другой вариант градусника, подключаемый через USB. USB термометр на ATmega8 и PIC18F4550
Или использовать переходник USB to UART. Поскольку датчик температуры DS18B20 имеет интерфейс 1-Wire, то для согласования с COM портом компьютера необходим преобразователь уровней напряжения, выполненный по схеме:

http://pure-basic.narod.ru/forum_files/COM_DS/Sh.gif

Замечу что это не единственный возможный вариант схемы. Идея не нова и в интернете можно найти разнообразные варианты схем от простейших, до сравнительно сложных.

При использовании USB переходника, схему можно упростить.

http://i038.radikal.ru/1502/7f/876124aa7de8.gif

Если у переходника нет выводов DTR и RTS, но есть выход 5 вольт, схема такая.

http://s020.radikal.ru/i723/1601/04/e695161a0783.gif

Программа проверена и хорошо работает с USB переходниками на микросхеме PL2303.

http://s017.radikal.ru/i437/1601/b8/c6cf3ac0c77d.png

Для считывания текущей температуры с датчика DS18B20 была разработана программа "DS18B20 Thermo" (она кроссплатформенная - для Windows и Linux), внешний вид окна которой показан на скриншоте.

Window версия.

http://pure-basic.narod.ru/forum_files/COM_DS/Scrin.png

Linux версия.

http://pure-basic.narod.ru/forum_files/COM_DS/Scrin_Lin.png

В программе следует выбрать COM порт к которому подключен датчик температуры и если порт не занят, устройство исправно и датчик подключен, то в поле, расположенном в центре окна, отобразится текущая температура. Linux версию программы нужно запускать с правами root-а, иначе не будет доступа к COM порту. Это одна из особенностей операционной системы Linux.

Исходный текст программы "DS18B20 Thermo" и скомпилированные файлы. Для компиляции требуется PureBasic 5.20 или более новая версия.


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

http://s019.radikal.ru/i619/1312/36/bdef6796285c.png

http://s6.uploads.ru/jC4vF.jpg

Скачать программу для Windws x86, Windws x64 и Linux x86 и ее исходные коды.

+1

2

Петр, здравствуйте , скажите , данная схема будет работать на промышленном предприятии, где расстояние от ком порта до датчика более 100 метров и датчик может быть не один?
Очень хотелось бы испытать данную схему в условиях производства. Есть преобразователи 1-wire\RS-485, но с помощью них не знаю как к компьютеру подключиться, т.к. нужно какой то софт писать для протокола Centronix

0

3

С такой длиной линии не проверял. Для улучшения помехоустойчивости скорее всего придется уменьшить сопротивления резисторов R3 и R7, а также использовать внешнее питание, а не от COM порта.

0

4

Здравствуйте! При минусовой температуре у меня показывает 4000 вроде. Это программа так показывает или у меня что то не так с датчиком. Положительную температуру показывает как нужно. Программа которая первая, с одним датчиком.

Отредактировано wvlas (08.10.2015 08:46:41)

0

5

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

0

6

privet vsem skajite pojalusta kak sdelat chto mnogo datchik rabotaet vetot pragrame

0

7

Датчики подключаются параллельно друг другу, т. е. их одноименные выводы соединяются вместе.

0

8

ona mojet pokazat oshibki ??????????

0

9

Когда происходят ошибки, они отображаются в колонке "Статус". Обычно ошибок нет.

0

10

uvas est programa chto pokazivaet vlajnost ili etot sxema i programa mojet pokazat vlajnost?????????????

0

11

Влажность можно вычислить методом "сухого и мокрого термометра". https://ru.wikipedia.org/wiki/Психрометр

0

12

Gor написал(а):

uvas est programa chto pokazivaet vlajnost

Тут посмотрите.

0

13

privet u menya oshibka est skajite chto on mojet bit , oshibka CRC

0

14

Эта ошибка происходит постоянно или только иногда?
Ошибка CRC означает что данные исказились. Возможно это из-за большой длины провода между компьютером и датчиком и из-за большого уровня помех.

0

15

inagda etot oshibka , 1 raz pishet oshibka CRC  i  raz pishet net datchika niznayu chto sdelat

0

16

vsh sxema pravino rabotaet??????????

0

17

Схема нормально работает. Но если датчиков много, сопротивление резистора R3 нужно уменьшить.

0

18

skajite pojalusta kakaya raznica  sensor arduino temp ds18b20  i  sensor ds18b20+wire ????????????

0

19

Скорее всего одно и тоже, но нужно смотреть их описание.

Повысить стабильность и уменьшить число ошибок можно включив режим "Снизить нагрузку на CPU" в меню программы.

0

20

Здравствуйте. Подскажите почему исходник с одним датчиком запускается нормально, а со многими вместо русских надписей вопросики =????=. Виндовс ХР SP3  PureBasic5.3

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

Отредактировано OllyRom (08.03.2016 23:42:00)

0

21

OllyRom написал(а):

а со многими вместо русских надписей вопросики =????=. Виндовс ХР SP3  PureBasic5.3

Ели речь про архив DS18B20_ThermoMon_v1.0.zip то исходник нормально открывается и компилируется. С надписями все в порядке.
Случайно кодировку не изменили?

OllyRom написал(а):

температура изменяется на 0.1 градуса, а у меня через 0.5

Датчик DS18B20 или DS1820 / DS18S20?

0

22

Пётр написал(а):

Ели речь про архив DS18B20_ThermoMon_v1.0.zip то исходник нормально открывается и компилируется. С надписями все в порядке.
Случайно кодировку не изменили?
Датчик DS18B20 или DS1820 / DS18S20?

Да, речь именно об этом архиве. Он разархивировался на ноутбуке с Win8.1 на флешку, тестово запускался, но поскольку на нем нет COM и LPT, флешка переставлялась на комп древнее с нужными портами, а на том уже вопросики.
Датчики покупались в =Космодроме=  kosmodrom.com.ua/el.php?name=DS18B20,

Можно ли подключить параллельно DS18B20 еще и DHT11 ДатчикВлажности+Температуры? и что  нужно изменить в исходнике. Даташит kosmodrom.com.ua/el.php?name=DHT11

Страница с описанием датчика kosmodrom.com.ua/prodlist.php?page=0&name=ds18b20&okbutton=%CF%EE%E8%F1%EA+%EF%EE+%F1%EA%EB%E0%E4%F3
Написано: =Программируемая пользователем разрешающая способность встроенного АЦП может быть изменена в диапазоне от 9 до 12 разрядов выходного кода. Абсолютная погрешность преобразования меньше 0,5° C=.
А как ее изменить? этупрограммируемую пользователем разрешающую способность?

Отредактировано OllyRom (09.03.2016 07:26:50)

0

23

OllyRom написал(а):

а на том уже вопросики

Т. е. в exe программе?
Из ранее написанного создалось впечатление что вопросики были после компиляции из исходников, т .к. упоминается среда программирования.

OllyRom написал(а):

а со многими вместо русских надписей вопросики =????=. Виндовс ХР SP3  PureBasic5.3


OllyRom написал(а):

Можно ли подключить параллельно DS18B20 еще и DHT11

Нет нельзя. У DHT11 другой протокол, не 1-Wire.

0

24

Пётр написал(а):

Т. е. в exe программе?
Из ранее написанного создалось впечатление что вопросики были после компиляции из исходников, т .к. упоминается среда программирования.

Нет нельзя. У DHT11 другой протокол, не 1-Wire.


Петр спасибо огромное за помощь и внимание. С вопросиками ???? http://s6.uploads.ru/t/42VPd.jpg
разобрался. При установке PureBasic-5.3 устанавливается с кодировкой ANSII а исходники в архивев UTF8. Причем смена кодировки среды прогр-я при открытом исходнике даже при перезапуске компилятора ничего не дает. (Странно работает среда Pure) Нужно полностью закрыть проект и по новой открыть файл с pb-расширением.

Теперь по поводу разрешения датчика DS18B20 при измерении температуры. В даташите на него указано =The core functionality of the DS18B20 is its direct-to-digital temperature sensor. The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively. The default resolution at power-up is 12-bit. The DS18B20 powers up in a low-power idle state. To initiate a temperature measurement and A-to-D conversion, the master must issue a Convert T [44h] command. = То есть по умолчанию при подаче питания (power-up) он должен ставиться в мах разрешение. Прочитал только что поверхностно (не вдаваясь в точность перевода) даташит термометра, написано что начальное конфигурирование датчика делается при подключении только одного к мастеру. А я их посадил сразу все грядкой 5 штук, приду с работы вечером поюзаю.

DHT11 действительно параллельно втыкать в шину нельзя, у него упрощенный 1-Wire протокол без 64-битной уникальной идентификации + обратного управления, и передача температуры и влажности  с CRC одним пакетом, нужно либо другие однопроводные датчики, либо на контроллере =разобрать= пакет и эмулировать два датчика 1-wire с разными бортовыми номерами. К тому же мне в проект нужно еще и пару датчиков давления 0-15атм.
Так что на форуме похоже надолго

0

25

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

0

26

Dy написал(а):

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


У тебя ФИЗИЧЕСКИЙ COM-порт на компе имеется?  Такой разъем на 9 контактов ( набери в яндексе поиск картинок ) и статья в помощь  http://biosgid.ru/osnovy-ustrojstva-pk/ … -port.html

фото порта http://gallery.dpcdn.pl/imgc/UGC/37751/g_-_-x-_-_-_37751x20121201135130_0.gif

Проще всего запустить программу на стареньком ПК с COM-портом, в выпадающем списке выбери по очереди, все заработает. Но если его нет,а есть только USB, тогда придется делать USB-адаптер из другой ветки форума USB термометр на ATmega8 и PIC18F4550  с драйвером

0

27

Пётр написал(а):

Нет нельзя. У DHT11 другой протокол, не 1-Wire.


У DHT11  протокол 1-Wire, только упрощенный.
Датчик http://catcatcat.d-lan.dp.ua/wp-content/uploads/2013/08/Catcatcat_dht-11_150.png (один вывод не используется)

И выдержка из описания
=DHT11 недорогой цифровой датчик температуры и влажности. Он использует емкостной датчик влажности и терморезистор для измерения температуры окружающего воздуха, данные выдает в цифровой форме по шине типа 1-wire. В использовании он довольно прост, но требует точного определения длительности временных сигналов, чтобы декодировать данные. Единственный недостаток это возможность получения данных не чаще 1 раза в две секунды.=

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

DHT11 действительно параллельно DS18B20 втыкать в шину нельзя, у него упрощенный 1-Wire протокол без 64-битной уникальной идентификации + обратного управления, и передача температуры и влажности  с CRC одним пакетом.

Более сложное решение - нужно на контроллере (ATtiny, ATmega) сделать промежуточный эмулятор двух  DS18B20,  =разобрать= пакет и эмулировать два датчика 1-wire с разными бортовыми номерами, при этом по одному бортовому номеру выводить влажность.

Отредактировано OllyRom (13.11.2016 11:48:55)

0

28

Пётр написал(а):

Для считывания текущей температуры с датчика DS18B20 была разработана программа "DS18B20 Thermo" (она кроссплатформенная - для Windows и Linux), внешний вид окна которой показан на скриншоте.

Window версия.
http://pure-basic.narod.ru/forum_files/COM_DS/Scrin.png

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


В исходнике программы не разбирался, но именно она переводит DS18B20 в режим измерения точности 0.5градуса.
Термомониторинг v1.0 работает нормально

0

29

Dy написал(а):

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


Именно в этой программе ничего настраивать не надо. Просто выбрать требуемый порт.

Если же интересно поработать с портами на более низком уровне и умеешь немного программировать, прекрасная подборка статей здесь
http://kernelchip.ru/pcports.php

Лучше начинать с LPT порта, нагляднее и проще

Работа с COM в самом низу страницы

Готовое программное решение для работы с com-портом - программа  PuTTY (поищи в поиске). Я с помощью нее заливаю прошивки через USB-порт на роутеры с эмулятором COM-порта

Отредактировано OllyRom (13.11.2016 13:35:01)

0

30

программировать немного умею, сейчас пишу на C# и у меня проблема только одна - подать низкий уровень на 1 мкс и начать читать данные. То есть что нужно для этого сделать? Всё остальное работать должно, временные интервалы должны совпадать.
Адаптер на 2 транзисторах, адрес схемы не помню. По этой схеме подключен ds18b20 и 2 программы (включая и эту) работают правильно. Я хотел узнать как именно через COM-порт ПК на уровне "C#, SerialPort, скорость/биты/значения" организовано чтение бита по протоколу 1-wire. При этом мне ассемблер понятнее, чем purebasic.

Отредактировано Dy (13.11.2016 17:54:37)

0


Вы здесь » PureBasic - форум » Программирование микроконтроллеров » Термометр на DS18B20 (подключение через COM порт)