Hallo, habe mal eine konkrete Frage. Hab grad ein kleines Projekt zu laufen, wo ich über einen HTC Handy über WLAN meinen Receiver bzw. LCD-TV ansteuern will. Die Verbindung sitzt bis zum FPGA, funktioniert also tadellos. Das einzige was mir nur noch fehlt ist, die Fernbedienung lässt sich nicht über das FPGA realisieren. Habe diesbezüglich eine kleine Schaltung gelötet (ganz einfache Treiberstufe mit Transistor und der IR-Diode, in diesem Fall SFH485). Die Fernbedienungscodes habe ich mit einer Fotodiode (wieder selbst gelötet) auf dem Oszilloskopen abgetastet und in VHDL programmiert. Das heisst, die Fernbedienung und die IR-Diode des FPGAs senden identisch die gleichen Codes(es könnten höchstens µs Toleranzen drin sein, was ich eigentlich aber nicht vermute). Ich muss aber auch zugeben, das ich Anfangs nicht wusste mit welchem Protokoll ich zu tun habe, später fand ich hier im Forum, das es der NEC-Protokoll ist, die Pulsdauern des Start, "1" und "0" -Bits stimmen mit denen überein, die ich mit der Fotodiode über das Oszilloskop aufgenommen habe. Nun leider funktioniert die Sache mit dem Senden der Codes über das FPGA nicht. Ich hatte auch die Vermutung, dass es vielleicht an der IR-Diode liegt, vielleicht brauche ich einen anderen Wellenlängenbereich, aber kenne mich da nicht so gut aus. An dieser Stelle bräuchte ich eure Ratschläge, Erfahrungen und Ideen. Würde mich freuen wenn ich was brauchbares bekommen könnte. mfg Cihan ____________ PS: Fernbedienung ist vom Sat-Receiver Opticum CR7100
Also, gehen wir dann mal reihe für reihe durch. Und zwar, die Schaltung die ich für die IR-Diode benutze ist unter Bild 1 zu sehen. Sie ist am FPGA IDE Stecker A2 verbunden. Vielleicht wäre an dieser Stelle Sinnvoll zu erwähnen, das FPGA Board was ich benutze ist von Xilinx das Spartan 3 Starter Board. Hier mein VHDL Code: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity codierung is generic(first: integer := 450000; second: integer:= 225000; thirty: integer:= 28000; four: integer:= 28000; five: integer:= 84500 ); Port (CLK : in STD_LOGIC; RST : in STD_LOGIC; IR_Out : out STD_LOGIC; Taste: in STD_LOGIC_VECTOR (3 downto 0) ); end codierung; architecture Behavioral of codierung is type LU_table is array (0 to 2, 0 to 66) of integer; signal Look:LU_table:= ( (first, second, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, five, thirty, four, thirty, five, thirty, five, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, four, thirty, five, thirty, five, thirty, five, thirty, five, thirty), (first, second, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, five, thirty, four, thirty, five, thirty, five, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, four, thirty, five, five, five, five, five, five, five, five), (first, second, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, five, thirty, four, thirty, five, thirty, five, thirty, four, thirty, four, thirty, four, thirty, four, thirty, four, thirty, five, thirty, four, thirty, four, thirty, five, thirty, thirty, thirty, thirty, thirty, thirty, thirty) ); signal Di_CLK : STD_LOGIC; signal j: integer; begin Di_FRQ : process (CLK, RST) variable zahl1: natural range 0 to 6249999; variable i: integer; variable senden: STD_LOGIC; variable Tastev: STD_LOGIC_VECTOR(3 downto 0); variable entprell: natural range 0 to 50000000; begin if RST = '1' then zahl1 := 0; j<=0; Di_CLK <= '0'; entprell:=0; elsif CLK='1' and CLK'event then if Taste(0) = '1' and Tastev (0) = '0' and entprell = 0 then senden:='1'; i:=0; entprell:=50000000; elsif Taste(0) = '0' and Tastev (0) = '1' and entprell = 0 then entprell:=50000000; elsif Taste(1) = '1' then senden:='1'; i:=1; elsif Taste(2) = '1' then senden:='1'; i:=2; end if; Tastev(0):=Taste(0); if entprell > 0 then entprell := entprell - 1; end if; if senden = '1' then if zahl1 = 0 then zahl1 := Look(i,j); Di_CLK <= not Di_CLK; if j <= 66 then j <= j + 1; else j<=0; senden := '0'; end if; else zahl1:= zahl1-1; end if; end if; end if; IR_Out <= Di_CLK; end process Di_FRQ; end Behavioral; Das Prinzip der VHDL Programmierung ist, dass ein 3 dimensionaler Array mit 67 Attributen definiert wird. Diese 67 Attribute stellen die Fernbedienungscodes dar. Da ich später rausbekam, dass meine Fernbedienung mit dem NEC Protokoll arbeitet ist die Codierung folgendermaßen aufgebaut: Startbit mit 9000µs Puls und 4500µs Pause (zwei Attribute), dann 32 Datenbits jeweils für eine "0" 560µs Puls und 560s Pause und für eine "1" 560µs Puls und 1690µs Pause (64 Attribute) bzw. ganz am Ende noch der Stobbit mit 560µs Puls(1 Attribut)[insgesamt 67 Attribute im Array]. (Siehe auch unter NEC-Protokoll: http://www.mikrocontroller.net/articles/IRMP ). Den Code der Fernbedienung habe ich über eine Fotodiode mit Messung über Oszilloskopen rausgefunden und mir die Pulse aufgeschrieben und in das Array der VHDL Programmierung einprogrammiert. Durch drücken der Taste ganz links vom FPGA wird die IF-Bedinung mit senden = 1 gestartet und das Signal (Code) wird über die IR-Diode übertragen. Das Ergebnis oder der Zwischenstand zur Zeit ist, dass der Code richtig, vor allem identisch vom FPGA über die IR-Diode übertragen wird, doch allerdings reagiert der Sat-Receiver auf den Befehl nicht. Genau an dieser Stelle bin ich Ratlos, warum es nicht funktioniert. Ich hoffe ich habe alles gut schildern können und habe hoffentlich auch nichts vergessen zu erwähnen. Hoffe nun das ihr mir weiterhelfen könnt. Danke im Voraus Gruß Cihan
Na, kann mir denn keiner weiterhelfen. Oder fehlen Informationen?! Bei Unklarheiten beantworte ich die Fragen gerne und würde mich auch freuen wenn ihr mir helfen könntet Danke gruß Cihan
Ich kann leider kein VHDL, aber hast du die Pulse zusätzlich mit 36 bzw. 38 KHz moduliert. Kannst du das Sognal z.B. mit einem TSOP Ir-Empfänger empfangen? Gruß Roland
Danke für die Antwort erstmal Roland. Ich selber kenne mich mit Fernbedienungen nicht gut aus, das einzige was ich gemacht habe ist, die Fernbedienung mit einer Fotodiode über dem Oszilloskopen darzustellen und mir die High / Low Flanken anzusehen. Dann habe ich eben mit VHDL die Flanken genauso nachgemacht, aber 36 oder 38 kHz, ??? sagt mir erstmal nicht viel bzw. warum und wie muss modulliert werden. Reicht es mit anderen Worten nicht, die Flanken 1 zu 1 nachzumachen? Gruß Cihan
Ich habe ein bisschen recherchiert und bin auf diese Seite gestoßen: http://www.ustr.net/infrared/index.shtml In den Bildern habe ich folgendes erkannt: das was mit dem 36kHz Modulation gemeint ist doch einfach nur, wenn der gesendetete Code auf Logisch 1 ist, z.B. beim Start Bit mit 9000µs, wird der 36kHz Signal durchgeschickt. Ist das Richtig oder liege ich falsch?!?
Hi, mein Gott. Wenn Deine Signale identisch mit den Gewünschten sind, kanns doch nur noch an der Wellenlänge liegen. Was willste denn noch dieses Forengesülze ertragen? Bekommst hier doch eh nur dieses ermahnende Gelaber ala Silvia zu lesen. Viele Grüße und viel Erfolg beim selber machen.
Cihan Kalayci schrieb: > In den Bildern habe ich folgendes erkannt: > das was mit dem 36kHz Modulation gemeint ist doch einfach nur, wenn der > gesendetete Code auf Logisch 1 ist, z.B. beim Start Bit mit 9000µs, wird > der 36kHz Signal durchgeschickt. > > Ist das Richtig oder liege ich falsch? Das ist richtig, Einfach ein 36 kHz Signal erzeugen und mit deinen gesendeten Codes verknüfpen und das Ergebnis auf die Led geben. Die Empfänger haben einen Filter für diese 36 kHz um fremde Signale (z.B. von Energiesparlampen) besser ausblenden zu können).
Hallo Cihan, hast du mal deine Schaltung (die mit der Fotodiode) zum Empfang deiner selbst erzeugten Impulse benutzt? Wenn die etwas anzeigt, dann müsste die Wellenlänge stimmen. Dir ist auch klar, dass bei einer 1 am Kollektor des BC547 die LED aus ist. Tom
Hallo Thomas, ja ich habe die Fotodiodenschaltung zum Empfangen meiner selbst erzeugten Impulse benutzt, Ergebnis ist wie erwartet. Mit dem BC547 meinst du bestimmt an der Basis eine 1, statt dem Kollektor, denn da ist die IR-LED bei mir dran, die durch den Transistor zur Masse getrennt ist, nur wenn nun an der Basis ein HighSignal anliegt, schaltet die Led gegen Masse und kann leuchten. Inzwischen habe ich die Modulation auch in das Signal (bzw. in den Code) in der VHDL Programmierung eingefügt und es hat auf Anhieb geklappt. Für alle Interessenten, ich habe in meinem Programm nur einen Frequenzteiler hinzugefügt der eben die Modulation mit 36 kHz intern erzeugt und durch eine IF ELSE Abfrage an die Basis des Transistors weitergegeben. Funktioniert super. Nochmals danke an alle Beteiligten für die interessanten und effektiven Gedankenstöße Gruß Cihan
Cihan Kalayci schrieb: > Inzwischen habe ich die Modulation auch in das Signal (bzw. in den Code) > in der VHDL Programmierung eingefügt und es hat auf Anhieb geklappt. Wobei mich sehr wundert, dass du diese Modulation mit der eingangs erwähnten Fotodiode nicht gesehen hast... Oder war das gar keine simple Fotodiode, sondern ein kompletter IR-Empfänger, der gleich auch die Demodulation übernommen hat?
Lothar Miller schrieb: > Oder war das gar keine simple Fotodiode, sondern ein kompletter > IR-Empfänger, der gleich auch die Demodulation übernommen hat? Oder es war das Oszi so eingestellt, das die 36 kHz nicht aufgefallen sind... Duke
Lothar Miller schrieb: > Wobei mich sehr wundert, dass du diese Modulation mit der eingangs > erwähnten Fotodiode nicht gesehen hast... > Oder war das gar keine simple Fotodiode, sondern ein kompletter > IR-Empfänger, der gleich auch die Demodulation übernommen hat? Er schreibt Receiver bzw TV und diese werden ganz sicher keine normale Fotodiode bzw Fototransistor verwenden. Der IR Empfänger soll ja möglichst vom Umgebungslicht unabhängig sein. Hier mal ein Datenblatt: http://www.vishay.com/docs/82090/tsop48xx.pdf Wie man sieht steckt da einiges an analoger Verarbeitung drin.
Lattice User schrieb: > Er schreibt Receiver bzw TV und diese werden ganz sicher keine normale > Fotodiode bzw Fototransistor verwenden. Es war die Rede von einer Schaltung mit einer (namenlosen) Fotodiode, mit der das IR-Signal wieder nach Elektrisch umgewandelt wurde: > das einzige was ich gemacht habe ist, die Fernbedienung > mit einer Fotodiode über dem Oszilloskopen darzustellen Und insbesondere das hier war dann doch irgendwie irreführend: > ja ich habe die Fotodiodenschaltung zum Empfangen meiner selbst > erzeugten Impulse benutzt, Ergebnis ist wie erwartet. Wenn mit einer simplen Diode das Signal (von FB und vom FPGA) gleich aussieht, dann solte auch der Empfänger gleich reagieren...
Lothar Miller schrieb: > Und insbesondere das hier war dann doch irgendwie irreführend: >> ja ich habe die Fotodiodenschaltung zum Empfangen meiner selbst >> erzeugten Impulse benutzt, Ergebnis ist wie erwartet. > Wenn mit einer simplen Diode das Signal (von FB und vom FPGA) gleich > aussieht, dann solte auch der Empfänger gleich reagieren... Stimmt. Entweder er hatte einen IR Empfänger (die sehen äusserlich aus wie Phototranistoren) oder die Beschaltung der Photodiode taugte nicht (ist auch nicht ganz trivial, da die zu messenden Ströme ziemlich klein sind).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.