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

   

WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 630
نشاط [ WRHLAMDA ]
قوة السمعة:
قديم 08-08-2013, 08:04 AM المشاركة 57   
افتراضي



ما شاء الله ،، جميل جدا ،، شرح وافي جدا ،،


عموما ،، الآن االاعدادات لدينا ان الكريستالة 4 ميغاهرتز ،، بما اننا نستخدم المذبذب الداخلي ، وسنستخدم الprescaler ليكون 8 !

بالتالي المعادلة ستكون كما ذكرت انت /


زمن الذهاب = التايمر * 4
المسافة = زمن الذهاب / 30 =( التايمر * 4) /30 ،،


اذا كان هذا صحيحا ،، حسنا ،،

سنركز الآن على عرض قيمة التايمر على الشاشة ،، ولكن كيف نقوم بالتجربة ؟ ،، من خلال سويتش مثلا ؟ ام ماذا ؟!
.................................................. ..............................

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

.................................................. .............................

اعلانات

الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 08-08-2013, 03:06 PM المشاركة 58   
افتراضي


.................................................. ..............................

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

.................................................. .............................

آسف ،، كنت اقصد كيف نقوم بتجربة البرنامج على البروتوس ! ،، لا يوجد فيه موديول للالتراساوند ! ،،

فكيف نقوم بتجربة الكود ،،

التجربة على الدائرة مباشرة ،، ممل !!



تمنياتي

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

WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 630
نشاط [ WRHLAMDA ]
قوة السمعة:
قديم 08-08-2013, 11:11 PM المشاركة 59   
افتراضي


آسف ،، كنت اقصد كيف نقوم بتجربة البرنامج على البروتوس ! ،، لا يوجد فيه موديول للالتراساوند ! ،،

فكيف نقوم بتجربة الكود ،،

التجربة على الدائرة مباشرة ،، ممل !!



تمنياتي
لا اعرف كيف تقوم بتمثيل الدائرة على البروتوس .... السويج ممكن ان يستخدم لكن لا لا اعرف ان كان سيكون بالسرعة اللازمة... ممكن ان تجرب

لكن لماذا تجد تجريب الدائرة العملي مملا ... الاتستخدم برمجة المتحكم داخل الدائرة ؟؟؟

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

هذه صورة للمشروع الذي اعمل علية حاليا ..... المبرمجة usb الى الاعلى .... مع اسلاك البرمجة مربوطة عبر فيشة 4 اسلاك.... ولا ابسط من ذلك



الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 09-08-2013, 06:13 AM المشاركة 60   
افتراضي


السلام عليكم

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

.................................................. ....................
اولا .... مذبذب المتحكم 4 ميكاهيرتز .... ويقسم داخليا على 4 .... فيكون 1 ميكاهيرتز

وهذا سيكون مصدر النبظات للتايمر الذي ستزدات قيمتة بمقدار 1 مع كل نبظة

وطول هذه النبظة 1 مايكو ثانية

لكن هناك مقسم بين هذه النبظات والتايمر .... من الممكن ان يقوم بقسمة النبظات على 1 او 2 او 4 او 8 .... في البرنامج الذي وضعته انت ... المبرمج قام باستخدام المقسم على 8 .... وهذا يعني ان كل 8 نبظات ستؤدي الى زيادة مقدارها 1 في التايمر

بمعنى ان كل 1 في التايمر يساوي 8 مايكرو ثانية

لماذا استخدم المبرمج هذا الاعداد ؟؟؟؟؟

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

.................................................. .

طيب الان عندنا رقم في التايمر ... كل عدد فية يساوي 8 مايكروثانية وهو يمثل الزمن اللازم للصوت لقطع المسافة ذهابا وايابا ..... نقوم بالقسمة على 2 لنحصل على زمن الذهاب فقط

زمن الذهاب = التايمر * 8مايكرو \2=التايمر *4

...........................................

بعد حساب الزمن يجب تحويلة الى مسافة ..... فتضرب في سرعة الصوت.... ولتسهل العمليات الحسابية ..... قام المبرمج بحساب الزمن اللازم لقطع مسافة مقدارها 1 سنتمتر فوجدها تساوي 30 مايكرو ثانية

الان نستطيع بسهولة حساب المسافة بقسمة الزمن على 30


المسافة = زمن الذهاب \30 ( والتي هي زمن قطع مسافة قدرها 1 سنتمتر)

النتيجة ستكون المسافة بالسنتمتر ..... وكما ترى تم انجاز عمليات الحساب وتحويل الوحدات بمعادلة بسيطة واحدة

......................................

ارجع واقول فبل الخوض في العمليات الحسابية حاول ان تعرض قيمة التايمر بجزئية العلوي والسفلي على الشاشة وملاحظة التغييرات

...................................
سلام عليكم
كلامك صحيح ولكن هناك مشكله ارجوا ان نعيد نقاشها
نحن لابد من استخدام تايمر0 لكي يحسب زمن تردد 4 ميكاهيرتز اذا زمن 1us
معامل تقسيم 8 اي انه كل 8 نبضات يعد تايمر0 بواحد

===========================================
ليبدأ الالتراسونيك العمل , يتم قدحه Trigger بنبضة طولها 10us , ثم يقوم المرسل في الألتراسونيك بإرسال 8 نبضات بطول 40KHz , ثم ينتظر أن يصله صدى Echo للنبضات التي أرسلها , و تكون بين 100us-18ms اعتماداً على المسافة التي قطعتها الأمواج الصوت "في حال كان طول نبضة الصدى 36ms هذا يعني أنه لم يصطدم بجسم أمامه ! "
==============================================
في حاله انه زمن اصبح = 36ms =36000us
كيف نحصل على هذا زمن لاحظ
(cont=36000/(8x256
cont=18
هنا اصبحت معادله زمن الذهاب = التايمر * 8مايكرو \2=التايمر *4

فيها نسبه خطأ هناك حل
ماهو الحل اما يتم زايده نسبه تقسيم يمكن حسبه بسهوله
مقسم=36000/256=141
او نستخدم طريقه اخرى وهي طلما طفح تايمر0 نضع عداد قيمه الاوليه له صفر وبالتالي هذه معادله نهائيه
time=(contx256+tmr0)x8/2
time=(contx256+tmr0)x4
وكلما يصبح هناك طفحان يزداد cont بمقدار واحد
طبعا انت تعرف ان هذا زمن يبدا لحظه ان يصبحEcho =5 ويبقى شغال ونضعه في دائره اختباريه (1==while(Echo اخبره احسب زمن وعندما يصبح Echo =0
يخرج من قائمه while واخبره اذا كان زمن اكبر او= 36000 اظهر على شاشه مثلا عباره لاتوجد اشاره مثلا
ارجو بيان رايك بالموضوع وشكرا


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 09-08-2013, 06:32 AM المشاركة 61   
افتراضي


آسف ،، كنت اقصد كيف نقوم بتجربة البرنامج على البروتوس ! ،، لا يوجد فيه موديول للالتراساوند ! ،،

فكيف نقوم بتجربة الكود ،،

التجربة على الدائرة مباشرة ،، ممل !!



تمنياتي
سلام عليكم
اخي كريم يمكن ان نحاكي ذلك باستخدام سويجين الاول نسميه start عند ضغط عليه يبدا بارسال نبضه وبعدها من مفروض Echo يصبح 1 ولكن بالمحاكات بعد ضغط على سويج start وبعد لن ينتهي من ارسال نبضه نضع زمن تاخير قليل ثم نجعل Echo =1
وبعدها يبدا زمن ويتم حسابه باستخدام تايمر زيرو وبعدها لابد من ان يصبح Echo =0 ولكن بالمحاكاه اضع سويج الاخر كانما يحاكي Echo اي عند ضغط على هذا سويج يجعل Echo =0
بعدها لابد من تحويل الارقام الى str لكي اعرضها على شاشه
انا اكتبت برنامج يعرض زمن ومسافه باستخدام كلام علاه ولكني لم اكمله بعد
ولكن هنا مشكله هي ان ضغطه الانسان على سويج يحتاج وقت فالمسافه محسوبه بمايكروثانيه اما بالنسبه لنا لايمكن ان نحاكي هذا زمن لانه عند ضغط على سويج ومن ثم نضغط على سويج الاخر فقد نحتاج زمن بالثواني!!!
ولكن ماهو رايكم ان نحتال على برنامج لغرض محاكاه ان نخبره احسب زمن على اساس ثواني وليست مايكروثانيه لان صعب جدا
مشكله حاليا هي
كيف نلائم زمن ضغط سويج والانتظار وضغط سويج الاخر لجعل Echo =0 ثم حساب مسافه
وقد ملائمه هي نخلي زمن بالثواني وليس بمايكرو يعني نعدل على معادله مسافه
1cm=30us ....
1cm=100ms يعني كل ثانيه = 10cm
او اي قيمه لغرض محاكاه فقط
وعندما يتم برمجه للحقيقه نعدل على برنامج


WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 630
نشاط [ WRHLAMDA ]
قوة السمعة:
قديم 09-08-2013, 09:51 AM المشاركة 62   
افتراضي


سلام عليكم
كلامك صحيح ولكن هناك مشكله ارجوا ان نعيد نقاشها
نحن لابد من استخدام تايمر0 لكي يحسب زمن تردد 4 ميكاهيرتز اذا زمن 1us
معامل تقسيم 8 اي انه كل 8 نبضات يعد تايمر0 بواحد

===========================================
ليبدأ الالتراسونيك العمل , يتم قدحه Trigger بنبضة طولها 10us , ثم يقوم المرسل في الألتراسونيك بإرسال 8 نبضات بطول 40KHz , ثم ينتظر أن يصله صدى Echo للنبضات التي أرسلها , و تكون بين 100us-18ms اعتماداً على المسافة التي قطعتها الأمواج الصوت "في حال كان طول نبضة الصدى 36ms هذا يعني أنه لم يصطدم بجسم أمامه ! "
==============================================
في حاله انه زمن اصبح = 36ms =36000us
كيف نحصل على هذا زمن لاحظ
(cont=36000/(8x256
cont=18
هنا اصبحت معادله زمن الذهاب = التايمر * 8مايكرو \2=التايمر *4

فيها نسبه خطأ هناك حل
ماهو الحل اما يتم زايده نسبه تقسيم يمكن حسبه بسهوله
مقسم=36000/256=141
او نستخدم طريقه اخرى وهي طلما طفح تايمر0 نضع عداد قيمه الاوليه له صفر وبالتالي هذه معادله نهائيه
time=(contx256+tmr0)x8/2
time=(contx256+tmr0)x4
وكلما يصبح هناك طفحان يزداد cont بمقدار واحد
طبعا انت تعرف ان هذا زمن يبدا لحظه ان يصبحEcho =5 ويبقى شغال ونضعه في دائره اختباريه (1==while(Echo اخبره احسب زمن وعندما يصبح Echo =0
يخرج من قائمه while واخبره اذا كان زمن اكبر او= 36000 اظهر على شاشه مثلا عباره لاتوجد اشاره مثلا
ارجو بيان رايك بالموضوع وشكرا

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



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