Здравствуйте,
Sergey7!
Извините за задержку с ответом, обстоятельства...
В общем, я все переделал строго по Вашей схеме Proteus, убрал все лишнее. Резисторы на сегменты поставил 200 Ом, поскольку 100 Ом, как на схеме, у меня мало, нужного количества не набралось, но и этого оказалось вполне достаточно. Без приключений, конечно, не обошлось. В начале ничего не получалось. А все потому, что я балбес...

и фамилия моя Кутузов.

На схеме выход с 4 вывода МК идет на R9 10 кOм, а дальше... то ли плюс, то ли минус, непонятно? Я его на минус засандалил, и произошло чудо! Датчик температуры, легким движением моей руки, превратился в элегантный «датчик движения»... то есть, эффект странный получился: подношу руку к плате – индикатор черточками загорается, отхожу от него, и он тухнет вообще. Я то думаю: во чудеса! До чего техника дошла?! Так, поди, этот термометр еще и разговаривать станет!

Я то тогда еще не понял в чем дело. Вы мне в архиве скинули файл проекта в Proteus, вот я решил проверить в самом редакторе, что и по чем. Скачал редактор, установил на комп, запустил проект, нашел, как вставлять прошивку в МК, выставлять температуру, и так далее. Ну, все работает...

Значит, стал искать причину у себя, и нашел... Переключил выход R9 на анод и ВСЕ ЗАРАБОТАЛО!!

Yahoo!!!
Все измерения в пределах погрешности 0.5 градуса по разным термометрам...

БОЛЬШОЕ СПАСИБО ВАМ, Sergey7!!! Все работает как надо, никаких серьезных отклонений. СУПЕР!
Вы писали, что можете подкорректировать ASM так, чтобы знак минуса смещался вправо, когда показания маленькие, а то действительно не очень смотрится, например, -1.0. Получается, минус слишком далеко «оторван». Я пытался сам понять по исходнику ASM, но явно не увидел, где именно это можно подправить. Но, зато нашел, как можно управлять временем запроса на чтение показаний температуры...
- Код: Выделить всё
call PAUSE1s ; Задержка для обработки запроса (max=750 мс)
call PAUSE1s ; ПАУЗА между замерами
call PAUSE1s ; ПАУЗА между замерами
3 раза вызывается процедура паузы в 1 сек. Могу сам добавить сколько угодно.
И в самой процедуре, более-менее понятно, исходя из предыдущих пояснений...
- Код: Выделить всё
PAUSE1s movlw 0x0A
movwf Temp3
call PAUSE100ms
decfsz Temp3,1
goto $-2
return
;---------------------
PAUSE100ms clrf Temp1
movlw 0x7E
movwf Temp2
P100 incfsz Temp1,1
goto $-1
incfsz Temp2,1
goto P100
return
Видел, что и CRC у Вас тоже проверяется, как положено. Я еще скачал MPLAB IDE, чуть позже поковыряюсь в нем. Но вот, как сдвигать минус, понять не могу. Это, видимо, где-то в «ПП ЧИСЛОВЫХ ВЫЧИСЛЕНИЙ»...
- Код: Выделить всё
;------------ ПП ЧИСЛОВЫХ ВЫЧИСЛЕНИЙ ---------------------------------------
Process
; DS18B20_L разряды 0-3 это доли градуса
; DS18B20_Н разряды 7-3 знак, 1- / 0+
...
...
...
;--------------
clrf LED3
btfss DS18B20_H,0 ; ЗНАК --------------------
Ни фига не понял.

В связи с чем у меня к Вам последняя просьба... пожалуйста, не могли бы Вы подправить код, и сделать в нем смещение минуса вправо при малых значениях отрицательных температур.
