Леонид писал(а):
Отвечает... Когда даёт сигнал присутствия то отвечает кодом от 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;
#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;