قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الاليقسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
هذا البرنامج البسيط يقوم بالعمل التالي: عند الضغط على السويتش يشتعل الليد ثم ينتظر لمدة 500 ميلي ثانية ثم ينطفئ لمدة 500 ميلي ثانية ويكرر نفس العمل وهذا باستعمال البيك 16f84a والمذبذب 4.00 ميجاهرتز ، ولكن بعد التطبيق الفعلي على الواقع لاحظت وجود مشكلة وهي عند تغذية الدائرة فإن الليد في كثير من الأحيان يشتعل مباشرة من تلقاء نفسه قبل الضغط عل السويتش خاصة إذا قمت بتغذية الدائرة وفصلها بسرعة ولمرات متتالية ، لذا أريد أن لا يشتعل الليد عند التغذية مباشرة حتى يتم الضغط على السويتش فعلا جزاكم الله خيرا.
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
هذا البرنامج البسيط يقوم بالعمل التالي: عند الضغط على السويتش يشتعل الليد ثم ينتظر لمدة 500 ميلي ثانية ثم ينطفئ لمدة 500 ميلي ثانية ويكرر نفس العمل وهذا باستعمال البيك 16f84a والمذبذب 4.00 ميجاهرتز ، ولكن بعد التطبيق الفعلي على الواقع لاحظت وجود مشكلة وهي عند تغذية الدائرة فإن الليد في كثير من الأحيان يشتعل مباشرة من تلقاء نفسه قبل الضغط عل السويتش خاصة إذا قمت بتغذية الدائرة وفصلها بسرعة ولمرات متتالية ، لذا أريد أن لا يشتعل الليد عند التغذية مباشرة حتى يتم الضغط على السويتش فعلا جزاكم الله خيرا.
اخي الكريم انصحك بستخدام هذة التعليمة الشرطيه في تعاملاتك مع السويتشات لأنها تضمن لك استقرار اكثر للبرنامج
كود:
if (Button(&PORTB, 2, 10, 1)){ }
لو استخدمت هذة التعليمة هكذا
كود:
if(porta.f0==1){portb=0b00001000;}
هنا لو وصلت نبضه موجبة سريعة سيعتبرها الميكرو انه تم الضغط علي المفتاح وسوف يتحقق الشرط فوراا وهذا يسبب المشاكل وعدم استقرار البرنامج ليكون عرضة لأي شوشرة او نابضة ضالة تؤسر علي تحقق الشرط
ولكن لاحظ هذة التعليمة الشرطية
كود:
if (Button(&PORTB, 2, 10, 1)){delay_ms(500) ; }
هنا أمر اختبار هل تم تطبيق 5 فولت علي البن رقم 2 في البورت B وهنا لاحظ الإختلاف
لو تم وصول نابضة موجبة سريعه علي البن رقم 2 في البورت B ماذا سوف يحدث هل يتحقق الشرط الإجابة ( نعم ) ولكن هذة النبضه هي نبضة سريعة جدا قد تصل سرعتها الي واحد ميكرو سانية أو أكثر وعند حدوث هذة النبضه يتحقق الشرط ويدخل ينتظر 10 ميكرو سانية ويختبر الشرط مرة أخري هل ماذال هناك جهد علي البن لو موجود يتحقق الشرط لو اختفي الجهد لم يتحقق الشرط .. وهنا ميزة كبيرة جداا.
لأن الشوشرة أو النبضات السريعة تظهر وتختفي بسرعة ولأن هذة التعليمة تختبر الشرط مرتين فهنا عند حدوث النبضه يدخل المتحكم في امر الشرط يجد امامة وقت انتظار 10 ميلي قبل ان يتحقق مرة اخري من الشرط وهنا ستكون النبضة قد اختفت وهنا المتحكم يجد أن البن رقم 2 = صفر فلا يفعل شيئ ويخرج من أمر الشرط دون تنفيذ شئ ..
وهكذا يكون البرنامج اكثر استقرارا
تفصيل التعليمه
كود:
if (Button(&PORTB, 2, 10, 1)){delay_ms(500) ; }
if (Button(&PORTB, 2 هنا هل تم الضغط علي المفتاح 10 انتظر عشرة ميلي سانية , 1 هل ماذال مضغوط علي المفتاح حسنا نفذ ما بين القوسين
كود:
{delay_ms(500) ; }
. وهنا رقم 2 هوا رقم البن في البورت ورقم 10 وقت انتظار ورقم 1 الحاله واحد منطقي ويمكنك تغيرها ب 0 صفر منطقي
بالتوفيق
التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 01-01-2020 الساعة 05:23 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
هذا البرنامج البسيط يقوم بالعمل التالي: عند الضغط على السويتش يشتعل الليد ثم ينتظر لمدة 500 ميلي ثانية ثم ينطفئ لمدة 500 ميلي ثانية ويكرر نفس العمل وهذا باستعمال البيك 16f84a والمذبذب 4.00 ميجاهرتز ، ولكن بعد التطبيق الفعلي على الواقع لاحظت وجود مشكلة وهي عند تغذية الدائرة فإن الليد في كثير من الأحيان يشتعل مباشرة من تلقاء نفسه قبل الضغط عل السويتش خاصة إذا قمت بتغذية الدائرة وفصلها بسرعة ولمرات متتالية ، لذا أريد أن لا يشتعل الليد عند التغذية مباشرة حتى يتم الضغط على السويتش فعلا جزاكم الله خيرا.
الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 05:58 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)