Swiecaca ciagle dioda. (TCommPortDriver)

0

Chcialem zrobic zapalanie i wylaczanie diody. Znalazlem komponent dzieki ktoremu moge wyslac na koma dowolny bajt. Do portu podlaczylem sie za pomoca kabla od myszki gdzie sa 4 kable. Nie wiem ktory za co odpowiada bo nie mam jak zajzec do wtyczki od COM-a. Znalazlem dwie kombinacje podlaczenia diody ale na kazdej z nich dioda caly czas swieci.. nie wiem dlaczego?

0

nóżka piąta to masa (minus), a nóżki 3 i 2 to nóżki danych (plus)
Wyjście to najprawdopodobniej 3 nóżka, ale już nie pamiętam (wiec podłącz diodę to 5 i 3).

0

nóżka piąta to masa (minus), a nóżki 3 i 2 to nóżki danych (plus)
Wyjście to najprawdopodobniej 3 nóżka, ale już nie pamiętam (wiec podłącz diodę to 5 i 3).

Dobrze ale ja wlasnie tak zrobilem i ona caly czas swieci i nie mam mozliwosci wylaczenia.

Planuje przejsc na LPT i moze wtedy cos lepiej pojdzie.

Juz jestem i jest tak samo.
diode podlaczylem do 4 i 19 pinu na lpt. caly czas swieci.
zmienilem tez komponent do sterowania na "zlportio" polecany na kilku stronach.

0

W XP to zdaje się normalne. Wydaje mi się, że sytem ustawia wszystkie porty na włączone. (W Win98 tego nie było.) Ja dałem program do autostartu, który wysyła na LPT 0. Jeśli ktoś ma lepszy pomysł to chętnie wykorzystam :)

0

mi pod XP sterowanie portem działa :

const
  fBinary = $0001;
  fParity = $0002;
  fOutxCtsFlow = $0004;
  fOutxDsrFlow = $0008;

  DTR_CONTROL_ENABLE = $0010;
  DTR_CONTROL_HANDSHAKE = $0020;

  fDsrSensitivity = $0040;
  fTXContinueOnXoff = $0080;
  fOutX = $0100;
  fInX = $0200;
  fErrorChar = $0400;
  fNull = $0800;

  RTS_CONTROL_ENABLE = $1000;
  RTS_CONTROL_HANDSHAKE = $2000;
  RTS_CONTROL_TOGGLE = $3000;

  fAbortOnError = $4000;

Zmienne:

var
  DCB, 
procedury:

//**** procedura otwiera port COM1 i ustawia parametry transmisji
procedure OpenAndSetCommPort;
  begin
  PortName:='COM1';
  hCommPort:= CreateFile(PortName, GENERIC_READ or GENERIC_WRITE,0,
NIL, OPEN_EXISTING, 0, 0);
  if (hCommPort INVALID_HANDLE_VALUE) then
  begin
  DCB.BaudRate:= CBR_19200;
DCB.Parity:= noPARITY;
DCB.StopBits:= ONESTOPBIT;
DCB.Flags:=fparity or DTR_CONTROL_HANDSHAKE ;
DCB.ByteSize:=8;
SetCommState(hCommPort, DCB);

end
else
case hCommPort of
IE_BADID: MessageDlg('Niewłaściwa nazwa portu '+PortName+
' lub jest on aktywny! ' ,
mtError, [mbOk], 0);

IE_OPEN: MessageDlg('Port '+PortName+' jest już aktywny!' ,
mtError, [mbOk], 0);

IE_NOPEN: MessageDlg('Port '+PortName+
' nie jest aktywny!' ,
mtError, [mbOk], 0);
end;
end;
end;
//**** procedura zamyka port
procedure CloseCommPort;
begin
CloseHandle(hCommPort);
end;

//**** procedura zapisuje aktualną konfiguracje portu

procedure SaveCommState;
begin
Dcb.DCBlength:= sizeof(DCB);
GetCommState(hCommPort, DCB);
SafeDCB:=DCB;
end;

//**** procedura przywraca konfigurację zapisaną w safeDCB
procedure RestoreCommState;
begin
DCB:=SafeDCB;
SetCommState(hCommPort, DCB);
end;

//**** procedura wysyła na port bajt danych z zmiennej DANE
procedure WritePort;
var
NumberOfBytesWritten : DWORD;
begin

WriteFile(hCommPort, DANE, sizeof(DANE),NumberOfBytesWritten, NIL);

end;

//**** procedura sczytuje bajt danych z portu do zmiennej DANE
procedure ReadPort;
var
NumberOfBytesToRead: DWORD;
begin

ClearCommError(hCommPort, Errors, @Status);
if (Status.cbInQue > 0) then
begin
if (Status.cbInQue > sizeof(DANE)) then
nNumberOfBytesToRead := SizeOf(DANE)
else
nNumberOfBytesToRead := Status.cbInQue;
ReadFile(hCommPort, DANE, nNumberOfBytesToRead,NumberBytesRead, NIL);
end
else
NumberBytesRead := 0;
end;
0

Zmienne:

var
DCB,

jakiego rodzaju jest zmienna DCB ??

0

Sorki wcieło mi tamten kod i ci nie odpowiem znalazłem coś innego :

LPT :

Aby sterować urządzeniami elektronicznymi w Delphi, wystarczy mieć wolne złącze drukarkowe. Funkcja odczytu do portu wygląda tak :

function PortIn(Port:Word):Byte;
var Cos:Byte;
begin
  asm
   mov DX , Port
   in AL , DX
   mov Cos, AL
  end;
PortIn:=Cos;
end;

Aby sterować urządzeniami elektronicznymi w Delphi, wystarczy mieć wolne złącze drukarkowe. Funkcja zapisu do portu wygląda tak :

procedure PortOut(Port:Word;Wartosc:Byte); assembler;
asm
  mov DX, Port
  mov AL, Wartosc
  out DX, AL
end;

Port = Numerportu ($378 port drukarkowy)

COM :

procedure TForm.Button1Click(Sender : TObject);
var hCOM:THandle;
    nrWrit:DWORD;
    nrRead:DWORD;
    Errors:DWORD;
    Dcb:TDCB;
    ComStat:TComStat;
    buf:array[0..2048] of char;
begin
 //Otwarcie łącza COM
 hCOM:=CreateFile('COM3',GENERIC_WRITE OR GENERIC_READ,0,nil,OPEN_EXISTING,0,0);

 //Ustawienie parametrów transmisji - jak  MODE w DOS'ie
 if hCOM<>INVALID_HANDLE_VALUE then
 begin
  GetCommState(hCOM,Dcb);
  BuildCommDCB('19200,n,8,2',Dcb);
  SetCommState(hCOM,Dcb);
 end
 else
 begin
  ShowMessage('Błąd otwarcia portu COM : '+IntToStr(GetLastError()));
  Exit;
 end;

 try
  //Przygotowanie bufora
  ZeroMemory(@buf,SizeOf(buf));
  StrCopy(buf,'AT&V'+#13+#10);

  //Zapis bufora
  if not WriteFile(hCOM,buf,StrLen(buf),nrwrit,nil) then
   ShowMessage('Błąd zapisu do portu COM.');

  //Sprawdzenie czy jest coś w buforze COM
  ClearCommError(hCOM,Errors,@ComStat);

  //Odczytanie bufora gdy są dane
  if ComStat.cbInQue>0 then
   ReadFile(hCOM,buf,ComStat.cbInQue,nrRead,nil);
 finally
  CloseHandle(hCOM);
 end;
end;

0
in

i out

 nie działają w WinXP. Ale nie w tym rzecz, bo macgyver2004 nie ma problemu z obsługą portu, tylko z tym, że dioda świeci cały czas od momentu włączenia kompa.
0

ten typ tak ma - zawsze po włączeniu komputera na lpt są jedynki. ale nie wydaje mi się to problemem, przecież można zanegować stan wyjścia (zrobić sobie bramkę not) - ot jeden tranzystor i jeden opornik.

0

Ja jestem kompletne zero z elektroniki i nawet ten jeden tranzystor i opornik to dla mnie problem. Chcialem napisac <ort>po prostu</ort> program ktory dzieki diodom bedzie powiadamial mnie o problemach z kompem. Cos w stylu D-Bracket od MSI.

0

Więc tak jak mówiłem: zostaje ci chyba tylko ustawienie LPT na 0 na autostarcie.

0

Witam.
Podepne sie pod temat, bo chyba nie warto zakladac nowego.

Mianowicie mam problem z TCommPortDriver a dokladniej z jego instalacja na D5.
Przy kompilacji wyskakuje mi blad:
"ComDrv32.pas: Types of actual and formal var parameters must be identical" i wskazuje na linie

WriteFile( FComPortHandle, DataPtr^, nToSend, nSent, nil );

Ma ktos moze pomysl, o co chodzi?
Znaczy rozumiem znaczenie bledu ale nie wiem dlaczego powstal ani tym bardziej - jak go naprawic.

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