السلام عليكم ورحمه الله ..
لقد تابعت شرح أحد الأخوة الأعضاء عن طريقه صنع ريموت كنترول مرسل+ مستقبل ...
والحمد لله فهمت كود الأرسال .. وكان واضح جداااا بالنسبه لى ...
ولكن للأسف واجهتنى بعض الصعوبات فى فهم طريقه سير برنامج المستقبل .. وهو الكود الخاص بقرأة نبضات الريموت ...
ودة كود أخونا الكريم .. " محمد فانكى " كود مرسل و مستقبل .. ل برتكول شركه سونى .. وهو خاص ب ريموت تليفزيون سونى ..
دة كود الريموت .. أو كود المرسل .. لريموت .. تلفزيون سونى .. ومكون من 12 بيت ...
كود:
char x;
void main() {
adcon1=0x07;TRISA=255;TRISB=0;portb=0;
PWM1_Init(38000);
PWM1_Set_Duty(255);
while (1) {
if (porta.f0==0){
PWM1_Start();delay_us(2400);PWM1_Stop();
delay_us(600);
for(x=0;x<7;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
PWM1_Start();delay_us(1200);PWM1_Stop();
delay_us(600);
for(x=0;x<4;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
delay_ms(250);
}
if (porta.f1==0){
PWM1_Start();delay_us(2400);PWM1_Stop();
delay_us(600);
PWM1_Start();delay_us(1200);PWM1_Stop(); //1
delay_us(600);
for(x=0;x<6;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
PWM1_Start();delay_us(1200);PWM1_Stop();
delay_us(600);
for(x=0;x<4;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
delay_ms(250);
}
if (porta.f2==0){
PWM1_Start();delay_us(2400);PWM1_Stop();
delay_us(600);
PWM1_Start();delay_us(600);PWM1_Stop(); //1
delay_us(600);
PWM1_Start();delay_us(1200);PWM1_Stop(); //2
delay_us(600);
for(x=0;x<5;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
PWM1_Start();delay_us(1200);PWM1_Stop();
delay_us(600);
for(x=0;x<4;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
delay_ms(250);
}
if (porta.f3==0){
PWM1_Start();delay_us(2400);PWM1_Stop();
delay_us(600);
for(x=0;x<2;x++){
PWM1_Start();delay_us(1200);PWM1_Stop();delay_us(600); }
for(x=0;x<5;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
PWM1_Start();delay_us(1200);PWM1_Stop();
delay_us(600);
for(x=0;x<4;x++){
PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
delay_ms(250);
}
}
}
والحمد لله فهمتة جيدااا وطريقة التعامل معه ..
ودة كود للمستقبل وهو الأهم بالنسبة لى .. واريد مساعدة فى تعديل عليه ..
كود:
sbit ir_in at RA0_bit; // Infrared receiver input
sbit ir_in_direction at TRISA0_bit; // Infrared receiver input
unsigned int retint; // general purpose integer
unsigned char ir_byte,COUNT,bouton;
unsigned char ir_result[3];
void interrupt()
{
count++;
intcon=0b00100000;
TMR0=0;
}
unsigned int get_mark(){
TMR0= 0; count=0;
for(;!ir_in;){}
retint=2*(TMR0+(count*256));
return retint;
}
unsigned int get_space(){
TMR0= 0; count=0;
for(;ir_in;){}
retint=2*(TMR0+(count*256));
return retint;
}
unsigned char get_sony_byte(char nbits){
char n;
unsigned char ir_byte;
unsigned int temp_ir;
ir_byte = 0; // initialise
for(n=0 ; n<nbits ; n++){
temp_ir = get_space(); // expect ~510uS
temp_ir = get_mark();
ir_byte >>= 1; // 650uS = 0, 1.2uS = 1
if ((temp_ir > 1000)&&(temp_ir < 1300)) {
ir_byte += 0x80;
}
}
ir_byte >>= 8-nbits;
return ir_byte;
}
void sony_read(){
unsigned int temp_ir;
ir_result[0] = 0; // return 0, 0 if glitch
ir_result[1] = 0; // return 0, 0 if glitch
while(ir_in); // wait for IR to go low
temp_ir = get_mark();
if((temp_ir>2000)&&(temp_ir<3000)) { // expect 2.4mS mark
ir_result[0] = get_sony_byte(7); // 7 bit command
ir_result[1] = get_sony_byte(5); // 5 bit address
Delay_ms(10); // wait for repeat messages to clear
}
}
void main() {
TRISA=0x0F;
TRISB=0;
PORTB=0;
PORTA=0;
adcon1=7;
option_reg=0b10000000;
intcon=0b10100000;
TMR0 = 0;
while(1){
sony_read();
if(ir_result[1]==1){ // Sony address 01 is TV
bouton = ir_result[0];
switch (bouton){
case 0: Portb.F0 = ~Portb.F0;Delay_ms(150);break; // button TV '0'
case 1: Portb.F1 = ~Portb.F1;Delay_ms(150);break; // button TV '1'
case 2: Portb.F2 = ~Portb.F2;Delay_ms(150);break; // button TV '2'
case 3: Portb.F3 = ~Portb.F3;Delay_ms(150);break; // button TV '3'
default:break;
}
}
}
while(1); // loop forever
}
كما وضحة أن الكود هو لستقبال تبضات ريموت تليفزيون سونى ..
ولكن انا اريد استعمال ريموت أخر .. يستخدم برتكول NEC .... ودى صوره للريموت المراد استخدامه ...
كود المستقبل يعمل على برتكول سونى .. وانا اريد مساعدة فى تعديل الكود لكى يتناسب مع برتكول NEC لأن سألت كثير عن برتكول ريموت ال MP3 وعرفة انه برتكول NEC ..
انا اعتقد انا الكود هيفضل كما هو ويكون التعديل فى عدد مرات حلقة FOR ... لكى يتناسب مع ال 16 بيت الخاصين .. ب برتكول NEC ...
رابط الموضوع الأصلى ...
http://www.qariya.info/vb/showthread...=112123&page=3
ياريت اجد المساعدة فى تعديل .. كود المستقبل لكى يتناسب .. مع برتكول NEC
وشكرااا مقدماااا للجميع .. عام سعيد عليكم ..