عفوا أخى وبالتوفيق ،
|
بارك الله فيك استاذ وليد عمل اكثر من رائع وشرح متميز وكعادتك يتميز بالبساطة.
عندى تعليق على الكود الاخير لو وضعت تااخير زمنى بين كل امر مثلا (20ms) منعا للتذبذب او ما يسمى بال(De-bouncing).
ارجو لك التوفيق
|
مرحبا بك أخى روبوتا وشكرا لكلماتك ولتعليقك ،
أخونا ربوتا يتكلم عن أمر تأخير زمنى بسيط لتلافى عيب بعض أنواع المفاتيح الضاغطة لأن المايكرو كنترولر يكون سريعا جدا فقد يحدث أثناء ضغط المفتاح ارتعاش أو سوء تلامس فى بداية الضغط وهذا وارد ، لكن فى برنامجنا فنحن نريد أن نركز على فكرة البرنامج الأساسية وحسب سير البرنامج يمكننا وضع تعليمة التأخير هذه كما يمكننا وضع أداة شرط لتأكيد عدم تكرار ضغط المفتاح كما يمكننا إضافة مكثف صغير على طرفى المفتاح لمنع الإرتعاش أو سوء التلامس وبذلك نكون تلافينا تعطيل البرنامج وهكذا يمكننا متابعة أكثر من طريقة ، وكل هذا بمشيئة الله سنتعرض له من خلال الكثير من المشاريع الجميلة القادمة .
---------------------------------------------
|
السلام عليكم
شكرا لك أستاذ ماجد على هذا الشرح الميسر و المتميز
و بارك الله فيك و يسر لك أمورك و بارك لك فى وقتك
|
وعليكم السلام ورحمة الله وبركاته مهندسنا الكريم mohamedse بارك الله لك و للأستاز ماجد وهكذا لم ننسى من لهم حسن الخلق
----------------------------------------------------
تطبيقات على الدرس الأول .
===============
تابع المداخل والمخارج :
=============
رأينا أن المتحكم به أطراف تندرج تحت رمز RB وتأخذ ترقيما من صفر إلى رقم سبعة وكل رقم هنا يعبر عن حجرة صغيرة داخل المتحكم .
وكل حجرة متصل بها طرف من أطراف المتحكم .
فإذا تكلمنا عن نظام ديجيتال فإننا نعنى نظام ( رقمى ) وهنا يتعامل المتحكم مع دخل وخرج بالنظام الرقمى .
ما معنى دخل وخرج للمتحكم ؟
-------------------------------
نعرف أن الكمبيوتر الشخصى له وسائل إدخال ووسائل إخراج ،
فمثلا وسائل الإدخال تتمثل فى لوحة المفاتيح ( Key board ) أو الفأرة ( Mouse ) أو المايكروفون أو الكاميرا أو مدخلات أخرى مثل قلم ضوئى و حساس بصمة الإصبع وغير ذلك من ملحقات إدخال .
أما وسائل الإخراج فهى تتمثل فى شاشات العرض أو السماعات وما شابه من ملحقات تمكن الكمبيوتر من إخراج البيانات للمستخدم .
كذلك المتحكم هو عبارة عن كمبيوتر صغير يستطيع أن يجرى العديد من العمليات الحسابية المعقدة والمركبة و معالجة الرسومات ومقارنات إشارة وترددات و تستطيع عمل أشياء كثيرة لذلك تجده يدخل فى غالبية الأجهزة الإلكترونية .
يمكننا وصل لوحة مفاتيح خاصة بالمتحكم وغير ذلك من حساسات حرارة و سرعات و حساسات ضوئية .
دخل المتحكم إما أن يكون تناظريا أو رقميا , تناظريا أى أن المتحكم يستشعر قيم مختلفة من إشارة الدخل فيشعر من بداية صفر فولت تدريجيا إلى خمسة فولت , أما الدخل الرقمى فإن المتحكم يشعر تقريبا بكل ما هو فوق 2,5 فولت كأنه خمسة فولت ولا يفرق معه القيمة هل هى 3 أم 4 أم 5 فولت فهو يعتبرها واحد فعال ويسمى دخل عالى أى كامل أما كل ما هو أقل من 2 فولت تقريبا فهو يعتبر صفر فولت سواء كان نصف فولت أو واحد فولت أو إثنان فولت فيعتبر دخل منخفض ( Low ) أى صفر أى لا يوجد دخل . وهذا ما يسمى بالتعامل بالنظام الرقمى , ونحن الذى يحدد هل نريد المتحكم يتعامل مع إشارات بالنظام الرقمى أم التناظرى .
نعود للحجرات أو ما يسمى بالسجلات أو بالبايت ، و البايت وحدة من وحدات قياس السعة للذاكرة والواحد بايت تساوى ثمانية بت والبت هى وحدة صغيرة جدا تستطيع أن تخزن رقم واحد فقط .
نؤكد على هذه المعلومة مرة ثانية للأهمية :
البايت يتكون من ثمانية بت حيث أن ( البايت ) أو ( byte ) وهى تتكون من ثمانية ( بت ) أى ( bit ) حيث أن البت لا تستطيع أن تخزن سوى رقم واحد فقط .
وهذا يعنى أن البايت يحتوى على ثمانية أرقام مخزنة ! فإنك إذا لم تخزن غير رقم مثلا فى ( البايت ) فإنك تكون بذلك شغلت ( بت ) وتركت سبعة بت ومعنى تركتهم أى أصبحوا أصفار أى فوارغ .
هل معنى ذلك أن البايت لا يمكن تحميله إلا برقم ثمانية فقط (8) ؟
لا طبعا فإننا نتعامل كما قلنا بالنظام الرقمى أى واحد أو صفر فقط . إذن نخزن فى البايت ثمانية من بين العنصران واحد أوصفر يعنى كل bit من الثمانية سنحملها بقيمة 1 أو صفر .
مثلا نحن قلنا فى أول برنامج كتبناه مثلا :-
portb = %11010001
أى إجعل المنفذ المسمى b الذى هو عبارة عن بايت كامل أى أنه يحتوى على ثمانية من ال bit اجعله محمل بالرقم المذكور 11010001 يعنى الثمانى بتات تمتلئ بهذه الوحايد والأصفار !
فنكون حصلنا على الترتيب من اليمين إلى اليسار أن البت الأولى مخزن بها 1
والبت الثانية مخزن بها صفر
والبت الثالثة مخزن بها صفر
وهكذا كما نرى ترتيب الرقم
وبما أن الرقم المكون من ثمانى خانات هذا لا يمكن أن يكون أى شئ غير 1 أو صفر فقط كى يتم تخزينه فى البتات فإننا بذلك نطلق عليه اسم الرقم الثنائى ،
إذن معنى كلمة أعداد ثنائية أو أرقام ثنائية جائت من استخدامها لعنصران اثنان فقط هما الواحد والصفر .
حسب ترتيب الأرقام المكونة من 1 أو صفر يكون الرقم العشرى الذى نعرفه فإننا فى حياتنا نتعامل مع أرقام تتكون من عشر أرقام بداية من الصفر ثم الواحد ثم إثنان ثم ثلاثة ثم ... ... ... إلى رقم تسعة ولذلك سميت بالعشرية لإستخدامها عشر عناصر
فإذا أردنا تخزين رقم مثل 145 داخل المتحكم فإننا يمكن أن نكتب هذه التعليمة :-
portb = 145
وسيقوم برنامجنا تلقائيا بتحويل هذا الرقم إلى عدد بالنظام الثنائى كى يتم تخزينه بما يناسب المتحكم .
أما المبرمج حضرتك تقوم بكتابة الرقم كما تحب بالنظام الثنائى أو بالنظام المعتاد والمعروف بالنظام العشرى أو بنظام آخر سبق ذكره وهو النظام السداسى عشر .
لكتابة رقم 145 بالنظام العشرى رأينا التعليمة السابقة أننا قمنا بكتابته مباشرا بعد علامة يساوى .
أما إن أردنا كتابة الرقم بالنظام الثنائى فيكتب هكذا :-
portb = %10010001
هكذا وضعنا علامة مئوية وهى من شروط برنامجنا لغة المايركوبيزيك لكى يفهم البرنامج أننا كتبنا هذا الرقم بالنظام الثنائى .
فمثلا الرقم 1001% مكتوب بالنظام الثنائى وهو يكافئ الرقم 9 فى النظام العشرى فإننا لو لم نضع العلامة المئوية لتعامل البرنامج معه كأنه ألف وواحد بالنظام العشرى .
أنا كمبرمج هل أحتاج معرفة هذه الأنظمة والتى قد يراها البعض أنها شئ معقد ؟
لا يشترط معرفتها ولكن يستحسن أن أعرف كيف جائت الفكرة وكيف يمكننى أن أقوم بتحويلها باستخدام عقلى أو الورقة والقلم .
أما إن أردنا السهولة والسرعة فإننا نضغط فى البرنامج على هذا الخيار كما بالصورة :-
نختار كما فى الصورة مساعد التحويل ثم نكتب الرقم الذى معنا فى مكانه فإن كان الرقم معنا بالنظام العشرى فنكتبه فى مكان الرقم العشرى فيظهر لنا الرقم الموافق له بالنظام السداسى عشر وبالنظام الثنائى فى الحال ،
وإن كان الرقم معنا بالنظام الثنائى نكتبه فى مكانه المناسب فنرى التحويلات فى أماكنها ,
هذه ميزة من مزايا البرنامج لتحويل الرقم لتسهل عليك هذا الأمر .
لكن لا تشغل بالك أخى بهذه العمليات فهى ليست ضرورية إنما هى لخدمتك وليست هامة للبرنامج فالبرنامج يقبل منك الرقم بأى نظام تحبه أنت .
إذن لدينا سؤال : هل نحن بحاجة لأن نكتب فى البرنامج أحيانا بالنظام الثنائى مثلا أو بالنظام العشرى أو السداسى عشر ؟ ولماذا لم نكتفى بالكتابة بنظام واحد ؟
لسنا بحاجة لكل هذا بل يمكننا الكتابة بنظام واحد فقط كما تحب لكن أحيانا يريد بعضنا أن يقوم مثلا بعمل ليدات تتحرك بشكل معين فيحب أن يكتب ذلك كرسمة فقمنا فى أول برنامج لنا بكتابة التعليمات هكذا :-
الرقم الموجود هكذا :-
01010101
وهذا يعنى أن البت الأول من اليمين والذى يرمز له RB0 تم تخزين رقم بداخله ،
والبت الثانى طبعا من جهة اليمين والذى يرمز له بالرمز RB1 تم تخزين صفر بداخله وهكذا ،
ومعنى تخزين 1 به أى أن هذا الطرق الموجود على الرسمة الخاصة بالمتحكم تحت عنوان البت الأول RB0 والتى توافق على مخطط المتحكم الرجل رقم 6 انظر الرسمة التالية :-
وقلنا معنى أن هذا البت به 1 فإن الليد المتصل عليه سيضئ وأن البت التالى والذى هو يقع على الرجل رقم 7 به صفر أى أن الليد المتصل بها سيكون منطفئ وهكذا .
ومن هنا فإننا نجد أن استخدامنا للأرقام بالنظام الثنائى هنا أسهل لنا لتوضيح أى ليد نريد أن يضئ أو ينطفئ ولن نهتم هنا بالرقم بالنظام العشرى أو السداسى عشر ، لكننا فى بعض المواقف والعمليات الحسابية سنتعامل بالنظام العشرى ولم نكن بحاجة للنظام الثنائى وهكذا
يتتبع ،