Доброго времени суток.
Не получается считать температуры на VB6 с более чем одного датчика
ds18b20. Использую команду 55H но датчики возвращают температуру
только одного из них, т.е. температура одного из дачиков
отображается на обоих.
Делал все по даташиту, подключен датчик паразитным питанием:
dmmy = TMTouchReset(MyHandle) 'сбрасываем шину
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H55) 'даем команду для выбора датчика по
его уникальному номеру
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, ROMid(g).ROMOrig(i)) 'передаем в шину
уникальный номер датчика, с которым хотим работать
Next i
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H44) 'даем команду измерять температуру
Pause (1) ' пауза на время измерения температуры
dmmy = TMTouchReset(MyHandle) 'сбрасываем шину
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H55) 'даем команду для выбора датчика по
его уникальному номеру
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, ROMid(g).ROMOrig(i)) 'передаем в шину
уникальный номер датчика, с которым хотим работать
Next i
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
'Read the scratch of a DS18B20
dmmy = TMTouchByte(MyHandle, &HBE) ' даем команду для чтения
регистров(памяти) датчика
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, &HFF)' читаем данные из регистров
датчика
TEMP_buffer(i) = dmmy
Next i
В ROMid(g).ROMOrig() хранится уникальный код девайса, передаю его полсе H55 в таком же виде как считал с попомщью команды TMRom.
Пробовал и посылать последний байт первым и если If ROM(i) <= &HF то обнулят байт серийного номера.
Все равно не получается, подскажите плс почему?
По даташиту DS18B20.pdf ("MEMORY FUNCTION EXAMPLE Table 5"):
TX Reset Reset pulse (480-960 ?s).
RX Presence Presence pulse.
TX 55h Issue “Match ROM” command.
TX <64> Issue address for DS18B20.
TX 44h Issue “ Convert T” command.
TX I/O line is held high for at least a period of time greater than tconv by bus master to allow conversion to complete.
TX Reset Reset pulse.
RX Presence Presence pulse.
TX 55h Issue “Match ROM” command.
TX <64> Issue address for DS18B20.
TX BEh Issue “Read Scratchpad” command.
RX <9> Read entire scratchpad plus CRC; the master now
recalculates the CRC of the eight data bytes received
from the scratchpad, compares the CRC calculated and
the CRC read. If they match, the master continues; if
not, this read operation is repeated.
TX Reset Reset pulse.
RX Presence Presence pulse, done.
Единственное что не делал, это Strong pull-up после команды начать
измерение температуры(H44). НО температуру датчик измеряет т.е.
ему хватает напруги на линии. Если на шине только один датчик, то
проблем нем, все читается на ура, бъюсь уже три недели - результат
нулевой. Готов уже купить Temp Keeper, так как он все замечательно
меряет =(((
P.S. Проблему победил, исходники тут:
http://rn3aig.ru/phpBB3/viewtopic.php?f=3&t=5