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

   

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



تفحصت المكتبه وجدت مايكرو فعلا يرسل اشاره بأستمرار وكان سبب ان مقاومه الي مختارها لسويجات كانت موضوعه على انلوك وقمت بتغيرها الى ديجيتل فتوقف مايكرو عن ارسال
ايضا اذا وضعت شرط مثلا قلت
كود:
if (porta.b4==0)send_data(address_dvice,3);//3 button
وانت ماربط اي مدخل الى بن 4 فأنه بتأكيد سوف يسبب لك جعل مايكرو يرسل بشكل مستمر لكون بن رقم 4 مامربوط عليه وبتالي قد يكون 0 او 1 وبتالي يخلي مايكرو غير مستقر
وقمت بتجربه مكتبه وهي تعمل بشكل ممتاز على بروتيس

تحياتي

اعلانات

الصورة الرمزية amrelarby
amrelarby
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2011
المشاركات: 65
نشاط [ amrelarby ]
قوة السمعة:
قديم 22-08-2014, 02:06 PM المشاركة 154   
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 بنفس الطريقة
والاكواد موجودة فى الموقع فوق


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

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



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

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

الصورة الرمزية amrelarby
amrelarby
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2011
المشاركات: 65
نشاط [ amrelarby ]
قوة السمعة:
قديم 22-08-2014, 02:07 PM المشاركة 155   
افتراضي


شكرااااااااااااااااااا


A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:
قديم 23-08-2014, 11:28 AM المشاركة 156   
sun


اخي حسن الله يعطيك الف عافيه
الكود اللي حضرتك بعثتو مؤخرا (الارسال و الاستقبال)تم تجربته عمليا و هو يعمل بشكل ممتاااااز و على مسافه لا تقل عن 15 متر على duty=75) و هو يعطي افضل مسافه حسب التجارب التي قمت بها ...و الجميل في الموضوع هو سهولة وضع الشيفره المطلوبه...
جزاك الله خير الجزاء و جعله ثقيلا في ميزان حسناتك ..



اخي حسن لو تكرمت بقي لي استفسار بسيط بالنسبه للموضوع السابق :
اولا :انه عندما تم توصيل دارة الارسال(الريموت) على بطاريه 9 فولط(طبعا مع منظم 5 فولط) الاحظ ان البطاريه تفرغ بعد عدة ساعات ( اذا بقيت البطاريه موصله في الداره و لم انزعها ) و هذا امر غير عملي من الناحيه العمليه اي انه غير مجدي بالنسبه للمستخدم اذا ما تم تسويق هذه الداره مثلا ..

او لو تكرمت ان تبعث لي برسم دارة الارسال اللي حضرتك بتعمل عليها يمكن تكون المشكله عندي بالتوصيلات مثلا!!

فكرت في التعديل قليلا على البرمجه ان نجعل بدل الصفر واحد و ان نقوم بالتعديل على التوصيلات بجعل الطرف الموجب على السويجات و الطرف السالب على المقاومات(عمليه عكسيه في التوصيل)و بهذا يكون دخل الميكرو في حالة التحرر صفر و في حالة الطغط على السويج واحد ...مجرد وجهة نظر شخصيه ...هل هذا الحل مجدي برأيك؟؟؟

الاستفسار الثاني :
كيف لي اخي حسن ان اقوم بتغيير الادريس في دارة المرسل ..في حين انني اريد استخدام ريموت اخر مثلا بدل السوني ..الرجاء دعم الشرح بمثال توضيحي و ليكن على الكود السابق ..

انا اسف جدا بعرف اني عملتلك صداع و لكن هذا قدرالمعطائين امثالك..


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 23-08-2014, 12:12 PM المشاركة 157   
Thumbs up


اخي حسن الله يعطيك الف عافيه
الكود اللي حضرتك بعثتو مؤخرا (الارسال و الاستقبال)تم تجربته عمليا و هو يعمل بشكل ممتاااااز و على مسافه لا تقل عن 15 متر على duty=75) و هو يعطي افضل مسافه حسب التجارب التي قمت بها ...و الجميل في الموضوع هو سهولة وضع الشيفره المطلوبه...
جزاك الله خير الجزاء و جعله ثقيلا في ميزان حسناتك ..



اخي حسن لو تكرمت بقي لي استفسار بسيط بالنسبه للموضوع السابق :
اولا :انه عندما تم توصيل دارة الارسال(الريموت) على بطاريه 9 فولط(طبعا مع منظم 5 فولط) الاحظ ان البطاريه تفرغ بعد عدة ساعات ( اذا بقيت البطاريه موصله في الداره و لم انزعها ) و هذا امر غير عملي من الناحيه العمليه اي انه غير مجدي بالنسبه للمستخدم اذا ما تم تسويق هذه الداره مثلا ..

او لو تكرمت ان تبعث لي برسم دارة الارسال اللي حضرتك بتعمل عليها يمكن تكون المشكله عندي بالتوصيلات مثلا!!

فكرت في التعديل قليلا على البرمجه ان نجعل بدل الصفر واحد و ان نقوم بالتعديل على التوصيلات بجعل الطرف الموجب على السويجات و الطرف السالب على المقاومات(عمليه عكسيه في التوصيل)و بهذا يكون دخل الميكرو في حالة التحرر صفر و في حالة الطغط على السويج واحد ...مجرد وجهة نظر شخصيه ...هل هذا الحل مجدي برأيك؟؟؟

الاستفسار الثاني :
كيف لي اخي حسن ان اقوم بتغيير الادريس في دارة المرسل ..في حين انني اريد استخدام ريموت اخر مثلا بدل السوني ..الرجاء دعم الشرح بمثال توضيحي و ليكن على الكود السابق ..

انا اسف جدا بعرف اني عملتلك صداع و لكن هذا قدرالمعطائين امثالك..
السلام عليكم
ممكن تزويدي بمخطط الي تشتغل عليه
بالنسبه لادريس يمكنك التحكم بهذا الكود
كود:
const char address_dvice=1;// 
address
انا بصراحه لم أجرب الكود ولكن بعد وضع مخطط ممكن مناقشه فيه
تحياتي


A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:
قديم 23-08-2014, 01:42 PM المشاركة 158   
sun


انشاء الله سأزودك بالمخطط قريبا //ولكن بالنسبه للادريس انا اعرف ان ادرس تلفزيون سوني هو 10000 // فلماذا مكتوب بالكود السابق رقم 1 فقط؟؟


مثلا ريموت DVD SONY الادرس بتاعه هو10001 فكيف لي ان اغير هذا الادرس محل الادرس السابق في حين انني اريد ان استخدم هذا الريموت بدل ريموت التلفزيون؟؟( مع ان الكومند قيمته ثابته فقط من يتغير هو الادرس) فما هي الطريقه التي يتم التغيير بها ؟؟هل هناك تحويل للرقم مثلا؟


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 23-08-2014, 02:58 PM المشاركة 159   
افتراضي


انشاء الله سأزودك بالمخطط قريبا //ولكن بالنسبه للادريس انا اعرف ان ادرس تلفزيون سوني هو 10000 // فلماذا مكتوب بالكود السابق رقم 1 فقط؟؟


مثلا ريموت DVD SONY الادرس بتاعه هو10001 فكيف لي ان اغير هذا الادرس محل الادرس السابق في حين انني اريد ان استخدم هذا الريموت بدل ريموت التلفزيون؟؟( مع ان الكومند قيمته ثابته فقط من يتغير هو الادرس) فما هي الطريقه التي يتم التغيير بها ؟؟هل هناك تحويل للرقم مثلا؟
السلام عليكم
اخي كريم ادرس للتلفزيون هو 1 و ماكتبته انت 10000 هو نظام الباينري ولكن هذا =16 وطبعا لازم تكتبه هكذا 00001
على عموم ادرس هو 5 بت فانا أفضل كتابه بالنظام عشري يكون ذلك أسهل
مثلا انت قلت ريموت DVD SONY الادرس بتاعه هو10001 يمكنك كتابته 17 بالنظام عشري
ارجو اني وضحت لك
وهذه معلومات تفيدك
هذا موقع يوضح البرتوكولات وكذلك الاكواد
http://www.sbprojects.com/knowledge/ir/sirc.php
ستلاحظ التالي
Address Device
1 TV

2 VCR 1
3 VCR 2
6 Laser Disc Unit
12 Surround Sound
16 Cassette deck / Tuner
17 CD Player
18 Equalizer

تحياتي الطيبه لكم


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 23-08-2014 الساعة 03:04 PM

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


اخي العزيز A-M-S هل راجعت مشاركه 153
http://qariya.info/vb/showthread.php?t=112123&page=20
اود فحص مكتبه ولكم جزيل الشكر والتقدير



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