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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Поделитесь пожалуйста программой DS1820 для PicBasic Pro
terrarus Дата: Чт, 21.08.2008, 18:53  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

На вашем сайте в разделе Статьи нашел кусочек программы управления датчиком температуры DS1820 в PicBasic Pro.
Буду признателен если опубликуете ее полностью на Вашем сайте или пришлeте ее на мой е-майл terrarus@mail.ru .
Думаю благодарен буду не только я, но и многие начинающие.

C уважением Анатолий Медведев.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
ЯНДЕКС Дата: 21.08.2008
demanik Дата: Пт, 29.08.2008, 22:05  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Она из примеров пикбейсика.
Вот ее полный вариант:

' One-wire temperature for LAB-X1 and DS1820

temperature Var Word ' Temperature storage
count_remain Var Byte ' Count remaining
count_per_c Var Byte ' Count per degree C
DQ Var PORTC.0 ' One-wire data pin

' Define LCD registers and bits
Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1

ADC ON1 = 7 ' Set PORTA and PORTE to digital
Low PORTE.2 ' LCD R/W line low (W)

mainloop: OWOut DQ, 1, [$CC, $44] ' Start temperature conversion

waitloop: OWIn DQ, 4, [count_remain] ' Check for still busy converting
If count_remain = 0 Then waitloop
OWOut DQ, 1, [$CC, $BE] ' Read the temperature
OWIn DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE, Skip 4, count_remain, count_per_c]
' Calculate temperature in degrees C to 2 decimal places (not valid for negative temperature)
temperature = (((temperature >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
Lcdout $fe, 1, DEC (temperature / 100), ".", DEC2 temperature, " C"
' Calculate temperature in degrees F to 2 decimal places (not valid for negative temperature)
temperature = (temperature */ 461) + 3200
Lcdout $fe, $c0, DEC (temperature / 100), ".", DEC2 temperature, " F"
Pause 1000 ' Display about once a second
Goto mainloop ' Do it forever

Добавлено (30.08.2008, 4:05:08)
---------------------------------------------
Посмотрите в папке пикбейсика есть папка "SAMPLES" там много разных примеров.


Попробуй всё и вся... может быть пол...


Сообщение отредактировал demanik - Пт, 29.08.2008, 22:03
terrarus Дата: Вс, 31.08.2008, 15:34  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Большое спасибо!

Вот уж воистину "Если не получается - читайте инструкцию".

Однако для начинающих размещение кодов программ, именно здесь, на страничках тем большое подспорье. И конечно же, привлекательность самого форума от этого только многократно возрастет.

Попав на этот форум впервые, я перекопал все темы и скачал многие ссылки с примерами кодов, ведь купить литературу по PicBasic в провинции совершенно нельзя.

Анатолий Медведев

Добавлено (31.08.2008, 9:34:24)
---------------------------------------------
Уже попробовал в железе. Все заработало! Спасибо!

demanik, подскажите пожалуйста, а что необходимо изменить в программе чтобы использовать датчик температуры DS18B20 c точностью измерений 0,0625 гр.С и какие изменения нужны для точности 0,25 гр.С?

Анатолий Медведев.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
demanik Дата: Вс, 31.08.2008, 18:18  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (terrarus)
а что необходимо изменить в программе чтобы использовать датчик температуры DS18B20

Опрос датчика тотже. но необходимо переделать алгоритм пересчета температуры. 18B20 немного по другому кодирует температуру в связи с повышеной точностью.
Для DS18B20 и точности 0,0625 я ипользую следующий алгоритм:

IF temp_read.Bit11 = 1 THEN
Sign = "-": temp_read=~temp_read+1
else
Sign = "+"
endif
TempC = (temp_read & $0FF0) >> 4: Float1 = temp_read.Lowbyte & $0F
lookup Float1,[0,1,1,2,2,3,4,4,5,6,6,7,7,8,9,9],Float
temperatura = tempc * 10 + float' температура умноженная на 10 плюс значение после запятой (23,5 = 235)

18B20 по умолчанию устанавливает точность 0,0625, для переключения точности необходимо внести изменения в конфигурационный регистр датчика. Сам этого не делал посмотрите доку на датчик.


Попробуй всё и вся... может быть пол...


Сообщение отредактировал demanik - Вс, 31.08.2008, 18:24
brown Дата: Вс, 28.12.2008, 16:01  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Может пример поможет.
Прикрепления: example18B20.rar (77.1 Kb)


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Холод1 Дата: Пн, 29.12.2008, 14:52  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 19.10.2008

Статус: Offline

Спасибо!
я правдо уже сделал по свойму.
посмотрю и сверю может что и накосячел smile
  • Страница 1 из 1
  • 1
Поиск: