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

   

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 22-10-2009, 10:53 PM المشاركة 1145   
افتراضي



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

اعلانات

الصورة الرمزية علي بدر
علي بدر
:: مهندس ::
تاريخ التسجيل: Jun 2009
الدولة: Oman
المشاركات: 37
نشاط [ علي بدر ]
قوة السمعة:
قديم 23-10-2009, 03:41 PM المشاركة 1146   
افتراضي


الاخ علي هل تمكنت من حل المشكل
اذا لم تتمكن سوف أوضح لك كيفية الخروج من أي حلقة باستخدام interrupt
شكرا لك أخي على إهتمامك وجزاك الله عني خيرا _ فعلا ظنك في محلة فلم أستطع حل المشكلة

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

lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 23-10-2009, 05:38 PM المشاركة 1147   
افتراضي


شكرا لك أخي على إهتمامك وجزاك الله عني خيرا _ فعلا ظنك في محلة فلم أستطع حل المشكلة
لنتحدث على ال interrupt .
لنقل أنه لدينا مجموعة من الأشخاص يتحدثون في أمر ما ولكل شخص دور لا يحق
له الحديث الى اذا وصل دوره كما يحدث عادة في برلماناتنا(المجلس الشعبي الوطني)
ثم حدث وان انشطر جزء من السقف (لان المبنى قديم كما في برلمناتنا) وهم بالسقوط على رئيس المجلس وقد لاحظ أحد الأ عضاء ذلك فهل ينتظر دوره لينبه رئيس المجلس أم يتدخل لينبهه عسى أن ينقضه.
الكل يقول لابد من التدخل لان انتظار الدور قد يؤدي الى فوات الأوان ولافائدة من التدخل بعد ذلك.
هذا هو بالظبط ال interrupt
ال pic يشتغل بشكل عادي ثم حدث أمر طارئ يتوقف ال pic فورا عن تنفيذ البرنامج
بعد انهاء اخر تعليمة
ويتجه لتنفيذ برنامج الطوارئ الذي نسميه نحن ال interrupt ونكتب فيه البرنامج
الذي نشاء طبعا في حالتك هذه سوف لن يكون البرنامج سوى تعليمة واحدة
goto ahmed وتضع ahmed في بداية البرنامج أو في المكان
الذي تختبر فيه ال switche
نكتبها بالشكل التالي في أي مكان

void interrupt( ) {goto ahmed;} -a
سوف نضيف هنا تعليمة اخرى لكن بعد أن نفهم شيء اخر

ولكن كيف تحدث ال interrupt ؟
في ال pic 16f84a له 4 حالات اذا حدثت حالة منهم ينفذ ال pic ال INTERRUPT
اولا: تغير وضعية الأرجل RB4 أو RB5 او RB6 او RB7 فقط
أي مثلا كان دخل RB4 ذو قيمة 1 ثم تغير الى 0 هنا تحدث INTERRUPT
وهي حالتك أي أنك لابد أن تضع ال SWITCHES في الأرجل المذكورة سابقا
تقول ولكن لم نلاحظ هذا سابقا نعم
لانه هناك مسجل اسمه INTCON سوف أوضح كيف نشغل فيه ال INTERRUPT
وهو بسيط
يحتوي المسجل INTCON على 8 BITS
1-
GIE تعني GLOBAL INTERRUPT ENABLE تعني أسمح بحدوث جميع انواع INTERRUPT
أي GIE=1 مسموح
GIE=0 نمنع ل interrupt
طبعا عندنا GIE=1 وهي ال bit7 اي ال bit7=1
2-
RBIE تعني RB port change Interrupt Enable bit تعني أسمح بحدوث ال INTERRUPT في حالة تغير وضعية portb أي رجل rb4 أو RB5 او RB6 او RB7
أي RBIE=1 في حالتنا و هي ال BIT3 أي ال bit3=1
هناك bit اخرى تهمنا وهي
RBIF و هي تعني Port Interrupt Flag bit وهي ال bit0 وهذه لا نضعها نحن بال pic
في حالة حدوث interrupt
يضع فيها ال pic القيمة 1
هي تشبه العلم عند حدوث شيء يؤدي الى interrupt يرفع العلم أي بوضع القيمة 1
فيها فاذا كانت ال interrupt مسموحة يعمل ال pic ال interrupt واذا كانت غير
مسموحة لا يعمل شيء لكن يمكن أن نستغلها نحن في أشياء أخرى.
في جميع الحالات الأخرى نجدها 0
طبعا ال pic لا يرجعها 0 بعد معالجة ال interrupt ولابد أن نرجعها نحن الى 0
وهذه التعليمة التي تحدثت عنها سابقا فاذا لم نرجعها 0 فلن يخرج ال pic من
من ال interrupt ويبقى يكرر فيها
التعليمة هي
INTCON.RBIF = 0;--------0 لنرجع ال RBIF الى 0
ال BITS المتبقية لا تعنينا في حالتك هذه
أي قيمة ال INTCON سوف تكون
INTCON=0b10001000; 0
البرنامج النهائي هو:


INTCON=0b10001000;----------------------------------------------0
void interrupt( ){ goto ahmed ;------------------------------------0
INTCON.RBIF = 0; }-------------------------0


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


التعديل الأخير تم بواسطة : lahoioui بتاريخ 27-10-2009 الساعة 03:35 PM

الصورة الرمزية علي بدر
علي بدر
:: مهندس ::
تاريخ التسجيل: Jun 2009
الدولة: Oman
المشاركات: 37
نشاط [ علي بدر ]
قوة السمعة:
قديم 24-10-2009, 04:04 PM المشاركة 1148   
Thumbs up


لنتحدث على ال interrupt .
لنقل أنه لدينا مجموعة من الأشخاص يتحدثون في أمر ما ولكل شخص دور لا يحق
له الحديث الى اذا وصل دوره كما يحدث عادة في برلماناتنا(المجلس الشعبي الوطني)
ثم حدث وان انشطر جزء من السقف (لان المبنى قديم كما في برلمناتنا) وهم بالسقوط على رئيس المجلس وقد لاحظ أحد الأ عضاء ذلك فهل ينتظر دوره لينبه رئيس المجلس أم يتدخل لينبهه عسى أن ينقضه.
الكل يقول لابد من التدخل لان انتظار الدور قد يؤدي الى فوات الأوان ولافائدة من التدخل بعد ذلك.
هذا هو بالظبط ال interrupt
ال pic يشتغل بشكل عادي ثم حدث أمر طارئ يتوقف ال pic فورا عن تنفيذ البرنامج
بعد انهاء اخر تعليمة
ويتجه لتنفيذ برنامج الطوارئ الذي نسميه نحن ال interrupt ونكتب فيه البرنامج
الذي نشاء طبعا في حالتك هذه سوف لن يكون البرنامج سوى تعليمة واحدة
goto ahmed وتضع ahmed في بداية البرنامج أو في المكان
الذي تختبر فيه ال switsh
نكتبها بالشكل التالي في أي مكان

void interrupt( ) {goto ahmed;} -a
سوف نضيف هنا تعليمة اخرى لكن بعد أن نفهم شيء اخر

ولكن كيف تحدث ال interrupt ؟
في ال pic 16f84a له 4 حالات اذا حدثت حالة منهم ينفذ ال pic ال INTERRUPT
اولا: تغير وضعية الأرجل RB4 أو RB5 او RB6 او RB7 فقط
أي مثلا كان دخل RB4 ذو قيمة 1 ثم تغير الى 0 هنا تحدث INTERRUPT
وهي حالتك أي أنك لابد أن تضع ال SWITSHS في الأرجل المذكورة سابقا
تقول ولكن لم نلاحظ هذا سابقا نعم
لانه هناك مسجل اسمه INTCON سوف أوضح كيف نشغل فيه ال INTERRUPT
وهو بسيط
يحتوي المسجل INTCON على 8 BITS
1-
GIE تعني GLOBAL INTERRUPT ENABLE تعني أسمح بحدوث جميع انواع INTERRUPT
أي GIE=1 مسموح
GIE=0 نمنع ل interrupt
طبعا عندنا GIE=1 وهي ال bit7 اي ال bit7=1
2-
RBIE تعني RB port change Interrupt Enable bit تعني أسمح بحدوث ال INTERRUPT في حالة تغير وضعية portb أي رجل rb4 أو RB5 او RB6 او RB7
أي RBIE=1 في حالتنا و هي ال BIT3 أي ال bit3=1
هناك bit اخرى تهمنا وهي
RBIF و هي تعني Port Interrupt Flag bit وهي ال bit0 وهذه لا نضها نحن بال pic
في حالة حدوث interrupt
يضع فيها ال pic القيمة 1
هي تشبه العلم عند حدوث شيء يؤدي الى interrupt يرفع العلم أي بوضع القيمة 1
فيها فاذا كانت ال interrupt مسموحة يعمل ال pic ال interrupt واذا كانت غير
مسموحة لا يعمل شيء لكن يمكن أن نستغلها نحن في أشياء أخرى.
في جميع الحالات الأخرى نجدها 0
طبعا ال pic لا يرجعها 0 بعد معالجة ال interrupt ولابد أن نرجعها نحن الى 0
وهذه التعليمة التي تحدثت عنها سابقا فاذا لم نرجعها 0 فلن يخرج ال pic من
من ال interrupt ويبقى يكرر فيها
التعليمة هي
INTCON.RBIF = 0;--------0 لنرجع ال RBIF الى 0
ال BITS المتبقية لا تعنينا في حالتك هذه
أي قيمة ال INTCON سوف تكون
INTCON=0b10001000; 0
البرنامج النهائي هو:


INTCON=0b10001000;----------------------------------------------0
void interrupt( ){ goto ahmed ;------------------------------------0
INTCON.RBIF = 0; }-------------------------0


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


يوسف16
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2004
المشاركات: 56
نشاط [ يوسف16 ]
قوة السمعة:
قديم 25-10-2009, 07:29 AM المشاركة 1149   
افتراضي


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


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 25-10-2009, 08:46 AM المشاركة 1150   
افتراضي


عاشت ايدك يا ابو حيدر .
شكرا جزيلا


lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 26-10-2009, 06:16 PM المشاركة 1151   
افتراضي


أشكرك جزيل الشكر على هذا الشرح الوافي ... سوف أقوم بإذن الله بتطبيق ما علمنتني إياه وبإذن الله سوف يعمل البرنامج
الاخ علي لم يشتغل عندك البرنامج وهذا مؤكد أين يكمن السبب
هذا ما أردت أن أوضحه قبل أن أعطيك البرنامج جاهزا
عند حدوث interrupt يعود ال pic دائما للمكان الذي قطع عنده العمل ولا يمكن بأي حال من الأحوال الخروج من ال interrupt بتعليمة ال goto
تفضل أخي علي البرنامج مع ملف المحاكاة وهي الدارة التي يجب عليك تركيبها
أسأل عن أي شيء وسوف أوضح لك لما فعلت كذا ولم أفعل كذا
تحياتي
http://ifile.it/ox259rb/ahmed.rar


أسف أخي علي لم أنتبه أنك قلت لوجيك 1 لقد عملت علي لجيك 0
تفضل البرنامج الذي يشتغل على الجيك 1
http://ifile.it/h901alm/ahmed1.rar

اذا كان الغرض اشعال ل led فقط فضع مقامة 330 أوم قبل ال led .

وهذه الدارة النهائية :
http://ifile.it/1zimlyo/ahmed12.rar

وهذه الدارة ادا كنت تريد المداخل منفصلة :
http://ifile.it/zvgmh71/ahmed15.rar


التعديل الأخير تم بواسطة : lahoioui بتاريخ 27-10-2009 الساعة 09:49 PM

yacine_etn
:: مهندس ::
تاريخ التسجيل: Sep 2009
المشاركات: 23
نشاط [ yacine_etn ]
قوة السمعة:
قديم 26-10-2009, 10:50 PM المشاركة 1152   
افتراضي


baraka allaho fikom 3la hadihi dawra
j'ai une question stp
comment faire un variation de vitesse de moteur c- c avec un microcontroleur
et merci beacoup
bon courage



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