PureBasic - форум

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

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


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


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

Сообщений 31 страница 60 из 82

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

31

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

у меня проблема только одна - подать низкий уровень на 1 мкс и начать читать данные. То есть что нужно для этого сделать?

Я хотел узнать как именно через COM-порт ПК на уровне "C#, SerialPort, скорость/биты/значения" организовано чтение бита по протоколу 1-wire.


Для начала нужно понимать протоколы 1Wire и RS232,

Язык программирования при работе с портами на высоком уровне не принципиален. Самое простое - использовать готовую библиотеку, например эту kernelchip.ru/pcports/PS057.php
Там же на Си все расписано с примерами

В помощь посмотри http://www.aggsoft.ru/serial-port-monitor.htm здесь. Там есть эмулятор-программа и сниффер (это уже для отладки)

0

32

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

Для начала нужно понимать протоколы 1Wire и RS232,

понимаю потому и недоумеваю как 86,8 микросекунд можно сократить раз в 10. И передавать байт не 00 и не ff по идее тоже не поможет - стартовый бит мешается.

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

Самое простое - использовать готовую библиотеку,

хотелось бы обойтись. И на уровне "связать 2 пк через ком или что-то подобное" класса шарпа более чем достаточно.

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

http://www.aggsoft.ru/serial-port-monitor.htm здесь. Там есть эмулятор-программа и сниффер (это уже для отладки)

сниффер скачал, посмотрю.
Спасибо

Отредактировано Dy (13.11.2016 22:32:57)

0

33

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

У DHT11  протокол 1-Wire, только упрощенный.

То что передача идет по одной линии не значит что протокол 1-Wire. В вики написано

1-Wire (с англ. — «один провод») — двунаправленная шина связи для устройств с низкоскоростной передачей данных ....
... разработана корпорацией Dallas Semiconductor (англ.) (с 2001 года — Maxim Integrated (англ.)) и является её зарегистрированной торговой маркой.

Протокол передачи данных в DHT11 несовместим с 1-Wire корпорации Dallas Semiconductor.

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

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

В коде нет такого.

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

проблема только одна - подать низкий уровень на 1 мкс и начать читать данные

Зачем формировать импульсы столь малой длительности?

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

Я хотел узнать как именно через COM-порт ПК на уровне "C#, SerialPort, скорость/биты/значения" организовано чтение бита по протоколу 1-wire.

Чтение и запись производятся на скорости 115200 бод, а сброс на скорости 9600. Код передачи бита.

Код:
Procedure WriteBit(Bit.a, Port)
  Bit= Bit & 1 *$FF
  
  WriteSerialPortData(Port, @Bit, 1)
  x = ElapsedMilliseconds()+20

  Repeat
  Until AvailableSerialPortInput(Port)>0 Or ElapsedMilliseconds()>=x
  
  If AvailableSerialPortInput(Port)>0
    ReadSerialPortData(Port, @Bit, 1)
  EndIf
  
EndProcedure

Принцип следующий. Если бит равен 0, то передаем 0, а если 1, то передаем число 255 (шестнадцатеричное FF). Дальше производится ожидание ответа в течение 20 миллисекунд.

0

34

Всем привет!
Уважаемый Пётр, я прям с ходу. :) Сделал адаптер для СОМ порта и пользуюсь программой уже месяца 2. Очень нравится. все просто и наглядно.
Вопрос, а точнее просьба у меня такая... При помощи этой программы я измеряю температуру объекта в разных точках и в экселе рисую графики. Но в автоматическом режиме этот гад, эксель, не хочет съедать файл с расширением "log" (приходится выбирать вручную) и в теле файла разделитель целой части от десятичной знак точка, а нужна запятая.
Не могли бы вы в исходнике слегка подправить и скомпилить программу с этими изменениями?
Буду ОЧЕНЬ признателен!

Заранее благодарен.

0

35

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

эксель, не хочет съедать файл с расширением "log"

С каким "съест"?
txt подойдет?

0

36

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

С каким "съест"?
txt подойдет?

Ой, не ожидал такой скорости ответа. :)
Простите, забыл о формате... Да, тхт, то, что нужно.
И о разрядности системы забыл. У меня 64, но если не затруднит, то для 32 и 64.
Заранее благодарен.

Отредактировано Tolik_Odessa (02.12.2016 10:03:57)

0

37

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

   Подскажите,  а возможно ли в программу "DS18B20_ThermoMon_x64" добавить колонку с полем для названия  датчика  ( пол ... вход батареи ... стена) ?
Делаю ремонт и хочу замуровать датчики под слой утепления и ещё кучу контрольных точек.  Для удобства хотел-бы  уникальному адресу присвоить своё имя датчика, и  возможно колонку положения в таблице.  То есть,  первый датчик например вход батареи  второй выход батареи, третий пол, четвёртый стена ... ... ... .  И все датчики отображаются в  зафиксированном порядке.

0

38

Доработал программу http://pure-basic.narod.ru/forum_files/ … on_1.2.zip
Имя датчика задается через контекстное меню, появляющееся при клике правой кнопкой мышки по таблице.
Положение датчика в таблице можно изменить перетаскивая мышкой (нажав левую кнопку) строки в таблице.

0

39

Большущее спасибо. !)

0

40

Пётр, спасибо за полезный проект.
У меня есть мысль записать распределение температуры на яблоне (например) на даче за длительный период времени (месяц или больше),
начиная с 1 метра ниже уровня грунта и до верхушки:). Датчиков много, период большой. Боюсь, будет сложно обработать такой массив даже в Access.
Просьба - увеличьте пожалуйста интервал записи до одного часа, если это возможно, конечно оставив минимальный интервал 1 секунда.
С уважением. Алекс.

0

41

Увеличил максимальный интервал до 65530 секунд. http://pure-basic.narod.ru/forum_files/ … _1.2.1.zip

0

42

Пётр
Пётр, добрый день.

Возможно ли написать программу импульсного расходомера воды, показания в литрах в час? Через com порт. Благодарю за ответ.
Использоваться будет в некоммерческих целях. И сразу второй вопрос: возможно ли эту программу совместить с термометром на ds1820?

Благодарю за ответ. Рассмотрю все варианты сотрудничества.

0

43

Пётр, огромное спасибо! С уважением. Алекс.

0

44

Добрый день, Пётр!

имеется два вот таких адаптера. При запуске Вашей программы компорт не дает выбрать никакой номер.
что проверить? или такие адаптеры не подходят?

http://s5.uploads.ru/t/rSHkQ.jpg
http://sd.uploads.ru/t/hT4DF.jpg
http://s3.uploads.ru/t/4P3Rs.jpg
http://s7.uploads.ru/t/5GpIW.jpg

0

45

Пётр
В ветке требуется Ваша помощь.

0

46

Программа позволяет выбрать любой порт от COM1 до COM30. Термометр на DS18B20 (подключение через COM порт)

0

47

засада. она х64. у меня не работает.

0

48

На x64 нормально работает. Не запускается или что?

0

49

Пётр
Здравствуйте Петр!
Пользуюсь вашей программой давно и она мне очень нравится. Недавно возникла необходимость в web-сервере для мониторинга температуры. Можно вас попросить добавить такую функцию к вашей программе. Думаю многим такая функция не помешала бы.

0

50

Сервер есть, но для другого термометра. USB градусник с передачей данных через интернет

0

51

Пётр
Спасибо за быстрый ответ. Я натыкался на эту и подобные схемы, но я далеко не программист и для меня это сложно реализовать. К тому-же насколько я понял там можно использовать только один датчик. В поиске наткнулся на эту статью http://radiohlam.ru/?p=1467 но там мой датчик 18b20 даже не определяется.

Отредактировано Aleksey (05.07.2018 16:44:54)

0

52

Добавил сервер. http://pure-basic.narod.ru/forum_files/ … Server.zip
По умолчанию отключен. Чтобы включить нужно открыть файл ThermoMon.ini, найти настройки сервера.

Код:
[Server]
Enable = 0
Port = 80
IPv6 = 0

И в Enable заменить 0 на 1.

0

53

Пётр
Здравствуйте!
Огромное вам спасибо! Все проверил все отлично работает!!!! Лучшая программа из всех что есть в интернете!
Удачи вам в ваших проектах!

0

54

Здравствуйте. Я собрал приведенную простейшую схему термометра на базе преобразователя PL2303. Преобразователь определяется в системе, ему присвоен COM порт, но датчика программа не обнаруживает. В чем может быть дело? Как можно проверить датчик DS18B20?

0

55

Возможно датчик неправильно подключили или допустили ошибку при сборке. Может USB - UART на PL2303 конвертер или датчик неисправен.
При наличии логического анализатора, например такого, можно точнее узнать в чем причина.

0

56

Пётр
Добрый день, спасибо за программу!

Пожелания - в логах убрать квадратные скобки на дате времени - немного мешает при работе в Excel (не критично но...)
Мысли на будущее - прикрутить к ней блок отсылки/работы с сервисом Народного мониторинга https://narodmon.ru/ Тогда легко реализуется мониторинг за температурой через инет с гарфиками и т.д.

Отредактировано AndyVas (19.07.2018 19:32:50)

0

57

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

в логах убрать квадратные скобки на дате времени

В архиве программа с исходниками. Процедура записи в лог-файл имеет имя WriteLog и располагается в файле ThermoMon.pb. В ней находится строка где добавляются квадратные скобки.

Код:
String = FormatDate("[%dd/%mm/%yyyy %hh:%ii:%ss]  ", Date())+ String

Если не нужны, их нужно убрать и скомпилировать программу.

0

58

Пётр
Здравствуйте! Большое спасибо за прекрасную разработку.
Если не затруднит ответить на ряд вопросов.
1. При подключении по двухпроводной схеме работает, но в колонке "Подключение" пишет 3 вывода
2. Что такое термоконтроль и к нему окошки Мин и Мах
3. Что происходит на аппаратном или програмном уровне при выборе пункта " Снизить нагрузку на CPU"

0

59

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

1. При подключении по двухпроводной схеме работает, но в колонке "Подключение" пишет 3 вывода

1 и 3 вывод датчика соединенны между собой?

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

2. Что такое термоконтроль и к нему окошки Мин и Мах

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

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

3. Что происходит на аппаратном или програмном уровне при выборе пункта " Снизить нагрузку на CPU"

Код:
    x = ElapsedMilliseconds()
    Repeat
      If gModuleMode & #OW_Mode_CPU_MinUsage : Delay(1) : EndIf
    Until AvailableSerialPortInput(Port)>0 Or Int(ElapsedMilliseconds()-x)>=36

Добавляется небольшая задержка в цикл ожидания данных от датчика.

0

60

Пётр, спасибо за быстрый и подробный ответ.
Разобрался с паразитным питанием.
Ваша программа, как я понял, выполняет команду  READ SCRATCHPAD [BEh],
а команду WRITE SCRATCHPAD [4Eh]- нет ?

0


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