Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Всё по DS18(B/S)20.

Сообщение BOB51 »

А с чем сравниваем-то? Холодильник вроде не прозрачный... 8) А любое расстояние между головкой контрольного термометра и датчиком уже может дать погрешность. Плюс инерционность до одной минуты ( а то и более ) за счет теплоотвода в виде массы корпуса, кондера, изоляционных материалов и подводящих проводников. И на закусь характеристики разброса параметров из даташита +/-0.5С... Бывает даже между двумя датчиками расхождение. Собственно каждый будет в абсолютной повторяемости измеренное значение держать, но относительно эталона то значение может отличаться в +/- пол градуса.
Ежли датчик запытать охота - попробуй вот эту игрушку сваять http://radiokot.ru/forum/download/file.php?id=209413
правда датчик там ds18b20 и 12-битовый диапазон при замере (без округления - дробная часть просто внаглую не учитывается при индикации).
И ещё... не забывать о правилах округления...
Даже если индикация только с точностью до целых, всегда есть дробная часть которая и является причиной "бытовых споров" о расхождении с бытовыми термометрами от одного до двух градусов. Особо с отрицательными - минус 4,4 это -4, а -4,5 уже -5. В простейших программах такие требования не учитываются, так что по факту большинство любительских программ дают точность показаний +/-1 градус.
8)
Реклама
Аватара пользователя
Bkmz
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Пт сен 02, 2011 09:14:44

Re: Всё по DS18(B/S)20.

Сообщение Bkmz »

Для меня вывод один: на больших минусах врет. Ближе к нулю и выше норамльно. В качестве регулятора температуры в холодильнике пойдет
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15558
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Всё по DS18(B/S)20.

Сообщение BOB51 »

Врет не более, чем указано в характеристике. Просто выждать надо минутку-две от момента стабилизации показаний. Да и сам холодильник/морозильник штука с гистерезисом в минимум 4 градуса от точки включения компрессора до достижения максимальной температуры после его отключения.
Плюс зависимость от загрузки рабочего объёма и разница в расположении измерительных головок датчиков.
:beer:
И не забудь про задержку перед повторным включением компрессора - иначе движку аллес капут будет.
8)
-=Vovka=-
Опытный кот
Сообщения: 844
Зарегистрирован: Пн апр 11, 2011 10:08:52

Re: Всё по DS18(B/S)20.

Сообщение -=Vovka=- »

На всякий случай уточню: задержка между включениями двигателя минимум 3 минуты, лучше 5
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Народ, неделю мучаю датчик - не сдаётся :) , вернее не отвечает. Подскажите, может что не так делаю.
Датчик 18B20 в железной капсуле с метровым хвостом, подключение 3 проводное, подтяжка 4к7.
Пишу на pic16 asm. Приведу сначала все подпрограммы, что я написал. Подпрограммы задержек приводить не буду. Там все как часы :) Кварц 4 МГц.
Спойлер

Код: Выделить всё

Wire1_Reset
			bcf	INTCON, GIE			; запрещаем прерывания
			call	Wire1_0
			call	pause_505us
			call	Wire1_Z
			call	pause_64us
			btfss	PORTC, RC2
			bsf	flags, slave_pres
			btfsc	PORTC, RC2
			bcf	flags, slave_pres
			call	pause_499us
			bsf	INTCON, GIE			; разрещаем прерывания
			return

Wire1_Send_byte							; отправка байта
			movlw	.8					; байт должен лежать в W1B
			movwf	count
			bcf		INTCON, GIE			; запрещаем прерывания
r1			call	Wire1_0
			btfsc	W1B, 0
			call	Wire1_Z
			rrf		W1B
			call	pause_64us
			call	Wire1_Z
			decfsz	count
			goto	r1
			bsf		INTCON, GIE			; разрещаем прерывания
			return

Wire1_Recieve_byte						; приём байта
			movlw	.8					; байт будет лежать в W1B
			movwf	count
			bcf		INTCON, GIE			; запрещаем прерывания
r2			call	Wire1_0
			call	Wire1_Z
			btfss	PORTC, RC2
			bcf		W1B, 7
			btfsc	PORTC, RC2
			bsf		W1B, 7
			rrf		W1B
			call	pause_64us
			decfsz	count
			goto	r2
			bsf		INTCON, GIE			; разрещаем прерывания
			return

Wire1_0		
			banksel	TRISC
			bcf		TRISC, RC2          ; в порт уже записан 0 при инициализации
			banksel	PORTC
			return

Wire1_Z		
			banksel	TRISC
			bsf		TRISC, RC2
			banksel	PORTC
			return
Теперь собственно что я делаю.

Код: Выделить всё

			call	Wire1_Reset
			btfss	flags, slave_pres
			call	DS18B20_ERROR		; индикация; из этой подпрограммы не выходит
			movlw	0xCC				; команда "skip rom"
			movwf	W1B					; так как датчик на шине всего один
			call	Wire1_Send_byte
			movlw	0x44				; команда "convert t"
			movwf	W1B
			call	Wire1_Send_byte
			call	pause_1s
			movlw	0xBE				; команда "read scratchpad"
			movwf	W1B
			call	Wire1_Send_byte
			call	Wire1_Recieve_byte
			movf	W1B, W
			movwf	LSB
			call	Wire1_Recieve_byte
			movf	W1B, W
			movwf	MSB
			call	Wire1_Reset           ; нужны только первые 2 байта, останавливаем передачу
В итоге импульс Presence я получаю, когда датчик подключен и получаю сообщение об ошибке, когда не подключен. Все нормально.
Далее пропускаю ром-код и шлю команду "начать преобразование". Жду секунду, считываю только первые 2 байта ОЗУ. Считывается число 127, т. е. все единицы. Очевидно, что команду он не распознал. Либо косяки в подпрограммах, но я уже много раз все перепроверил. Не могу понять в чем дело.
Последний раз редактировалось Dmitriy Karpov Чт авг 20, 2015 11:56:11, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Лол :)
пропускаю ром-код и шлю команду "начать преобразование". Жду секунду, считываю только первые 2 байта ОЗУ
А второй раз ресет и "скип ром" кидаете перед считыванием ОЗУ?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Ну не пинайте сильно. Я еще не разобрался что к чему.
А ресетить надо после преобразования? Там в даташите ресетят, но зачем непонятно. ОЗУ при ресете не стирается?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Dmitriy Karpov писал(а):А ресетить надо после преобразования?
Конечно надо. Посмотрите какие там красивые диаграммки состояний и поводите по ним пальчиком. Тогда вы поймёте что к чему надо посылать.
Dmitriy Karpov писал(а):Там в даташите ресетят, но зачем непонятно.
Чтобы легче было засинхриться, видимо. Другие устройства на шине ведь "спят", когда вы с одним общаетесь. Видимо, чтобы их пробудить.
Dmitriy Karpov писал(а): ОЗУ при ресете не стирается?
Только в паразитном (2-х проводном) режиме если передержать ресет. Тайминги есть в ДШ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Вроде заработало. Только показывает 12С почему-то :dont_know: Холодновато будет... :) При нагревании растёт.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Ну, в Москве нынче не жарко. Осень пришла, аднака :)
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Нет, это комнатная. Рядом китайские часы-градусник 23С показывают.
Думаю надо ему что-нить записать в ОЗУ и потом это считать и посмотреть что получится.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Контрольную сумму проверяете ? Возможно, данные кривые приходят.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Dmitriy Karpov писал(а):Только показывает 12 °С почему-то
Наверное, это не он показывает, а вы так интерпретируете данные, которые он вам посылает :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Оставляю такую вероятность, но я уже процедуры BIN_to_BCD и BCD_to_ASCII много раз проверял и десяток значений подставлял. Выводится все верно.
СRC пока еще не реализовал.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Dmitriy Karpov писал(а):BIN_to_BCD и BCD_to_ASCII
Это хорошо. Только перед этим данные надо немножко подвигать.
Так что более верно для начала вывести в двоичном или HEX-формате и вручную пересчитать что же он присылает.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Да, двигаю

Код: Выделить всё

			rrf		MSB
			rrf		LSB
			rrf		MSB
			rrf		LSB
			rrf		MSB
			rrf		LSB
			bcf		STATUS, C
			rrf		LSB            ; результат в LSB отправляю на дальнейшие преобразования
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Не силён в ПИКовском АСМе. Я предложил вам для начала смотреть сразу первые два присылаемые байта.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Попробовал записать TH, TL и config и считать. Числа другие, причем в 2 раза меньше записанных (как и температура из LSB, MSB). Походу где-то я сдвигаю лишний раз.
Аватара пользователя
Dmitriy Karpov
Встал на лапы
Сообщения: 89
Зарегистрирован: Сб апр 21, 2012 01:32:34
Откуда: Москва
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Dmitriy Karpov »

Ну да, в Wire1_Recieve_byte накосячил. Последний 8 сдвиг в цикле лишний. Надо либо обратно двигать, а лучше в carry писать и сдвигать

Код: Выделить всё

Wire1_Recieve_byte						; приём байта
			movlw	.8					; байт будет лежать в W1B
			movwf	count
			bcf		INTCON, GIE			; запрещаем прерывания
r2			call	Wire1_0
			call	Wire1_Z
			btfss	PORTC, RC2
			bcf		W1B, 7
			btfsc	PORTC, RC2
			bsf		W1B, 7
			rrf		W1B
			call	pause_64us
			decfsz	count
			goto	r2
			rlf		W1B                 ;!!!!!!!!!!!!!!!!!!!!!!!!
			bsf		INTCON, GIE			; разрещаем прерывания
			return
В общем проблема решена, теперь температура адекватная.
Спасибо откликнувшимся!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Dmitriy Karpov писал(а):теперь температура адекватная
Теперь ещё на отрицательную температуру надо проверить :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

Вернуться в «Периферия»