Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.02.2012, 15:54
|
#1
|
Частый гость
Регистрация: 18.01.2009
Сообщений: 22
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
DS18B20 всегда выдает 85*С
Тема, связанная с измерением температуры с помощью датчика DS18B20 и контролера PIC16F628A, уже обсуждалась на форуме.
За основу взял рабочий проект "DIGITAL CLOCK WITH DATE AND THERMOMETER" https://kazus.ru/forums/showthread.php?t=20570 пост #10.
Из проекта за ненадобностью были удалены прерывания, таймеры, дисплей. Старший и младший байты температуры выводятся на PORTB.
time_waste макрос заменил на
Код:
|
init_v DELAY_CNT,D'15';или другая величина задержки
CALL Delay ; выполняет задержку, основываясь на DELAY_CNT |
процедура GetTemperature1()
{
sensor_convert
BigDelay // ›750ms
sensor_read
BigDelay // ›750ms
}
В процедуре sensor_read добавил вывод прочитанных значений на PORTB.
Каждый раз получаю значение 85*C (LSB = b'01010000', MSB = b'00000101', т.е. значения, как при включении питания датчика ). В чём может быть проблема?
Прикладываю проект MPLAB - Proteus
|
|
|
|
03.02.2012, 16:02
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: DS18B20 всегда выдает 85*С
Сообщение от Opasif
|
т.е. значения, как при включении питания датчика ).
|
Вы сами ответили на свой вопрос.
Ищите в питании датчика. Либо оно мало, либо оно прерывается. Датчик попросту не работает у вас.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
03.02.2012, 18:51
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: DS18B20 всегда выдает 85*С
Если 2-проводное подключение - резистор поменьше. 1 кОм
|
|
|
|
05.02.2012, 12:32
|
#4
|
Частый гость
Регистрация: 18.01.2009
Сообщений: 22
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: DS18B20 всегда выдает 85*С
ОПРАШИВАЮ ПЕРВЫЙ ДАТЧИК (U2 на схеме)! Питание от VCC 5V, также DQ подключен через R1 4,7k к 5V. Все как в спецификации. Так что с питанием проблем нет.
Второй датчик (U3 на схеме) пока не используется.
|
|
|
|
05.02.2012, 12:39
|
#5
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: DS18B20 всегда выдает 85*С
Да там беда, а не проект. Автор совершенно не желает понимать, как работает протеус и датчик температуры. Никакой паузы для конвертирования нет. Отправил SKIP ROM -› CONVERT T и тут же читает. Видимо я один удосужился его проект посмотреть. Сначала писал на МикроС, я ему дал все готовое - только подключи и собери. Но нет, понесло в МРЛАБ и ассемблер. Но и тут засада. Что дальше будет?
Зачем вам моделировать кварцевый генератор?
|
|
|
|
05.02.2012, 13:10
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: DS18B20 всегда выдает 85*С
Сообщение от Easyrider83
|
Видимо я один удосужился его проект посмотреть.
|
ИМХО, такие грубые ошибки, автор должен бы сам отлавливать, читая даташит...
А народ обленился... я не хочу ещё и даташиты им разжовывать )))
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
05.02.2012, 13:15
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: DS18B20 всегда выдает 85*С
Цитата:
|
(при частоте 4МГц 1 цикл выполняется 1 мкс)
|
Машинный цикл = Fosc/4. Соответственно 1 такт МК равен 1 мкс.
Цитата:
|
; BigDelay for more then 750ms
|
Выполняется 3092 такта, т.е. ~3,1 миллисекунды вместо 750-ти.... "Маловато будет" (с)
Хотя Proteus это пропускает... и через некоторое время датчик начинает выдавать правильные значения... Терпежу не хватило...
в железе не заработает.
Последний раз редактировалось omercury; 05.02.2012 в 13:21.
|
|
|
Сказали "Спасибо" omercury
|
|
|
05.02.2012, 14:42
|
#8
|
Частый гость
Регистрация: 18.01.2009
Сообщений: 22
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: DS18B20 всегда выдает 85*С
Omercury, огромное Вам спасибо! Действительно, забыл ввести промежуточный цикл на 250.
Код:
|
;BigDelay
MOVLW D'3'
MOVWF CntH
LoopH
MOVLW D'250'
MOVWF CntM
LoopM
MOVLW D'255'
MOVWF CntL
LoopL
NOP
DECFSZ CntL,1
GOTO LoopL
DECFSZ CntM,1
GOTO LoopM
DECFSZ CntH,1
GOTO LoopH |
Последний раз редактировалось Opasif; 05.02.2012 в 14:45.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:52.
|
|