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