Hallo zusammen, habe schon gesucht aber nichts passendes gefunden, alle ähnlichen Beiträge nur für ATmega leider. Ich möchte gern die FB Signale einer JVC Ferbedienung (Hifi) mit einem µC empfangen, decodieren und die Werte per RS232 einen PC übergeben. Es steht also vorher fest welche Frequenz und welcher Code ausgewertet werden soll. Zudem würde es auch reichen, das Betätigen zweier unterschiedlichen Tasten anzuzeigen bzw. auszugeben. Die Idee dahinter ist: -Per TSOP empfange und demoduliere ich das IR Signal. -Mit einem KEIL MCB2300 mit LPC2378 Prozessor der auf 12Mhz läuft, soll das empfangene Signal abgetastet und als Bitmuster in einem Array gespeichert werden. -Dieses Array wird dann alle 250ms ausgelesen, die entscheidenden Bits ausgewertet (8 Kommandobits) und diesen Zuständen jeweils eine Ausgabe zugewiesen die dann über Com0 oder Com1 des Keil Boards an den PC übergeben werden. -Mit einem Monitorprogramm(Java) werden dann die Nachrichten vom Keil Board ausgelesen und dargestellt. Mein Ansatz ====================================================================== Folgende Funktionsblöcke denke ich, sind hierfür nötig: -ein Timer der zyklisch einen Eingangspin abtastet und so das demodulierte IR-Signal in den LPC2378 "holt". -Ein Synchronisationsblock der erkennt wann Keine Taste gedrückt wird bzw. wann eine Taste gedrückt wird und die Befüllung eines Arrays zum richtigen Zeitpunkt startet. -Ein Array das die empfangenen Daten zwischenspeichert -Eine Funktion die die Bits(0-7) vom Kommandobereich ausliest und auswertet -Eine Funktion die die ausgewerteten Daten über COM(n)an den PC sendet Was bisher funktioniert: -Empfangen der IR Signale am Eingangspin (Darstellen des Signalverlaufes am Audioeingang mit Cool Edit) -Setzen des Timers -Abtasten der Signalbursts mit 700µs ~1,429Khz Takt (warum 700µs, eine logische 1 ist 2,1ms und eine logische 0 1,05ms lang - bei 3 Abtastungen pro gesendetem Bit sollte eine eindeutige Abtastung möglich sein) -Senden der Daten per RS232 und Darstellen der Daten auf dem PC per Monitorprogramm Probleme und Grund dieses Threads: ====================================================================== 1. Um die Daten richtig interpretieren und auswerten zu können, muss die Abtastung mit dem FB-Signal synchronisiert werden, da sonst mit Sicherheit das Array zwar beschrieben wird, allerdings nur mit Datenmüll. Dieses Synchronisieren funktioniert leider noch nicht und ich habe auch noch keinen zuverlässigen Ansatz dafür. Meine Idee hierzu war: Am Anfang eines Signalbursts der FB wird ein Startbit von 8,4ms Länge gesendet, gefolgt von einer Pause von 4,2ms. Danach beginnt der Datenteil ,mit 8Bit Gerätecode und weiteren 8Bit Kommandocode gefolgt von einem Stopbit. Danach gibt es eine Pause von (x)Millisekunden, die je nach gesendeten Daten etwas varriert, bevor der nächte Burst kommt, der allerdings ohne Startbit und folgender Pause gesendet wird. ->Wenn also der Eingang zwischen 4ms und 8ms logisch 1 ist, handelt es sich mit Sicherheit um das Startbit ->Ist also das Startbit erkannt, kann die Datenabtastung und Befüllung des Arrays beginnen. Dazu zählt ein zweiter Zähler solange bis der Anfang des sich wiederholenden Datenblocks beginnt, genau da wird der Zähler wieder auf Null gesetzt und das Array wird erneut beschrieben ->Der Kommandocode ist bekannt und die entscheidenden Bits werden mit dem Arrayinhalt verglichen Aber hier zeigt sich das Problem: Es scheint keine Synchronität zu geben. Nach Beschalten einer LED als Bestätigung einer Taste blinkt diese bei jeder Taste auf, obwohl die Bedingungen für die entscheidenden Bits gesetzt wurden. Es sieht aus als würden die Daten so durchlaufen und irgenwann mal zufällig die Bedingung für ein bestimmtes Kommando stimmen. Wie würde ein zuverlässiger Ansatz für eine Synchronisierung aussehen und mit welcher Abtastrate sollte bei einer Flankenbreite von 0,6ms typischerweise abgetastet werden? Ich hatte 0,7ms also 0,35ms Puls/Pause gewählt. Ist es überhaupt korrekt mit einer if Abfrage auf die passenden Bedingungen zu prüfen? 2. Beim Timing kommt irgendwann das Problem, dass je mehr Anweisungen und Funktionen der Prozessor ausführen muss, das Timing nicht mehr stimmt und somit gar nichts mehr. Eigentlich sollte doch bei 12Mhz genug Zeit sein die Bedingungen abzufragen, das Array zu beschreiben und auszulesen sowie die Daten zu versenden. Vermutlich geht das Timing bei Funktionen die auf Eingaben warten kaputt z.b printf oder lcd_print, denn da funktioniert der Timer nicht mehr , verändert alle Zeiten irgendwie. ======================================================================== == Vielleicht hat ja jemand die Zeit sich das alles mal durchzulesen. Möglicherweise machts ja gleich "achsoooo" und ich mache nur grundlegende Fehler. Der Code ist noch ziemlich durcheinander, aber ich hänge ihn mit an damit Ihr Euch das mal ansehen könnt. Für ein paar Anregungen wäre ich dankbar... Tom
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.