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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: demanik, ivan_fd  
DS18B20 проблемы... Наверно туплю...
Klim Дата: Сб, 02.10.2010, 00:27  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Я дико извиняюсь, наверно тут уже всех задолбал своими вопросами, но все же прошу помощи...
Вот простая схемка. Считываю температуру, отображаю на LCD. К сожалению, ничего не отображается. Подскажите, где я протупил?
Прикрепления: Webasto.bas (1.6 Kb) · Webasto.dsn (79.2 Kb) · WEBASTO.hex (5.3 Kb)
ЯНДЕКС Дата: 02.10.2010
Klim Дата: Вс, 03.10.2010, 20:25  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Разобрался - заработало. На всякий случай выкладываю исходники:
Запутался только, как выводить отрицательные значения... Голова ночью уже совсем не соображает.

Добавлено (03.10.2010, 20.25.04)
---------------------------------------------
Разобрался и с этим.

Прикрепления: 4807371.bas (4.0 Kb) · 9496511.dsn (76.6 Kb) · 6838757.hex (3.9 Kb)

Сообщение отредактировал Klim - Сб, 02.10.2010, 02:26
доцент2 Дата: Пн, 25.02.2013, 22:02  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 291
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

в продолжение темы.
проблема в том, что DS18B20 в железе врет (медицинский градусник показывает 39,4  а DS18B20 показывает 38,2)
разница в 1,2 градуса. В протеусе работает нормально с точностью 0,1.
может датчик надо калибровать? или код преобразования не верный?
вот часть текста:
Dim Rezul_Temp  As Word        ' результат измерения температуры
Dim Cel_Temp    As Word         ' целая часть
Dim Dat_Temp    As Word         '
Dim Des_Temp    As Word         ' десятки
Dim Temperatuta_znak As Byte
Dim control_izmer As Byte

MAIN:
'+++++++++++++++++++++ измерение температуры +++++++++++++++++++++++++++++++++++   
GoSub init_DS18S20
        OWrite PORTA.0, 1, [$CC,$4E, 0, 0, $7F]' для 9 битного преобразования 1F, для 11 битного - 3F, для 12 битного - 7F
GoSub init_DS18S20                    
        OWrite PORTA.0, 1, [$CC, $44]   ' Start (посылаем импульс  сброса измерительного устройства)
Repeat
DelayMS 25
        ORead PORTA.0,4,[control_izmer] 'проверяем, не закончился ли процесс измерения
Until control_izmer>0
        OWrite PORTA.0, 1, [$CC, $BE]   'команда на считывание памяти (первые два байта)
       
'+++++++++++++++++++ процедура пересчета температуры +++++++++++++
'+++++++++++++++                DS18B20                  ++++++++++++++++++++
'+++++++++++++++ 12-ти битовое представление температуры ++++++++++++
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ORead PORTA.0, 2, [Rezul_Temp.LowByte, Rezul_Temp.HighByte]
'++++++++++++++++++ точночть до 0.1 ++++++++++++++++++++++++++
Temperatuta_znak=Rezul_Temp.12              ' определяем знак температуры, если 0 то "+", 1 то "-"
If Temperatuta_znak <> 1 Then
    Cel_Temp =Rezul_Temp/16
    Des_Temp=(Rezul_Temp//16)*10/16                       
Else
    Cel_Temp=65535-Rezul_Temp
    Dat_Temp=Cel_Temp+1
    Cel_Temp=Dat_Temp/16
    Des_Temp=((Dat_Temp+1)//16)*10/16
EndIf

'++++++++++++++++++ инициализация измерителя ++++++++++++++
init_DS18S20:
Output PORTA.0                              ' установить Pin на выход
PORTA.0=0                                    ' OneWire line Low
PauseUs 500                                  ' рауза 500 µS 
Input PORTA.0                               ' установить Pin на вход
PauseUs 100                                  ' рауза 100 µS
Return

вывод на дисплей писать не стал, но там так: сначала выводим целую часть Cel_Temp , потом запятую, потом десятки после запятой Des_Temp.
ivan_fd Дата: Пн, 25.02.2013, 23:17  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Микросхема откалибрована на заводе. Заявленная точность по даташиту составляет ±0.5°. А 0.1 - это не точность, а разрешающая способность.

Что касается, что он врет, а как далеко он от платы и что Вы меряете, температуру тела???

Я всегда для преобразования использую такой код:

Код
Temp_calc:                    '
'******************************************************************************************************
     If Temp_read.11 = 1 Then  '
         Sign = "-"
         Temp_read = ~Temp_read + 1  
     Else
         Sign = "+"
     EndIf
     TempC  = (Temp_read & $0FF0) >> 4  
     Float1 = Temp_read.LowByte & $0F
     Float0 = LookUpL Float1, [0,1,1,2,2,3,4,4,5,6,6,7,7,8,9,9]
     TemperC = (TempC * 10) + Float0
     Return
доцент2 Дата: Пн, 25.02.2013, 23:48  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 291
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

и мой и Ваш код дают в железе одинаковые результаты.
из того, что есть под рукой это медицинский градусник.
по сравнению с ним показания датчика меньше примерно на один градус. проверял и температуру тела и в стакане с теплой водой.
датчик с платой соединен проводами длиной 30 см.
если можно приведите пример кода для разрешения в 1 и 0,5 градуса.

Сообщение отредактировал доцент2 - Пн, 25.02.2013, 23:57
ivan_fd Дата: Вт, 26.02.2013, 12:42  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Разрешающую способность можно выставить только 9, 10, 11, или 12 бит. Соответсвенно 0.0625, 0.125, 0.25 и 0.5°.

Выставляется просто - пишем в Configuration register 4 байт  SCRATCHPAD нужные данные.


Я почему использую код преобразования, который дал выше. Потому, что он (если верить Протеусу) нормально показывает отрицательные температуры, если разрешающая способность 12бит. 

Ставил старый советский термометр (спиртовой), показания были одинаковы.
доцент2 Дата: Вт, 26.02.2013, 14:06  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 291
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

с установкой разрешающей способности мне понятно, просто видел различные варианты преобразования для различного разрешения.
сегодня выставил датчик за окно и сравнил показания со спиртовым термометром - показания совпадают.
вопрос! почему при измерении температуры тела преобразование врет на 1 градус в меньшую сторону. в помещении проверить не чем, но кажется тоже врет на -1градус.
ivan_fd Дата: Вт, 26.02.2013, 18:08  |                                                                                                                Сообщение # 8
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Какая разница где мерять, на улице, или в помещении.  А измерять температуру тела, я думаю, что не меряет точно, потому, что нету нормального контакта с телом. Да и не для этого он.
доцент2 Дата: Вт, 26.02.2013, 20:52  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 291
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

на уличном термометре было между 0 и 1 градусом. преобразование показало 0,6 градусов.
у меня такое ощущение, что преобразование врет на целых положительных числах на 1 градус.
я мерил не только температуру тела, но и ради интереса градусник и датчик опускал в стакан с теплой водой - ошибка была та же примерно на 1 градус.
anatol Дата: Вт, 26.02.2013, 21:05  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

У соседа термометр попроси. В кипящую воду засунь. Хреновый датчик - замени. Что бодягу тянуть. Программой здесь не пахнет.
доцент2 Дата: Вт, 26.02.2013, 22:14  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 291
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

поясните такой момент:
при различном разрешении преобразования 9, 10, 11 и 12 бит, какое разрешение результата измерения будет им соответствовать 1, 0,5, 0,125 и 0,0625?
я так полагаю для 9 бит - 1градус
                      для 10 бит - 0,5
                      для 11 бит - 0,125
                      для 12 бит - 0,0625 верно?

Сообщение отредактировал доцент2 - Вт, 26.02.2013, 22:42
ЯНДЕКС Дата: 26.02.2013
ivan_fd Дата: Вт, 26.02.2013, 23:19  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата (ivan_fd)
Соответсвенно 0.0625, 0.125, 0.25 и 0.5°.
доцент2 Дата: Вт, 26.02.2013, 23:21  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 291
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

не совсем понятно.
для 12 бит будет соответствовать  0,5?
ivan_fd Дата: Вт, 26.02.2013, 23:29  |                                                                                                                Сообщение # 14
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Наоборот, просто так написал.
доцент2 Дата: Вт, 26.02.2013, 23:55  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 291
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

теперь понятно
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: