+1 голос
Подскажите пожалуйста пример кода на Ардуино для считывания CRC при измерении температуры датчиками DS18b20. Если можно, отдельно примеры как получить CRC при использовании библиотек Dallas Temperature и OneWire.
(221 баллов) 4 16
теги изменил

2 Ответы

+1 голос
Не смотря на ваше противодействие, попробую всё-таки вам помочь. Какой CRC вам нужен я от вас так и не добился. Исходя из ваших слов "...проверять CRC при считывании показаний дабы быть уверенным что получил именно значение температуры измеренное датчиком..",  пробую предположить что нужно CRC SRAM. Так вот, если вы подключите датчик к 10 цифровому пину Ардуино (не забыв подтянуть его на VCC резистором 4,7 кОм) и запустите пример "DS18x20_Temperature" из библиотеки OneWire, то в мониторе порта с периодичностью в 1 секунду начнут появляться строки

ROM = 28 FF 40 33 72 16 4 E6
  Chip = DS18B20
  Data = 1 6D 1 4B 46 7F FF C 10 68  CRC=68
  Temperature = 22.81 Celsius, 73.06 Fahrenheit
No more addresses.

Обращаем внимание на конец третьей строки, а именно на  CRC=68. Это и есть так необходимый вам CRC в шеснадцатиричной форме. На первую единичке в строке Data можете не обращать внимание. Это создатели библиотеки так оригинально обозначили признак наличия устройства на шине(1- есть, 0-нету). Далее идут 9 байт SRAM. В последнем байте CRC который вычисляется по первым 8 байтам.

Если вдруг понадобится CRC ROM, то обращаем внимание на первую строку

ROM = 28 FF 40 33 72 16 4 E6

28 - код семейства микросхем DS18B20

Последующие 48 бит - уникальный серийный номер устройства

E6 - CRC ROM который вычисляется аналогично CRC SRAM.

Ну вот вы имеете всё что хотели - код выдающий все CRC которые можно выдавить из датчика, исходные байты по которым он вычисляется. Что с этим всем вы будете делать?
(170 баллов) 1 6
Ну вот, это уже что-то. Что с этим делать? Ну хотелось бы разобраться - что с этим делать. Например, на этом ресурсе http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/4-shtuki-ds18b20-4-ikh-adresa-nado-chitat-kazhdyi-lup#comment-496241 товарищ говорит что контроль строго обязателен, но как это делать никто толком не объясняет. Может Вы подскажете?
Не совсем понял, контроль чего? вы сомневаетесь что данные пришли именно от того датчика который вы слушаете? Как то реально не понятно зачем это вам? Если у вас два датчика и более, то просто поменяйте им адреса и будете уверены  что это то что вам надо.
Человек хочет с наскока стать программистом.  Ардуино вещь хорошая, даёт лёгкий старт, но вселяет излишнюю самоуверенность. Люди начинают думать, что без базовых знаний можно наваять чего угодно.  
Вот захотелось ТС получить, для неизвестно чего, CRC.  Я дал ссылку на прекраснейшее описание датчика на русском языке. Ответ - что вы все посылаете меня что-то читать. Есть готовая библиотека для DS18B20. Он не удосужился посмотреть, что так необходимый CRC она уже выдаёт. Сразу в истерику - дайте мне готовый код.  Ткнул уже пальцем в готовый ответ, вроде успокоился.  Теперь видимо разбирается что такое образующий полином циклического кода, в чём я лично сильно сомневаюсь.
Ну унижать все же не стоит, но вы во всем правы!
0 голосов

Трудно представить зачем вам циклический код датчика при работе через библиотеки Ардуино. Ну да ладно. Здесь очень подробно на русском описана работа с датчиком. Далее в папке библиотеки OneWire находите файл OneWire.cpp. Откройте его блокнотом и изучите. Там прописаны функции работы с шиной OneWire.

(170 баллов) 1 6
На многих форумах вижу рекомендации проверять CRC при считывании показаний дабы быть уверенным что получил именно значение температуры измеренное датчиком, а не погоду на Марсе. Но все, как правило, подобно вам отправляют что-то изучать и никто не приводит пример кода как это сделать что называется на пальцах.
Вы такой интересный. Это программирование, тут с наскока не получится. Не хотите вникать - используйте готовые библиотеки и доверяйте полученным результатам. Не устраивает библиотека - изучайте документацию и работайте с датчиком на прямую. Вы - же хотите без знаний принципов работы датчика и не зная протокола 1-Wire что-то с ним сделать.  Вы просили образец, я вам подсказал где есть эти образцы. Вас это не устраивает. Вы хотите готовый код. Тогда ответьте на вопрос - какой СRC вы нужен? Их там два!  И что с полученным циклическим кодом вы будете делать? Как вы будете проверять валидность полученных данных? Не нужен код, приведите хоть алгоритм действий. Вот тогда можете ставить минусы.
Да, я  хочу чтобы мне привели простой пример готового кода где будет подробно расписано на пальцах что-то типа такого: инициализируем датчик, отправляем на него запрос, получаем с датчика данные, считываем CRC, сравниваем с (вот тоже непонятно - а с чем сравнивать ???) и делаем выводы о валидности полученных результатов. Мне, например, проще разобраться с теорией когда есть хоть какой-то пример с подробными коментариями
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...