بسم الله الرحمن الرحيم
بالنسبة لموضوع البروتوكول فلا مشكلة ان شاء الله ان كان هناك مشكلة فية
يمكننا صنعه ان شاء الله
اما بالنسبة لموضوع التاكد من الارسال وانة تم الاستقبال بنجاح
فدة معناه ان يكون فى اتصال من المستقبل الى المرسل مرة اخرى
مثل ما يحدث فى برتوتكول SPI او Playstation pad protocole
وهى نبضة من المستقبل الى المرسل تعبر عن ان الاستلام للبيانات تم بنجاح
بس الفرق هنا ان الانظمة دى بتكون باسلاك ام الى هنا فى مشروعك
فهو لاسلكى
لذلك يجب تركيب مرسل ومستقبل فى كل جهة للتخاطب بين المرسل والمستقبل
وتحقيق التاكيد
واظن ان هذه اسهل الطرق واقصرها
ولكنى اظن ان دة مش المطلوب بالزبط فياريت توضيح اكثر عن المشروع او عن هذه الجزئية
بالتوفيق ان شاء الله
|
شكرا لردك
اولا الارسال والاستقبال بالاشعة تحت الحمراء وفق بروتوكول SIRC لكن المشكلة في اضافة crc بحيث نطور البروتوكول الى simplex stop & wait
وهي الكود المرسل
// IR Transmitter //
// PIC16F877A * 8MHz //
// November 2012 //
/////////////////////////
char address_string[5]; // This string is used to display the address on LCD
char command_string[5]; // This string is used to display the command on LCD
unsigned int count = 0 , temp = 0;
unsigned short i = 0, rec_bit = 0, command = 0, address = 0, Data = 0, Duty_Cycle = 192;
unsigned short x = 0;
unsigned short i = 0 ;
void Start_Mark(){
PWM1_Start();
delay_us(2400);
PWM1_Stop();
delay_us(600);
}
/******************/
void One_mark(){
PWM1_Start();
delay_us(1200);
PWM1_Stop();
delay_us(600);
}
/*****************/
void Zero_mark(){
PWM1_Start();
delay_us(600);
PWM1_Stop();
delay_us(600);
}
void main(){
TRISC = 0x00; // IR LED will be attached to pin RC2 (# 17)
PORTC = 0x00;
TRISB = 0xFF; // Buttons will be attached to PORTB
PWM1_Init(38000);
PWM1_Change_Duty(50); // Duty cycle between 26 and 128 is acceptable
// 37 is the best value
while(1){
switch(PORTB){
case 0B00000001:
Start_Mark();
for(i=0;i<7;i++) Zero_mark();
One_mark();
for(i=0;i<4;i++) Zero_mark();
delay_ms(25);
break;
/**********/
case 0B00000010:
Start_Mark();
One_mark();
for(i=0;i<6;i++) Zero_mark();
One_mark();
for(i=0;i<4;i++) Zero_mark();
delay_ms(25);
break;
/**********/
case 0B00000100:
Start_Mark();
Zero_mark();
One_mark();
for(i=0;i<5;i++) Zero_mark();
One_mark();
for(i=0;i<4;i++) Zero_mark();
delay_ms(25);
break;
/*********/
case 0B00001000:
Start_Mark();
One_mark();One_mark();
for(i=0;i<5;i++) Zero_mark();
One_mark();
for(i=0;i<4;i++) Zero_mark();
delay_ms(25);
break;
}
}
}