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

   

elamir10
:: مهندس ::
تاريخ التسجيل: Jul 2010
المشاركات: 8
نشاط [ elamir10 ]
قوة السمعة:
قديم 21-07-2012, 06:35 AM المشاركة 9   
افتراضي



كل عام وانت والامة الاسلامية بخير
واشكرك على الشرح الرائع
وفى طلب انا محرج منه ان تقوم باعادة شرح بعض الاوامر
sbit ir_in_direction at TRISA0_bit; // Infrared receiver input
unsigned int retint;


void interrupt()
{
count++;
intcon=0b00100000;
TMR0=0;


unsigned char get_sony_byte(char nbits){
char n;
unsigned char ir_byte;
unsigned int temp_ir;

ir_byte = 0; // initialise
for(n=0 ; n<nbits ; n++){
temp_ir = get_space(); // expect ~510uS
temp_ir = get_mark();
ir_byte >>= 1; // 650uS = 0, 1.2uS = 1
if ((temp_ir > 1000)&&(temp_ir < 1300)) {
ir_byte += 0x80;
}



cmcon=7;
option_reg=0b10000000;
intcon=0b10100000;
TMR0 = 0;
while(1){
sony_read();
if(ir_result[1]==1){ // Sony address 01 is TV
bouton = ir_result[0];
switch (bouton){
case 0: Portb.F0 = ~Portb.F0;Delay_ms(150);break; // button TV '0'
case 1: Portb.F1 = ~Portb.F1;Delay_ms(150);break; // button TV '1'
case 2: Portb.F2 = ~Portb.F2;Delay_ms(150);break; // button TV '2'
case 3: Portb.F3 = ~Portb.F3;Delay_ms(150);break; // button TV '3'
default:break;
}
}
}

اعلانات

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


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

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

والموضوع دة هيفيدك جدا ان شاء الله
http://www.qariya.info/vb/showthread.php?t=53985
وبعد ما قريتة

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

والى هيعمل المهمة دى فى الميكرو حاجة اسمها
التايمر 0
هو عندة القدرة على العد بسرعه ربع المذبذب الى انت مركبة
وفى حالتنا 4 ميجا
يعنى ربعه 1 ميجا يعنى يقدر يعد بسرعه 1 ميكروثانية

طيب اول ما بتيجى النبضة التايمر دة بيبدء يعد وبعد ما النبضة بتخلص
على طول بتتم معالجة النبضة دى ومعرفة هى اعدت اد اية
وبعد كدة بنكرر الموضوع دة 12 مرة متقسمين
يعنى مرة 7 مرات تكرار علشان نعرف عرض كل نبضة لاوامر الكومند
ومرة تانية 5 مرات تكرار علشان نعرف عرض كل نبضة من اوامر الادريس
وبكدة النبضات بتاعت الريموت خلصت يبدء يجمع بقى
كل نوع من النبضات فى متغير شكل
يعنى الادريس الى هو 5 بيت فى متغير اسمة ir_result[1]
اما الكومند فى متغير اسمة ir_result[0
والتجميع بيتم بطريقة الازاحة وانا قلت فى الشرح استخدمت الازاحة بسبب
انى عايز اسهل على الى مفهمش الكود انوا يتعامل مع اكواد الريموت كلة عادى
وبعد كدة بيعود للاختبارات جملة if
ويشوف انت دوست على انهى زر وينفذ الاوامر
دة شرح مبسط خالص
ااقرة كويس علشان تفهم المبدء
وبعد كدة ارجع للكود وافهموا كويس
ولو بردوة الكود مش واضح تمام
قلى وانا هشرحهولك بشكل خاص ان شاء الله


التعديل الأخير تم بواسطة : ماجد عباس محمد بتاريخ 28-10-2018 الساعة 06:31 PM السبب: تعديل الرابط للموقع الجديد
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

elamir10
:: مهندس ::
تاريخ التسجيل: Jul 2010
المشاركات: 8
نشاط [ elamir10 ]
قوة السمعة:
قديم 21-07-2012, 10:56 PM المشاركة 11   
win جزاك الله خيرا


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


kishoko
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2011
المشاركات: 122
نشاط [ kishoko ]
قوة السمعة:
قديم 22-07-2012, 12:08 AM المشاركة 12   
افتراضي


اخى العزيز انا حاولت عمل ذلك المشروع عن طريق مرسل pic16f628a بكريستالة خارجية 8 MHZ و مستقبل pic16f877a بكريستالة 8 MHZ و لكن المدة الزمنية لعد TMR0 ستختلف فكيف يمكننى تغيير الكود لانى لا استطيع حتى الان فهم كيفية عمل المؤقتات جيدا و لو فيها رخامة ( معلش اعذرنى انا عارف انى رزل شويتين بس طمعى فى رمضان كبير ) انك تشرحلى عمل كل المؤقتات الزمنية TMR0 & TMR1 & TMR2 لانى احاول فهم طريقة عملهم وادارة بعض المشاريع و لكن بلا جدوى و شكرا لك مقدما اخى العزيز و اعنك الله على افادتنا بما علمك اياه الله


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 22-07-2012, 06:32 AM المشاركة 13   
افتراضي


بسم الله الرحمن الريحم
اخى
elamir10
شكرا لك وجازك الله بما اجازة ان شاء الله
واذا كان فى اى شىء لم تفهمة لا تتردد واسئل وزى ما قولتلك ان شاء الله


اخى
kishoko

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

2 - عداد لنبضات الساعه اى عداد زمنى
يعنى لو الكريستاله 4 ميجا ربعها 1 ميجا
يعنى مليون امر فى الثانية يعنى كل ميكرو ثانية نبضة
يبقى كدة سرعه العد بالميكرو ثانية الواحدة
ولو 8 يبقى بنص ميكروثانية وهكذا
اما التايمرات بقى لية فى منها 1 و 0 و2 وكدة
فدة لزيادة الامكانيات يعنى فى عدد المساحات وكمية العد
يعنى كل تايمر له قدرة على العد وهكذا وطبعا فى امكانيات تانية لاكن دة المختصر المفيد
وطبعا بتتحكم فيهم من خلال سجلات جاهزة
مجرد انك بتحت فيها ارقام بس كدة
وهتلاقى كل شىء بالسجلات والارقام فى الداتا شيت بتاعت الميكرو

ولو عايز شرح كويس
ممكن تطلع هنا وان شاء الله تستفيد
http://www.qariya.info/vb/showthread.php?t=46338

نصيحة اخيرة
متفتكرش انك لما تقرى موضوع من اول مرة انك هتهمة 100%100
ولا حتى من تانى مرة
الموضوع بيعتمد دايما على فكرك وتطورك فى البرمجة وخبرتك اكيد
علشان كدة كل المهندسيين تلاقيهم بينصحوا بالصبر ومتزهقش ههههههههههههه


التعديل الأخير تم بواسطة : ماجد عباس محمد بتاريخ 28-10-2018 الساعة 06:35 PM السبب: تعديل الرابط للموقع الجديد

kishoko
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2011
المشاركات: 122
نشاط [ kishoko ]
قوة السمعة:
قديم 23-07-2012, 02:22 AM المشاركة 14   
افتراضي


بسم الله الرحمن الريحم
اخى
elamir10
شكرا لك وجازك الله بما اجازة ان شاء الله
واذا كان فى اى شىء لم تفهمة لا تتردد واسئل وزى ما قولتلك ان شاء الله


اخى
kishoko

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

2 - عداد لنبضات الساعه اى عداد زمنى
يعنى لو الكريستاله 4 ميجا ربعها 1 ميجا
يعنى مليون امر فى الثانية يعنى كل ميكرو ثانية نبضة
يبقى كدة سرعه العد بالميكرو ثانية الواحدة
ولو 8 يبقى بنص ميكروثانية وهكذا
اما التايمرات بقى لية فى منها 1 و 0 و2 وكدة
فدة لزيادة الامكانيات يعنى فى عدد المساحات وكمية العد
يعنى كل تايمر له قدرة على العد وهكذا وطبعا فى امكانيات تانية لاكن دة المختصر المفيد
وطبعا بتتحكم فيهم من خلال سجلات جاهزة
مجرد انك بتحت فيها ارقام بس كدة
وهتلاقى كل شىء بالسجلات والارقام فى الداتا شيت بتاعت الميكرو

ولو عايز شرح كويس
ممكن تطلع هنا وان شاء الله تستفيد
http://www.qariya.com/vb/showthread.php?t=46338

نصيحة اخيرة
متفتكرش انك لما تقرى موضوع من اول مرة انك هتهمة 100%100
ولا حتى من تانى مرة
الموضوع بيعتمد دايما على فكرك وتطورك فى البرمجة وخبرتك اكيد
علشان كدة كل المهندسيين تلاقيهم بينصحوا بالصبر ومتزهقش ههههههههههههه
اخى العزيز شكرا لسرعة استجابتك وردك السريع فقد قمت بعمل عداد 1 ثانية للتايمر زيرو لكن بالنسبة للتايمر 1 لا يستجيب لخاصية المقاطعة و هل يمكن عمل مفارقة بين مقاطعتين مرتبطتين ببعضهما مثل مقاطعة ccp & TMR1 اى اذا حدث اوفرفلو للعداد يقوم بكذا و اذا حدثت مقاطعة الالتقاط افعل كذا و لكنى لاحظت ان المقاطعات لا يعملوا بشكل متجانس معا فهل من مساعدة ؟
هناك كتاب اسمة pic interrupts secrets حاولت قرائتة و لكنى لغتى الانجليزية بالاضافة للالفاظ العلمية احبطت محاولاتى لفهمة خاصة انى هاوى حديث غير متخصص لذا اعتقد ان هذا الكتاب هام جدا لمن يستطيع شرح و توضيح اسرارة بالعربية و لك اخى كثير من الشكر و من المؤكد ايضا لك نصيب من الجنة باذن الله


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 23-07-2012, 11:09 PM المشاركة 15   
افتراضي


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


الصورة الرمزية mohamedalikahli
mohamedalikahli
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2010
الدولة: مصر -- الاسكندرية
المشاركات: 153
نشاط [ mohamedalikahli ]
قوة السمعة:
قديم 30-07-2012, 02:47 PM المشاركة 16   
افتراضي


السلام عليكم و رحمة الله و بركاته ...
اخي محمد (funcky) ....
الكود واضح لغاية الدالة اللي اسمها get_sony_byte();
و الله حاولت افهمها علي قدر الامكان و لكن لم اتمكن من ذلك ....
ارجو منك التوضيح اكثر ...
و السلام عليكم و رحمة الله و بركاته...



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