Обсуждаем цифровые устройства...
Ответить

Re: CRC в DS18B20

Ср фев 22, 2017 13:31:10

Ошибка в программе проявлялась бы постоянно, а тут когда попало и как правило в диапазоне температур 0..+8*С. Посылаю запрос ещё раз - данные правильные.

Re: CRC в DS18B20

Ср фев 22, 2017 13:42:01

Ну значит или где-то память бьётся или считываете не то, всё одно - это, вероятнее всего, программная ошибка. При отсутствии питания датчик выдаёт +85, при недостатке питания завышает измеренную температуру. Возможно, вы не выдерживаете интервал измерения и считываете показания за рано. Вы после посылки команды на преобразование ведете проверку готовности датчика? или просто делаете таймоут?

Увы, у меня самого были программы, в которых я был "апсалютно уверен". Но тем не менее, при всплывании проблемы, оказывалось, что сам накосячил (Было так, что на шине не работал восьмой датчик - оказалось, в одном месте банк памяти не переключал. На малых кристаллах проблема не всплывала, так как там тех банков попросту не было и так и так писалось куда нужно, а при переносе на более крупный кристал - проблема всплыла).

Re: CRC в DS18B20

Ср фев 22, 2017 13:47:47

Проверка по контрольной сумме - не панацея.
Просто, при проверке по CRC будет меньше ошибок, но это не спасёт от "проскока" ошибочных данных.
Постарайтесь найти и устранить причину получения ложных данных.
Это может быть как программная, так и аппаратная ошибка (включая прокладку провода для DS параллельно с силовыми кабелями).

Re: CRC в DS18B20

Ср фев 22, 2017 14:34:37

watchmaker писал(а):Ошибка в программе проявлялась бы постоянно, а тут когда попало и как правило в диапазоне температур 0..+8*С. Посылаю запрос ещё раз - данные правильные.

Интервал между опросами держать надо.
8)

Re: CRC в DS18B20

Пт фев 24, 2017 02:05:24

При отсутствии питания датчик выдаёт +85, при недостатке питания завышает измеренную температуру. Возможно, вы не выдерживаете интервал измерения и считываете показания за рано. Вы после посылки команды на преобразование ведете проверку готовности датчика? или просто делаете таймоут?

Насчёт +85 знаю - видел это на другом устройстве, когда был плохой контакт в разъёме под датчик. Тут же вся цепь запаяна и не имеет разъёмов. Таймаут ровно 1 секунда - этого должно хватать всегда. Если бы не хватало - ошибки летели бы с большой частотой, а не несколько раз в день при одном измерении в минуту, причём ошибка всегда одна и та же - к измеренной температуре добавляется +48. Подозреваю всё-таки битую память в датчике...

Re: CRC в DS18B20

Пт дек 15, 2017 20:55:30

Здравствуйте!!!набросал функцию вычисления СRC8 для DS18b20 по 56 битам,прошу протестить и вынести вердикт))с калькуляторами чет не разобрался...не знаю чему верить)
Код:
int main()
{
   uint64_t DATA = 0xB8C53028;
   char polynomial_CRC8 = 0x8C;
   uint64_t intermediate = 0;
   char counter = 0;

   while (counter <= 55)
   {
      if (DATA & 1)

      {
         DATA >>= 1;
         intermediate = (DATA^polynomial_CRC8) & 0xFF;
         DATA >>= 8;
         DATA <<= 8;
         DATA |= intermediate;
         counter++;
      }
      else
      {
         DATA >>= 1;
         counter++;
      }
   }

   printf("0x%X",DATA);
   
   getch();
}
Ответить