PureBasic - форум

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

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


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


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

Сообщений 31 страница 36 из 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

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


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