So ich habe da mal etwas gebastelt was aber nun mal wieder nicht funktioniert.
Mal abgesehen davon das er das System ein wenig lahm legt.
Delphi-Quellcode:
const
fDtrControlEnable = 16; // DTR flow control type $0010
fRtsControlEnable = 4096; // RTS flow control $1000
Rc5Time = 24889; //us
Rc5BitTime = Rc5Time div 14;
Rc5HalfBitTime = Rc5Time div 28;
Rc5QbitTime = Rc5Time div 56;
var
Freq: Int64;
procedure TRc5Thread.Execute;
var
TmpValue: Integer;
Value: Integer;
I: Integer;
T: Integer;
begin
while not Terminated do begin
T := 0;
Windows.QueryPerformanceFrequency(Freq);
if PegelValue = 0 then begin
IrDelay(Rc5HalfBitTime);
if PegelValue = 1 then begin
IrDelay(Rc5HalfBitTime);
if PegelValue = 0 then begin
IrDelay(Rc5HalfBitTime);
if PegelValue = 1 then begin
IrDelay(Rc5HalfBitTime);
TmpValue := PegelValue;
IrDelay(Rc5HalfBitTime);
Value := PegelValue;
if TmpValue <> Value then begin // Zustände müssen unterschiedlich sein
FCode[1] := 0;
FCode[2] := 1;
FCode[3] := 0;
FCode[4] := 1;
FCode[5] := TmpValue;
FCode[6] := Value;
IrDelay(Rc5HalfBitTime);
T := 6;
for I := 7 to 16 do begin
TmpValue := PegelValue;
IrDelay(Rc5HalfBitTime);
Value := PegelValue;
if TmpValue <> Value then begin
FCode[I] := TmpValue;
Inc(T);
end;
end;
for I := 17 to 28 do begin
TmpValue := PegelValue;
IrDelay(Rc5HalfBitTime);
Value := PegelValue;
if TmpValue <> Value then begin
FCode[I] := TmpValue;
Inc(T);
end;
end;
end;
end;
end;
end;
end;
if T = 28 then
Synchronize(SetRC5);
IrDelay(Rc5QbitTime);
end;
end;
procedure TRc5Thread.IrDelay(uS: Integer);
var
AktCount: Int64;
NewCount: Int64;
OldCount: Int64;
begin
Windows.QueryPerformanceCounter(OldCount);
NewCount := OldCount + Round((uS * Freq) / 1000000);
repeat
Windows.QueryPerformanceCounter(AktCount);
until AktCount >= NewCount;
OldCount := NewCount;
end;
Da ich immer die Halbe Bitzeitdurchlaufe und alle Zustände mit schreibe habe im am Ende eines RC5 Codes 28 Zustände
Der Thread läuft in einer Schleife, diese wiederholt sich alle in 1/4 der Bitzeit
Wird ein High Signal gefunden sucht er nach einer Halben Bitzeit nach einem Low Pegel, dann wieder ein High und darauf wieder ein Low, alles im Abstand eines Haben Bits. Das Bit wird ja wie auf dem Link von mir die Halbe Zeit als High und den Rest als Low Pegel ausgegeben.
Danach wird das Toglebit eingelesen, dieses muss einmal als High und auch als Low vorhanden sein. Die Adressbits und die Commandobits ebenfalls. Wenn das der Fall ist sollte T bei 28 liegen und der Rc5 Frame ausgegeben werden. Jedoch habe ich das Problem das er nichtmal soweit kommt. Da Teilweise das Signal beide Hälften den selben Zustand hat.
Liegt da ein Problem meiner Seite vor oder könnte sein das Windows da nicht mit spielt?
Habe doch jetzt alles berücksichtigt....