Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Диагностика отказа DS18B20
Диагностика отказа DS18B20
rvstar Дата: Пт, 25.04.2014, 22:42  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 7   ±
Замечания:   ±
На сайте с 09.10.2007

Статус: Offline

Столкнулся с такой проблемой: если выдернуть из разъема DS18B20, показания температуры читаются как 0.0. как отличить отсутствие датчика от реальной температуры 0`C ? У кого-нибудь есть простое решение? Заранее благодарен.
ЯНДЕКС Дата: 25.04.2014
ivan_fd Дата: Сб, 26.04.2014, 00:44  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Не знаю ка Вы преобразовываете температуру. 

Я делал так. Если датчик отсутствует, то показания преобразованной температуры сильно завышены.
Я брал, если они больше 2000, то значит датчика не видно.  И соответственно вывожу "NOT".
anatol Дата: Сб, 26.04.2014, 09:49  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

rvstar, есть в датчике подсчитываемая контрольная сумма. В норме необходимо ее считывать  и произвести определенные операции со своими данными (подсчитать контрольную сумму) и сравнить их. Для простоты можно обойтись проверкой на "0" КС. Не равно нулю - датчик на месте.
brown Дата: Сб, 26.04.2014, 11:55  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Недавно делал термометр и у кого-то "списал" кусок кода на простое определение датчика.

Start_Convert:
'------------- Presence sensor ---------------------------
    Low DQ_1
    DelayUS 500
    Input DQ_1
    DelayUS 70
    If DQ_1=0 Then
        Sensor = 0
        DelayUS 250
        OWrite   DQ_1, 1, [$CC, $44]' Skip ROM search & do temp conversion
    Else
        Sensor = 1  ' no sensor
        Return
    EndIf
ivan_fd Дата: Сб, 26.04.2014, 12:14  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Я делал так. Но это, если только один датчик на линии.
brown Дата: Сб, 26.04.2014, 12:46  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Конечно правильное замечание, но ТС- rvstar не дал условия работы датчика.
rvstar Дата: Пт, 23.05.2014, 12:55  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 7   ±
Замечания:   ±
На сайте с 09.10.2007

Статус: Offline

anatol, спасибо за совет. Получилось так:OWIN Comm_Pin1, 2, [R_Temp.Lowbyte, R_Temp.Highbyte, crc1]IF crc1 = 255 THEN
sensor_fault1 = 1
ENDIF
MiXaS Дата: Ср, 28.05.2014, 10:32  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

rvstar, не так! Не равно нулю - датчик на месте.

скорее IF crc1 <> 0 THEN

если подождете, то ко вторнику,если не забуду скину процедуру расчета CRC8

Как и обещал. В массив Buffer_DS записываются все биты прочитанные с датчика.
ORead DQ, 2, NO_PRES, [ Str Buffer_DS \9 ]

Gosub CRC8

If CRC_DS <> Buffer_DS[8] Then Print At 1,1, "fuck"

CRC8:'
CRC_DS = 0
For i_ds = 0 To Length_DS_Frame - 1
DS_temp = Buffer_DS[i_ds]

For f_ds = 1 To 8
FDback = (CRC_DS ^ DS_temp) & $01
If FDback = $01 Then
CRC_DS = CRC_DS ^ Polynomial
EndIf
CRC_DS = (CRC_DS >> 1) & $7F
If FDback = $01 Then
CRC_DS = CRC_DS | $80
EndIf
DS_temp = DS_temp >> 1
Next
Next
Return

Сообщение отредактировал MiXaS - Ср, 28.05.2014, 10:34
xvovanx Дата: Ср, 28.05.2014, 15:28  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Добрый день!
Специфический вопрос: какой код займет меньше места? При подключении двух DS18B20 на одну шину и опрос их поочереди, либо при подключении каждого датчика на отдельный порт. Хотелось бы определиться до разводки платы, а то как обычно потом места памяти не хватает.

Сообщение отредактировал xvovanx - Ср, 28.05.2014, 15:29
ivan_fd Дата: Ср, 28.05.2014, 17:45  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Если включите на 2 линии, то нужно меньше телодвижений в коде. Не нужно писать код датчика. А так, больших отличий не будет.
MiXaS Дата: Ср, 28.05.2014, 20:43  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

хороший вопрос! даже не знаю как ответить. Я всовывал 3 датчика на одну линию, для экономии ножек, а также,чтобы съэкономить провод + с точки зрения эстетики тоже. по поводу кода, даже не знаю не мерял, но сделал общие метки, например опрос, конвертация и проверка отрицательной температуры. Я еще заморочился сделал меню, которое читало айди датчика и предлогало записать к определенному значению, например, айди для датчика уличного... а потом все в еепром. ну и т.д
ЯНДЕКС Дата: 28.05.2014
xvovanx Дата: Ср, 28.05.2014, 21:08  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Спасибо за ответы
Цитата ivan_fd ()
Если включите на 2 линии, то нужно меньше телодвижений в коде. ...

Да, согласен, не нужно писать временную прогу и поочередно подключать для определения ID каждого.

Цитата MiXaS ()
Я всовывал 3 датчика на одну линию, для экономии ножек, а также,чтобы съэкономить провод... сделал общие метки, например опрос, конвертация и проверка...

Да, тоже есть плюсы.

Решил так - разведу плату на отдельные ноги проца, как-то проще без этих ID. Потом, если что, на одну линию можно и несколько датчиков подцепить в будущем.

А, возник еще вопросик: сколько датчиков можно навесить на одну линию, сколько ID сможет определить проц? Так чисто интересно стало.
ivan_fd Дата: Ср, 28.05.2014, 22:30  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Процедура автоматического определения кода датчика, ой как не проста. Там голову сломать можно как ее написать.

Легче, сначала определить, по очереди, все датчики и записать их коды в память.
MiXaS Дата: Ср, 28.05.2014, 23:42  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

только сейчас замел,что написал сэкономить неправльно! ну и чурбан! ведь знаю как правильно, а написал неправильно. прошу прощения...
xvovanx Дата: Чт, 29.05.2014, 09:13  |                                                                                                                Сообщение # 15
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 326
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата MiXaS ()
а написал неправильно. прошу прощения...

Все мы люди, все ошибаемся. Я и сам часто корректирую свою писанину после прочтения wacko
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Диагностика отказа DS18B20
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: