Вверх ↑
Ответов: 70
Рейтинг: 0
#1: 2016-01-17 18:59:26 ЛС | профиль | цитата
Леонид писал(а):

Отвечает... Когда даёт сигнал присутствия то отвечает кодом от 0х10 до 0х90 со скоростью 9600. А когда данные выдаёт то он отвечает 0xFF если говорит 1 и 0x00 если говорит 0 со скоростью 115200.
------------ Дoбавленo в 18.23:
Может быть вот этот код Вам каким то образом сможет помочь. Это передача сигнала RESET и приём сигнала присутствия:
#pas
function OneWire_reset: boolean;
begin
Result := false;
FT_Current_Baud := 9600;
FT_Current_DataBits := 8;
FT_Current_StopBits := FT_STOP_BITS_1;
FT_Current_Parity := FT_PARITY_NONE;
FT_Current_FlowControl := FT_FLOW_NONE;
Set_USB_Device_BaudRate;
Set_USB_Device_DataCharacteristics;
Set_USB_Device_FlowControl;

FT_Out_Buffer[0] := $F0;
Write_USB_Device_Buffer(1);

repeat
Get_USB_Device_QueueStatus;
until (FT_Q_Bytes > 0);

Read_USB_Device_Buffer(1);

if FT_In_Buffer[0] <> $F0 then Result := true;
end;
Это передача байта команды или данных:
#pas
procedure OneWire_send_byte(DataToTransfer: byte);
var
tmp_b: byte;
i: integer;
begin
FT_Current_Baud := 115200;
Set_USB_Device_BaudRate;

for I := 0 to 7 do
if (DataToTransfer and (1 shl I)) <> 0 then
FT_Out_Buffer[i] := $FF
else
FT_Out_Buffer[i] := $00;

Write_USB_Device_Buffer(8);

//RX у нас замкнут на TX, поэтому данные придут обратно,
//и если их не прочитать - будут валяться в буфере FT232.
repeat
Get_USB_Device_QueueStatus;
until (FT_Q_Bytes >= 8);

Read_USB_Device_Buffer(8);

end;
Это приём данных с датчика на мой FT232:
#pas
function OneWire_read_byte(): byte;
var
tmp_b: byte;
i: integer;
begin
Result := 0;
FT_Current_Baud := 115200;
Set_USB_Device_BaudRate;

for I := 0 to 7 do
FT_Out_Buffer[i] := $FF;

Write_USB_Device_Buffer(8);

repeat
Get_USB_Device_QueueStatus;
until (FT_Q_Bytes >= 8);

Read_USB_Device_Buffer(8);

for I := 0 to 7 do
if FT_In_Buffer[i]<>$FF then
Result := Result or (1 shl I);
Result := not result;
end;
Я понимаю алгоритм только вот в блоках не могу это выполнить.
карма: 0

0