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

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

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:88
قديم 14-07-2012, 05:52 PM المشاركة 1   
افتراضي تعلم كيفية صنع ريموت كنترول (مرسل + مستقبل) بالميكروسى Twitter FaceBook Google+



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

السلام عليكم ورحمه الله وبركاته

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


ثانيا

اريدكم ان تشاهدوا هذا الفديو للتجربة الحقيقية






وبعد المشاهدة
نبدء فى الشغل العملى على طول
اولا

حمل الدائرة والكود والمحاكاة وكل شىء من هنا
http://www.4shared.com/rar/bxKIRhhJ/...y_Remote.html?


انا موصل IR_Link علشان نجرب الدائرة كانها على الحقيقة بالزبط

طبعا سوف تلاحظ انى لم استخدم كريستال او مقاومة على الطرف mclr
هذه من خواص هذا الميكرو 16f628a
يوجد بة مذبذب داخلى ولا يحتاج لكريستال وايضا يمكنك الغاء طرف mclr


"((نيجى بقى لشرح كل الى احنا حطيناه دة))"

1 - كيف نرسل اشعه تحت حمراء ويستقبلها المستقبل ؟؟

يجب ان تعلم ان المستقبل لا يستقبل الاشارة الا اذا كانت بتردد معين
مثل 36khz او 38khz او 40khz

وهناك ما هو اقل او اكثر من ذلك
المهم هو ان نرسل الاشارة بتردد

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

هذه الصورة توضح عمل المستقبل بكل دقة




انظر الى المرسل كيف هى الاشارة وكيف يخرجها المستقبل
المستقبل ليس مجرد ترانزيستور ضوئى يخرج كما ترسل له
لا يوجد به نظام للاستقبال بتردد واخراج الاشارة TTL كما تراها

بدون الدخول فى تفاصيل كثيرة

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

وهى الطريقة المستخدمة فى المشروع وتم الارسال بتردد 38khz

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

كيف هو شكل نبضات بروتوكول سونى ؟؟

هو كا الاتى فى البدء نبضة بداية 2.4 مللى ثانية
وبعد ذلك مساحة بدون ارسال لمدة 600 ميكرو ثانية
وبعد ذلك يبدء الارسال على حسب البايت المرسل
مع العلم انه فى كل بايت مرسل توجد مساحة 600 ميكرو ثانية

الرقم واحد فى البايت يساوى 1200 ميكرو ثانية
اما الصفر فهو يساوى 600 ميكرو ثانية

يعنى هاكذا مثلا اذا اردنا ارسال البايت هذا
10000000
يكون هكذا
2.4 مللى ثانية نبضة البداية
وبعد ذلك 600 ميكرو ثانية مساحة بدون ارسال((اى يتوقف المرسل عن الارسال))
وبعد ذلك
يبدء البايت هنا اول بيت هو 1 اذا 1200 ميكروثانية وبعد ذلك مساحة
والذى يلية هو 0 اذا 600 ميكرو ثانية ارسال ثم مساحة (اى بدون ارسال)
ثم البيت الى بعدة وهكذا

فى الكود الى انشاتة 12 بيت غير نبضة البداية
مقسمون الى 7 بيت كومند
و 5 بيت ادريس او عنوان

الادريس او العنوان فائدة تحدد نوع الجهاز حتى لا يحدث تداخل بين الاجهزة
وفى حالة ريموت التلفزيون يساوى 10000 وهو ثابت على التلفزيون لشركة سونى

والكومند الى هما 7 بيت عبارة عن الاوامر التى تنفزها الازرار بمعنى
الزرار واحد يساوى 0000000 اى 7 اصفار والواحد يساوى 1000000
وهكذا
يعنى اذا رادنا ارسال شفرة الزرار الاول نرسلها بتردد 38khz بهذا الشكل
نبضة البداية 2.4 ثم فراغ ثم 12 بيت بينه فراغات كما وضحت هكذا
000000010000
كما نرى 7 اصفار كومند و 10000 الادريس

ولمعرفة اكواد الريموت كلها اتبع الرابط الاتى
http://www.kucher.org/projects/tvcontrol/

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

ناتى لشرح كود الارسال

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

كود:
char x;

void main() {
CMCON=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();                    //button 1
      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);
        }
         }
        }
فى البدء عرفت متغير اسمة X
وبعد ذلك قمت بتحديد الخرج والدخل

ثم جعل PWM يعمل على تردد 38khz وتكتب 38000 كما تروها
بكل هذه البساطة سوف يخرج الميكرو اشارة بتردد 38khz
وبعد ذلك جعلت النبضات تخرج 5 فولت وليس اقل

اذا لم يبقى علينا الا تشغيل الخرج لل PWM وايقافة بالاوقات المطلوبة
على حسب الشفرة بتاعت الريموت

هذا الزر هو رقم 1 فى الريموت
وشفرتة هى
000000010000

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

انظر الى النقطه هذه

كود:
PWM1_Start();delay_us(2400);PWM1_Stop();                    //button 1
      delay_us(600);
      for(x=0;x<7;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
ماذا فعلت هنا ؟؟

ببساطة قلت له شغل الخرج لمدة 2.4 مللى ثانية اى 2400 ميكرو ثانية وهى نبضة البداية
وبعد ذلك افصلة لمدة 600 ميكرو ثانية ((المساحة التى تكلمت عنها ))

ثم وهذا هو الاهم
احنا عايزينة يبعت 7 بيت بتوع الكومند كلهم 0
يبقى نكرر الامر بتاع ارسال الرقم 0 7 مرات
كما ترى يشغل الخرج لمدة 600 ميكرو ثانية ثم يفصل لمدة 600 ميكرو ثانية المساحة التى تكلمت عنها
وهكذا 7 مرات يعطينا 0000000 بكل بساطة

ثم 5 بيت بتوع الادريس او العنوان
اولهم الرقم واحد 1
فكتبتة فى الاول هكذا امر بتشغيل الخرج لمدة 1200 ميكرو ثانية
ثم المساحة
تبقى لنا الان من 5 بيت 4 بيت فقط لاننا ارسال اول بيت منهم

اذا نكرر الامر 0 4 مرات وهكذا يصبح لدينا 0000
وفى المجمل 000000010000
وهى الاشارة المطلوبة

وباقى الازرار هكذا
ما يمكن تكرارة نكررة والذى يكون وحيد مثل الرقم واحد نكتبة مرة واحدة هكذا
وهذا يوفر فى المساحة للميكرو

وفى النهاية ينتظر 250 مللى ثانية حتى ترفع يدك من على الزرار


وهذا هو كود ارسال الرقم 2

كود:
    if (porta.f1==0){
      PWM1_Start();delay_us(2400);PWM1_Stop();
      delay_us(600);
      PWM1_Start();delay_us(1200);PWM1_Stop();      //button  2
      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);
        }
ارجوا من المتابعين كتابة الرقم 3 بنفس الطريقة
والاكواد موجودة فى الموقع فوق


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

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



ملحوظة هناك الكثير من الطرق لعمل المرسل والمستقبل وهذه احداها


التعديل الأخير تم بواسطة : funky112233 بتاريخ 14-07-2012 الساعة 06:04 PM
اعلانات

الصورة الرمزية هيثم العليمي
هيثم العليمي
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
الدولة: yemen
المشاركات: 236
نشاط [ هيثم العليمي ]
قوة السمعة:0
قديم 14-07-2012, 07:41 PM المشاركة 2   
Thumbs up


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

السلام عليكم ورحمه الله وبركاته

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


ثانيا

اريدكم ان تشاهدوا هذا الفديو للتجربة الحقيقية



IR Sony Remote - YouTube



وبعد المشاهدة
نبدء فى الشغل العملى على طول
اولا

حمل الدائرة والكود والمحاكاة وكل شىء من هنا
http://www.4shared.com/rar/bxKIRhhJ/...y_Remote.html?


انا موصل IR_Link علشان نجرب الدائرة كانها على الحقيقة بالزبط

طبعا سوف تلاحظ انى لم استخدم كريستال او مقاومة على الطرف mclr
هذه من خواص هذا الميكرو 16f628a
يوجد بة مذبذب داخلى ولا يحتاج لكريستال وايضا يمكنك الغاء طرف mclr


"((نيجى بقى لشرح كل الى احنا حطيناه دة))"

1 - كيف نرسل اشعه تحت حمراء ويستقبلها المستقبل ؟؟

يجب ان تعلم ان المستقبل لا يستقبل الاشارة الا اذا كانت بتردد معين
مثل 36khz او 38khz او 40khz

وهناك ما هو اقل او اكثر من ذلك
المهم هو ان نرسل الاشارة بتردد

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

هذه الصورة توضح عمل المستقبل بكل دقة




انظر الى المرسل كيف هى الاشارة وكيف يخرجها المستقبل
المستقبل ليس مجرد ترانزيستور ضوئى يخرج كما ترسل له
لا يوجد به نظام للاستقبال بتردد واخراج الاشارة TTL كما تراها

بدون الدخول فى تفاصيل كثيرة

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

وهى الطريقة المستخدمة فى المشروع وتم الارسال بتردد 38khz

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

كيف هو شكل نبضات بروتوكول سونى ؟؟

هو كا الاتى فى البدء نبضة بداية 2.4 مللى ثانية
وبعد ذلك مساحة بدون ارسال لمدة 600 ميكرو ثانية
وبعد ذلك يبدء الارسال على حسب البايت المرسل
مع العلم انه فى كل بايت مرسل توجد مساحة 600 ميكرو ثانية

الرقم واحد فى البايت يساوى 1200 ميكرو ثانية
اما الصفر فهو يساوى 600 ميكرو ثانية

يعنى هاكذا مثلا اذا اردنا ارسال البايت هذا
10000000
يكون هكذا
2.4 مللى ثانية نبضة البداية
وبعد ذلك 600 ميكرو ثانية مساحة بدون ارسال((اى يتوقف المرسل عن الارسال))
وبعد ذلك
يبدء البايت هنا اول بيت هو 1 اذا 1200 ميكروثانية وبعد ذلك مساحة
والذى يلية هو 0 اذا 600 ميكرو ثانية ارسال ثم مساحة (اى بدون ارسال)
ثم البيت الى بعدة وهكذا

فى الكود الى انشاتة 12 بيت غير نبضة البداية
مقسمون الى 7 بيت كومند
و 5 بيت ادريس او عنوان

الادريس او العنوان فائدة تحدد نوع الجهاز حتى لا يحدث تداخل بين الاجهزة
وفى حالة ريموت التلفزيون يساوى 10000 وهو ثابت على التلفزيون لشركة سونى

والكومند الى هما 7 بيت عبارة عن الاوامر التى تنفزها الازرار بمعنى
الزرار واحد يساوى 0000000 اى 7 اصفار والواحد يساوى 1000000
وهكذا
يعنى اذا رادنا ارسال شفرة الزرار الاول نرسلها بتردد 38khz بهذا الشكل
نبضة البداية 2.4 ثم فراغ ثم 12 بيت بينه فراغات كما وضحت هكذا
000000010000
كما نرى 7 اصفار كومند و 10000 الادريس

ولمعرفة اكواد الريموت كلها اتبع الرابط الاتى
http://www.kucher.org/projects/tvcontrol/

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

ناتى لشرح كود الارسال

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

كود:
char x;

void main() {
CMCON=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();                    //button 1
      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);
        }
         }
        }
فى البدء عرفت متغير اسمة X
وبعد ذلك قمت بتحديد الخرج والدخل

ثم جعل PWM يعمل على تردد 38khz وتكتب 38000 كما تروها
بكل هذه البساطة سوف يخرج الميكرو اشارة بتردد 38khz
وبعد ذلك جعلت النبضات تخرج 5 فولت وليس اقل

اذا لم يبقى علينا الا تشغيل الخرج لل PWM وايقافة بالاوقات المطلوبة
على حسب الشفرة بتاعت الريموت

هذا الزر هو رقم 1 فى الريموت
وشفرتة هى
000000010000

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

انظر الى النقطه هذه

كود:
PWM1_Start();delay_us(2400);PWM1_Stop();                    //button 1
      delay_us(600);
      for(x=0;x<7;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }
ماذا فعلت هنا ؟؟

ببساطة قلت له شغل الخرج لمدة 2.4 مللى ثانية اى 2400 ميكرو ثانية وهى نبضة البداية
وبعد ذلك افصلة لمدة 600 ميكرو ثانية ((المساحة التى تكلمت عنها ))

ثم وهذا هو الاهم
احنا عايزينة يبعت 7 بيت بتوع الكومند كلهم 0
يبقى نكرر الامر بتاع ارسال الرقم 0 7 مرات
كما ترى يشغل الخرج لمدة 600 ميكرو ثانية ثم يفصل لمدة 600 ميكرو ثانية المساحة التى تكلمت عنها
وهكذا 7 مرات يعطينا 0000000 بكل بساطة

ثم 5 بيت بتوع الادريس او العنوان
اولهم الرقم واحد 1
فكتبتة فى الاول هكذا امر بتشغيل الخرج لمدة 1200 ميكرو ثانية
ثم المساحة
تبقى لنا الان من 5 بيت 4 بيت فقط لاننا ارسال اول بيت منهم

اذا نكرر الامر 0 4 مرات وهكذا يصبح لدينا 0000
وفى المجمل 000000010000
وهى الاشارة المطلوبة

وباقى الازرار هكذا
ما يمكن تكرارة نكررة والذى يكون وحيد مثل الرقم واحد نكتبة مرة واحدة هكذا
وهذا يوفر فى المساحة للميكرو

وفى النهاية ينتظر 250 مللى ثانية حتى ترفع يدك من على الزرار


وهذا هو كود ارسال الرقم 2

كود:
    if (porta.f1==0){
      PWM1_Start();delay_us(2400);PWM1_Stop();
      delay_us(600);
      PWM1_Start();delay_us(1200);PWM1_Stop();      //button  2
      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);
        }
ارجوا من المتابعين كتابة الرقم 3 بنفس الطريقة
والاكواد موجودة فى الموقع فوق


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

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



ملحوظة هناك الكثير من الطرق لعمل المرسل والمستقبل وهذه احداها
جزاك الله خير اخي الكريم

شرح رائع وممتاز وفي انتضار البقيه

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

MR.WOLF
:: مهندس ::
تاريخ التسجيل: Jun 2012
المشاركات: 14
نشاط [ MR.WOLF ]
قوة السمعة:0
قديم 14-07-2012, 07:44 PM المشاركة 3   
افتراضي الف الف شكر


ماشاء الله اخي الكريم مشروع جميل وشرح مفصل ومفهوم جدا جدا لا ادري كيف تقول (وانا عارف ان شرحى مش كويس)
بارك الله فيك وزادك من العلم والتوفيق
ان شاء الله في الاجازة احاول انفذه .


TIME0
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
المشاركات: 277
نشاط [ TIME0 ]
قوة السمعة:0
قديم 14-07-2012, 08:41 PM المشاركة 4   
افتراضي


جزاك الله خيرا بصراحة
لو عندي ريموت ماعندي الاكواد بتاعته
كيف ممكن اعرف شيفرته
واريد ازرار معينه منه
-----------------------------------------------------
ولو تكلمنا رجاء في موضوع مستقل عن RF remote

اعتقد ان الموضوع مشابه جدا

وهي ارسال موجه بتردد معين نفس الشيء

ولكن الاختلاف في تركيب الدائرة الاكترونية
صح


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:88
قديم 15-07-2012, 07:29 AM المشاركة 5   
افتراضي


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

((هيثم العليمي))
شكرا اخى ان شاء الله هكمل بس انا نتظرت علشان ميحصلش لخبة بين المرسل والمستقبل



((MR.WOLF))
شكرا لك اخى على كلامك الطيب
ولكن عندى احساس انه غير مفصل تمام
ولكن الحمد لله طلاما رايك كدة يبقى خلاص هههههههههههه



((TIME0))
اخى اذا اردت قراءة شفرة ريموت اخر
يجب ان يكون معك اسلوسكوب

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


وان شاء الله جارى العمل على الار اف باذن الله

__________________________________________________ __


اذا كان الكود والشرح بهذة السهولة
اين كود الرقم 3 للريموت ؟؟؟؟


عموما ممكن نستعين بالرابط بتاع البشمهندس حسام
عن الاشعه تحت حمراء فهو يشرح بالصور وبالتفصيل واظن هكذا اصبح الامر سهل

http://www.qariya.com/vb/showthread.php?t=53985


الصورة الرمزية king5star
king5star
:: مهندس جيد ::
تاريخ التسجيل: Jun 2008
الدولة: Alexandria, Egypt
المشاركات: 240
نشاط [ king5star ]
قوة السمعة:0
قديم 15-07-2012, 08:38 AM المشاركة 6   
افتراضي


تسلم ايدك يا بشمهندس واخيراً من مدة موضوع مفصل ومشروح شرح جيد
وفقك الله دائماً .


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:88
قديم 15-07-2012, 10:52 AM المشاركة 7   
افتراضي


((king5star))

شكرا جزاك الله خيرا يا اخى


ams7
:: مهندس ::
تاريخ التسجيل: May 2012
الدولة: KSA
المشاركات: 29
نشاط [ ams7 ]
قوة السمعة:0
قديم 16-07-2012, 01:48 AM المشاركة 8   
افتراضي


موضوع رائع ،،

لكن هل يوجد طريقة ارسال عن طريق المانشستر كود او UART ،، لانه كما ذكرت يكون شكل النبضات مختلف عند الارسال وبعد الاستقبال
كما في هذه الصوره :



، بحيث ان البيك المستقبل لا يتعرف عليها لكي ينفذ الاوامر ،، فهل هناك حل باستخدام المانشستر كود او UART ،،

وشكرا جزيلا

إضافة رد

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

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

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


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

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