بسم الله الرحمن الرحيم
السلام عليكم ورحمه الله وبركاته
اولا
احب اشكر اخى فى الله سعد بالكانة 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 بنفس الطريقة
والاكواد موجودة فى الموقع فوق
وانا عارف ان شرحى مش كويس ههههههههههه
حوال ان تجتهد شوية فى فهم الكود والنقطة الى تقف معاك متترددش انك تسئل
وان شاء الله انا بحضر للمستقبل
ولكن هنزل الشرح بتاعه لما
نفهم المرسل كويس اوى الاول
ملحوظة هناك الكثير من الطرق لعمل المرسل والمستقبل وهذه احداها