Страница 1 из 2

Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пт апр 08, 2016 20:24:28
culibin 100
доброго времени суток. я сделал себе для котла автоматику на атмега 8 и 18b20 но вот не могу програмно организовать проверку на обрыв или замыкание проводов во время работы. пишу на си. если включить прибор и по шине i2c нет ответа то ошибка высвечивается а если во время работы отключать то тупик.и мне именно надо получать ошибку в случае обрыва или замыкания проводов а не ту которую может передавать сам ds . поделитесь мыслями как поступить .вроде задача пустяковая а толкусь на месте. спасибо.

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пт апр 08, 2016 20:51:19
uk8amk
i2c, ds18b20 - вы точно ничего не попутали?
Presence impulse, CRC - как минимум это можно использовать для проверки работоспособности шины и адекватности устройств.

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пт апр 08, 2016 20:56:16
АСУ
При команде инициализации шины, проверяй отклик датчика и состояние самой шины (есть сигнал высокого уровня, или нет), вот по этим параметрам и делай вывод о готовности самой шины и присутствии на ней датчика.

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пт апр 08, 2016 21:00:04
culibin 100
ясн. типа есть кто живой)))и опрашивать каждый раз перед опросом температуры? я так понимаю что будет некая пауза еще в довесок к той где идет температура и динамическая индикация получит дополнительное моргание ?

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пт апр 08, 2016 21:38:22
otest
CRS надёжней будет.

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пт апр 08, 2016 22:43:22
АСУ
culibin 100 писал(а):я так понимаю что будет некая пауза еще в довесок к той где идет температура и динамическая индикация получит дополнительное моргание ?
Не понял… какая пауза? Код опроса датчика сам писал, или библиотеку используешь? Если библиотека толковая, то там уже это всё организовано… если писал сам, то алгоритм опроса должен начинаться с проверки высокого уровня на шине… затем производишь сброс шины (подтягиваешь шину к «земле») и отпускаешь её… затем следишь за ответом датчика… если он ответил и шина восстановилась в высокий уровень, значит шина в полном порядке и датчик присутствует… только после этого начинаешь общаться с датчиком…
Если пишешь код на асме, то даже CRC можно считать, но это уже на пределе интервала динамической индикации… на Си 9 байт прочесть за 5 мс сложновато…
otest писал(а):надёжней будет
До CRC ещё нужно дойти… какой смысл опрашивать датчик если шина неисправна или датчика вовсе нет… :wink:

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 07:35:13
Аlex
Наличие датчика или КЗ/обрыв линии, определяется во время импульса присутствия, с которого начинается любой обмен данными с датчиком. Ничего сверхъестественного тут нет, в интернете полно статей на эту тему. Даже в любом даташите на 1-Wire девайс есть все диаграммы.
АСУ писал(а):на Си 9 байт прочесть за 5 мс сложновато…
А какая разница на каком языке ? Время ограничивает сам интерфейс, а не язык.
Да и индикация тут совсем не при чём. Реализуем на прерывании по таймеру и радуемся жизни :)
АСУ писал(а):До CRC ещё нужно дойти…
Да ну ? Примеров в сети - вагон и маленькая тележка. Тут даже думать не надо, тупой копипаст сойдёт :)))

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 21:32:56
АСУ
Аlex писал(а):
АСУ писал(а):на Си 9 байт прочесть за 5 мс сложновато…
А какая разница на каком языке ? Время ограничивает сам интерфейс, а не язык.
Не только… :)
Если использовать библиотеку как есть, то большая… если её поправит, то никакой…
Аlex писал(а):
АСУ писал(а):До CRC ещё нужно дойти…
Да ну ?
Имелось ввиду, что нужно вначале проверить шину и датчик, а затем уже по СRC определять правильность прочитанных данных. :)

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 21:48:58
dr.doc
Как показала практика - при работе на внутреннем генераторе расчет CRC очень даже необходим. А проверка линии на замыкание - перед опросом. Если совсем уж заморачиваться - запускать таймер, если опрос за 0,1 сек (например) не прошел - у нас зависание с аварией датчика.

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 21:50:38
botchin
Я не могу понать - зачем вам CRC?
Как я делал (делаю)
Нашел прогу читающая под Windows ROM кода. Етот код забъваю в EEPROM-а МК. И работаю. Работаю двумя 18В20 на одной линией. И никакой CRC. Да и в документаций написано, что CRC только для проверки правилности чтение ROM code. И если уже имеется правилнъй код то никакой CRC нам не нужно. Если ТС думает менят датчики в процесе работъ - тогда да - нужно.

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 21:54:15
dr.doc
ПИД регулятор для инкубатора "непредсказуемо" подрагивал до тех пор, пока не выловил, что читаемая из датчика температура иногда бывает +50, а иногда - минус 12... А вот когда сделал проверку - проблемы ушли. Это хорошо, если на DS-ке простой термометр сделан, а когда устройство, да еще и ответственное?

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 22:04:50
botchin
Откръваем даташеет и читаем
DS18B20_komm.pdf
(35.1 КБ) 233 скачивания
и видим что CRC генерируетса только при въполнение одной командъ Read ROM 0х33 и при никакой другой командъ.

Ето не я говорю, ето документация ....

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 22:11:29
АСУ
botchin писал(а):Ето не я говорю, ето документация ....
Всё верно, потому при подсчёте CRC нужно читать все 9 байт. А если просто термометр, то читать достаточно всего 2 байта температуры, без подсчёта CRC. Всё зависит от задачи… :wink:

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Сб апр 09, 2016 22:25:20
dr.doc
Найдите в datasheet строчку "DS18B20 Memory Map". Именно из этой памяти мы и читаем данные. А уж кто сколько их читает...

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Вс апр 10, 2016 06:51:05
botchin
Да, команду Read Scratchpad (0xbe) я не использую. Но все таки я читаю первъе два байта етой паняти по команде Convert (0x44) и у меня проблем не бъло.
Прав АСУ, "зависит от задачи" - у меня термометр на две температуръ - и все (по части DS18B20).

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пн апр 11, 2016 18:10:45
culibin 100
дорогие друзья. в том и вся заморочка что если обрыв в линии то никакого чтения байт не возможно.пишу на си и использую библиотеку из кодевижн. вот функция касаема температуры она вызывается цыклически.

void izmerenie(void)
{
#asm("cli"); // запрещаем прерывания
if (!ds18b20_select(0)) ; // выбираем датчик по адресу
w1_write(0x44); // запускаем преобразование температуры
#asm("sei"); // разрешаем прерывания
delay_ms(100); // ожидаем преобразования
#asm("cli"); // запрещаем прерывания
if (!ds18b20_read_spd(0)); // читаем регистры памяти
#asm("sei"); // разрешаем прерывания
work_18b20 = __ds18b20_scratch_pad.temp_msb; // формируем число int из двух байтов
work_18b20 = work_18b20 << 8;
work_18b20 |= __ds18b20_scratch_pad.temp_lsb;
lcd_18b20 = ((int) work_18b20 * 0.0625)*10;
digit_1=number[lcd_18b20/100%10]; тут выводим данные температуры
digit_2=number[lcd_18b20/10%10];
};

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пн апр 11, 2016 18:48:23
mas123
culibin 100 писал(а):если обрыв в линии то никакого чтения байт не возможно.пишу на си и использую библиотеку из кодевижн.
Исходник библиотеки или хотя бы хеадер изучался?
culibin 100 писал(а):if (!ds18b20_select(0)) ; // выбираем датчик по адресу
Ничего тут не настораживает?
В каких-то случаях функция вернёт "0"... может при ошибке?
culibin 100 писал(а): if (!ds18b20_read_spd(0)); // читаем регистры памяти
И тут аналогично.
Во, эта функция возвращает return !w1_dow_crc8(&__ds18b20_scratch_pad,9);

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пн апр 11, 2016 18:52:30
culibin 100
этот кусочек мне товарищ наделил я в него не в вникал что касаемо датчика

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пн апр 11, 2016 19:18:02
kolobok0
culibin 100 писал(а):..

Код: Выделить всё

void  izmerenie(void)
{
...
      w1_write(0x44);  // запускаем преобразование температуры
      #asm("sei");   // разрешаем прерывания
      delay_ms(100);   // ожидаем преобразования 
      #asm("cli"); // запрещаем прерывания
...
 };

Совет дня типа...
Заведите таймер на декремент счётчика. При входе в функцию чтения - пауза пока счётчик не обнулится.
Тогда меньше будете ждать в этой функции если на выходе из неё(после чтения и обработки результата) будете запускать преобразование и взводить таймер. А то Ваша функция "измерение" слишком жестоко себя ведёт - "зависон" для всего камня или минимальные требования - вытесняющая ОС.

(круглый)
ЗЫ
Меня забавляют "разработчики" которые пытаются тащить в свои творения глюкало-библиотеки, экономя на пару минут собственной разработки при сложности задачки 2+2.
ЗЫ ЗЫ
Хорошие библиотеки могут выкладывать только те, кто имеет профит с другого. Ну например разработчики камня, или там скажем сложность кода достаточно высока и область обособленна (ну скажем там расчёт по каким-нить матрицам, с использованием навороченной тригонометрии). Да и то, всё требует контроля с точки зрения ошибок. Увы, идеальный фри код редко можно найти на просторах инета.

Re: Помогите организовать проверку на обрыв линии ds18b20

Добавлено: Пн апр 11, 2016 19:21:19
culibin 100
спасибо. ну для того и общение чтобы ктото пинка волшебного давал.