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

2 Ответы

0 голосов
Не смотря на ваше противодействие, попробую всё-таки вам помочь. Какой 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 которые можно выдавить из датчика, исходные байты по которым он вычисляется. Что с этим всем вы будете делать?
назад (139 баллов) 1 6
Ну вот, это уже что-то. Что с этим делать? Ну хотелось бы разобраться - что с этим делать. Например, на этом ресурсе http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/4-shtuki-ds18b20-4-ikh-adresa-nado-chitat-kazhdyi-lup#comment-496241 товарищ говорит что контроль строго обязателен, но как это делать никто толком не объясняет. Может Вы подскажете?
–1 голос

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

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

    216 балл(ов)

  2. gokase

    171 балл(ов)

  3. parovoZZ

    120 балл(ов)

  4. a1000

    79 балл(ов)

  5. vasp

    56 балл(ов)

  6. sser

    36 балл(ов)

Награды месяца
1-е место: Raspberry Pi 4 Model B (4 GB RAM)
2-е место: Raspberry Pi 4 Model B (2 GB RAM)
3-е место: Raspberry Pi 4 Model B (1 GB RAM)

...