Witam
Chciałem zrobić nadajnik RC5 który włączał by moją wieże. Niestety pilot nie nadaje w standardzie RC5. Proszę o pomoc w modyfikacji kodu aby działał w standardzie mojego pilota.
Kod pilota RC5 pobrany ze strony abxyz.bplaced.net
Kody pilota.
Chciałem zrobić nadajnik RC5 który włączał by moją wieże. Niestety pilot nie nadaje w standardzie RC5. Proszę o pomoc w modyfikacji kodu aby działał w standardzie mojego pilota.
Kod pilota RC5 pobrany ze strony abxyz.bplaced.net
[syntax=c]
/***************************************************************
Plik "main.c"
KURS AVR-GCC (abxyz.bplaced.net)
nadajnik RC5
(schemat i opis działania w artykule)
testowanie na atmega8 (8MHz)
*****************************************************************/
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
typedef unsigned char u8;
typedef unsigned int uint;
//---------------------------------------------------------------
// Funkcja wysyła komendę RC5
//---------------------------------------------------------------
void send_cmd(uint cmd)
{
uint m;
// dołącza 2 bity startowe
cmd |= (3<<12);
for(m=(1<<13); m>0; m>>=1)
{
if(cmd & m)// jeśli bit o wartości 1
{
// Dioda nadawcza nie świeci
TCCR2= (1<<FOC2)|(1<<COM21)|(1<<CS20);
_delay_ms(0.89); // czas trwania połowy bitu
// świeci
TCCR2= (1<<FOC2)|(1<<WGM21)|(1<<COM20)|(1<<CS20);
_delay_ms(0.89);
}
else // jeśli bit o wartości 0
{
// Dioda nadawcza świeci
TCCR2= (1<<FOC2)|(1<<WGM21)|(1<<COM20)|(1<<CS20);
_delay_ms(0.89);
// Nie świeci
TCCR2= (1<<FOC2)|(1<<COM21)|(1<<CS20);
_delay_ms(0.89);
}
}
TCCR2= (1<<FOC2)|(1<<COM21)|(1<<CS20); // wyłączamy LED i timer2
TCCR2= 0;
}
//---------------------------------------------------------------
// GLÓWNA FUNKCJA PROGRAMU
//---------------------------------------------------------------
int main(void)
{
uint i,cmd;
u8 toggle = 0 ;
// PB3(OC2) wyjście - dioda nadawcza podczerwieni
DDRB = (1<<PB3);
// Timer2, CTC mode, no prescaling ,Toggle OC2 on compare match
// TCCR2= (1<<WGM21)|(1<<COM20)|(1<<CS20);
// OC2 - 36 KHz
OCR2 = 110;
while(1)
// Wysyła po kolei wszystkie komendy
for(i=0; i<64; i++)
{
// do kolejnej komendy dostawia toggle bit
cmd = i|((toggle & 0x01)<<11);
toggle++;
// Wysyła komendę
send_cmd(cmd);
_delay_ms(89); // 50 bitów "ciszy"
// Komendy wysyłamy sobie co sekundę
_delay_ms(1000);
}
return 0;
}
[/syntax]
Kody pilota.
#
# this config file was automatically generated
# using lirc-0.6.5(any) on Wed Aug 28 09:30:43 2002
#
# contributed by Christian von Petery 17knochen(małpa)freenet.de
#
# brand: Kenwood
# model no. of remote control: RC-R0602
# devices being controlled by this remote: tuner, cd, tape, surround
#
begin remote
name Kenwood
bits 24
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9070 4454
one 608 1642
zero 608 516
ptrail 607
repeat 9070 2204
pre_data_bits 8
pre_data 0x1D
gap 108049
toggle_bit 0
begin codes
power 0x0000000000E2B946
pty 0x00000000008039C6
af 0x000000000080B946
display 0x0000000000E21AE5
band 0x0000000000E2F10E
direct 0x0000000000E27986
p_call_down 0x0000000000E231CE
p_call_up 0x0000000000E29966
1 0x0000000000E2817E
2 0x0000000000E241BE
3 0x0000000000E2C13E
4 0x0000000000E221DE
5 0x0000000000E2A15E
6 0x0000000000E2619E
7 0x0000000000E2E11E
8 0x0000000000E211EE
9 0x0000000000E2916E
0 0x0000000000E201FE
+10 0x0000000000E2B04F
disc 0x0000000000E210EF
disc_prev 0x0000000000E2738C
disc_next 0x0000000000E2F30C
disc_stop 0x0000000000E2936C
disc_play 0x0000000000E2D32C
tape_a_left 0x0000000000E20BF4
tape_a_right 0x0000000000E28B74
tape_b_left 0x0000000000E21BE4
tape_b_right 0x0000000000E29B64
tape_a_rew 0x0000000000E24BB4
tape_a_ffw 0x0000000000E2CB34
tape_b_rew 0x0000000000E25BA4
tape_b_ffw 0x0000000000E2DB24
tape2 0x0000000000E2A956
tape_a_stop 0x0000000000E2AB54
tape_b_record 0x0000000000E27B84
tape_b_stop 0x0000000000E2BB44
input 0x00000000008033CC
test_tone 0x0000000000E26A95
surround 0x0000000000E2EB14
mute 0x0000000000E239C6
multi_lvl_up 0x00000000008049B6
rear 0x0000000000E2E31C
center 0x0000000000E2D02F
vol_up 0x0000000000E2D926
multi_lvl_down 0x0000000000808976
delay 0x0000000000E2B24D
vol_down 0x0000000000E259A6
end codes
end remote