Hallo, ich habe eine Aufzeichnung eines IR-Codes von einen Panasonic Fernseher angehängt. Um RC5 handelt es sich dabei wohl nicht. Kann mir jemand eventuell dabei weiterhelfen den genauer zu verstehen? Mich interessiert dabei eigentlich nicht was genau da übertragen wird, sonder nur wie der Code technisch aufgebaut ist, damit ich zumindest einfacher einzelne Codes wiedererkennen kann. Bisher kann ich eigentlich nur sagen das jeder Code mit diesem großen Block beginnt. Kenn jemand dieses Format? viele Grüße Aike
Wenn des end signal net fehlen würde würde ich auf sparcinc tippen
Wenn ich richtig gezählt habe, könnte das der Japan- oder auch Kaseikyo-Code sein. Siehe: http://www.ktet.fh-muenster.de/Download/Diplomarbeiten/PdaLirc.pdf (Seite 17) Allerdings war bei meinem Gerät die Modulationsfrequenz nicht 56kHz, wie in der Arbeit angegeben, sondern 38kHz, muss man dann mit dem Oszilloskop schauen.
Hallo Sven, ja, ich denke du hast richtig gezählt. Das scheint er zu sein. Das hilft mir alles schon ein gutes Stück weiter. Jetzt muss ich den erstmal implementieren. vielen Dank und viele Grüße Aike
Ich habe eine C-Implementierung. Die arbeitet zwar mit delays, aber wenn du sie brauchst, schrei einfach.
für Senden oder Empfangen? Den Empfangsteil bekomme ich für meine Zwecke schon ganz gut hin, ich brauche quasi nur bis auf die Bit-Ebene zu kommen, weiteres Dekodieren brauch ich nicht. Was mir jetzt noch fehlt ist das senden, da habe ich noch so meine schwierigkeiten mit.
Hier ist mein Sendecode. Übergeben wird nur der 10-Bittige Datenteil, Hersteller- und Gerätekennungen sind fix. Bei mir ists ein Denon DRA-700AE.
1 | //Makros
|
2 | #define IR_LED_ON() DDRD |= (1<<PD7)
|
3 | #define IR_LED_OFF() DDRD &= ~(1<<PD7)
|
4 | |
5 | void IRInit(void){ |
6 | TCCR2A |= (1<<WGM21); //CTC |
7 | TCCR2A |= (1<<COM2A0); //Toggle OC2 on compare match |
8 | TCCR2B |= (1<<CS20); //Voller CPU-Takt |
9 | }
|
10 | |
11 | void JAPAN(uint16_t data){ |
12 | //Modulationsfrequenz: 38kHz
|
13 | OCR2A = 104; |
14 | |
15 | //Sequenzvariable
|
16 | uint8_t sequenz[6]; |
17 | sequenz[0] = 84; //Erstes Herstellerbyte |
18 | sequenz[1] = 50; //Zweites Herstellerbyte |
19 | sequenz[2] = 112; //Paritynibble der Herstellerbytes und erstes Genrenibble |
20 | sequenz[3] = 6 | (data << 4); //Zweites Genrenibble und ersten vier Datenbits |
21 | sequenz[4] = (data >> 4) | (0 << 6); //Letzten sechs Datenbits und beide ID-Bits |
22 | sequenz[5] = sequenz[2] ^ sequenz[3] ^ sequenz[4]; //Paritybyte |
23 | |
24 | //Start
|
25 | IR_LED_ON(); _delay_us(3454); IR_LED_OFF(); _delay_us(1654); |
26 | |
27 | //Datensequenz
|
28 | for(uint8_t i=0; i<6; i++){ |
29 | uint8_t temp_sequenz = sequenz[i]; |
30 | |
31 | for(uint8_t j=0; j<8; j++){ |
32 | IR_LED_ON(); |
33 | _delay_us(465); |
34 | |
35 | IR_LED_OFF(); |
36 | _delay_us(394); |
37 | |
38 | if(temp_sequenz & 1) |
39 | _delay_us(789); |
40 | |
41 | temp_sequenz >>= 1; |
42 | }
|
43 | }
|
44 | |
45 | //Stop
|
46 | IR_LED_ON(); _delay_us(474); IR_LED_OFF(); _delay_us(74755UL); |
47 | }
|
Ach, quatsch, habs schon selbst gesehen, das machst du über den OC2 Pin, alles klar.
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.