Форум РадиоКот • Просмотр темы — CRC в DS18B20
Сообщения без ответов | Активные темы
| ПРЯМО СЕЙЧАС: |
| Автор | Сообщение |
|---|---|
|
|
Заголовок сообщения: CRC в DS18B20
|
|
Друг Кота
Карма: 6 Рейтинг сообщения: 0
|
Доброго времени суток. Прошу разъяснить мне, что такое CRC в далласовском датчике температуре DS18b20. Он, как я понял, определяет достоверность передаваемых данных. т.е. он защищает от опасности передачи ошибочных данных. Цитата: CRC GENERATION |
| Вернуться наверх |
Профиль
|
| Реклама | |
|
|
|
|
ARV |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 97 Рейтинг сообщения: 0
|
CRC вычисляется над всеми данными в пакете (адрес девайса или содержимое блокнотной памяти) по описанному алгоритму. в пакете данных последний байт — собственно значение CRC предыдущих байтов. если рассчитанное значение совпадает с принятым — данные не исказились. можно и проще: вести подсчет CRC по алгоритму для всех байтов, включая последний байт контрольной суммы. если искажений не было, получится 0. |
||
| Вернуться наверх | |||
| Реклама | |
|
|
|
|
Arlleex |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Карма: 6 Рейтинг сообщения: 0
|
т.е. вот у нас пакет: |
| Вернуться наверх | |
|
ARV |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 97 Рейтинг сообщения: 0
|
нет, идет пакет: A, B, C, D, E, F, CRC |
||
| Вернуться наверх | |||
| Реклама | |
|
Выгодные LED-драйверы для решения любых задач КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения. Подобрать LED-драйвер>> |
|
Arlleex |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Карма: 6 Рейтинг сообщения: 0
|
Так, вроди бы ясно становится. |
| Вернуться наверх | |
| Реклама | |
|
|
|
| Реклама | |
|
LIMF – источники питания High-End от MORNSUN со стандартным функционалом на DIN-рейку На склад Компэл поступили ИП MORNSUN (крепление на DIN-рейку) с выходной мощностью 240 и 480 Вт. Данные источники питания обладают 150% перегрузочной способностью, активной схемой коррекции коэффициента мощности (ККМ; PFC), наличием сухого контакта реле для контроля работоспособности (DC OK) и возможностью подстройки выходного напряжения. Источники питания выполнены в металлическом корпусе, ПП с компонентами покрыта лаком с двух сторон, что делает ее устойчивой к соляному туману и пыли. Изделия соответствуют требованиям ANSI/ISA 71.04-2013 G3 на устойчивость к коррозии, а также нормам ATEX для взрывоопасных зон. Подробнее>> |
|
ARV |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 97 Рейтинг сообщения: 0
|
Stalker46 писал(а): Я правильно понимаю, что в ROM CRC нужен для достоверности передачи 8 байт ROM? да. |
||
| Вернуться наверх | |||
|
Arlleex |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Карма: 6 Рейтинг сообщения: 0
|
Все, большое спасибо, думаю, с этим вопросов больше нет. |
| Вернуться наверх | |
|
Arlleex |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Карма: 6 Рейтинг сообщения: 0
|
Формула, по которой считать, я так понял, следующая: |
| Вернуться наверх | |
|
ARV |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 97 Рейтинг сообщения: 0
|
почитайте об алгоритме подсчета CRC — есть апноут особый на эту тему. кстати, в нем есть и функции на Си и др. для этого — возможно, станет понятнее, если посмотрите на код… и вообще, есть готовые функции, например, в WinAVR — зачем лезть в дебри? |
||
| Вернуться наверх | |||
|
Arlleex |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Карма: 6 Рейтинг сообщения: 0
|
С WinAVR не работал, но посмотрю, спасибо за информацию |
| Вернуться наверх | |
|
ChipKiller |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 4 Рейтинг сообщения: 0
|
|||
| Вернуться наверх | |||
|
uldemir |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 46 Рейтинг сообщения: 0
|
|||
| Вернуться наверх | |||
|
TheShadow |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Зарегистрирован: Чт июн 09, 2011 12:49:36 Рейтинг сообщения: 0
|
Здравствуйте все! Код: unsigned char OWI_ComputeCRC8(unsigned char inData, unsigned char seed) for (bitsLeft = 8; bitsLeft > 0; bitsLeft—) Почему здесь как байт данных inData, так и байт контрольной суммы seed периодически сдвигаются вправо, то есть обработка битов начинается с младшего, хотя в указанных выше в этой теме апноутах приводится схема аппаратной реализации, где все начинается со старшего бита. |
| Вернуться наверх | |
|
Мастер Ломастер |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Поставщик валерьянки для Кота
Карма: 1 Рейтинг сообщения: 0
|
вот код из WinAVR-овской библиотеки, он проверен: Код: uint8_t crc = crc ^ data; return crc; |
| Вернуться наверх | |
|
uldemir |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 46 Рейтинг сообщения: 0
|
обработка действительно идет с младшего бита. по поводу 0x8c, 0x18, 0x31 — они просто сдвинуты в зависимости от способа и места деления. В вами приведенном исходнике младший бит обрабатывается отдельно, а остальные ксорятся «ошметком» от полинома. Где-то так. Тут была тема, где еще более углубленно рассматривался CRC как таковой. Если интересует. |
||
| Вернуться наверх | |||
|
TheShadow |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Зарегистрирован: Чт июн 09, 2011 12:49:36 Рейтинг сообщения: 0
|
Мастер Ломастер uldemir |
| Вернуться наверх | |
|
Laplaskin |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Зарегистрирован: Пн апр 23, 2012 17:25:39 Рейтинг сообщения: 0
|
Здравствуйте! Помогите разобраться с расчетом CRC на бумаге.. CRC-калькулятор выдает такой жерезультат. Вручную получается 1F почему-то.. |
| Вернуться наверх | |
|
Gerik_PP |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Зарегистрирован: Вт ноя 07, 2006 14:14:16 Рейтинг сообщения: 0
|
Мастер Ломастер писал(а): вот код из WinAVR-овской библиотеки, он проверен: Код: uint8_t crc = crc ^ data; return crc; Спасибо большое! Очень помог, работает! |
||
| Вернуться наверх | |||
|
watchmaker |
Заголовок сообщения: Re: CRC в DS18B20
|
|
Это не хвост, это антенна
Карма: 34 Рейтинг сообщения: 0
|
Вопрос по этому же датчику. Непериодически (раз десять в день при измерениях раз в минуту) он выдаёт некорректное значение температуры (например -48*), причём это значение не отсеивается по CRC, т. е. CRC соответствует неверным данным. С чем это может быть связано? |
| Вернуться наверх | |
|
uldemir |
Заголовок сообщения: Re: CRC в DS18B20
|
||
Карма: 46 Рейтинг сообщения: 0
|
с ошибкой в программе |
||
| Вернуться наверх | |||
Кто сейчас на форуме |
|
Сейчас этот форум просматривают: Never not try и гости: 16 |
| Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
PROBLEM DESCRIPTION
A clear and concise description of what the problem is.
on ESP32 precompiled build I got randomly CRC errors. I try to fix this on the hardware side, but also the software side may need an enhancement. I assume that there are magnetic problems though the motors that even a shielded cable does not help. Already tried 3.3V and 5V and different GPIO without getting rid of the hardware problem.
My problem is, that the status message just leave out the sensor, also if the problem to read the sensor in nearly all cases works the second time. For me it would help if the status reports the last value or at least try 3 times before skipping the sensor. There are 3 DS18B20 on onewire. Cable length is about 2m.
REQUESTED INFORMATION
Make sure your have performed every step and checked the applicable boxes before submitting your issue. Thank you!
- [ x] Read the Contributing Guide and Policy and the Code of Conduct
- [ x] Searched the problem in issues
- [ x] Searched the problem in discussions
- [ x] Searched the problem in the docs
- [x ] Searched the problem in the chat
- [ x] Device used (e.g., Sonoff Basic): ESP32 mini
- [ x] Tasmota binary firmware version number used: _9.2.1.2
- [x ] Pre-compiled
- Self-compiled
- Flashing tools used: _____
- Provide the output of command:
Backlog Template; Module; GPIO 255:
Configuration output here:
- If using rules, provide the output of this command:
Backlog Rule1; Rule2; Rule3:
- Provide the output of this command:
Status 0:
STATUS 0 output here: 14:44:29.033 MQT: hm/status/ESP_F50A98/STATUS1 = {"StatusPRM":{"Baudrate":115200,"SerialConfig":"8N1","GroupTopic":"tasmotas","OtaUrl":"http://ota.tasmota.com/tasmota32/release/tasmota32.bin","RestartReason":"Vbat power on reset","Uptime":"0T00:18:24","StartupUTC":"2021-04-26T12:26:05","Sleep":50,"CfgHolder":4617,"BootCount":158,"BCResetTime":"2021-03-22T13:28:42","SaveCount":2404}} 14:44:29.042 MQT: hm/status/ESP_F50A98/STATUS2 = {"StatusFWR":{"Version":"9.3.1.2(tasmota)","BuildDateTime":"2021-03-24T14:02:03","Core":"1_0_5","SDK":"v3.3.4-432-g7a85334d8","CpuFrequency":80,"Hardware":"ESP32","CR":"456/699"}} 14:44:29.049 MQT: hm/status/ESP_F50A98/STATUS3 = {"StatusLOG":{"SerialLog":4,"WebLog":4,"MqttLog":0,"SysLog":0,"LogHost":"","LogPort":514,"SSId":["BodeNet_Keller",""],"TelePeriod":30,"Resolution":"558180C0","SetOption":["0000C009","2805C8000100060000005A0A000000000000","40042080","00006000","00000000"]}} 14:44:29.069 MQT: hm/status/ESP_F50A98/STATUS4 = {"StatusMEM":{"ProgramSize":1276,"Free":1984,"Heap":218,"PsrMax":0,"PsrFree":0,"ProgramFlashSize":4096,"FlashSize":4096,"FlashFrequency":40,"FlashMode":3,"Features":["00000809","9FDAC787","00152001","B7FFBFCF","01DA9BC4","60360DC7","00084052","20200000","00000005"],"Drivers":"1,2,3,4,5,7,8,9,10,11,12,14,17,20,21,24,26,27,29,34,50","Sensors":"1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,26,28,31,34,37,39,40,42,43,51,52,55,56,58,59,64,66,67,74,85"}} 14:44:29.083 MQT: hm/status/ESP_F50A98/STATUS5 = {"StatusNET":{"Hostname":"ESP_F50A98-2712","IPAddress":"192.168.178.70","Gateway":"192.168.178.1","Subnetmask":"255.255.255.0","DNSServer":"192.168.178.1","Mac":"7C:9E:BD:F5:0A:98","Webserver":2,"WifiConfig":4,"WifiPower":17.0}} 14:44:29.092 MQT: hm/status/ESP_F50A98/STATUS6 = {"StatusMQT":{"MqttHost":"elocm.synology.me","MqttPort":1883,"MqttClientMask":"DVES_%06X","MqttClient":"DVES_F50A98","MqttUser":"ESP_F50A98","MqttCount":1,"MAX_PACKET_SIZE":1200,"KEEPALIVE":30,"SOCKET_TIMEOUT":4}} 14:44:29.103 MQT: hm/status/ESP_F50A98/STATUS7 = {"StatusTIM":{"UTC":"2021-04-26T12:44:29","Local":"2021-04-26T14:44:29","StartDST":"2021-03-28T02:00:00","EndDST":"2021-10-31T03:00:00","Timezone":99,"Sunrise":"06:37","Sunset":"20:57"}} 14:44:29.155 MQT: hm/status/ESP_F50A98/STATUS10 = {"StatusSNS":{"Time":"2021-04-26T14:44:29","DS18B20-1":{"Id":"051760A050FF","Temperature":33.4},"DS18B20-2":{"Id":"0316B55F59FF","Temperature":28.3},"Shutter1":{"Position":93,"Direction":0,"Target":93},"Shutter2":{"Position":0,"Direction":0,"Target":0},"TempUnit":"C"}} 14:44:29.167 MQT: hm/status/ESP_F50A98/STATUS11 = {"StatusSTS":{"Time":"2021-04-26T14:44:29","Uptime":"0T00:18:24","UptimeSec":1104,"Heap":219,"SleepMode":"Dynamic","Sleep":10,"LoadAvg":99,"MqttCount":1,"POWER1":"OFF","POWER2":"OFF","POWER3":"OFF","POWER4":"OFF","POWER5":"OFF","POWER6":"OFF","POWER7":"OFF","POWER8":"OFF","POWER9":"OFF","POWER10":"OFF","POWER11":"OFF","POWER12":"OFF","POWER13":"ON","POWER14":"ON","POWER15":"ON","POWER16":"OFF","POWER17":"OFF","Channel17":100,"POWER18":"ON","Channel18":60,"Color":"FF99","Wifi":{"AP":1,"SSId":"BodeNet_Keller","BSSId":"38:10:D5:14:E6:70","Channel":6,"RSSI":42,"Signal":-79,"LinkCount":1,"Downtime":"0T00:00:06"}}} 14:44:29.178 MQT: hm/status/ESP_F50A98/STATUS13 = {"StatusSHT":{"SHT0":{"Relay1":7,"Relay2":8,"Open":150,"Close":150,"50perc":50,"Delay":0,"Opt":"0000","Calib":[300,500,700,900,1000],"Mode":"1"},"SHT1":{"Relay1":9,"Relay2":10,"Open":100,"Close":100,"50perc":50,"Delay":0,"Opt":"0000","Calib":[300,500,700,900,1000],"Mode":"1"}}}
- Set
weblogto 4 and then, when you experience your issue, provide the output of the Console log:
Console output here: 14:33:32.955 MQT: hm/status/ESP_F50A98/RESULT = {"WebLog":4} 14:33:33.621 CFG: Saved, Count 2404, Bytes 4096 14:33:34.926 DSB: Sensor CRC error 14:33:34.927 SNS: DS18B20-3 missed 1 14:33:36.482 WIF: Checking connection... 14:33:36.745 DSB: Sensor CRC error 14:33:36.913 DSB: Sensor CRC error 14:33:36.915 SNS: DS18B20-2 missed 1 14:33:36.929 DSB: Sensor CRC error 14:33:36.931 SNS: DS18B20-3 missed 1 14:33:38.917 DSB: Sensor CRC error 14:33:38.919 SNS: DS18B20-2 missed 2 14:33:40.847 DSB: Sensor CRC error 14:33:44.933 DSB: Sensor CRC error 14:33:44.934 SNS: DS18B20-3 missed 1 14:33:44.950 DSB: Sensor CRC error 14:33:46.932 DSB: Sensor CRC error 14:33:46.933 SNS: DS18B20-3 missed 1 14:33:49.076 DSB: Sensor CRC error 14:33:49.904 MQT: hm/status/ESP_F50A98/STATE = {"Time":"2021-04-26T14:33:49","Uptime":"0T00:07:44","UptimeSec":464,"Heap":212,"SleepMode":"Dynamic","Sleep":10,"LoadAvg":100,"MqttCount":1,"POWER1":"OFF","POWER2":"OFF","POWER3":"OFF","POWER4":"OFF","POWER5":"OFF","POWER6":"OFF","POWER7":"OFF","POWER8":"OFF","POWER9":"OFF","POWER10":"OFF","POWER11":"OFF","POWER12":"OFF","POWER13":"ON","POWER14":"ON","POWER15":"ON","POWER16":"OFF","POWER17":"OFF","Channel17":100,"POWER18":"ON","Channel18":60,"Color":"FF99","Wifi":{"AP":1,"SSId":"BodeNet_Keller","BSSId":"38:10:D5:14:E6:70","Channel":6,"RSSI":42,"Signal":-79,"LinkCount":1,"Downtime":"0T00:00:06"}} 14:33:50.003 DSB: Sensor CRC error 14:33:50.015 MQT: hm/status/ESP_F50A98/SENSOR = {"Time":"2021-04-26T14:33:49","DS18B20-1":{"Id":"051760A050FF","Temperature":33.2},"DS18B20-2":{"Id":"0316B55F59FF","Temperature":25.6},"Shutter1":{"Position":93,"Direction":0,"Target":93},"Shutter2":{"Position":0,"Direction":0,"Target":0},"TempUnit":"C"} 14:33:50.929 DSB: Sensor CRC error 14:33:50.930 SNS: DS18B20-3 missed 3 14:33:53.215 DSB: Sensor CRC error 14:33:53.217 SNS: DS18B20-1 missed 1 14:33:53.534 DSB: Sensor CRC error 14:33:53.548 DSB: Sensor CRC error 14:33:54.931 DSB: Sensor CRC error 14:33:54.932 SNS: DS18B20-3 missed 2
TO REPRODUCE
Steps to reproduce the behavior:
EXPECTED BEHAVIOUR
A clear and concise description of what you expected to happen.
SCREENSHOTS
If applicable, add screenshots to help explain your problem.
ADDITIONAL CONTEXT
Add any other context about the problem here.
(Please, remember to close the issue when the problem has been addressed)
ежели памяти полно, а надо быстро, то вот так:
crc8_tabl[]=
{
0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
};
// if bytes=7 ->returns CRC
// if bytes=8 -> returns 0
//
char crc8_compute(char * str, char bytes)
{
char crc8=0;
while (bytes)
{
crc8=crc8_tabl[crc8 ^ *str++];
—bytes;
}
return crc8;
}

-
davef
- Posts: 811
- Joined: Thu Apr 30, 2020 1:03 am
- Location: Christchurch, NZ
DS18B20 CRC error
When I get a CRC error with this code the ESP32 just locks-up until a watchdog kicks-in:
Code: Select all
# read 1-wire HWT temperature
try:
HWT_temp = ds2.read_temp(bytearray(b'(xd4x13xefx04x00x00y'))
except Exception as error:
try:
with open('errors.txt', 'a') as outfile:
outfile.write('HWT ' + str(error) + 'n')
except OSError:
pass
I could put this in a while loop and take 5 goes at getting a correct answer, as suggested here:
viewtopic.php?f=16&t=9885&p=55282&hilit … crc#p55282
but why does it lock-up?
Am I not handling the exception that has been raised in def read_scratch (ds18x20.py) properly?
Thanks.
-
pythoncoder
- Posts: 5956
- Joined: Fri Jul 18, 2014 8:01 am
- Location: UK
- Contact:
Re: DS18B20 CRC error
Post
by pythoncoder » Fri Dec 03, 2021 5:45 pm
According to the docs read_temp should not raise an exception: it should return None on a CRC error. If it’s locking up this suggests something other than a CRC error. Some kind of electrical issue?
-
davef
- Posts: 811
- Joined: Thu Apr 30, 2020 1:03 am
- Location: Christchurch, NZ
Re: DS18B20 CRC error
Post
by davef » Fri Dec 03, 2021 6:18 pm
Hmmm … error is returned as «CRC error». I’ll study the docs more carefully.
Could be an electrical issue as I had to extend the leads on the DS18B20 by 1 metre. I have a 2mtr shielded sensor coming one day.
Thanks
-
davef
- Posts: 811
- Joined: Thu Apr 30, 2020 1:03 am
- Location: Christchurch, NZ
Re: DS18B20 CRC error
Post
by davef » Fri Dec 03, 2021 11:08 pm
According to:
https://stackoverflow.com/questions/484 … n/48408976
it appears that ‘CRC error’ will be raised if not compiled with the -O option … whether or not this is the case with Micropython I don’t have a clue.
Because I am a beginner at handling exceptions I suspect that I am not handling this error correctly.
Any suggestions other than allowing the EP32 to re-boot would be appreciated?
Thanks.
-
pythoncoder
- Posts: 5956
- Joined: Fri Jul 18, 2014 8:01 am
- Location: UK
- Contact:
Re: DS18B20 CRC error
Post
by pythoncoder » Sat Dec 04, 2021 1:43 pm
Your exception handling looks OK.
Whether an exception is raised, or None is returned, depends on the design of the driver. If you’re using Robert-hh’s driver his docs are quite clear: None is returned. Given that it’s written in Python, compile options should be irrelevant. Perhaps you’re using a different driver?
In any event, the presence of CRC errors does seem to suggest electrical problems.
As for your stackoverflow link, I’m afraid I can’t see its relevance.
-
Roberthh
- Posts: 3663
- Joined: Sat May 09, 2015 4:13 pm
- Location: Rhineland, Europe
Re: DS18B20 CRC error
Post
by Roberthh » Sat Dec 04, 2021 2:33 pm
That depends: The function read_scratch() contains an assert for checking the CRC. The function read_temp() calls read_scratch(), but in a try/except clause, with an exception for AssertionError, where it return None.
-
davef
- Posts: 811
- Joined: Thu Apr 30, 2020 1:03 am
- Location: Christchurch, NZ
Re: DS18B20 CRC error
Post
by davef » Sat Dec 04, 2021 6:27 pm
Thank you both for your responses.
As far as I am aware I am just using the ds18x20.py that is part of the standard ESP32 image:
https://github.com/micropython/micropyt … ds18x20.py
In any event, the presence of CRC errors does seem to suggest electrical problems.
Quite likely, but what generates the error message <CRC error>?
I need to read up on the difference between Exception and AssertionError.
-
Roberthh
- Posts: 3663
- Joined: Sat May 09, 2015 4:13 pm
- Location: Rhineland, Europe
Re: DS18B20 CRC error
Post
by Roberthh » Sat Dec 04, 2021 7:24 pm
The assert raising the CRC error is in onewire.py. That is caught in DS18B20.py, at least in the code I wrote.
-
davef
- Posts: 811
- Joined: Thu Apr 30, 2020 1:03 am
- Location: Christchurch, NZ
Re: DS18B20 CRC error
Post
by davef » Sat Dec 04, 2021 7:37 pm
Roberthh,
Reading through your implementation I see the assert statement at line 56.
My understanding is that this is caught in line 84 and returns a message None.
Why don’t you:
Code: Select all
except AssertionError as msg:
print(msg)
or
return msg
The most important thing I am trying to prevent is the system locking up. I know the implementation on the RaspbeeryPi is probably quite different but at least it kept running when there was a bad DS18B20 reading.
-
Roberthh
- Posts: 3663
- Joined: Sat May 09, 2015 4:13 pm
- Location: Rhineland, Europe
Re: DS18B20 CRC error
Post
by Roberthh » Sat Dec 04, 2021 7:58 pm
That’s in read_temp, where the return value is either the temperature or None. It does not lock up.
Сообщение от YTYOUT
А зачем инициализировать то , что инициализируется само. Проверь почему произошёл сброс и пропусти лишнее
непонятно) инициализация и настройки режимов ведь проходят при первом проходе программы, а потом зацикливается
вот мой код:
………….
//Настройка датчиков темературы
OWI_Init(BUS);//инициализация
OWI_SendByte(DS18B20_APPEAL_TO_ALL, BUS);// обращаемся ко всем датчикам сразу
OWI_SendByte(DS18B20_WRITE_SCRATCHPAD, BUS);//запись в память
OWI_SendByte(0, BUS);//TH
OWI_SendByte(0, BUS);//TL байты данных
OWI_SendByte(RES_9BIT, BUS);//режим преобразования, измерение по 0.5 градуса
OWI_SendByte(DS18B20_COPY_SCRATCHPAD, BUS);// запись из ОЗУ в ПЗУ
while(1)
{
//————————————————————————
/*-флаг сброшен — выполнить поиск 1Wire устройств
-если количество заданных устройсв совпадает с
колличеством найденных — устанавливаем флаг,
чтобы функция поиска больше не запускалась
-отобразить количество найденных устройств*/
if (seorshFlag == SEARCH_SENSORS)
{
num = 0;
crcFlag = OWI_SeorshDevices(allDevices, MAX_DEVICES, BUS, &num);
lcd_gotoxy(9, 1);//LCD_Goto(14,1);
BCD_1Lcd(num);
if ((num == MAX_DEVICES)&&(crcFlag != SEARCH_CRC_ERROR))
{
seorshFlag = SENSORS_FOUND;
}
}
/*считать температуру первого найденного датчика
если возвращена ошибка CRC, вывести строку «not»
и сбросить флаг, чтобы функция поиска снова произвела
опрос шины*/
lcd_gotoxy(3, 2); //LCD_Goto(0,1);
crcFlag = DS18B20_ReadTemperature(BUS, allDevices[0].id, &temperature);
if (crcFlag != READ_CRC_ERROR)
{
DS18B20_PrintTemperature(temperature);
}
else{
lcd_string(«not»,3); //LCD_SendString(» not «);
seorshFlag = SEARCH_SENSORS;
}
/*считать температуру второго найденного датчика
если возвращена ошибка CRC, вывести строку «not»
и сбросить флаг, чтобы функция поиска снова произвела
опрос шины*/
lcd_gotoxy(3, 1);//LCD_Goto(7,1);
crcFlag = DS18B20_ReadTemperature(BUS, allDevices[1].id, &temperature);
if (crcFlag != READ_CRC_ERROR)
{
DS18B20_PrintTemperature(temperature);
}
else
{
lcd_string(«not»,3);//LCD_SendString(» not «);
seorshFlag = SEARCH_SENSORS;
}
Сообщение от mostish
если я все таки хочу данные из ОЗУ переписать в ПЗУ то какой мой ход действий?
просто после команды режима преобразования послать команду записи из ОЗУ в ПЗУ(0x48) или же нужно повторить команды «обращение ко всем датчикам», «запись в память», а потом «команду запись из озу в пзу»?
как только не пытался перезаписать из озу в пзу не выходит, проверял комментируя участок кода и прошивая контроллер, датчики все равно переходили в 12битный режим, а по идее должны остаться в 9ти битном ?




