DS18B20 Stan linii RTS po zmianie prędkości portu Com

0

Witam, ponownie przypomniałem sobie po kilku latach że leży u mnie niedokończony DS18b20
zaglądałem ponownie do przykładowego demo ponieważ chcę sobie zrobić termostat na bazie interfejsu 1-Wire i delphi
wczytałem się w dokumentację ds'a jest procedura która resetuje ds'a by go zasilić w trybie pasożytniczym
i teraz mam problem bo reset następuje poprzez zmianę prędkości portu i wysłanie komunikatu "0xF0" i zmiana z powrotem na tą samą prędkość
wszystko było by dobrze gdyby nie to że podczas zmiany prędkości linia RTS zostaje załączona a ja chciałbym właśnie sterować tranzystorem poprzez linię RTS
czy jest możliwość wykonania procedury reset bez zmiany stanu na RTS bądź czy jest możliwość zmiany prędkości portu bez zmiany stanu linii RTS ?

załączam procedurę reset:

function TxSensorBus.Reset: Boolean;
var
	dcb: TDCB;
  ch: BYTE;
  cb: DWORD;
begin
	Result := GetCommState(fPortHandle, dcb);
  if not Result then  Exit;

  dcb.BaudRate := CBR_14400;
  Result := SetCommState(fPortHandle, dcb);
  if not Result then Exit;

	ch := $F0;
	if WriteFile(fPortHandle, ch, 1, cb, nil) then
  begin
		ReadFile(fPortHandle, ch, 1, cb, nil);
    Result := (ch <> $F0);
  end;

	dcb.BaudRate := CBR_115200;
  SetCommState(fPortHandle, dcb);
end;

serdecznie prosił bym o pomoc :)

0

Właściwy stan RTS-a po otwarciu portu można uzyskać poprzez ustawienie odpowiednich flag w strukturze TDCB:

dcb.Flags:=dcb.Flags or (RTS_CONTROL_ENABLE shl 12); //załączenie RTS-a
dcb.Flags:=dcb.Flags and $FFFFCFFF; //wyłączenie RTS-a
Result := SetCommState(fPortHandle, dcb);

albo można użyć funkcji EscapeCommFunction:

 
EscapeCommFunction(fPortHandle, SETRTS); //załączenie RTS-a
EscapeCommFunction(fPortHandle, CLRRTS); //wyłączenie RTS-a

Pierwszy sposób chyba byłby bardziej odpowiedni.

0

Niestety to nie pomaga, oczywiście działa jeśli chcemy zgasić RTS Twoim kodem to gaśnie ale zaraz się sam zapali a zapala go zmiana BaudRate

dcb.BaudRate := CBR_14400;
 Result := SetCommState(fPortHandle, dcb);

oraz:

 
dcb.BaudRate := CBR_115200;
SetCommState(fPortHandle, dcb);

1 użytkowników online, w tym zalogowanych: 0, gości: 1