PIC16F628A + DS1820
|
|
brown |
Дата: Ср, 24.02.2010, 23:01 | Сообщение # 16 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Quote (pic_anton) ребята а что так всемс нравиться ds1820 ведь программа большая получается не проще взять аналог типа LM50 И МК с АЦП и точность Quote Accuracy (+/-) (deg C) 2, 3
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
DNM |
Дата: Вт, 04.10.2011, 23:45 | Сообщение # 17 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Quote (holyuser) Я тоже заметил подобное поведение DS18B20, уже писал об этом в одной из соседних тем - в режиме "parasite power", с кварцевым резонатором на 4.000 MHz, из десяти датчиков нормально работали шесть. На 3.579 и на 4.096 MHz работали все. При нормальном питании все 1-wire работали нормально при всех частотах генератора пика.
Всё нормально работает
'****************************************************************** '* проект TERM DS18B20 - 1 * '*программа управления электронным термометром DS18B20, для 16F628* '*интервал измеряемых температур от -65.5 до +125 градусов цельсия* '*результат измерения выводится на двустрочный LSD монитор * '****************************************************************** porta=0 'очистить порт portb=0 'очистить порт TRISB=%00000001 'настроить порт B.0 на прием данных от DS18B20 TRISA=0 CMCON=7 '------------------- модуль переменных -------------------------- busy var bit ham var word ham1 var word isi var word float var word x var word isaret_biti var ham.bit11 eksi_isi con 1 derece con 223 isaret var byte temp var byte symbol comm_pin=portb.0 '----------------------------------------------------------------- clear pause 200 basla: 'lcdout $FE,1 'lcdout $fe,1," DS18B20 ile ISI" gosub sensoroku ' подпрограмма управления DS18B20 goto basla '------------------------ sensoroku: '$CC - команда пропуска ROM DS18B20 '$44 - команда температурного преобразования '$BE - команда чтения результата преобразования из памяти owout comm_pin,1,[$CC,$44 ] 'послать команды DS18B20 bekle: owin comm_pin,4,[busy] if busy=0 then bekle 'ждать пока не завершится преобразование результата owout comm_pin,1,[$CC,$BE ] 'послать команды DS18B20 owin comm_pin,2,[ham.Lowbyte,ham.Highbyte] 'поместить результат в ham gosub hesapla 'результат получен, перейти к его преобразованию для вывода на LCD return '------------------------- hesapla: 'определяемся со знаком isaret="+" if isaret_biti=eksi_isi then isaret ="-" temp=($FFFF - ham + 1)*625 'если отрицательная температура isi=div32 100 goto gec endif temp=625*ham isi=div32 100 gec: float=(isi//100)/10 'дробная часть результата isi=isi/100 'целая часть результата 'вывести результат на LSD Lcdout $fe,1,isaret,DEC isi,".",DEC1 float," ",Derece,"C" Lcdout $FE,$C0," ", DEC ham return end
Более подробно здесь: http://asemlab.net/
|
|
|
|
passer_by |
Дата: Чт, 03.11.2011, 18:41 | Сообщение # 18 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 23.10.2011
Статус:
Offline
|
Quote (DNM) *интервал измеряемых температур от -65.5 до +125 градусов цельсия* temp=625*ham Я, в общем то, начинающий. То же пытаюсь сваять что то типа этого. Но с несколькими датчиками. Не суть. Но вот у меня получается, что произведение - temp=625*ham уже при температуре в 66 градусов приведет к переполнению переменной. То есть прога будет работать, но неверно показывать температуру выше 65 град. Или я что то не догоняю?
|
|
|
|
terrarus |
Дата: Чт, 03.11.2011, 21:42 | Сообщение # 19 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
451
Замечания:
±
На сайте с 21.08.2008
Статус:
Offline
|
Я что-то опять "не догоняю" (по русски -не понимаю)!? Quote (passer_by) интервал измеряемых температур от -65.5 до +125 градусов цельсия Какие могут быть -65 гдарусов, тем более с .5 после запятой!?
Из даташита на датчик DS18B20: "...цифровой термометр с программируемым разрешением, от 9 до 12–bit, которое может сохраняться в EEPROM памяти прибора. DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии так и работать в группе. Все процессы на шине управляются центральным микропроцессором. Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite power”), при отсутствии внешнего источника напряжения. Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20 установленных на одной шине. Может быть я что-то проспал, а Dallas Semiconductor уже выпустила DS18B20 с Quote (passer_by) интервал измеряемых температур от -65.5 до +125 градусов цельсия ? Или не только я с будуна сегодня?
Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал
terrarus - Чт, 03.11.2011, 21:46
|
|
|
|
mikhail09p |
Дата: Чт, 03.11.2011, 23:02 | Сообщение # 20 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Начинающие, обратите внимание на Протон. И сходите Сюда Тут всё намного проще и короче.
|
|
|
|
passer_by |
Дата: Пт, 04.11.2011, 05:51 | Сообщение # 21 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 23.10.2011
Статус:
Offline
|
Не, я на эту фишку (-65) внимания не обратил. Да просто опечатался товарищ . Я про то, что в положительном интервале (+65) и выше произойдет переполнение переменной. И ни о каких измерениях +125 речи быть не может, при приведенном коде. Наверное надо что то с плавающей запятой городить.
|
|
|
|
passer_by |
Дата: Пт, 04.11.2011, 05:56 | Сообщение # 22 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 23.10.2011
Статус:
Offline
|
Quote (mikhail09p) И сходите Сюда Тут всё намного проще и короче. Угу, только там ни хрена не открывается
Сообщение отредактировал
passer_by - Пт, 04.11.2011, 06:01
|
|
|
|
ADMIN |
Дата: Пт, 04.11.2011, 06:22 | Сообщение # 23 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Quote (passer_by) Я, в общем то, начинающий. То же пытаюсь сваять что то типа этого. Но с несколькими датчиками. Не суть. Но вот у меня получается, что произведение - temp=625*ham уже при температуре в 66 градусов приведет к переполнению переменной. То есть прога будет работать, но неверно показывать температуру выше 65 град. Или я что то не догоняю?
После произведения temp=625*ham стоит команда: isi=div32 100
Рассмотрим пример - при 125 градусах (это больше 65!) Цифровой код 125 градусов - 07D0h = 2000
Результатом произведения 625* 2000 будет 1250000 Это число естественно не помещается в переменную типа word (это максимум у PBP) Команда DIV32 100 - это 32-разрядное деление на 100. в переменной isi после выполнения этой команды будет находиться результат деления 1250000/100 = 12500
Число 12500 - легко умещается в переменную типа Word. Далее - просто - для значения 125 градусов мы получили код - 12500. По аналогии для 85 градусов мы получим код 8500. И так далее. Дальше - дело техники. Главное, чтобы между 16-разрядным умножением и командой DIV32 не находилась ни одна команда. В случае с Proton+ нам эта команда не нужна - ведь он поддерживает 32-разрядные математические операции, а также операции с плавающей запятой.
|
|
|
|
passer_by |
Дата: Пт, 04.11.2011, 09:58 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 23.10.2011
Статус:
Offline
|
Спасибо. Буду у себя разбираться DIV32 прописано, но вот...
|
|
|
|
mikhail09p |
Дата: Пт, 04.11.2011, 18:56 | Сообщение # 25 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (passer_by) Угу, только там ни хрена не открывается
Открывается там то, что УЖЕ СУЩЕСТВУЕТ. То, что не открывается, ещё НЕ написано. Неужели непонятно ? А того, что есть, вполне достаточно для полноценной работы.
Quote (ADMIN) В случае с Proton+ нам эта команда не нужна - ведь он поддерживает 32-разрядные математические операции, а также операции с плавающей запятой. Вот-вот!
|
|
|
|