قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

lena jebril
:: مهندس ::
تاريخ التسجيل: Feb 2013
المشاركات: 9
نشاط [ lena jebril ]
قوة السمعة:0
قديم 12-02-2013, 09:28 PM المشاركة 1   
ha ممكن مساعدة برمجية Twitter FaceBook Google+



السلام عليكم
انا عندي مشروع تخرج عن عمل بروتوكول ارسال واستقبال بالاشعة تحت الحمراء وأواجه مشكلة في اضافة فحص الخطأ التكراري للكود crc لاتحقق من وجود خطأ في الاستقبال واعادة الارسال مرة اخرى

أتمنى أن اجد المساعدة هنا
وشكرا

اعلانات

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 13-02-2013, 10:51 AM المشاركة 2   
افتراضي


بسم الله الرحمن الرحيم

بالنسبة لموضوع البروتوكول فلا مشكلة ان شاء الله ان كان هناك مشكلة فية
يمكننا صنعه ان شاء الله

اما بالنسبة لموضوع التاكد من الارسال وانة تم الاستقبال بنجاح

فدة معناه ان يكون فى اتصال من المستقبل الى المرسل مرة اخرى

مثل ما يحدث فى برتوتكول SPI او Playstation pad protocole

وهى نبضة من المستقبل الى المرسل تعبر عن ان الاستلام للبيانات تم بنجاح
بس الفرق هنا ان الانظمة دى بتكون باسلاك ام الى هنا فى مشروعك
فهو لاسلكى

لذلك يجب تركيب مرسل ومستقبل فى كل جهة للتخاطب بين المرسل والمستقبل

وتحقيق التاكيد

واظن ان هذه اسهل الطرق واقصرها

ولكنى اظن ان دة مش المطلوب بالزبط فياريت توضيح اكثر عن المشروع او عن هذه الجزئية

بالتوفيق ان شاء الله

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

lena jebril
:: مهندس ::
تاريخ التسجيل: Feb 2013
المشاركات: 9
نشاط [ lena jebril ]
قوة السمعة:0
قديم 13-02-2013, 11:33 AM المشاركة 3   
افتراضي


بسم الله الرحمن الرحيم

بالنسبة لموضوع البروتوكول فلا مشكلة ان شاء الله ان كان هناك مشكلة فية
يمكننا صنعه ان شاء الله

اما بالنسبة لموضوع التاكد من الارسال وانة تم الاستقبال بنجاح

فدة معناه ان يكون فى اتصال من المستقبل الى المرسل مرة اخرى

مثل ما يحدث فى برتوتكول 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;

}
}

}


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 13-02-2013, 01:48 PM المشاركة 4   
افتراضي


بسم الله الرحمن الرحيم

طيب احنا كدة مش محتاجين نعمل بروتوكول احنا هنعدل بس

بالنسبة لموضوع اكتشاف الاخطاء فكلامى الاول مظبوط

وهى تسمى ب acknowledgement

الاختصار ACK وهى تعنى الاستلام

ويتم ارسالة من المستقبل الى المرسل بعد كل عملية استلام

وكما قلت بما ان النظام لا سلكى يبقى هيكون فى كل جهة مرسل ومستقبل

وتتم البرمجة كالاتى

بعد ارسال البيانات بعد الضغط على الزر يوقم المرسل بالانتظار استلام بيانات ACK من المستقبل

ثم يقوم المستقبل بفك البيانات وعند التعرف عليها يكون من ضمن الاوامر التى

سوف ينفزها تبعا للبيانات انه يرسل بايت او نبضة او اى شكل من التعريف
انه تم الاستلام بنجاح والتعرف على الاوامر

وفى حالة عدم التعرف على الاوامر او فشلها باى طريقة من الطرق يتم الارسال بذلك ايضا ببيانات مختلفة او نبضة مختلفة للمرسل فيعاود الارسال مرة اخرى
وهكذا

وفى حالة ان المرسل لم يستقبل اى شىء بعد ارسالة البيانات لمدة تحددها انت
هنا يتم عمل انذار او ما شابة يحذر من ان البيانات لا تستقبل
او يتم اعادة الارسال مرة اخرى اى شىء كما تريد

بالتوفيق ان شاء الله

وان احتجت الى اى شىء انا تحت امرك ان شاء الله


lena jebril
:: مهندس ::
تاريخ التسجيل: Feb 2013
المشاركات: 9
نشاط [ lena jebril ]
قوة السمعة:0
قديم 13-02-2013, 07:06 PM المشاركة 5   
افتراضي


بسم الله الرحمن الرحيم

طيب احنا كدة مش محتاجين نعمل بروتوكول احنا هنعدل بس

بالنسبة لموضوع اكتشاف الاخطاء فكلامى الاول مظبوط

وهى تسمى ب acknowledgement

الاختصار ACK وهى تعنى الاستلام

ويتم ارسالة من المستقبل الى المرسل بعد كل عملية استلام

وكما قلت بما ان النظام لا سلكى يبقى هيكون فى كل جهة مرسل ومستقبل

وتتم البرمجة كالاتى



بعد ارسال البيانات بعد الضغط على الزر يوقم المرسل بالانتظار استلام بيانات ACK من المستقبل

ثم يقوم المستقبل بفك البيانات وعند التعرف عليها يكون من ضمن الاوامر التى

سوف ينفزها تبعا للبيانات انه يرسل بايت او نبضة او اى شكل من التعريف
انه تم الاستلام بنجاح والتعرف على الاوامر

وفى حالة عدم التعرف على الاوامر او فشلها باى طريقة من الطرق يتم الارسال بذلك ايضا ببيانات مختلفة او نبضة مختلفة للمرسل فيعاود الارسال مرة اخرى
وهكذا

وفى حالة ان المرسل لم يستقبل اى شىء بعد ارسالة البيانات لمدة تحددها انت
هنا يتم عمل انذار او ما شابة يحذر من ان البيانات لا تستقبل
او يتم اعادة الارسال مرة اخرى اى شىء كما تريد

بالتوفيق ان شاء الله

وان احتجت الى اى شىء انا تحت امرك ان شاء الله
سنستخدم arq وتعني ان يعيد المرسل ارسال البيانات اذا لم يصله رد من المستقبل وانا على علم بذلك لكن احتاج له ككود برمجي مكتوب لو تكرمت
ممكن ؟


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 14-02-2013, 09:15 AM المشاركة 6   
افتراضي


بسم الله الرحمن الرحيم

اولا المستقبل هيكون على الطرف C7 اخر طرف فى البورت C

دة نموذج لزر واحد


كود:
 case 1:
            return1:
              Start_Mark();

              for(i=0;i<7;i++) Zero_mark();

              One_mark();
              for(i=0;i<4;i++) Zero_mark();
              delay_ms(25);
            
              if(PORTC.f7==1){goto  return1;}
              else {delay_ms(275);}
           break;
بكل بساطة عند الضغط على الزر الاول سيتم ارسال البيانات
ويتم الانتظار لمدة 25 مللى ثانية ((هذا الرقم هام))

ثم يختبر البك طرف المستقبل اذا كان يساوى 1
اى انة لم يتم ارسال نبضة علية ولا اى شىء
سيقوم بالرجوع الى النقطة return1

ويقوم بعملية الارسال مرة اخرى وهكذا الى ان يقوم المستقبل بارسال نبضة الى المرسل
وعندها سيكون الطرف الاخير من البورت C يساوى 0
فينتظر البك 275 مللى ثانية ويخرج ليقوم باعمال اخرى

وهكذا مع باقى الازرار

الرقم الهام 25 مللى ثانية هو الرقم المتاح للمستقبل ان يرسل فية نبضة
للمرسل ليقول لة انه تم الاستقبال بنجاح

وهذا يعنى ان المستقبل حين يستقبل البيانات ينتظر 20 مللى ثانية
ويقوم بارسال نبضة تساوى 10 مللى ثانية

وهذه الارقام خيارية ولكن يستحسن ان تكون النسب كما هى

وهكذا يتم العمل بنجاح

وهذا الكود كاملا

بالتوفيق ان شاء الله

كود:
//   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 = 0x128;    // 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 1:
            return1:
              Start_Mark();

              for(i=0;i<7;i++) Zero_mark();

              One_mark();
              for(i=0;i<4;i++) Zero_mark();
              delay_ms(25);
              
              if(PORTC.f7==1){goto  return1;}
              else {delay_ms(275);}
           break;
           /**********/
           case 2:
            return2:
              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);
              
              if(PORTC.f7==1){goto  return2;}
              else {delay_ms(275);}
           break;
          /**********/
           case 4:
               return3:
              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);
              
              if(PORTC.f7==1){goto  return3;}
              else {delay_ms(275);}
           break;
           /*********/
           case 8:
            return4:
              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);
              
              if(PORTC.f7==1){goto  return4;}
              else {delay_ms(275);}
           break;
    default: break;
           }
    }

}


lena jebril
:: مهندس ::
تاريخ التسجيل: Feb 2013
المشاركات: 9
نشاط [ lena jebril ]
قوة السمعة:0
قديم 14-02-2013, 08:15 PM المشاركة 7   
افتراضي


بسم الله الرحمن الرحيم
شكرا التعديل واضح
هي صورة المخطط كامل ممكن اضيفلك كود المستقبل وتعملي التعديل عليه ؟

http://upload.qariya.info/images/qariya_com_ad69d43
bcc.png


lena jebril
:: مهندس ::
تاريخ التسجيل: Feb 2013
المشاركات: 9
نشاط [ lena jebril ]
قوة السمعة:0
قديم 14-02-2013, 08:17 PM المشاركة 8   
افتراضي


الرابط
http://www.electvillage.com/upload//...ile=ad69d43bcc

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 08:36 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025