أخى العزيز حسن,
أنا فعلا قد نفذت هذا المشروع من قبل , وبالفعل عندك حق هذا الموضوع بالذات ليست له معلومات كافية على الإنترنت فدائما إما أن تلاقى مشروع ولكنه بلغة الأسمبلى أو يستخدم فيه دوائر متكاملة جاهزة تقوم بعمل ال Encoding and Decoding
سوف أعطيك خلاصة بحثى فى هذا المجال:
بخصوص لغة الميكروسى, للأسف من الصعب عمل المستقبل بهذه اللغة لسبب بسيط هو أن فكرة البرنامج تعتمد على قياس عرض النبضة المرسلة وغالبا ما يكون فى حدود 1 ميللى ثانية أو أقل, وللأسف هذا الأمر غير متوفر بالميكروسى ولكنه لحسن الحظ موجود فى البيك بيسك, وبالرغم من أنى لا أستخدم هذه اللغة كثيرا ولكننى أضططرت لاستخدامها فقط فى هذه التطبيقات
هذا الأمر هو Pulsein وهو يقيس عرض ال Pulse سواء كانت صفر أو واحد
وهو المطلوب بالضبط فى هذا المشروع.
إليك هذا المشروع الرائع الذى قمت بتنفيذه واشتغل بكفاءة عالية جدا
http://www.rentron.com/PicBasic/IR_Chips.htm
طبعا الكود مكتوب بلغة PicBasic والجميل هنا هو أن نفس الكود يستخدم مع الميكروكونترولر فى دائرة الإرسال أو الإستقبال والذى يحدد هو مجموعة من Ports كما هو موضح بالمشروع.
- إذا أردت أن تستخدم الميكروسى فهذا ممكن فى دائرة الإرسال واستخدم كريستال سريعة كما ذكرت سابقا ولكن بعد فهم الكود المرسل بالضبط.
وتذكر جيدا أنها نبضات معدلة ب 40KHZ أى النبضة التى عرضها مثلا 1 ميللى ثانية هى مكونة من نبضات صغيرة بتردد 40 كيلو هرتز لمدة 1 ميلى ثانية.
وإن أردت استخدام الميكروسى فى الإستقبال فسوف تضطر لاستخدام Timers and interrupts وهذا ممكن طبعا ولكن بمجهود أكبر وتعقيد للبرنامج
ملحوظة هامة:
========
سوف تلاحظ أن الأكواد المستخدمة فى الإرسال هى خاصة بشركة سونى وهى أشهر طريقة لإرسال بيانات عبر الأشعة تحت الحمراء وهى باختصار كالآتى:
يتم إرسال 5 bits For Address ثم تليها
7 bits Data
وبالتالى المجموع 12 بت
عرض الصفر 1.2 ميلى ثانية وعرض الواحد 0.6 ميلى ثانية
ولكن البرنامج لم يستخدم 7 بت فى البيانات بل استخدم 8 بت
وبالتالى الفائدة الكيرى من البرنامج هى كالآتى:
استخدام أى ريموت تلفزيون سونى وبهذه الطريقة تكون قد وفرت بناء الريموت وأصبح جاهزا عندك, ما عليك إلا معرفة الأكواد المرسلة مقابلة لكل زر ووضعها فى البرنامج المستقبل
ولمعرفة الأكواد الخاصة بسونى, فضلا إلقى نظرة على هذا اللينك:
http://users.telenet.be/davshomepage/sony.htm
ولكن ماهو التعديل بالبرنامج ليعمل على ريموت السونى :
==================================
هذه هى أهم نقطة للأسف البرنامج ليس عندى الآن ولكنى أتذكر ما قد قمت به:
بعد كلمة Verify
هناك 3 For , قم بتعديل ال3 For إلى الآتى:
Verify: '// Read, Decode, then verify data
FOR Index = 0 TO 11
FOR Index = 0 TO 6
FOR Index = 7 TO 11
وأعمل Comment لهذا السطر
' IF ABYTE != (H_Add & ABYTE1) THEN Decode2 '// Does address match?
وهو يقوم باختبار العنوان المكون من 5 بت وهذا ال Address يختلف من ريموت لآخر ولكنه غالبا على ما أتذكر هو 00000
حظ موفق , وأبلغنى عند الحاجة لأى تفسير.
شكرا ومنتظر ردك