Wie funktioniert dieser IR-Code?

OP #1137263
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
OP
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
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.