Усы уже кудрявые( как кодируется и раскодируется температура с сия девайса?
Честно я не понимаю о чем вы говорите. Датчики просто присоединены кабелем 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 $
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Если более одного датчика на веточке то каждый канал перед обращением к датчику обязан провести "именной вызов" того датчика, к которому обращается. В случае с одиночным эта процедура для сокращения проблем с протоколом весьма часто не проводится. Возможно в том и ошибки зарыты.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Ребята а может один из датчиков (4) не правильно работать и поэтому выдавать помехи в линию? На данный момент подключено всего три датчика (3,4,5). Есть подозрения что только один (4) датчик через некоторое время выдает температуру 127 градусов. Короче говоря буду наблюдать так ли это.
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:2 Медали: 1
ROMan2947 писал(а):
Я считал данные в двоичном коде, мне этот код нужно преобразовать в
Любое число можно представить во множестве счислений - хот в двоичном, хоть в десятичном, ... Но значение этого числа от этого будет неизменным. Вообще, двоичную систему придумали для удобства хранения, а не для того, чтобы на форуме переводили из неё числа в другую систему. Системы разные - значение одно ! Запомните это !
Что касается датчика. Данные он выдаёт уже в удобоваримом формате. Их просто нужно занести в знаковую переменную один к одному - сразу получаем температуру.
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
akl писал(а):
Цитата:
сразу получаем температуру.
Разве? Для получения температуры с разрешением 1ºC, нужно код разделить на 16
Разве. Мы, в любом случае, получаем температуру. Пусть и умноженную на что-то там (16 в данном случае), но температуру. Остаётся только привести её к необходимому программисту разрешению.
ПРОДУРА ЧТЕНИЯ DS18(B/S)20. ДОВОЛНО СИЛНОJNKBXFTNCZ ОТ ДРЕВНИХ DS1820ТЕ ДОПУСКАЛИ много волностей в протоколе чтения эти капризные им надо полностью соблюсти тайминги и процедуру-обязателна фаза запроса датчиков и чтения внутренего ID -даже если датчик 1 нашине или всего 1 -такое упрошени в коде часто дают 127С на нем если процедура обрашения нестандартная или не выдержаны тайминги весма точно 2 глюк датчик имет болезнь саморазогрев и его не надо долбить слишком часто запросами а вм паузах надо усыплять tit одно часто фантомное питание не прокатывает на выносе чтоб не долбатца почему врет ...лучше проводки не экономить
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
ROMan2947 писал(а):
полагаю 16 это 12 битная разрешающая способность?
Да. При 12-ти битах, 4 бита остаются в дробной части от целых. А 4 бита - это 16. Если будете считывать начиная с 5-ого по счёту бита - получите разрешение в 1 градус, с 4-ого бита - в 0.5 градуса. С 1-ого бита - получаем разрешение в 0.0625 градуса, т.б. в 1/16-ую.
Ничего подобного, никаких битов отдельно под знак не выделено. Там просто int16_t число, равное температуре с точностью до коэффициента 16 (или 2 для DS18B20).
уже не один раз писал, как определить температуру по данным...
Код:
uint8_t scratchpad[9]; // сюда считываются данные из датчика int16_t *temp = (void*)scratchpad; // по указателю будет температура
// считали данные, проверили CRC. если все ОК, берем *temp и делим на 16 или иной коэффициент в зависимости // от типа датчика - имеем готовую температуру со знаком.
float temperature = *temp / 16.0;
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
уже не один раз писал, как определить температуру по данным...
На мое огромное удивление температура отображается исправно,причем и при отрицательной температуре Но все же есть одно,НО... очень хочется на своей LCD видеть не только целые,но и десятые доли)
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Код:
uint8_t scratchpad[9]; // сюда считываются данные из датчика int16_t temp = *(int16_t*)scratchpad; // читаем температуру в temp
// считали данные, проверили CRC. если все ОК, берем *temp и делим на 16 или иной коэффициент в зависимости // от типа датчика - имеем готовую температуру со знаком.
temp *=10; temp /=16;
Теперь в temp лежит температура с десятыми, умноженная на 10.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения