IR Code RC6 U.Radig Pollin NET IO

#2285702
Lesenswert?

Hallo Leute,

ich habe mir hier eine kleine IR Fernbedienung nachgebaut. SIRCS und 
Samsung Codes funktionieren schon. Jetzt haperts aber an dem RC6 und ich 
komme einfach nicht weiter.

Eingelesen habe ich die Codes meines Philips DVD Players mit Hilfe von 
IRMP.
Von dort und hier (http://www.sbprojects.com/knowledge/ir/rc6.php) habe 
ich mir die Timings zusammengesucht.

Start Sequenz wird direkt angegebenm und Info- und Datenbits werden aus 
einem Array ausgelesen.

CTC Timer funktioniert auf 36kHz.

Anbei mein Code, ich vermute ich habe was mit der Bitmanipulation nicht 
richtig geamcht. Kann da mal jemand drüber schauen?! Wäre sehr dankbar 
:)
1
void ir_philips_send(unsigned char ir_code_array[40])  //Senderoutine für Samsung IR-Codes
2
{
3
  
4
  cli();  //global Interupts deaktivieren
5
  
6
    int i = 0;  //Zähler zum Auslesen des Arrays
7
    int toggle =0;
8
    
9
    
10

11
      TCCR0 |= (1 << COM00);    //Start
12
      _delay_us(2666);          //Start
13
      TCCR0 &=~(1 << COM00);    //Start
14
      _delay_us(889);           //Start
15
      
16
      TCCR0 |= (1 << COM00);    //1 Erst 444us Puls
17
      _delay_us(444);      
18
      TCCR0 &=~(1 << COM00);    //dann 444us Pause
19
      _delay_us(444);        
20
      
21
      
22
      
23
      TCCR0 &= (0 << COM00);    //0 Erst 444us Pause 
24
      _delay_us(444);      
25
      TCCR0 |=(1 << COM00);    // dann 444us Puls
26
      _delay_us(444);      
27
      
28
      TCCR0 &= (0 << COM00);    //0
29
      _delay_us(444);      
30
      TCCR0 |=(1 << COM00);    
31
      _delay_us(444);  
32
      
33
      TCCR0 &= (0 << COM00);    //0
34
      _delay_us(444);      
35
      TCCR0 |=(1 << COM00);    
36
      _delay_us(444);  
37
      
38
      
39
      if (toggle == 1){
40
      TCCR0 |= (1 << COM00);    //1
41
      _delay_us(889);      
42
      TCCR0 &=~(1 << COM00);    
43
      _delay_us(889);  
44
      toggle = 0;
45
      }
46
      else{
47
      TCCR0 &= (0 << COM00);    //0
48
      _delay_us(889);      
49
      TCCR0 |=(1 << COM00);    
50
      _delay_us(889);  
51
      toggle=1;
52
      }
53
      
54
      for (i=0;i<16;i++) // die 16 Zeichen aus dem Array auslesen
55
      {
56

57
        if (ir_code_array[i] == '1')
58
        {
59
        TCCR0 |= (1 << COM00);    //1
60
        _delay_us(444);          
61
        TCCR0 &=~(1 << COM00);    
62
        _delay_us(444);  
63
        }
64
      
65
        else
66
        {
67
        TCCR0 &= (0 << COM00);    //0
68
        _delay_us(444);      
69
        TCCR0 |=(1 << COM00);    
70
        _delay_us(444);              
71
        }
72
        
73
      }
74
      i=0;
75
      TCCR0 &= (0 << COM00);    //0
76
        
77
      _delay_us(2666);
78
      
79
      
80
      
81
  
82
  sei();  //global Interrupts wieder aktivieren
83
}

Bin mal wieder über jeden Tipp dankbar!!
MfG
Johannes
#2285813
Lesenswert?

Danke für deine Antwort. Auf wleche Zeile beziehst du dich, oder auf 
alle wo das drin steht ;)?

Ich habe das so verstanden, dass wenn ich an die Stelle COM00 eine 0 
schiebe diese mit dem akteullen Wert (sagen wir mal da steht eine 1 
drin) UND Verknüpfe in jedem Fall eine 0 rauskommen wird.
Das was ich für den Fall " eine 0 senden" (also erst 444us Pause , dann 
444us Puls) ja will.
Das ist also nicht korrekt!?

Vorschlag:
1
TCCR0 |=~(1 << COM00);

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