Свежие обсуждения
Микроконтроллеры

датчики DS18B20

1 19 21

В начале секунды запускаю, в конце считываю, точно больше 750мс.
Есть неуверенное подозрение на прерывание, но работает стабильно.
У меня используются прерывания от таймеров в режиме СТС 1сек от тмр1 и 4мс от тмр0. Я надеялся на их синхронную работу, но есть сомнения в этом.

 

А шину есть чем посмотреть? Осциллограф? Лог. анализатор? Тобиш есть ли достаточная пауза между запросом и считыванием в реальности?
Также попробуйте (для теста) увеличить эту паузу вдвое или больше.

 

Я проверяю окончание преобраования перед считыванием, и оно, якобы завершается.

 

Даташит говорит, что после включения питания в регистр температуры DS18S20 и DS18B20 загружается значение +85°C, которое сохраняется до завершения первого преобразования.

Вероятно Вы читаете данные не дождавшись окончания преобразования, или оно и не начиналось.
Цикл измерение-преобразование длится до 750мс.

 

Cheeeper: загружается значение +85°C,

Знаю, привел это к тому , что считывание происходит, а индицируется старое значение из РАМы МК.

Cheeeper: читаете данные не дождавшись

Делается так:
switch (counter){
case 0:
................
OW_Initialization();
OW_SendByte(SKIP_ROM);
OW_SendByte (CONVERT_T );
flag.t_ready=1;
................................
break;
............................................
case 247:
.......................
// flag.t_ready = OW_ReadBit ();
OW_Initialization();
OW_SendByte(SKIP_ROM);
OW_SendByte (READ_SCRATCHPAD);
.................................
break;
case 249:
if (flag.t_ready==1) Индикация.
..............................
}

counter ++ в обработчике тмр0 каждые 4 мс и устанавливается программный флаг прер. тмр0.

Cheeeper: длится до 750мс.

249*4>750

 

Alexey: Я проверяю окончание преобраования перед считыванием, и оно, якобы завершается.

Длина проводников к датчику больше трёх метров?
Один раз наступил на грабли, длина проводов была до 15 метров и при измерении температуры подобная ерунда была, т.е. периодически датчик выдавал 85 градусов, секрет я разузнал когда осциллографом стал на питание датчика непосредственно возле датчика, в общем когда датчик начинает измерение он кратковременно потребляет большой ток, тем самым индуктивность питающих проводов не давала нарасти току до нужной величины и напряжение питания снижалось до уровня перезагрузки датчика, в общем установка ёмкости на полюса питания непосредственно возле датчика исправила ситуацию...

 

"периодически датчик выдавал 85 градусов"
Уфф , не периодически, а только после перетыкивания.
Проблема в запуске поле 3-его пинка.
Провод 2 м.

 

Alexey: Проблема в запуске поле 3-его пинка.

Для проверки стабильности питания можно сделать циклические измерения, к примеру 20 раз подряд, если все температуры показываемые датчиком будут стабильны в районе +/-0,5 гр. то проблема не в стабильности питания...

 

Товарищ Link не совсем прав. Имеет значение не столько индуктивность, сколько емкость линии. При
длине линии 15 метров (даже 25) никогда проблем не имел. Можно несколько уменьшить номинал под-
тягивающего резистора, например до 3 кОм.

 

BG: Имеет значение не столько индуктивность, сколько емкость линии.

Для линии данных или для линии питания? Я говорю за питающее напряжение которое может провалится до уровня перезагрузки датчика. На эти грабли я наступал лично...
Тут кстати важен ещё один нюанс - Алексей по какой схеме питания питается датчик?