PureBasic - форум

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

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


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


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

Сообщений 61 страница 90 из 114

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://forumupload.ru/uploads/0009/ae/28/2/67951.gif

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

http://forumupload.ru/uploads/0009/ae/28/2/531547.gif

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

http://forumupload.ru/uploads/0009/ae/28/2/528620.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://forumupload.ru/uploads/0009/ae/28/2/850420.png

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

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

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

Версия 1.3 http://pure-basic.narod.ru/forum_files/ … on_1.3.zip

+1

61

Александр написал(а):

команду WRITE SCRATCHPAD [4Eh]- нет

Запись в датчик нужна при необходимости изменить данные в EEPROM что в этой программе не требуется.

0

62

Пётр, добрый день! не могли бы подсказать как аналогичное сделать на C#, может исходным кодом поделиться, правда я с++ не очень знаю.либо инфу какую по этому вопросу, буду очень благодарен!

Отредактировано WestVolk (12.09.2018 10:57:17)

0

63

Исходники находятся в архиве с программой в папке Source или Src. Они на бейсике - PureBasic, а не на C++.

0

64

так это отлично,с бейсиком мы дружим)

0

65

Чтобы не тратить много времени на переписывание 1-Wire библиотеки на C#, можете воспользоваться ее скомпилированной версией в виде DLL.

0

66

мне тут больше сам механизм чтения/записи данных интересен, например как считать температуру, либо записать на датчик новые интервалы времени

0

67

Об этом написано в документации. https://datasheets.maximintegrated.com/ … S18B20.pdf
На русском. http://pure-basic.narod.ru/forum_files/ … 20_Rus.pdf

0

68

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

Об этом написано в документации. https://datasheets.maximintegrated.com/ … S18B20.pdf
На русском. http://pure-basic.narod.ru/forum_files/ … 20_Rus.pdf

Спасибо, огромное!!!то что надо!!!

0

69

http://sg.uploads.ru/t/ajPne.png
Петр здравствуйте!
У меня возникла проблема с датчиками. При подключении выдает "Ошибка СRC", но если отключить другие датчики то датчик с ошибкой начинает нормально работать.
Приходится использовать несколько контроллеров USB. Напишите пожалуйста как-то это лечится или нет? У меня несколько датчиков  с такой проблемой.

Отредактировано Aleksey (08.10.2018 09:08:29)

0

70

Ошибка постоянная или появляется периодически?
Какая длина провода между адаптером и датчиками? При большой длине нужно использовать экранированный кабель, или витую пару и возможно другой адаптер (если замена кабеля не поможет). Дело в том что с увеличением длины провода, увеличивается его емкость и снижается помехоустойчивость. Это приводит к искажению сигнала.

0

71

Установил два адаптера. На одном видится несколько датчиков при подключении еще одного остальные датчики отваливаются. Длина провода у всех разная от 1м до 40м. В принципе напягает только использование двух адаптеров. Я подозреваю что датчики между собой как то конфликтуют.
Интересно только у меня такое, или у кого-то тоже такое встречается?http://s8.uploads.ru/t/6NqrG.png

Отредактировано Aleksey (08.10.2018 15:51:43)

0

72

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

Я подозреваю что датчики между собой как то конфликтуют.

Если датчики подсоединить к короткому проводу не больше метра, они будут нормально работать?
Скорее всего дело не в датчиках, а в длине линии.
В сети про это не раз писали. http://arduino.ru/forum/apparatnye-vopr … nom-kabele
https://toster.ru/q/151923

0

73

Попробую в выходные и отпишусь.

0

74

Добрый день!
Попробовал в выходной подключил все датчики на короткие провода, и действительно все видится и определяется.
Вывод - все дело в проводах. Буду читать и экспериментировать.

0

75

Добрый день. Хочу разобраться этим языком программирования. У меня при запуске Ваших исходников: structure not found dcb.DCB. PureBasic 5.62. Пробую на 5.40 и 5.50...

0

76

Заработало на PureBasic 5.31.

0

77

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

structure not found dcb.DCB. PureBasic 5.62.

Использовалась демо-версия?

0

78

Да. А как не демо-версию заполучить? Сколько она стоит и есть ли смысл для постсоветской науки (слабофинансируемой) покупать?
Кстати кое-что дописал мож кому пригодиться.

code

Select Devices()\SN\Type
        Case $01
          String="Silicon serial number" 
        Case $02
          String="Multikey 1153bit secure"
        Case $04
          String="Econoram time chip" 
        Case $05
          String="Addresable Switch" 
        Case $06
          String="4k memory ibutton"
        Case $08
          String="1k memory ibutton" 
        Case $09
          String="1k add-only memory" 
        Case $0A
          String="16k memory ibutton"
        Case $0B
          String="16k add-only memory" 
        Case $0C
          String="64k memory ibutton" 
        Case $0F
          String="64k add-only  memory"
        Case $10
          String="High precision digital thermometer" 
        Case $12
          String="Dual addressable switch plus 1k memory" 
        Case $14
          String="256 eeprom"
        Case $1A
          String="4k Monetary" 
        Case $1B
          String="Battery id/monitor chip" 
        Case $1C
          String="4k EEPROM with PIO"
        Case $1D
          String="4k ram with counter" 
        Case $1F
          String="Microlan coupler" 
        Case $20
          String="Quad a/d converter"
        Case $21
          String="Thermachron" 
        Case $22
          String="Econo Digital Thermometer" 
        Case $23
          String="4k eeprom"
        Case $24
          String="Time chip" 
        Case $26
          String="Smart battery monitor"
        Case $27
          String="Time chip with interrupt"
        Case $28
          String="Programmable resolution digital thermometer" 
        Case $29
          String="8-channel addressable switch"
        Case $2C
          String="Digital potentiometer" 
        Case $2D
          String="1k eeprom" 
        Case $2E
          String="Battery monitor and charge controller"
        Case $30
          String="High-precision li+ battery monitor" 
        Case $31
          String="Efficient addressable single-cell rechargable lithium protection ic" 
        Case $33
          String="1k protected eeprom with SHA-1"
        Case $36
          String="High precision coulomb counter" 
        Case $37
          String="Password protected 32k eeprom" 
        Case $3A
          String="Dual channel addressable switch"
        Case $41
          String="Temperature Logger 8k mem" 
        Case $51
          String="Multichemistry battery fuel gauge" 
        Case $81
          String="Serial ID Button"
        Case $84
          String="Dual port plus time" 
        Case $89
          String="48 bit node address chip" 
        Case $8B
          String="16k add-only uniqueware"
        Case $8F
          String="64k add-only uniqueware" 
        Case $FF
          String="LCD (Swart)" 
        Default
          String="Неизвестное устройство"
      EndSelect

0

79

Если нужно получить легально, покупается здесь за 79 евро. https://www.purebasic.com/ordering.php

0

80

Петр,Ваша программа прекрасно работает под Win 7.Подскажите, на Linux (Ubuntu) должна она работать?  Никак не могу ее установить.Если Вы устанавливали ее на Linux-систему-подскажите,как Вы это делали.

Отредактировано Serg76 (18.11.2018 17:26:18)

0

81

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

Подскажите, на Linux (Ubuntu) должна она работать?

В архиве первого сообщения программа для Linux x86. Для x64 ее нужно собрать из исходников.

Программу не нужно устанавливать. Ее следует извлечь из архива и запустить.

0

82

Петр,спасибо.Как-то я внимания не обратил-у меня как раз x64. Буду пытаться-с Linux я пока на "вы":)

Отредактировано Serg76 (18.11.2018 21:32:07)

0

83

Здравствуйте.  Сам я далек  от программирования, но возникшая проблема вынуждает обратиться к вам за помощью.
Имеется: линия с 8 DS18B20 - cхема первая на странице сверху (на VD4 подал +5v с USB)  - адаптер RS232-USB "Z-Tek" - компьютер - программа TempKeeper. Система отлично работала несколько дней и вдруг:
1 - На одном датчике стала плавать(произвольно меняться в процессе измерения) битность с 9 до 12. В свойствах датчика битность - 12
2 - На другом датчике стала плавать(произвольно меняться в процессе измерения) битность с 9 до 11. В свойствах битность - 11
3 - На остальных битность 9, в свойствах - пробел
Первым делом отключил линию, подключил новый DS прямо на плату, результ - см выше п.1 . Пробовал поменять комп и ставил другие программы Т-мониторинга - все то же самое. Еще пробовал время изм 740мс менять.
Для меня важна не столько точность, сколь высокое разрешение.
Очень надеюсь на вашу помощь.

Отредактировано Skipper (25.02.2019 16:35:49)

0

84

Пётр здравствуйте. Пользуюсь вашей наработкой уже не один год! Но тут возникла надобность в использовании вот такого устройства с вашим датчиком.
https://ru.aliexpress.com/item/1804523412.html

Но ни в какую даже на расстоянии 10 см не хочет работать! Ни при каких манипуляциях и настройках! Хотя  характеристики самого com порта указал идентичные на всех устройствах. Может быть вы знаете как можно это устройство подружить с датчиком?

0

85

Ссылка ведет на главную страницу, а не на страницу товара.

0

86

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

Ссылка ведет на главную страницу, а не на страницу товара.

Прошу прощения, https://ru.aliexpress.com/item/18045234 … 33edFkzA5P

Отредактировано Cdzn (28.11.2019 08:11:38)

0

87

С таким устройством скорее всего работать не будет. Как минимум из-за того что задается фиксированная скорость порта, а ее нужно изменять при работе с датчиком.
В программе есть веб сервер. Термометр на DS18B20 (подключение через COM порт)
Возможно он подойдет для передачи данных по сети.

0

88

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

С таким устройством скорее всего работать не будет. Как минимум из-за того что задается фиксированная скорость порта, а ее нужно изменять при работе с датчиком.
В программе есть веб сервер. Термометр на DS18B20 (подключение через COM порт)
Возможно он подойдет для передачи данных по сети.

А есть возможность скорость порта сделать постоянной? С сервером, увы, не запустилось.

0

89

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

А есть возможность скорость порта сделать постоянной?

Изменение скорости порта нужно для эмуляции 1-Wire при работе с датчиками.

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

С сервером, увы, не запустилось.

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

0

90

Здравствуйте!
Программа вполне функциональна. Но считаю, можно немного улучшить.
Границы сработки сигнализации стоит задавать для каждого датчика независимо. Как вариант возможность задавать например 3 варианта и любой привязывать к датчику. Чтобы не загружать интерфейс прописывать только в инишке.
Возможность пользователю менять цвет строки датчика. И может бипер вставить один на все события?

0


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