Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Компьютерное железо
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 20:47   #1
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
Лампочка Программное управление температурным датчиком DS18S20

Всем привет!
У меня появился вопрос касающийся температурного датчика. Проблема в следующем: датчик имеет специальные команды для общения с ним и я во всем разобрался кроме парочки вещей. Не могу понять как правильно использовать команду Search ROM [F0h] (Искать ПЗУ) ? И как правильно отследить выполнение команды Read Power Supply [B4h] (Выдача данных о режиме питания ИМС)? Даташит на русском языке на датчик DS18B20: http://invent-systems.narod.ru/DS18B20.htm
P.S. Эти датчики практически одинаковы. Смысл команд один и тот же.
У меня установлено 2 датчика.
Основные процедуры, которые я использовал:
Код:
Var
CRC: Byte;
//Для проверки присутствия датчика и его обнуления
Function TReset: Boolean;
Var
B: Byte;
D,Time: DWord;
Begin
Result:=False;
SetModCom(9600,8,NOPARITY,ONESTOPBIT,True,False);
PurgeCom;
TxByteCOM($F0);
Time:=GetTickCount + 50;
Repeat
RxDataCOM(B,1,D);
Until
(D = 1) Or (Time < GetTickCount);
If D = 1 Then
Result:=(B <> $F0);
End;
// Для отправки данных и приёма
Function TByte(X: Byte): Byte;
Var
N: Integer;
B: Byte;
D,Time: DWord;
Begin
Result:=$FF;
SetModCom(115200,8,NOPARITY,ONESTOPBIT,True,False);
PurgeCom;
Time:=GetTickCount + 50;
For N:=1 To 8 Do
Begin
If Odd(X) Then
TxByteCOM($FF)
Else
TxByteCOM($00);
X:=X Shr 1;
Repeat
RxDataCOM(B,1,D);
Until
(D = 1) Or (Time < GetTickCount);
If D <> 1 Then
Exit;
If Odd(B) Then
X:=X Or $80;
If Odd(B Xor CRC) Then
CRC:=((CRC Xor $18) Shr 1) Or $80
Else
CRC:=CRC Shr 1;
End;
Result:=X;
End;
Подскажите, пожалуйста, решение этой проблемы.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 11.11.2011, 12:36   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Пробовал разбираться. Как узнать вид электропитания датчика?
В даташите написано:
Цитата:
Вид электропитания датчика [B4h]
Главное устройство генерирует эту команду, чтобы определить используют DS18B20s на шине паразитное питание. Если после подачи команды на шине присутствует логический «ноль» - это значит, что DS18B20 использует паразитное питание. Иначе DS18B20 использует внешнее питание (логическая единица). Обратите внимание после подачи команды опроса необходимо сформировать слот времени после которого DS18B20 выставит на шину бит состояния который можно сосчитать в течении этого слота времени.
Я использовал функцию Function TByte(X: Byte): Byte; и пробовал посмотреть какие вообще данные идут от датчика. Сделал следующее:
В код функции
Код:
Repeat
RxDataCOM(B,1,D);
Until
добавил строку
Код:
Repeat
RxDataCOM(B,1,D);
MainForm.Memo1.Lines.Add(IntToStr(B)+ ' ' + IntToStr(D));
Until
Вызывал функцию TByte($B4);
В итоге данные были следующие:
При подключении датчика с внешним питанием был ответ:
0 0
0 0
0 1
0 0
0 0
0 1//Есть мнение, что нужно смотреть здесь
0 0
0 0
255 1
255 0
255 0
0 1
0 0
0 0
255 1
255 0
255 1
255 0
255 0
0 1
0 0
255 1
При подключении с паразитным питанием:
0 0
0 0
0 1
0 0
0 0
0 0//Есть мнение, что нужно смотреть здесь
0 1
0 0
0 0
255 1
255 0
255 0
0 1
0 0
0 0
255 1
255 0
255 0
255 1
255 0
0 1
0 0
255 1
Поясню функцию RxDataCOM(B,1,D); Она (экспортируется из dll) выглядит так:
Код:
Function RxDataCOM(Var Buffer; N: DWORD; Var LpNDone: DWORD): Boolean; Stdcall;
Begin
Result:=ReadFile(HCom,Buffer,N,LpNDone,Nil);
End;                   {B}       {D}
Подскажите, пожалуйста, как правильно узнать состояние линии при выполнении команды $B4? С меня причитается!
P.S. Если я что-то не правильно написал, не судите строго.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программное управление светодиодом Jacobson Общие вопросы Delphi 5 14.05.2010 23:02
CPU Internal Cache, программное управление SunKnight Свободное общение 0 11.05.2010 22:30
Работа с датчиком RockForr Общие вопросы Delphi 0 27.05.2009 12:57
Сервис - программное управление. Air Win Api 3 23.06.2008 13:09