AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie Signale einer IR Fernbedienung für ComPort empfangen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Signale einer IR Fernbedienung für ComPort empfangen?

Ein Thema von Cyberaxx · begonnen am 9. Okt 2007 · letzter Beitrag vom 15. Okt 2007
Antwort Antwort
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

Re: Wie Signale einer IR Fernbedienung für ComPort empfangen

  Alt 14. Okt 2007, 01:44
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....
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz