Saturday, November 12, 2011

Microcontroller المحكام الدقيق


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

كل هذه كانت أحلام وأفكار دارت بها أقلام الروايتين في القرنين الـ 19 والـ 20، لكن ألقى نظرة حولك لكن ألقى نظرة حولك، هل تنظر إلى ساعة يدك الرقمية أم إلى شاشة هاتفك الجوال، أن تعد طعامك في المطبخ داخل فرن " الميكروويف" أم أنت الآن داخل سيارتك الحديثة هل فكرت ما وراء هذه الأشياء التي تعمل بلمسة واحدة ما الذي يجعلها تقوم بهذه المهام دون الحاجة إلى مراقبة عملها أو مراجعة نتائجها ما الذي يجعلك تثق بها إلى هذه الدرجة سوف نذهب في رحلة وراء شاشة هاتفك المحمول ومقود سيارتك ومشغل الأغاني المتنقل (MP3) الخاص بك هذا الشيء الذي يعرف رغباتنا، وينفذها بهذه الكفاءة والدقة دون الحاجة إلى تدخلنا تمامًا، ما هذا الشيء الذي نجده في كل شيء حولنا إذا اقتحمت جهاز التحكم عن بعد الخاص بتلفازك أو نظرت داخل فرن الميكروويف في مطبخك قد تفاجأ إذا وجدت دائرة متكاملة واحدة أو اثنين على الأكثر، وقد تقابل هذا الموقف مع العديد من الأجهزة الأخرى داخل منزلك أو سيارتك لكن ما هو سر هذه الدائرة المتكاملة البسيطة القادرة على القيام بهذا الكم من المهام والعمليات.

منذ ظهور الحاسب الآلي في أربعينات القرن العشرين ثم ما تلاه من ظهور الحاسبات الشخصية في الستينات والسبعينات القرن العشرين من شركات مثل Intel, Texas instruments,IBM ظهرت الحاجة على الصعيد المدني والعسكري إلى أجهزة تتميزة بصغر الحجم والوزن قادرة على القيام ببعض (أو كل) العمليات التي تقوم بها الحاسبات الشخصية بنفس الكفاءة والقدرة وذلك توفيرًا للوقت والجهد وفتح الباب إلى أنظمة أكثر رفاهية.

إلى أن أعلنت شركة (Intel) في عام 1976 عن معالج جديد (Intel 8048) ذي معمارية تختلف تمامًا عن المعالجات المتعارف عليها وقتها، حيث من المتعارف عليه أن المعالج يعمل بتصميم تحتاج إلى توصيلات خارجية لذاكرة (ROM) أو(RAM) ومهيئات إدخال وإخراج (I/O interfaces) مما يحتاج إلى دائرة ليست صغيرة الحجم ولا يمكن تداولها بسهولة كانت معمارية هذا المعالج الذي أعلنت عنه إنتل يتكون من وحدة معالجةمركزية (CPU) وذاكرة RAM وذاكرة ROM معًا صغيرة الحجم ومنافذ إدخال/ إخراج (I/O Ports) لكن محدودة كل هذا على شريحة واحدة فقط مما يتيح للمبرمجين إنزال البرنامج الخاص بهم على ذاكرة الـ ROM ويستطيع بعدها هذا المعالج أن يتعامل تلقائيًا مع أوامر إدخال/ إخراج البيانات ومعالجتها دون الحاجة إلى تدخل مستقبلي منه كما أتاحت لهم صغر الحجم وخفة الوزن التي لم تكون متوفرة للمعالجات العامة (General purpose Microprocessor) و بالتالي سهولة الحركة والانتقال لحامل الجهاز، لكن كما ذكرنا أن ذاكرة الـ ROM والـ RAM كانت صغيرة المساحة (وذلك لاستطاعة دمجها على نفس الشريحة) إلى جانب أن وحدة المعالجة المركزية (CPU) تعمل بسرعة أقل من المعالجات ذات الأغراض العامة المعروفة وقتها، مما يجعل هذا المعالج غير قادر على القيام ببعض المهام التي يستطيع المعالج العادي القيام بها، لكي تم التغلب على مشكلة السرعة مستقبلاً بتحديد الأوامر التي يستطيع المعالج القيام بها، فيما عرف فيما بعد بمعمارية (RISC) Reduced instruction set computer حاسب ذات معمارية بأوامر مختزلة ووجدوا أن اسم معالج غير مناسبة لهذا الابتكار الجديد فاصطلحت تسمية المحكام الدقيق (Microcontroller) على هذا النوع من المعالجات.

المحكام الدقيق هو عبارة عن حاسب على مرققة (Computer-on-Chip), و من التسمية نفسها نستطيع أن نستنتج بعض الحقائق عنه, كلمة "محكام" تدل على أنه جهاز يستخدم في التحكم او معالجة شئ او إشارة ما, و كلمة "دقيق" تدل على إنه جهاز صغير الحجم, و يطلق على الأنظمة مثل المحكام الدقيق كلمة "أنظمة مدمجة" (embedded systems) نظرا لانها هي و الدوائر المساعدة تكون مدمجة داخل النظام التي تتحكم به المحكامات.

إذا ألقينا نظرة على الرسم التخطيطي للحاسوب الأولى سنجد أن تصميمها الداخلي يتكون من:

1- وحدة المعالجة المركزية والمكونة من وحدة الحساب والمنطق ALU و وحدة تحكم.

2- وحدة الذاكرة الـROM والـ RAMو القرص الصلب.

3- منافذ إدخال (Input Ports) للوحة المفاتيح والفأرة وأي أجهزة إدخال أخرى مثل الماسحات الضوئية (Scanners).

4- منافذ إخراج للشاشة والطابعة وأي أجهزة إخراج أخرى ودائمًا ما تحتاج المعالجات ذات الأغراض العامة إلى دوائر أخرى للعمل جنبًا إلى جنب وحدة المعالجة المركزية فتحتاج إلى وحدات RAM خارجية دائمًا كما إذا نظرنا إلى اللوحة الأم (Mother Board) سنجد العديد من الدوائر الأخرى الخاصة بكل منفذ مثل شريحة خاصة لمنفذ الـ USB وقد نجد وحدة منفصلة تمامًا خاصة بالشاشة مثل (VGA Card) أو للصوت أو المودم.

على الجانب الأخر إذا نظرنا إلى التصميم الداخلي إلى المحكامات الدقيقة (Microcontrollers) فإنها تتضمن وحدات التخزين الرئيسية (RAM, ROM) ووحدات الإدخال/ الإخراج (I/O modules) جنبًا إلى جنب وحدة المعالجة المركزية (CPU) على نفس الشريحة أو الدائرة المتكاملة نفسها، لكن يجب أن نوضح الفروق التي تجعل المحاكم الدقيق مختلف عن المعالج ذي الأغراض العامة وهي:

1- وحدات الذاكرة سواء الـ ROM أو الــ RAMغالبًا ما تكون محدودة المساحة والقدرة والسرعة مقارنة بوحدات الذاكرة في الحاسبات التي تستخدم المعالجات ذات الأغراض العامة.

2- وحدات إدخال/إخراج الخاصة بالمحكام دائما ما تكون بسيطة للغاية, و وحدات الإدخال و الإخراج في المحكام الدقيق تعمل على مستوى البتات (Bit level interface) و غير قادرة او مجهزة للتعامل مع لوحة مفاتيح او شاشة عرض.

3- وحدات المعالجة المركزية الخاصة بالمحاكم الدقيق غالبًا ما تكون محدودة القدرة والسرعة أي أنها قادرة على القيام ببعض المهام التي يستطيع المعالج ذي الأغراض العامة القيام بها، كما أن سرعة المحكام الدقيق محدودة مقارنة بالمعالجات العادية حيث من المعتاد أن يعمل على مذبذبات 4 أو 5 ميجا هرتز على عكس المعالجات العادية التي تعمل عادة على مذبذبات 2 و 3 جيجا هرتز.

ومحدودية المهام هذه جعلت الأوامر الخاصة ببرمجة المحكام الدقيق محدودة وقليلة العدد، وقد أوحت هذه المحدودية الى إنتاج وحدات معالجة مركزية للمحكامات الدقيقة تتميز بالعمل في بيئة الأوامر المحدودة عرفت بــ RISC (Computer Reduced Instruction Set) تتكون من ثلاث وحدات أساسية:

1- وحدة الحساب والمنطق (Arithmetic Logical Unit ALU)

2- وحدة التحكم في إرسال واستقبال البيانات والخطوط (Buses).

3- مسجلات (Registers).

ودور المسجلات داخل أي وحدة معالجة مركزية هام جدًا والمسجلات هي وحدة الذاكرة صغيرة الحجم (عادة ما تكون قادرة على تخزين عدد محدود من البتات) وسريعة للغاية تستخدم داخل وحدة المعالجة المركزية للاحتفاظ بعنوان معلومات او مكان ما فى الذاكرة مرتبط بالنشاط القائم داخل المعالج وعدد المسجلات داخل المعالجات ذات الاغراض العامة كبير نسبياً وذلك نظراً لعدد العمليات القائمة عليها والسهام الموكلة اليها وقد تسبب زيادة عدد المسجلات داخل وحدة المعالجة المركزية فى بطئ المعالج بعض الشئ خاصة مع اوامر المقاطعة (Interrupt ) والتى يجب فيها على المعالج الانتقال من البرنامج الجارى تنفيذه الى حالة انتظار او توقف لاستقبال بيانات من وحدة الادخال والاخراج (Input/Output ) وعند حدوث حالة المقاطعة للمعالج يتم حفظ البرنامج الجارى تنفيذه والمسجلات داخل مكان ما فى الذاكرة على ان يعود المعالج الى البرنامج الجارى التنفيذ واعادة المسجلات اصبح نقلها من مكان الى اخر فى حالة مقاطعة يحتاج الى وقت اكثر مما قد يجعل المعالج البطئ بعض الشئ.

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

و من أهم مميزات المحكامات الدقيقة هي استهلاكها الضئيل للطاقة, خاصة إن وضعت في المقارنة مع المعالجات ذات المهام العامة, مما يجعل المحكامات الدقيقة قادرة على العمل داخل الأنظمة الإلكترونية ذات الإستخدام الضئيل للطاقة (Low power electronics) او الأنظمة التي تعمل على مصادر الطاقة المتنقلة و المحدودة مثل البطاريات و وحدات الطاقة الشمسية, و تعتبر ميزة إستهلاك الطاقة من أهم الأسباب التي جعلت المحكام الدقيق على صدارة المكونات المستخدمة في التصميم الإلكتروني في العالم, مثال على ذلك تستهلك عائلة PIC 16F8x من إنتاج شركة Microchip تقريبا 800 ميلي وات كحد أقصى للإستهلاك.

و قد نرى تطبيقات المحكام الدقيق منتشرة و متوغلة بشكل قوي في حياتنا, عندما ترى اي جهاز يتمتع بنوع من "الذكاء" او التحكم الذاتي تأكد انه يحتوي على محكام دقيق, و من اشهر تطبيقات المحكام الدقيق الموجودة في حياتنا الهواتف المحمولة و التي تستخدم نوع خاص من المحكامات الدقيقة (DSP) او معالجات الإشارات الرقمية لضمان سرعة الإستجابة و معالجة البيانات, كما توجد المحكامات الدقيقة بشكل قوي في السيارات بدءا من انظمة المراقبة و الإنذار حتى منظومة الفرامل تحتوي على محكام دقيق, كما تحتوي اللوحة الأم (mother board) على عدد من المحكامات الدقيقة مع المعالج ذي المهام العامة للعمل على بعض المهام لضمان التكامل في العمل, و عادة تستخدم مع مهايئات المنافذ (I/O ports interface) لتسهيل عملية إخراج و إدخال البيانات إلى المعالج الرئيسي.

كما تستخدم المحكامات الدقيقة في مجال الصناعة و التحكم الآلي في المصانع التي تعتمد على ماكينات التحكم الرقمية (CNC), كما تعتمد أنظمة الإنسان الآلي بشكل أساسي على المحكامات الدقيقة خصوصا و إن كانت أنظمة متحركة او جوالة و ذلك لضمان التحكم الذاتي و القدرة على إتخاذ القرار بشكل سريع.

المحكام الدقيقPIC 16F84 من إنتاج شركة Microchip من أشهر انواع المحكامات الدقيقة المنتشرة بالاسواق و تآتي شهرتها من عدة اسباب منها بساطة المعمارية و سهولة البرمجة و رخص ثمنها, يحتوي المحكام الدقيق على:

· ذاكرة Flash سعة 1 كيلوبايت, و ذاكرة الflash تتميز قدرة الكتابة و المسح عدة مرات بدون ان تتأثر, كما تتميز بسرعة ولوج (access time) اسرع من الانواع الآخرى من ذاكرات الROM, و تستخدم لنقل البرنامج عليها من ذاكرة الROM اليها عند تشغيل الجهاز.

· ذاكرة قراءة فقط (Read Only Memory ROM) من النوع القابل لإعادة البرمجة (EEPROM) سعة 64 بايت.

· ذاكرة تداول إنتقائي (Random Access Memory RAM ) سعة 68 بايت.

· منفذين إخراج/إدخال (Input / Output ports) لعملية إدخال و إخراج البيانات تحت اسم RA و .RB

· كما تستطيع بعض المنافذ القيام ببعض المهام الآخرى غير الإخراج و الإدخال مثل مهام التعداد و التوقيت (counters / timers).

برمجة الـ Microcontroller :

يمكن برمجة المحكام الدقيق بلغات برمجة عديدة لكن كان دائما لغتين اساسيتين لبرمجة المحكام الدقيق وان اللغات الاخرى او طرق البرمجة الاخرى مشتقة عن هاتين اللغتين:

1- لغة Assembly .

2- لغة C (وفى بعض الاحيان تستخدم الـ C++), وتستخدم هاتين اللغتين لعدة اسباب:

1- لغة الـ Assembly من اقرب اللغات الى لغة الالةmachine language وبرنامجها ذى مساحة

صغيرة للغاية مما يسهل عملية تخزينه وتنفيذه.

2- لغة ( C) توفر صغر حجم البرنامج وسهولة تنفيذه لكن ليس بقدر لغة الـ Assembly حيث انها من اقرب لغات المستوى العالى ( High level language ) فى تركيبتها الى لغة الالة ( Machine Language) بعد لغة الـ Assembly كما تتميز لغة الـ C بسهولة اوامرها مقارنة بلغة الـ Assembly التي تتطلب معرفة جيدة بمعمارية وحدة المعالجة المركزية داخل المحكام الدقيق حيث لا تتطلب البرمجة بلغة C معرفة قوية بمعمارية المحكام الدقيق من الداخل.

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

وظهرت فى الاسواق السنوات الاخيرة محكامات دقيقة يمكن برمجتها باستخدام لغة Basic فيما عرفت بـ ( Basic Stamp Microcontrollers ) وان كانت غير منتشرة فى اسواق الشرق الاوسط بكثرة.

ومن اشهر انواع المحكامات الدقيقة PIC من انتاج شركة Microchip و AVR من انتاج شركة Atmel وتتميز انواع عديدة من المحكامات الدقيقة برخص الثمن وسهولة البرمجة خاصة مع توافق العديد من برامج برمجة المحكامات الدقيقة مجاناً على شبكة الانترنت مثل MPLAB من شركة Microchip .

توجد بعض الانواع الخاصة من المحكامات الدقيقة واشهر هذه الانواع الخاصة هو معالج الاشارات الرقمية ( Digital Signal Processor) ويعرف غالباً بالاختصار DSP)) حيث يتميز عن المعالجات العادية بوجود عدد من وحدات الحساب والمنطق على عكس المعالجات العادية التى تحتوى على وحدة حساب ومنطق ( ALU) واحد فقط، وعدد اكبر من المسجلات (Registers) اكثر مما تحتويه وحدة المعالجة المركزية فى المحكامات الدقيقة ويستخدم هذا النوع من المحكامات الدقيقة فى التطبيقات ذات السرعة العالية والتى تتطلب معالجة بيانات فى زمن حقيقى ( Real Time Processing) مثل تطبيقات الاتصالات فى الهواتف المحمولة لمعالجة بيانات انتقال الصوت والصورة بدون تاخير او اضطراب كما تستخدم فى العديد من التطبيقات الاخرى مثل تطبيقات ( Video and Image Processing ) والرادار كما ذكرنا لسرعة استجابتها ومعالجتها للبيانات وفى كروت الشاشة ( VGA) بالحواسب. ومن اشهر الشركات المنتجة للـ DSP شركة Texas Instruments .

نموذج لبرنامج بلغة C لبرمجة احد منافذ محكام دقيق من نوع PIC:

كتبت هذه المقالة في عام 2007 و لكن لم يشاء الله ان اتنشر الا في عام 2011 بعد ان ذكرني بها مقال مشابه نشره احد الاصدقاء, لعله خير.

كريم الريس
مدينة وواترلو, كندا
نوفمبر 13
2011

2 comments:

  1. سلمت يداك على هذا الموضوع
    سؤال؟ كيف أعرف أكتب كود أو أكون ماهرة في كتابة الكودات بلغة سي الرجاء المساعدة

    ReplyDelete
    Replies
    1. شكرا إسراء و اسف على التأخير في الرد عليكي :)
      يوجد اكثر من موقع لتعلم لغة "سي" بشكل عام مثل:
      http://www.cprogramming.com/
      http://www.cplusplus.com/
      لكن هنا العديد من مفردات لغة "سي" لكل محكام دقيق على حدا, الاساسيات موحدة بينهم جميعا لكن اوامر التحكم تختلف من مصنع و طراز الى اخر, قريبا سانشر فيديو تعليمي جديد لبرمجة محكام دقيق من نوع PIC.
      تحياتي :)

      Delete