Wie funktioniert dieser IR-Code?

OP #1137263
Lesenswert?

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
#1139003
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren