Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Re: Всё по DS18(B/S)20.

Вт дек 12, 2017 20:59:35

Усы уже кудрявые(
как кодируется и раскодируется температура с сия девайса?

Честно я не понимаю о чем вы говорите. Датчики просто присоединены кабелем UTP к raspberry pi3.
В raspberry формируется файл из показаниями датчика.
/sys/devices/w1_bus_master1/28-21ee67000900/
Код:
pi@raspberrypi:~ $ cd /sys/devices/w1_bus_master1/28-21ee67000900
pi@raspberrypi:/sys/devices/w1_bus_master1/28-21ee67000900 $ ls
driver  id  name  power  subsystem  uevent  w1_slave
pi@raspberrypi:/sys/devices/w1_bus_master1/28-21ee67000900 $ cat w1_slave
ff 07 ef eb 7f ff 03 10 e1 : crc=e1 YES
ff 07 ef eb 7f ff 03 10 e1 t=127937
pi@raspberrypi:/sys/devices/w1_bus_master1/28-21ee67000900 $

Re: Всё по DS18(B/S)20.

Вт дек 12, 2017 21:20:47

Всем привет! Смотрю здесь люди пытаются запустить датчик на пониженных тактовых частотах микроконтроллера? У меня удалось запустить от 128 кГц. https://github.com/FeruzTopalov/ds18b20-pocket-thermo

Re: Всё по DS18(B/S)20.

Вт дек 12, 2017 21:22:39

viktor6 писал(а):Честно я не понимаю о чем вы говорите.
Ну "Малинка" жу не умеет сама по себе датчики обслуживать. Ей нужен код. Покажите его.

Re: Всё по DS18(B/S)20.

Вт дек 12, 2017 22:25:16

viktor6 писал(а):Честно я не понимаю о чем вы говорите.
Ну "Малинка" жу не умеет сама по себе датчики обслуживать. Ей нужен код. Покажите его.

Да вроде как умеет.
Может я чтото не так понимаю. Код вроде как нужен только для вывода данных.

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 08:17:33

Если более одного датчика на веточке то каждый канал перед обращением к датчику обязан провести "именной вызов" того датчика, к которому обращается.
В случае с одиночным эта процедура для сокращения проблем с протоколом весьма часто не проводится.
Возможно в том и ошибки зарыты.
8)

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 10:43:24

Ребята а может один из датчиков (4) не правильно работать и поэтому выдавать помехи в линию?
На данный момент подключено всего три датчика (3,4,5). Есть подозрения что только один (4) датчик через некоторое время выдает температуру 127 градусов.
Короче говоря буду наблюдать так ли это.

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 14:10:03

Честно я не понимаю о чем вы говорите. Датчики просто присоединены кабелем UTP к raspberry pi3.

да я вообще не из Вашей проблемы. Я считал данные в двоичном коде, мне этот код нужно преобразовать в понятный обычному человеку вид.

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 14:22:39

ROMan2947 писал(а):Я считал данные в двоичном коде, мне этот код нужно преобразовать в
Любое число можно представить во множестве счислений - хот в двоичном, хоть в десятичном, ... Но значение этого числа от этого будет неизменным.
Вообще, двоичную систему придумали для удобства хранения, а не для того, чтобы на форуме переводили из неё числа в другую систему. Системы разные - значение одно ! Запомните это !

Что касается датчика. Данные он выдаёт уже в удобоваримом формате. Их просто нужно занести в знаковую переменную один к одному - сразу получаем температуру.

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 15:15:17

Данные он выдаёт уже в удобоваримом формате.

Ну считал я 0b0000000110001000 == 392==0x188 и где тут температура?
а если 392*0,0625=24,5 вот это более похоже на правду.

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 15:16:18

Аlex писал(а):Данные он выдаёт уже в удобоваримом формате. Их просто нужно занести в знаковую переменную один к одному - сразу получаем температуру.
Разве? Для получения температуры с разрешением 1ºC, нужно код разделить на 16, т.к. 0,0625*16=1
Последний раз редактировалось akl Ср дек 13, 2017 15:18:04, всего редактировалось 1 раз.

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 15:19:44

Их просто нужно занести в знаковую переменную один к одному - сразу получаем температуру.
Этот процесс можно на примере показать?

Добавлено after 2 minutes 30 seconds:
нужно код разделить на 16.
16 это к чему относится? 16 битный код?

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 15:27:51

akl писал(а):
сразу получаем температуру.
Разве? Для получения температуры с разрешением 1ºC, нужно код разделить на 16
Разве.
Мы, в любом случае, получаем температуру. Пусть и умноженную на что-то там (16 в данном случае), но температуру. Остаётся только привести её к необходимому программисту разрешению.

Добавлено after 3 minutes 11 seconds:
ROMan2947 писал(а):Этот процесс можно на примере показать?
Процесс чего ?

ROMan2947 писал(а):16 это к чему относится?
К разрешению датчика.

Добавлено after 3 minutes 39 seconds:
а если 392*0,0625=24,5 вот это более похоже на правду.
Пропустил этот пост.
Ну вот, видите, всё Вы умеете. А спрашиваете как переводить эти данные в пользовательский вид :)

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 15:29:36

ПРОДУРА ЧТЕНИЯ DS18(B/S)20. ДОВОЛНО СИЛНОJNKBXFTNCZ ОТ ДРЕВНИХ DS1820ТЕ ДОПУСКАЛИ много волностей в протоколе чтения
эти капризные им надо полностью соблюсти тайминги и процедуру-обязателна фаза запроса датчиков и чтения внутренего ID -даже если датчик 1 нашине или всего 1 -такое упрошени в коде часто дают 127С на нем если процедура обрашения нестандартная или не выдержаны тайминги весма точно 2 глюк датчик имет болезнь саморазогрев и его не надо долбить слишком часто запросами
а вм паузах надо усыплять
tit одно часто фантомное питание не прокатывает на выносе чтоб не долбатца почему врет ...лучше проводки не экономить

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 15:38:12

К разрешению датчика.

в даташите о таком разрешении ни слова,полагаю 16 это 12 битная разрешающая способность?

Добавлено after 4 minutes 36 seconds:
А спрашиваете как переводить эти данные в пользовательский вид 
ну пришлось поюзать,но до истины добраться уж только здесь) :write:

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 15:46:26

ROMan2947 писал(а):полагаю 16 это 12 битная разрешающая способность?
Да. При 12-ти битах, 4 бита остаются в дробной части от целых. А 4 бита - это 16.
Если будете считывать начиная с 5-ого по счёту бита - получите разрешение в 1 градус, с 4-ого бита - в 0.5 градуса. С 1-ого бита - получаем разрешение в 0.0625 градуса, т.б. в 1/16-ую.

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 18:16:41

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

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 18:25:30

Ничего подобного, никаких битов отдельно под знак не выделено. Там просто int16_t число, равное температуре с точностью до коэффициента 16 (или 2 для DS18B20).

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 18:38:10

уже не один раз писал, как определить температуру по данным...
Код:
uint8_t scratchpad[9]; // сюда считываются данные из датчика
int16_t *temp = (void*)scratchpad; // по указателю будет температура

// считали данные, проверили CRC. если все ОК, берем *temp и делим на 16 или иной коэффициент в зависимости
// от типа датчика - имеем готовую температуру со знаком.

float temperature = *temp / 16.0;

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 20:17:45

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

Re: Всё по DS18(B/S)20.

Ср дек 13, 2017 20:22:39

Код:
uint8_t scratchpad[9]; // сюда считываются данные из датчика
int16_t temp = *(int16_t*)scratchpad; // читаем температуру в temp

// считали данные, проверили CRC. если все ОК, берем *temp и делим на 16 или иной коэффициент в зависимости
// от типа датчика - имеем готовую температуру со знаком.

temp *=10;
temp /=16;
Теперь в temp лежит температура с десятыми, умноженная на 10.

Вывод :
Код:
printf("%d.%d", temp/10, temp%10);
Ну или любым другим способом.
Ответить