Kannst du mal ein Bild von dem Code auf dem Oszi machen?
ich möchte meine Fernbedienung auch für andere Zwecke nutzen. Am Oszi ist deutlich zu erkennen, dass es sich um den SIRCS-Code handelt. Da der IR-Empfänger invertiert, sind deutlich kurze und lange Impulse zu erkennen. Da ich den Code im Detail nicht kenne, wollte ich mit einem kleinen Programm den Wert der erste 8 Bit(?) lesen. Seltsamerweise erhalte ich nur den Wert für kurze Impulse, was aber nicht sein kann. Ich bin ratlos.
Ich hoffe, ihr könnt mir helfen, obwohl ich Bascom8051 nutze. Ich finde kein geeignetes Forum dafür.
Dolivo
Kannst du mal ein Bild von dem Code auf dem Oszi machen?
da mein Oszi nicht das Neueste ist und ich nicht recht weiß, wie ich ein gut erkennbares Foto machen kann, habe ich die Impulsfolge gezeichnet. Ich habe den schnellen Vorlauf des Videorecorders genommen, da es den bei mir nicht gibt.
Als Wert erhalte ich stets 559, was ja ca. 600 µs entspricht.
Hallo,
die Folge, die du zeigst, ist sicherlich kein SIRCS Code. Du kannst deutlich sehen, dass nicht nur die High Phasen unterschiedlich lang sind, sondern auch die Low Phasen. Abgesehen von Anfang und Ende sind zudem die High und Low Anteile genau gleich, was ebenfalls auf eine Manchester Codierung wie bei RC5 oder RC6 deutet. Dafür werden aber zu wenig Bits übertragen.
Ich kenne mich jetzt nicht mit dem 8051 aus, aber du kannst doch sicherlich über den Eingang INT0 einen Interrupt auslösen lassen.
Dann würde ich dort das Signal einlesen und bei jeder Flanke über den Timer die Zeit messen. Diese kannst du dann in eine Bitfolge und damit eine Zahl umwandeln und sie für diese Taste merken.
Wegen des 2,5 ms-Impulses am Anfang hatte ich auf SIRCS getippt, bin aber kein Experte.
Mir ist nicht klar, wie ich über den INT0 zum Timer-Wert komme. Der Interrupt wird doch durch die Flanke gestartet. Wie muss dann die Interrupt-Routine aussehen?
Nun aber zum Wesentlichen: Ich lasse jetzt die Impulsfolge 3 mal einlesen und nehme die letzte Reihe. Sie sind jetzt reproduzierbar. Warum erst dann ist mir zwar nicht klar, aber es funktioniert. Werde schon noch dahinter steigen.
Danke für die Hilfe.
dolivo
Mit INT0 und Timer0 habe ich mal für einen Mega8 so ein Testprogramm gemacht:
Es sollte die High- und Low-Zeiten zum PC schicken.Code:$crystal = 8000000 $regfile = "m16def.dat" $hwstack = 64 ' default use 32 for the hardware stack $swstack = 64 'default use 10 for the SW stack $framesize = 128 'default use 40 for the frame space $baud = 38400 Dim Impuls_laenge As Word , Flanken_index As Byte , Flanken_anzahl As Byte , Bit_count As Byte Dim Timer0_startwert As Byte Config Timer0 = Timer , Prescale = 8 'hier den Timer eintragen (8-bit) On Ovf0 Tim0_isr Enable Timer0 Timer0_startwert = 156 'bei mir 8000000/8/(256-156) entspricht 10Khz Timer0 = Timer0_startwert 'Auflösung reicht und gefundene Werte entsprechen immer 100µs Config Int0 = Change 'externer interrupt, bei mir Int0 auf portd.2 On Int0 Get_rc_isr Enable Int0 Ddrd.2 = 0 'ausgang des RC-empfängers Portd.2 = 1 Config Serialout = Buffered , Size = 100 Print "" Enable Interrupts Do Loop End Tim0_isr: Timer0 = Timer0_startwert Incr Impuls_laenge 'bei jedem Überlauf um 1 erhöhen If Impuls_laenge > 1000 Then 'nach 0.1 ohne Signal Stop Timer0 Stop Timer0 Timer0 = Timer0_startwert Impuls_laenge = 0 Print "" End If Return Get_rc_isr: 'RC Impuls erkannt If Impuls_laenge > 0 Then Print Impuls_laenge ; " "; Impuls_laenge = 0 Else Start Timer0 End If Return
Probier es mal aus. Musst du aber auf deinen 8051 umändern.
Hallo, for-ro,
vielen Dank für das Testprogramm. Da ich anfange, mich auch mit den AVR zu beschäftigen, werde ich es bei Gelegenheit nutzen. Vielleicht nehme ich einen ATtiny für mein Vorhaben.
In Bascom8051 geht es nicht so schön umzuschreiben, weil da der Interrupt nur mit fallenden Flanken ausgelöst werden kann. Deswegen auch das umständliche "bitwait". Bis zum nächsten Mal.
dolivo
Dann ändere doch den Interrupt Auslöser auf falling ab. Für die auswertung ist das nicht wesentlich anders. Hauptsache, du weißt dann schon einmal, welcher Code übertragen wird.
Ich habe dir mal in deine Zeichnung die Bedeutung eingetragen, wobei die 0 und 1 auch genau andersherum sein kann. Aber das ist bei dir ja egal.
Lesezeichen