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

أدوات الموضوع

geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:105
قديم 28-02-2009, 12:38 AM المشاركة 1   



السلام عليكم

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

اخي Nighto

بالنسبة للكود الذي كتبته انت فلا مشكلة فيه..فقد قمت بتجربته على برنامج البروتوس وعمل بشكل جيد

حيث استخدمت الطرف A0 كمدخل بينما الاطراف B0,B1,B2 كمخارج...

هناك عدة نقاط اريد ان اوضحها :
1) انت عندما استخدمت تعريف المخارج استخدمت التعليمة

trisb=0b00000000;

ولم تعطي المخارج بداية القيمة صفر portb=0b00000000;
وبالتالي في برنامج المحاكاه الذي سارفقه ستجد ان احد المخارج وهو الاخير
ب7 قد اخذ قيمة عشوائية وهي التشغيل..بما انه ليس موصولا به شي في برنامجك فلا مشكلة..ولكن في حال كنت تتعامل مع كل المخارج فيجب ان تجعل المخرج صفر ثم تعطي القيم التي تريدها انت حتى لا يعمل الجهاز المتصل بهذا المخرج عشوائيا ...

2) القيم التي تستخدمها انت بالبرنامج هي قيم صغيرة جدا..فانت تستخدم قيمة بالملي ثانية..فمثلا تستخدم 40 و60 و200 و750 وهكذا..وهي قيم اقل من ثانية..فكل 1000 ميلي ثانية تساوي في الواقع ثانية واحدة..وان العين يصعب عليها ان تلاحظ الحركات السريعة جدا..فيجب ان تستخدم قيم على الاقل 500 ميلي ثانية واكثر من اجل ان تلاحظ تنفيذ بعض التعليمات مثل اطفاء وتشغيل الاضواء وهكذا ..هذا الملف الذي استخدمته بالبروتوس يمكنك ان ترى كيفية تنفيذ البرنامج من خلاله..هذا ما اعتقد انه قد سبب مشكلة التحميل الزائد للبك في البرنامج (الا وهو الفترات الزمنية القصيرة جدا جدا)..وهذا هو البرنامج كما كتبته انت يعمل بشكل جيد معي..


3) البرنامج الذي استخدمته انت وهي تشغيل متلاحق للاضواء او المخارج مع وجود تاخير زمني بين كل مخرجين مشكلته موضوع الفترة الزمنية القصيرا جدا جدا بين تغيير المخارج وبالتاي موضوع الحمل الزائد ايضا..

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

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

for(r=0;r<2;r++)
{portb=0b11111111;
delay_ms(100);
portb=0b11111011;
delay_ms(50);
portb=0b11111111;
delay_ms(250);
portb=0b11111011;
delay_ms(60);
portb=0b11111111;
delay_ms(70);
portb=0b11111011;
delay_ms(40);
portb=0b11111111;
delay_ms(300);
portb=0b11111011;}
delay_ms(80);

6) ان استخدام الامر
if(porta.f0==0) {portb.f0=1;portb.f1=1;portb.f2=1;}
هو نفس الاستخدام
if(porta.f0==0) {portb=0b00000111;}

وهذا لن يؤثر على المعالج بشيء.فهو يقوم طبيعيا بتنفيذ كثير من التعليمات المتتالية مباشرة.. ولكن الفترات الزمنية التي تستخدم (اجزاء من الثانية)وهي تسبب المشكلة..بالاضافة ان العين من المستحيل ان تلحظ التغيرات التي تستخدمها فمثلا 100 ميلي ثانية هي 1 من 10 اجزاء من الثانية. والثانية بالنسبة لنا سريعة جدا فكيف بجزء من 10 منها فمن المستحيل ملاحظتها للعين حتو لو تغيرت في البرنامج فلن تلحظها العين ابدا..

7) الملاحظة التالية:
(ولكن حدث معى نفس المشكلة عندما استخدمت أمر else
واكتشفت أنه لا يمكن تطبيق أمر else مع أمر if فى حالة أن أمر if الثانى يشترط عدم الضغط على الزر فيحاول المعالج معالجة الأمرين فى وقت واحد تقريبا بفارق ضئيل للغاية فى الوقت وهنا يحدث التحميل الزائد على المعالج)

ان المعالج يعمل مع الشرط بالطريقة التالية:
في حال IF يختبر المعالج الشرط فان كان محققا فانه ينفذ ما بعده من اوامر..اما ان لم يتحقق الشرط فيتحقق من else .. وبالتالي لا ينفذ الامرين معا (ΙF,else) ابدا .لانه الشرط اما ان يكون محقق او لا..ففي حال تحقق الشرط فينفذ جمله If.. وان لم يتحقق ينفذ جملة else..هذه طريقة عمل الشرط..ففي حال انه نفذ الاثنين معا فلن يكون هناك جملة شرط تحدد سير البرنامج عندنا...
ولا داعي للاعتذار عن التعلم..فنحن كلنا نتعلم دائما..ولو لم نكن كذلك لما احتجنا احدا من الناس ليساعدنا في شيء..وكما قال الله تعالى: ((وفوق كل ذي علم عليم))..الله ارزقنا العلم النافع لنا ولجميع المسلمين..

السلام عليكم اخي حيدر..

كيف الحال؟ لقد اعجبني حبك ونشاطك وان شاء الله تكون امورك على خير ما يرام...اما البرنامج لدينا (والذي وضعته انت) فهو يدل على انك متابع جدا للمواضيع المتلاحقه وقد فهمتها جيداونحن نحتاج فعلا لتاخير زمني لنلاحظ ان هناك اضاءة لليد..ولكن هذا البرنامج ليس نفس البرنامج الذي طلبه السائل ولكن البرنامج الذي وضعته انت يجب ان يناقش (فانا لم الحظ الفكرة الا عندما طرحتها انت اليوم)..والبرنامج يعمل كالتالي:


جملة IF الاولى تختبر اذا كان المفتاح مضغوط ام لا..فان كان مضغوطا فهي تنفذ حلقة while والتي تقوم بتنفيذ الامر بين القوسين الفارغين مادمنا ضاغطين على المفتاح وبما اننا ضاغطين فسيكون البرنامج في تنفيذ للحلقة المفرغة ولن يعمل اي شي..وعندما نبعد يدنا عن المفتاح فانه سيخرج اشارة على المنفذ ب0 وسيقفز عن الاوامر بعد else (لانه عند البداية اختبر الشرط وكان محقق لهذا سيقفز عن else في نفس الدورة (لنقل انها الاولى) والان بسبب الحلقة loop سيعود من جديد لتنفيذ البرنامج ولاننا كنا قد ازلنا يدنا عن المفتاح فهو لن ينفذ جملة IF لانها غير محققة ويبدا بتنفيذ else مباشرة وهي تخرج صفر على المخرج ب0 وبالتالي فقد الغت الجهد في الحلقة الاولى (بسبب سرعة تنفيذ البرنامج ولان العين لا تلحظ الفترات الزمنة القصيرة جدا..) وهذا سنجد ان البرنامج لا يضيء الليد على المخرج ب0 مهما ضغطنا على المفتاح(فهو فعليا قد اخرج جهد ولكننا لم نلحظه بسبب السرعة العالية لتنفيذ البرنامج) ..ربنا يبارك فيك ويجزيك الخير ويوفقك لما يحبه ويرضاه...


واخر دعوانا ان الحمدلله رب العالمين..وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم..


التعديل الأخير تم بواسطة : geniusse01 بتاريخ 28-02-2009 الساعة 04:25 PM
اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 28-02-2009, 12:58 AM المشاركة 2   
افتراضي


وعليك السلام اخي geniusse واشكر على التحية والدعاء وفقك الله
ذكرت (ان هذا البرنامج ليس نفس البرنامج الذي طلبه السائل) واود ان اقول انا لم اجب على سائل ولكن هذا كان آخر برنامج كتبه الاستاذ احمد في الدرس الرابع فأثار عندي السؤال الذي طرحته عليه ضمنيا
واشكرك على التوضيح

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

Nighto
:: مهندس ::
تاريخ التسجيل: Feb 2009
المشاركات: 18
نشاط [ Nighto ]
قوة السمعة:0
قديم 28-02-2009, 02:02 AM المشاركة 3   
x6


ما هذا الرد يا geniusse01 انه طويل جدا لم أعلم أن سؤالى يستحق كل هذا أشكرك سيدى على هذا الرد الرائع السريع ولكن لى تعقيب صغير أنا وأنت نتكلم فى نفس النقطة وهى التوقيت ولكن انت تتكلم عنه من جهة وأنا من أخرى ولكنهما يصبا فى نفس البحر أعنى أنك تقول أن الكود الذى كتبته أنا صحيح وأنا أوافقك الرأى ولكنه صحيح نظريا بينما عمليا فهو خطا لأن على تردد مؤقد للبك يساوى 1.04 ميجا فان أقل توقيت بين كل أمرين هو 15 مللى ثانية والا فسيكون هناك تحميل على المعالج أعتقد أنه يتلفه!!! وبالنسبة للقيم الصغيره فى هذا البرنامج
كود:
for(r=0;r<2;r++)
{portb=0b11111111;
delay_ms(100);
portb=0b11111011;
delay_ms(50);
portb=0b11111111;
delay_ms(250);
portb=0b11111011;
delay_ms(60);
portb=0b11111111;
delay_ms(70);
portb=0b11111011;
delay_ms(40);
portb=0b11111111;
delay_ms(300);
portb=0b11111011;}
delay_ms(80);
فأنا أقصد هذا ليعطى نتيجة معينه وأنا متأكد مائة بالمائة أنه لا يوحد اختصار لتوقيتات هذا البرنامج

فأنا أعنى انه لو كان البرنامج موحد التوقيتات مثل هذا
كود:
void main (){
trisa=1;
trisb=0;
loop:
if(PORTA.f0==0)
{portb.f0=1;delay_ms(250);
 portb.f1=1;delay_ms(250);
 portb.f2=1;delay_ms(250);
 portb.f3=1;delay_ms(250);
 portb.f4=1;delay_ms(250);
 portb.f5=1;delay_ms(250);
 portb.f6=1;delay_ms(250);
 portb.f7=1;delay_ms(250);
 portb.f6=1;delay_ms(250);
 portb.f5=1;delay_ms(250);
 portb.f4=1;delay_ms(250);
 portb.f3=1;delay_ms(250);
 portb.f2=1;delay_ms(250);
 portb.f1=1;delay_ms(250);
 portb.f0=1;delay_ms(250);}

if(porta.f0==1){portb.f0=0;}

goto loop;}
بالنسبة لهذا الرد(((((((((((6) ان استخدام الامر
if(porta.f0==0) {portb.f0=1;portb.f1=1;portb.f2=1;}
هو نفس الاستخدام
if(porta.f0==0) {portb=0b00000111;})))))))))))))
فبالتجربة هناك اختلاف بين الأمرين ففى الأمر الأول البك لا يستجيب بالشكل المطلوب وهو اضائة ليدb0-b1-b2 فى نفس الوقت ولكنة يتشتت وتلاحظ أن الثلاثة يتذبذبوا بعشوائية بينما الأمر الثانى يجعلهم الثلاثة مضائين بثبات بكامل قوتهم

وهناك سؤال آخر عن امكانيا البك الذى نتعلم علية فهل يمكنه ان يصنع اضاءه تدريجية (fade) ام لا أعتقد أن الاجابة على هذا السؤال فى دروس متقدمة ولكن فضولى يلح على لا أريد أن أعرف الطريقة ان كان ممكن توليد الاضائه التدريجية ولكن فقط أريد أن أعرف ما اذا كان يمكن ل 16f84a ان يفعل هذا أم لا

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025