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

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-07-2014, 05:08 PM المشاركة 81   
x4 المكتبه الثامنه تخص ريموت كنترول IR NEC protocol



السلام عليكم
في هذا المشروع يتحدث عن ريموت كنترول وكل مافي الامر هو تضع شفره معينه بطول 1 بايت وتكتب كود في مستقبله يعني عندما تستلم هذه شفره أعمل كذا
طبعا انت تعدل فقط في كود ولاتهتم لبقيه الكواد لان برنامج سوف يتعرف على شفره وبتالي سوف يختبرها هل هي صحيحه او لا طبعا ريموت كنترول يتبع البروتوكول
IR NEC protocol
وهذا البرتوكول يرسل بياناته بهذه طريقه
ارسل العنوان ثم معكوس العنوان ثم البيانات ثم معكوس البيانات وبتالي أعتقد لايمكن ان نقول ان هناك تداخل او أخطاء في كشف الشفره
على عموم انا لم أجربه عملي وجدير بالذكر البروتيس بطيئ جدا في تنفيذ الكود لانه يظهر نسبه التحميل CPU 100% ولكن حاول تضغط على ازرار بخفه ولا تضغط على زر مطولا او خلي فتره بين ضغط زر وأخرى لكي يعمل البروتيس بشكل الصحيح
https://www.mediafire.com/?v36jvrc8w61zvpe
تحياتي

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-07-2014, 05:18 PM المشاركة 82   
x4 شرح مكتبه الثامنه ريموت كنترول


السلام عليكم
في هذا المشروع يتحدث عن ريموت كنترول وكل مافي الامر هو تضع شفره معينه بطول 1 بايت وتكتب كود في مستقبله يعني عندما تستلم هذه شفره أعمل كذا
طبعا انت تعدل فقط في كود ولاتهتم لبقيه الكواد لان برنامج سوف يتعرف على شفره وبتالي سوف يختبرها هل هي صحيحه او لا طبعا ريموت كنترول يتبع البروتوكول
IR NEC protocol
وهذا البرتوكول يرسل بياناته بهذه طريقه
ارسل العنوان ثم معكوس العنوان ثم البيانات ثم معكوس البيانات وبتالي أعتقد لايمكن ان نقول ان هناك تداخل او أخطاء في كشف الشفره
على عموم انا لم أجربه عملي وجدير بالذكر البروتيس بطيئ جدا في تنفيذ الكود لانه يظهر نسبه التحميل CPU 100% ولكن حاول تضغط على ازرار بخفه ولا تضغط على زر مطولا او خلي فتره بين ضغط زر وأخرى لكي يعمل البروتيس بشكل الصحيح
https://www.mediafire.com/?v36jvrc8w61zvpe
تحياتي
السلام عليكم
ورمضان كريم على الجميع وكل عام وانتم بالف خير
متمنين في هذا الشهر العظيم ان تصحو الامه الاسلاميه من غفوتها قبل ان يحقق الشيطان هدفه بتمزيق الاسلام على يد مسلمين أنفسهم
سائلين الله جل جلاله بحق أسماءه الحسنى وبجاه النبي محمد (( صلى الله عليه وعلى ال بيته الاطهار)) وبحق أهل بيت نبيه الكرام ان يقي المسلمين شر الفتنه
ان يقي المسلمين شر الفتنه ان يقي المسلمين شر الفتنه ان يقي المسلمين شر الفتنه
اللهم أتنا في هذه الدنيا حسنه وفي الاخره حسنه وقينا عذاب النار
اللهم صلي على محمد واله بيته الاطهار اللهم صلي على محمد واله بيته الاطهار
اللهم صلي على محمد واله بيته الاطهار
=================================================
بسم الله الرحمن الرحيم

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

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-07-2014, 05:34 PM المشاركة 83   
افتراضي شرح مكتبه الثامنه ريموت كنترول ( المرسل)


هذا هو الكود المرسل
كود:
sbit led                at RA0_bit;
sbit led_dir            at trisA0_bit;

sbit sw1 at RB0_bit;
sbit sw2 at RB1_bit;
sbit sw3 at RB2_bit;
sbit sw4 at RB4_bit;
sbit sw5 at RB5_bit;
char x=0;
const char address=10;
void IR_Send(char IR_Address, char IR_COmmand);
// flashing***********************//
void flashing()
{
 for(x=0;x<10;x++)
     {
      led=1;
      delay_ms(50);
      led=0;
      delay_ms(50);
     }
}
// main *******************************//
void main()
{
 cmcon=7;

 led_dir=0;// output
 trisb=0xF7;

 PWM1_Init(38000);// frequncy 38KHZ
 PWM1_Set_Duty(127); // set duty 50%
 flashing();
 while(1)
  {
    if(sw1==1){IR_Send(address,0xAA); }
    if(sw2==1){IR_Send(address,0xBB); }
    if(sw3==1){IR_Send(address,0xCC); }
    if(sw4==1){IR_Send(address,0xDD); }
    if(sw5==1){IR_Send(address,0xFF); }
  }
}

/*******************************************************************************
* Function IR_Send(char IR_Address, char IR_COmmand)
* ------------------------------------------------------------------------------
* Overview: Functions sends address and command via IR NEC protocol
* Input:  Address - address of the device
*         Command - command for device
* Output: Nothing
*******************************************************************************/
void IR_Send(char IR_Address, char IR_COmmand)
{
     char ir_byte[4];
     char bitnum;
     char bytenum;

     ir_byte[3] = ~IR_COmmand;
     ir_byte[2] =  IR_COmmand;
     ir_byte[1] = ~IR_Address;
     ir_byte[0] =  IR_Address;

    // Delay_ms(100);                                  // precaution to be certain of some dead time before message start
     PWM1_Start();                                   // mark
     led=1;
     Delay_ms(9);                                 // 9mS mark start bit
     PWM1_Stop();                                    // space
     led=0;
     Delay_us(4500);                                 // 4.5mS space ends start bit
     for(bytenum = 0; bytenum < 4; bytenum++)        // 4 bytes to send
           {
             for(bitnum = 0; bitnum < 8; bitnum++)    // 8 bits LSB first
                  {
                   PWM1_Start();                           // mark
                   led=1;
                   Delay_us(560);                          // 560uS mark for '0' or '1'
                   PWM1_Stop();                            // space
                   led=0;
                   if(ir_byte[bytenum] & (1 << bitnum))     // test bit <bitnum>
                       {
                         Delay_us(1680);                     // 1.68mS space for a '1'
                       }
                  else{
                       Delay_us(560);                      // 560uS space for a '0'
                     }
                  }
           }
     PWM1_Start();                                   // mark
     led=1;
     Delay_us(560);                                  // stop bit of '1'
     PWM1_Stop();                                    // space
     led=0;
     Delay_us(1680);                                 // stop bit of 1
     Delay_ms(200);                                  // precaution to be certain of some dead time after message ends

}
============================================

طبعا هذا الكود الارسال للبروتوكول NEC
كود:
/*******************************************************************************
* Function IR_Send(char IR_Address, char IR_COmmand)
* ------------------------------------------------------------------------------
* Overview: Functions sends address and command via IR NEC protocol
* Input:  Address - address of the device
*         Command - command for device
* Output: Nothing
*******************************************************************************/
void IR_Send(char IR_Address, char IR_COmmand)
{
     char ir_byte[4];
     char bitnum;
     char bytenum;

     ir_byte[3] = ~IR_COmmand;
     ir_byte[2] =  IR_COmmand;
     ir_byte[1] = ~IR_Address;
     ir_byte[0] =  IR_Address;

    // Delay_ms(100);                                  // precaution to be certain of some dead time before message start
     PWM1_Start();                                   // mark
     led=1;
     Delay_ms(9);                                 // 9mS mark start bit
     PWM1_Stop();                                    // space
     led=0;
     Delay_us(4500);                                 // 4.5mS space ends start bit
     for(bytenum = 0; bytenum < 4; bytenum++)        // 4 bytes to send
           {
             for(bitnum = 0; bitnum < 8; bitnum++)    // 8 bits LSB first
                  {
                   PWM1_Start();                           // mark
                   led=1;
                   Delay_us(560);                          // 560uS mark for '0' or '1'
                   PWM1_Stop();                            // space
                   led=0;
                   if(ir_byte[bytenum] & (1 << bitnum))     // test bit <bitnum>
                       {
                         Delay_us(1680);                     // 1.68mS space for a '1'
                       }
                  else{
                       Delay_us(560);                      // 560uS space for a '0'
                     }
                  }
           }
     PWM1_Start();                                   // mark
     led=1;
     Delay_us(560);                                  // stop bit of '1'
     PWM1_Stop();                                    // space
     led=0;
     Delay_us(1680);                                 // stop bit of 1
     Delay_ms(200);                                  // precaution to be certain of some dead time after message ends

}
============================================

طبعا مايهمنا في الكود هو هذا لانه هو الي راح نضع فيه شفرات طبعا شفرات نحن نضعها وسيقوم الكود البروتوكول NEC بارسال شفره
كود:
while(1)
  {
    if(sw1==1){IR_Send(address,0xAA); }
    if(sw2==1){IR_Send(address,0xBB); }
    if(sw3==1){IR_Send(address,0xCC); }
    if(sw4==1){IR_Send(address,0xDD); }
    if(sw5==1){IR_Send(address,0xFF); }
  }
كما تلاحظون الداله IR_Send تحتاج الى address وهذا address خاص لكل جهاز يعني ممكن ان نضع مثلا 4 اجهزه بنفس الشفرات ولكن لكل جهاز له address وبتالي لايحدث تداخل للعلم نستطيع تكوين 255 شفره ابتداء من 1 الى 255
وبتالي لو كان لدينا 4 اجهزه يمكن عمل لكل جهاز 255 شفره ولكن لكل واحد له عنوان وبتأكيد نستطيع ان تحكم ب 255 جهاز لماذا لان البايت اقصى قيمه له هو 255

اما مثلا 0xAA فهذه تعني شفره يعني الان عندما أضغط على SW1 راح ارسل شفره 0xAA وبتالي لما يستقبلها رسيفر راح يشغلي ليد رقم 1
طبعا الشفرات وماذا تفعل بالشفرات يعني مستقبله ماهي وظيفتها عندما تستقبل الشفره فهذا يعود لكم
============================================
طبعا عندي ملاحظه
انا خليت DUTY CYCLE 50% طبعا اذا انت تريد ارسال مسافات أبعد يمكن تقليل DUTY CYCLE وتشغيل ليد ارسال بــ طاقه عاليه يعني بالضبط تشبه عمليه التشغيل البور سبلاي يعني مثلا اربط ليد ارسال مع تراتزتسور وربط معه مقاومه صغيره مثلا 10 اوم ولكن راح تكون فتره تشغيل DUTY CYCLE قليله
عموما لي موضوع بهذا الشأن يمكن البحث عنه لغرض المزيد من معلومات


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-07-2014, 05:50 PM المشاركة 84   
x4 شرح مكتبه الثامنه ريموت كنترول ( المستقبله)


هذا كود دائره الاستقبال
كود:
#include "reciver_lib.c"

sbit ir_in        at RA0_bit;
sbit ir_in_dir    at TRISA0_bit;
sbit led1        at RB0_bit;
sbit led2        at RB1_bit;
sbit led3        at RB2_bit;
sbit led4        at RB3_bit;



unsigned char IR_Received_byte[4];
const char address_advice=10;

//Timer0

void InitTimer0()
{
 option_reg=0b10000000;
 intcon=0b10100000;
 tmr0=0;
}
//*********************************************//
void Interrupt()
{
  if (TMR0IF_bit){
     TMR0IF_bit         = 0;
    TMR0                 = 0;
    count++;
  }
}


//**** main********************************************
void main()
{
 cmcon=7;// OFF comparator

  ir_in_dir =1;
  trisb=0;
  portb=0;

 InitTimer0();
  while(1)
        {
         remote_read(address_advice);
         if (IR_Received_Flag == 1)
                           {
                              GIE_bit=0;
                               if ((IR_Received_byte[0] == ~IR_Received_byte[1]) && (IR_Received_byte[2] == ~IR_Received_byte[3]))
                                                                 {
                                                                  if (IR_Received_byte[0] == address_advice) // correct address
                                                                                            {
                                                                                             switch (IR_Received_byte[2])// data store in IR_Received_byte[2]
                                                                                                    {
                                                                                                      case 0xAA :{ led1=~led1;delay_ms(150); break;}
                                                                                                      case 0xBB :{ led2=~led2;delay_ms(150) ;break;}
                                                                                                      case 0xCC :{ led3=~led3;delay_ms(150); break;}
                                                                                                      case 0xDD :{ led4=~led4;delay_ms(150);break;}
                                                                                                      case 0xFF :{ portb=~portb;delay_ms(150);break;}
                                                                                                      default : break;
                                                                                                     }
                                                                                            }
                                                                    IR_Received_Flag = 0;
                                                                  }

                             GIE_bit=1;

                          }
                          

                               
         }
}
وطبعا توجد مكتبه اسمها reciver_lib.c مهمتها تحليل الشفره وخزن النتيجه في مصفوفه [IR_Received_byte[4

طبعا الشيئ الذي نريد تغيره هو
كود:
const char address_advice=10;
طبعا مرسل خليت العنوان =10 وبتأكيد لازم مستقبله ايضا 10 واذا تريد تغير العنوان غير رقم 10 بشرط نفس المرسل

وهذا ايضا
كود:
  switch (IR_Received_byte[2])// data store in IR_Received_byte[2]
                                                                                                    {
                                                                                                      case 0xAA :{ led1=~led1;delay_ms(150); break;}
                                                                                                      case 0xBB :{ led2=~led2;delay_ms(150) ;break;}
                                                                                                      case 0xCC :{ led3=~led3;delay_ms(150); break;}
                                                                                                      case 0xDD :{ led4=~led4;delay_ms(150);break;}
                                                                                                      case 0xFF :{ portb=~portb;delay_ms(150);break;}
                                                                                                      default : break;
                                                                                                     }
لوتلاحظون الشفره هي نفسها الي ارسلناها من مرسل وبتالي مثلا في مرسل ارسلت شفره 20 وانت تريد من هذه شفره تشفيل محرك فقط عليك اضافه الكود الى switch (IR_Received_byte[2]) وتخبره اذا استلمت 20 نفذ كذا

اما بقيه الكود لاتغيره ماعد مداخل السويجات او مكان ربط مستقبله بالطبع هذه امور تعتمد عليك


طبعا مكتبه تستخدم هكذا كما تلاحظون في الكود
كود:
remote_read(address_advice);
هذه داله مهمتها تحليل شفره
ملاحظه يمكن حذف متغير داخل remote_read لانك لاتحتاجه بشرط تدخل الى مكتبه وتحذف متغير داخل remote_read لانه لايؤدي اي غرض لاني كانت نيتي وضع هذا الكود
كود:
if ((IR_Received_byte[0] == ~IR_Received_byte[1]) && (IR_Received_byte[2] == ~IR_Received_byte[3]))
                                                                 {
                                                                  if (IR_Received_byte[0] == address_advice) // correct address
داخل مكتبه بحيث خلي مكتبه ترجعلي فقط شفره وبتالي تختصر الكود ولكن لاسف البروتيس أبى ان يعمل
لهذا أذا احدكم نفذ الكود سوف أختصر الكود مستقبله لغرض ان يتم تجريبه عملي لان على البروتيس لايعمل (( اي تظهر رساله خطأ بأن CPU اصبح 100%))

تحياتي للجميع


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-07-2014, 06:03 PM المشاركة 85   
افتراضي


طبعا في هذا الرابط لاخ العزيز funky112233
حيث يشرح عن البروتوكول NEC
http://www.qariya.info/vb/showthread.php?t=112840


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 18-07-2014, 08:45 AM المشاركة 86   
افتراضي


هذا الموقع يوضح الكثير من بروتوكولات مع اعطاء شفره لكثير من الاجهزه
http://www.sbprojects.com/knowledge/ir/sirc.php


moos0souf
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
الدولة: الجزائر
المشاركات: 53
نشاط [ moos0souf ]
قوة السمعة:
قديم 25-07-2014, 04:16 PM المشاركة 87   
افتراضي


السلام عليكم

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

عن أبي هريرة ، أن رسول الله صلى الله عليه وسلم ، قال : " إذا مات الإنسان انقطع عنه عمله إلا من ثلاثة : إلا من صدقة جارية ، أو علم ينتفع به ، أو ولد صالح يدعو له "


حمودي الحلو
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2006
الدولة: العراق
المشاركات: 104
نشاط [ حمودي الحلو ]
قوة السمعة:
قديم 28-07-2014, 04:01 PM المشاركة 88   
افتراضي


السلام عليكم
يرجى التثبيت لتعم الفائدة

لاتنسى مكتبة
rf433 +pic16f877a



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