تسميات
إنتبه إلى أنه قد اعتمدنا التسميات التالية خلال هذه السلسلة:
تجد جميع مصطلحات مقالات هذه السلسلة في قاموس المصطلحات التابع لها. |
ملفات المقال
يمكنك تحميل ما يلي للاستفاذة أكثر من المقال: إذ لم تكن تملك لوحة إلكترونية متميزة تستطيع تنفيذ برامج هذه السلسلة من الدروس عليها، فيمكنك حينئذ صنع اللوحة الإلكترونية iPhoenix-AVR إصدار 2012 التي صممتها بنفسي، وإليك الملفات الضرورية لصنعها: |
محاضرة المقال
{jumi [*3]}
تمهيد
مما لا شك فيه أن لغة التجميع (Assembly) هي أكثر فعالية من غيرها من اللغات ذات المستوى الأعلى عندما يتعلق الأمر بالتعامل المباشر مع وظائف وسلوك المعالج أو المتحكم المصغر، ولكن هذا من جانب آخر يحتاج إلى مستوى عالٍ من الخبرة في بنية الكيان الصلب للمعالج لتوظيف لغات التجميع بشكل فعال، كما أنه سيحتاج إلى أضعاف مضاعفة من الوقت لبناء تطبيق محدد؛ السبب الذي يجعل مطوري البرامج الحاسوبية يعانون من نقص الخبرة حول تفاصيل وتعقيدات تطوير الكيان الصلب؛ مما يحد من مقدرتهم على تصميم الانظمة المدمجة.
للاستفادة من مهارات مطوري البرمجيات الحاسوبية، والحد من طابع تعقيدات برمجة الكيان الصلب بلغة التجميع، قامت شركات EDA بتطوير بيئات وأدوات برمجية تستخدم لغات عالية المستوى مثل اللغة C++/C القياسية أو لغة البيزك (Basic) أو لغة باسكال (Pascal) لتطوير وبرمجة الأنظمة المدمجة. هذه الأدوات البرمجية الجديدة تقوم على تحويل البرنامج من لغة عالية المستوى إلى برنامج بلغة التجميع منخفض المستوى وتدعى في أغلب الأحيان بـ Mappers أو Compilers. تمتلك هذه الأدوات المقدرة على تطوير وفحص وتتبع أخطاء البرامج التي هي مشابهة جدا لبيئات تطوير البرمجيات.
الجذور الأولى لنشأة لغات البرمجة عالية المستوى كانت مع إشراقة فجر عصر الحوسبة الحديثة في منتصف الخمسينيات من القرن الماضي، حيث كان فريق صغير من الباحثين في شركة IBM قد قرر إيجاد بديل آخر لاستخدام لغة التجميع منخفضة المستوى في برمجة الحاسب IBM-704، وكانت النتيجة ظهور لغة البرمجة فورترن (Fortran) - شكلٌ آخر من أشكال لغات البرمجة أكثر قابلية للقراءة والفهم - والتي تهدف في الأساس إلى تسريع عمليات تطوير البرامج المختلفة.
لقد انتاب المجتمع الهندسي في البدء بعضُ الشكوك في كون هذه الطريقة الجديدة قادرة على التفوق على البرامج المكتوبة يدوياً بلغة التجميع، ولكن سرعان ما ثبت أن البرامج المكتوبة بلغة Fortran قادرةٌ على العمل تقريباً بنفس فعالية تلك المكتوبة بلغة التجميع؛ وفي نفس الوقت، استطاعت لغة Fortran تقليص عدد التعليمات البرمجية المستخدمة لبناء برنامج ما بحوالي عشرين مرة، وهذا ما جعلها تعتبر أولى لغات البرمجة عالية المستوى، ولم يكن من المفاجئ أن لغة Fortran قد حصلت بسرعة كبيرة على رضى وقبول المجتمع العلمي في ذاك الوقت وحتى وقت متأخر. بعد نصف قرن، ما زلنا نستطيع استخلاص الكثير من العِبَر الهامة من هذه القصة وهي:
|
تصنيف لغات برمجة الأنظمة المدمجة
تصنف لغات برمجة الأنظمة المدمجة وفق أربع مجموعات رئيسية، وهي:
|
نحو لغات برمجية للأنظمة المدمجة عالية المستوى
إن الازدياد المتسارع في تعقيد بنية شرائح الدارات المتكاملة وفقاً لقانون مور “Moore” يؤدي إلى نشوء فجوة كبيرة بين عدد الكتل المنطقية التي يمكن إنشاؤها على مساحة محددة من شريحة سيليكونية وبين إمكانية مهندسي التصميم على استثمار هذه الشريحة المتكاملة برمجياً، وهذا ما يدعى الآن بفجوة التصميم”Design Gap”. الشكل1 يبين العلاقة بين الإنتاجية التصميمية لمهندسي تصميم الشرائح المتكاملة وبين عدد الترانزستورات التي يمكن أن توضع على شريحة سيليكونية. |
الشكل 1: العلاقة بين ازدياد تعقيد الدارات المتكاملة ومقدرة المصممين على تطويرها |
هناك مسألة أخرى تتعلق باستخدام لغات عالية المستوى في برمجة الأنظمة المدمجة وهي أنه لكي تكون ناجحاً في الاقتصاد العالمي اليوم، فإن مسألة وصول المنتج إلى السوق يجب أن تتم بشكل أسرع من السابق، وبالتالي فإن دورة تصميم المنتج يجب أن تكون أقصر ما يمكن. |
معايير اختيار الحلول التكنلوجية
كما أن هناك عوامل مؤثرة في تصميم الأنظمة المدمجة (الفقرة 1-5)، فإنه في مشاريع الأنظمة المدمجة عموماً هناك معايير أساسية تعتمدها الشركات في اختيار الحلول التكنلوجية والعناصر الأساسية في المنتجات الإلكترونية – من أهم العناصر الأساسية هي الشريحة المدمجة؛ متحكم مصغر، معالج مصغر، معالج إشارة رقمية (DSP)، مصفوفة بوابات منطقية قابلة للبرمجة حقلياً، دارات متكاملة ذات تطبيقات خاصة (ASIC) – في منتجاتها والتي منها: تكلفة الشريحة، مستوى المرونة في بيئة التطوير، مستوى الدعم الفني من قبل الشركة المصنعة، مستوى الشركة المصنعة تجارياً. إن جميع هذه النقاط ضرورية جداً في تحديد أفق التطوير المستقبلي للمشاريع، حيث لا يمكن الاعتماد على الشركات المنطلقة حديثاً عند اختيار المعالجات والشرائح الرقمية القابلة للبرمجة. الفقرات التالية تعالج هذه المعايير والاعتبارات. |
معايير اختيار الشركات المصنعة
يوجد العديد من المعايير والعوامل الهامة في اختيار الشركة المصنعة للحلول التكنلوجية نوردها فيما يلي:
|
عوامل اختيار الشريحة المناسبة للتطبيق
بما أن الشركات المصنعة الرائدة توفر العديد من العائلات والشرائح التي تتفاوت في ميزتها وأدائها وسعرها، فإنه من الضروري اختيار الشريحة المناسبة للتطبيق من خلال تحديد العوامل المطلوبة وهي:
خلال دراستنا هذه وقع الاختيار على شركة ATMEL الرائدة في مجال تصنيع المتحكمات المصغرة حيث تعتبر من أقوى الشركات عالمياً في مجال تطوير وتصنيع متحكمات 8bit وفقاً لتقرير Gartner، كما أن تنتج طيفاً واسعاً من متحكمات 8bit بأداء عالٍ وميزات كبيرة جداً وكل ذلك بسعر منخفض. أضف إلى ذلك انتشارها الواسع جداً (حتى في أسواقنا المحلية المتواضعة) وكثرة المصادر التعليمية المتوفرة على الشبكة.. |
لغات برمجة المتحكمات المصغرة
يعتمد عمل المتحكم المصغر على مبدأ أساسي وهو تنفيذ مجموعة التعليمات الموجودة بداخله في ذاكرة البرنامج, إذ يقوم بتنفيذ التعليمات بشكل تتابعي (تعليمة تلو الأخرى) إلى أن يصل إلى نهاية البرنامج، وعندها يعود إلى التعليمة الأولى في بداية البرنامج ليبدأ بتنفيذ دورة أخرى من البرنامج وهكذا...
تـختلف اللغات المستخدمة في كتابة برنامج المتحكم وتتفاوت في مقدار صعوبتها وتعقيدها, وسابقاً كانت تتم برمجة المتحكمات بشكل أساسي باستخدام لغة التجميع، حيث يمتلك كل نوع من المتحكمات لغة تجميع خاصة به تتعلق بنواة المعالج, حتى أن متحكمات نفس الشركة تـختلف في لغة التجميع الخاصة بها من نوعٍ إلى آخر؛ فمتحكمات شركة ATMEL – على سبيل المثال – ذات نواة AT89xxxx تمتلك لغة تجميع تـختلف عن لغة التجميع الخاصة بنواة متحكمات AT90xxxx. ومن المعروف أن لغة التجميع لغة اختصاصية وغير مرنة، كما أنها صعبة التدقيق والمراجعة والتطوير... فكتابة برنامج ما باستخدام لغة التجميع سيـحتاج إلى وقت طويل وخبرة كبيرة من قبل المبرمج.
مع التطور التكنولوجي الكبير في صناعة الأنظمة المدمجة عموماً والمتحكمات المصغرة خصوصاً تنبهت الشركات إلى أن استمرار استخدام لغة التجميع يـحد من سهولة استخدام هذه المتحكمات، وبالتالي تبقى محصورة ضمن فئة معينة من المهندسين المختصين، لذلك تم البحث عن طرق أسهل لبرمجة المتحكمات، مما أدى إلى ظهور لغات البرمجة عالية المستوى مثل: لغة C++/C ولغة BASIC ولغة PASCAL وغيرها... في هذه اللغات يقوم المبرمج بكتابة البرنامج بإحدى لغات البرمجة عالية المستوى ويقوم مترجم خاص (Compiler) بتحويل هذا البرنامج إلى البرنامج المقابل له في لغة التجميع الخاصة بالمتحكم المصغر, وبالتالي لا حاجة إلى تعلم لغة التجميع كلما احتاج المبرمج استخدام عائلة جديدة من المتحكمات. من أشهر مترجمات متحكمات AVR نذكر: |
اسم المترجم |
اللغة |
موقع الشركة |
BASCOM-AVR |
Basic |
http://www.mcselec.com |
AVR-Studio |
C/C++ |
http://www.atmel.com |
CodeVisionAVR |
C |
http://www.hpinfotech.ro |
Win-AVR |
C++ |
http://winavr.sourceforge.net |
ImageCraft ICC-AVR |
C |
http://www.imagecraft.com |
MikroPascal For AVR |
Pascal |
http://www.mikroe.com |
MikroBasic For AVR |
Basic |
http://www.mikroe.com |
وبالتالي وباستخدام لغات برمجة عالية المستوى انكسر حاجز الاختصاص التي تفرضه لغة التجميع وأصبحت المتحكمات في متناول الجميع ممن لديهم خبرة متواضعة في لغات البرمجة ومعرفة كافية في بنية المتحكمات, كما أن وجود المكتبات المختلفة في هذه المترجمات جعلت عملية برمجة المتحكمات عملية مـمتعة وسلسة ولا تحتاج إلى الكثير من الوقت في دراسة متطلبات الكيان الصلب. فيما يلي مقارنة سريعة لبعض الميزات الأساسية للّغات عالية المستوى مع ما يقابلها من اللغات المنخفضة المستوى. |
برامج مكتوبة بلغات برمجة منخفضة المستوى (Assembly) |
برامج مكتوبة بلغات برمجة عالية المستوى (Basic, Pascal, C) |
|
|
حول منهجية تنفيذ التجارب العملية
في هذا المنهاج العملي التطبيقي سوف نعالج بشكل خاص برمجة المتحكمات المصغرة من العائلة AVR باستخدام لغة عالية المستوى وهي لغة BASCI والتي تعتمدها بيئة التطوير (IDE)هBascom-AVR. كذلك سنقوم بمحاكاة جميع الأمثلة والتطبيقات في بيئة المحاكاة LabCenter Proteus الذي يعد من أقوى البرامج التي تحاكي عمل المعالجات. سنقوم بعدها بتنفيذ التجارب عملياً على لوحة التطوير mini-Phoenix المعدة خصيصاً لهذا المختبر والتي تم تصميمها بحيث ترتقي بالمتعلم من مستوى مبتدئ إلى مستوى متقدم متضمنةً أكثر من 25 تجربة تشمل جميع الوظائف الأساسية للمتحكمات بالإضافة إلى وظائف متقدمة أخرى. |
بيئة المحاكاة
في مرحلة التصميم وقبل التطبيق العملي للأمثلة والتمارين على لوحة التطوير، فسيتم محاكاة برامج الوحدات المحيطية للوحة التطوير في البرنامج PROTEUS والذي هو عبارة عن بيئة مخصصة لأغراض محاكاة الأنظمة الرقمية والمعالجات المصغرة. |
الشكل 2: استخدام بيئة المحاكاة PROTEUS لتحليل دارة عداد تصاعدي تنازلي قابل للضبط |
|
بيئة التطوير Bascom-AVR
تعتبر بيئة التطوير Bascom-AVR من أشهر وأقوى بيئات التطوير البرمجية التي تستخدم لغة عالية المستوى وهي لغة BASCI لبرمجة المتحكمات المصغرة من العائلة AVR. تمتلك هذه البيئة واجهات تطبيقات متعددة وهي:
|
|
|
|
|
|
|
|
|
-
أداة تحويل الصور
(Graphic Converter):تستخدم لتحويل امتداد الصور المراد إظهارها على شاشة الإظهار الرسومية GLCD إلى الصيغة bgf.*
أداة تصميم المحارف
(LCD Designer):تستخدم لتصميم المحارف التي لا توجد على لوحة مفاتيح الحاسب من أجل إظهارها على شاشة الإظهار الكريستالية.
أداة مترجم الملفات المتعددة
(Patch Compiler):تستخدم لتوليد الملف البرمجي لعدة ملفات في آن واحد.
أدارة إدارة المكتبات
(LIB Manager):تستخدم لإدارة مكتبات البرنامج (حذف \ إضافة).
أداة مدير الإضافات
(Plugin Manager):
تستخدم لإضافة/حذف الأدوات والموديولات الخارجية.
أداة محلل حالة المكدس
(Stack Analyzer):تستخدم لتحديد حجم المكدس المناسب للتطبيق.
أداة ملفات الوثائق الفنية
(PDF Update):تقوم هذه الأداة بالاتصال مع موقع شركة ATMEL وإحضار آخر تحديث للوثائق الفنية للمعالجات المستخدمة من العائلة AVR.
أداة التحكم بالبروتوكول TCP/IP:
تستخدم للتحكم ومراقبة المعلومات الموجودة على خط المعطيات.
تتميز بيشة التطوير Bascom-AVR بمكتباتها الوظيفية القوية التي تمكن المطور أو المصمم من بناء نظام معقد بزمن قصير نسبياً مقارنة بباقي بيئات التطوير التي تستخدم اللغة C++/C.. الشكل3 يبين تصنيف أنواع التعليمات في البيئة Bascom-AVR حسب وظيفتها. |
|
الشكل 3: تصنيف أنواع التعليمات في البيئة Bascom-AVR حسب وظيفتها |
لوحة التطوير المخبرية
لقد تم تصميم هذه اللوحة خصيصاً بحيث تخدم المبتدئ والمتقدم في تعلم برمجة المتحكمات المصغرة من العائلة AVR، حيث تضم أكثر من 25 وحدة محيطية على نفس اللوحة لتغطي ما يقارب 50 تجربة أساسية، وقد تصل إلى أكثر من 75 تجربة بالدمج بين الوظائف المحيطية على اللوحة، بالإضافة إلى إمكانية ربط وحدات خارجية عن طريق وحدات التوسعة المحيطية الموزعة على أطراف اللوحة.
يمكن الرجوع إلى الملف “mini-Phoenix-AVR Manual.pdf” من أجل معرفة تفاصيل عن لوحة التطوير (طريقة تجميع اللوحة وميزاتها ومخططاتها التصميمية ...). |
الشكل 4: لوحة التطوير mini-Phoenix-AVR |
مقدمة إلى متحكمات AVR
تعتبر متحكمات AVR إحدى منتجات شركة ATMEL الأمريكية، وقد تم تطويرها في مختبرات الشركة الموجودة في النرويج في أواخر التسعينيات، وتعتبر من أكثر المتحكمات المصغرة انتشاراً لما تتميز به من العديد من الميزات التي جعلتها مناسبة لكثير من التطبيقات.
لقد أحدثت شركة ATMEL ثورة في عالم المتحكمات المصغرة بإنتاجها لمتحكمات AVR التي تفوّقت بشكلٍ كبير على العديد من نظيراتها من متحكمات 8bit، حيث تم استخدام البنية RISC التي تتميز بالأداء العالي وبالطاقة المنخفضة، واحتوت قائمة التعليمات في متحكمات AVR على 132 تعليمة - يُنفذ معظمها خلال دورة آلة واحدة (1-cycle) – وبالتالي عند وصل هزاز 16MHz إلى المتحكم فإنه سينفذ حوالي 16MIPS (مليون تعليمة في الثانية الواحدة)، كما زُوّدت هذه المتحكمات بذاكرة برنامج قابلة للمسح والكتابة لأكثر من 100000 مرة، وضمنت شركة ATMEL أن يبقى البرنامج داخل المتحكم يعمل بشكل صحيح حتى 25 سنة، كما تملك متحكمات AVR وحدات محيطية مدمجة متعددة الوظائف الأمر الذي يوفر استخدام دارات متكاملة خارجية، كذلك زُوّدت معظم متحكمات AVR بمبدل تشابهي رقمي متعدد الأقنية مدمج داخل المتحكم، إضافةً إلى إمكانية برمجة ضمنية للمتحكم أي دون فصله عن النظام (In-System Programming)، وكذلك تتوفر في الأسواق بكميات كبيرة وسعرها منخفض مقارنة مع ميزاتها. |
عائلات متحكمات AVR
تقسم عائلات متحكمات AVR ذات عرض ناقل 8bit إلى أربع مجموعات أساسية، إضافة إلى مجموعات أخرى ذات وظائف خاصة، تمتلك جميعها نفس البنية وتـختلف عن بعضها البعض بالميزات والخصائص الموجودة في كل نوع:
العائلة AT90Sxxxx: العائلة الكلاسيكية التي كان منها الانطلاقة الأولى لمتحكمات AVR في عام 1997 وقد توقف تصنيعها.
العائلة ATtinyxx: وهي العائلة الصغرى لمتحكمات AVR المطورة والتي ظهرت في أوائل عام 2000، وهي تملك عدد أقطاب قليل (6 إلى 32 قطبا) وحجم ذاكرة برنامج صغير نسبياً (0.5KB إلى16KB) وموارد محدودة على الشريحة الأمر الذي يجعل سعرها منخفض مقارنة مع متحكمات ATmega. |
الشكل 5: توزع متحكمات العائلة ATinyxxx وفقاً لعدد الأقطاب وحجم ذاكرة البرنامج |
العائلة ATmegaxxxx: وهي العائلة الكبرى لمتحكمات AVR المطورة والتي ظهرت في أوائل عام 2000 وهي تملك عدد أقطاب كبير (من 28 إلى 100 قطبا) وحجم ذاكرة برنامج كبير نسبياً (من 8 إلى 256KB) وموارد متنوعة على الشريحة. |
الشكل 6: توزع متحكمات العائلة ATmega وفقاً لعدد الأقطاب وحجم ذاكرة البرنامج |
العائلة ATxmegaxxxx: وهي العائلة المتطورة والأحدث لمتحكمات AVR وقد ظهرت في عام 2008 وهي تملك ميزات متنوعة وسعة معالجة كبيرة نسبياً وتعمل بترددات أعلى من سابقاتها (32MHz)... كما أنها تملك عدد أقطاب كبير (من 44 إلى 100 قطبا) وحجم ذاكرة برنامج كبيرة (من 16KB إلى 384KB) إضافة إلى ميزات جديدة لا تتوفر في سابقاتها. |
الشكل 7: توزع متحكمات العائلة ATxmega وفقاً لعدد الأقطاب وحجم ذاكرة البرنامج |
|
العائلة |
الاستخدام |
Automotive AVR |
تستخدم في أنظمة التحكم بالمحركات وأنظمة التحكم بالسيارات |
Z-Link AVR |
تستخدم في بروتوكولات الإرسال الراديوي اللاسلكي في IEEE 802.15.4 / ZigBee |
Battery Management AVR |
تستخدم للتحكم في شحن المدخرات ومراقبتها وهي تعمل في جهود مرتفعة من 1.8 إلى25 فولط |
CAN AVR |
تستخدم للتحكم بالبروتوكول CAN وتدعم: CANopen، DeviceNet، OSEK |
LCD AVR |
تستخدم كمعالجات تشغيل أساسية لشاشات الإظهار الكريستالية LCD |
Lighting AVR |
تستخدم في تطبيقات التحكم الاستطاعية بسرعة المحركات وشدة الإضاءة |
USB AVR |
تستخدم كموزع أو مخدم للبروتوكول USB |
الشكل 8 بين ملخصاً للعائلات والخصائص الأساسية لكل منها... |
الشكل 8: الخصائص العامة لعائلات متحكمات AVR |
مقارنة بين أشهر عائلات المتحكمات المصغرة
الجدول التالي يبين مقارنة بين أشهر عائلات متحكمات 8bit. |
الميزة / العائلة |
AVR |
8051 |
PIC |
HC11 |
البنية الأساسية |
Harvard |
Von-Neumann |
Harvard |
Von-Neumann |
تقنية النواة |
RISC |
CISC |
RISC |
CISC |
تردد التشغيل القصوي |
20MHz |
24MHz |
20MHz |
8MHz |
نبضة لكل تعليمة |
1 |
12 |
4 |
8 |
تعليمة في الثانية |
16MIPS |
2MIPS |
5MIPS |
1MIPS |
عدد التعليمات |
132 |
215 |
32 |
200 |
حجم ذاكرة البرنامج |
256KB |
32KB |
64KB |
32KB |
عرض ناقل التعليمات |
16bit |
8bit |
12-bit |
8bit |
من خلال قراءة الجدول نستنتج أفضلية متحكمات AVR للأسباب التالية:
|
قراءة تكويد معالجات العائلة AVR
بشكل عام تزود الشرائح المتكاملة والعناصر الإلكترونية برقم أود تكويد خاص بكل صنف. في هذه الفقرة سنشرح تكويد شركة Atmel لمعالجات العائلة AVR بحيث يمكنننا معرفة الكثير عن الشريحة من خلال التكويد الموجود على غلافها الخارجي. لنأخذ على سبيل المثال المتحكم المصغر ATmega8 الموضح على الشكل9 نلاحظ أن الغلاف يحوي على رمز الشركة المصنعة (Atmel) ورقم تصنيع تسلسلي (0619I) خاص برقم الدفعة وبيئة عمل المعالج ومن ثم تكويد المعالج وهو: ATmegaa8-16PU. |
|
الشكل9: المتحكم المصغر ATmegaa8-16PU |
|
|
تطبيقات عسكرية |
تطبيقات صناعية |
تطبيقات تجارية |
M (Martial) |
I (Industrial) |
C (Commercial) |
بالنسبة لكود المعالج فهو على الشكل التالي:
الرمز |
الدلالة |
AT |
اختصار لاسم الشركة المصنعة ATMEL. |
Mega |
العائلة التي ينتمي إليها هذا المعالج (90S أو Tiny أو Mega أو Xmega). |
8 |
هذا الرقم يعبر عن حجم ذاكرة البرنامج بالكيلوبايت (8، 16، 32، 64، 128، 256 KB). |
L |
في حال أن الكود يملك حرف L فهذا يعني أنه قابل على العمل بجهود منخفضة (2.7V إلى 5.5V) وبدون هذا الحرف فهذا يعني أن المعالج يعمل عند جهود (4.5V إلى 5.5V). |
8 |
تردد العمل القصوي للمعالج (8، 16، 20، 24، 36). |
PU |
شكل غلاف الشريحة، فإما أن تكون من نوع يتم لحامه على الطبقة السفلية للدارة المطبوعة ورمزه PU (PDIP)i، أو من النوع السطحي الذي يتم لحامه على الطبقة العلوية للدارة المطبوعة ورمزه AU (TQFP)i. |
الشكل 10: نموذج من متحكمات AVR بغلاف خارجي من النوع PDIP والنوع TQFP
|
|
من الجدير ذكره أن شركة Atmel قامت بدمج المعالج ذو اللاحقة ATmegaxxxL-8xx (يعمل عند جهد منخفض 2.7V وتردد منخفض8MHz ) مع المعالج ATmegaxxx-16xx (يعمل عند جهد 4.5V وتردد حتى 16MHz) في معالج جديد متطور ATmegaxxxA-xx يجمع خصائص كلا المعالجين؛ هذا الأخير يعمل عند جهود من 5V5 – 2V5 وتردد 1MHz – 16MHz وقد صدر هذا الإصدار من المتحكمات في عام 2010 ليحل محل الإصدارات القديمة ذات اللاحقة 8-L واللاحقة -16. الشكل جانباً يبين مقارنة بين الحالات الثلاث لتكويد المتحكم ATmega128 حيث:
|
نواة معالجات العائلة AVR
تتمثل المهمة الرئيسية لنواة المعالج في ضمان تنفيذ البرنامج بشكل صحيح والذي بدوره يتطلب توفير إمكانية الولوج إلى الذواكر والقدرة على تنفيذ العمليات الحسابية والتحكم بالطرفيات... إضافة إلى التعامل مع القواطع المختلفة. |
نظرة عامة على البنية الداخلية للنواة
تعتمد العائلة AVR البنية Harvard بهدف زيادة مستوى الأداء والعمل المتوازي – بحيث تكون هناك ذاكرة مخصصة للبيانات مع ممر معطيات خاص وذاكرة أخرى منفصلة لتعليمات البرنامج مع ممر خاص أيضاً. يتم تنفيذ التعليمات في ذاكرة البرنامج بمستوى واحد من المعالجة التفرعية بحيث أنه في الوقت الذي تقوم فيه وحدة المعالجة المركزية (CPU) بتنفيذ إحدى التعليمات يتم إحضار شفرة التعليمة التالية لها من ذاكرة البرنامج؛ إن هذا المبدأ يسمح بتنفيذ تعليمة عند كل نبضة ساعة. |
الشكل 11: مخطط البنية الداخلية لنواة متحكمات AVR |
يرتبط مع وحدة الحساب والمنطق ALU ملف المسجل ذو الولوج السريع والذي يحتوي على 32 مسجلاً للأغراض العامة كل منها بطول 8bit وبزمن ولوج قدره نبضة واحدة من نبضات الهزاز – ويقصد بالولوج السريع لملف المسجلات على أنه الولوج الذي يستغرق زمن قدره دورة ساعة واحدة؛ هذا يعني أنه خلال دورة ساعة واحدة تقوم وحدة الحساب والمنطق بتنفيذ عملية واحدة، فهي تقوم أولاً بإخراج المعاملين من ملف السجلات، ومن ثم تنفذ العملية، ومن ثم تعيد تخزين النتيجة في ملف المسجلات، وكل ذلك يتم خلال دورة ساعة واحدة. |
وحدة الحساب والمنطق
تدعم وحدة الحساب والمنطق العمليات الحسابية والمنطقية بين محتوى المسجلات أو بين محتوى المسجل وقيمة ثابتة، كما يمكن إجراء عملية معينة على محتوى مسجل وحيد، وبعد تنفيذ العملية يتم تحديث مسجل الحالة ليعطي المعلومات عن ناتج تلك العملية. تتمتع وحدة الحساب والمنطق ALU عالية الأداء في العائلة AVR بالارتباط المباشر مع مسجلات العمل الاثنين والثلاثين ذات الأغراض العامة، فخلال دورة ساعة واحدة تنفذ وحدة الحساب والمنطق عملية ما بين مسجلين في ملف المسجلات أو بين مسجل وقيمة ثابتة. ويمكن تقسيم عمليات ALU إلى ثلاث فئات رئيسية: فئة حسابية - فئة منطقية - فئة العمليات على مستوى الزوج (Bit). كما تملك معالجات العائلة AVR في بنيتها ضارب متطور يدعم عمليات ضرب للأعداد المؤشرة وغير المؤشرة والاعداد الكسرية. |
الذواكر في متحكمات AVR
تمتلك معظم متحكمات AVR ثلاث أنواع من الذواكر المدمجة على الشريحة وهي: – ذاكرة المعطيات (EEPROM) – ذاكرة البيانات (Data Memory) – ذاكرة البرنامج (Flash Memory) |
ذاكرة البرنامج
يملك المتحكم ATmega32A ذاكرة وميضية من النوع Flash مدمجة ضمن الشريحة بحجم 32KB (أي من $0000 إلى $7FFF) مخصصة لتخزين برنامج عمل المتحكم المصغر، وبما أن جميع تعليمات متحكماتAVR هي ذات شفرة وحيدة بطول كلمة واحدة (16bit) أو كلمتين (32bit)، فقد تم تنظيم ذاكرة البرنامج لتشكل 16K x 16، كما تم تقسيمها إلى قسمين منفصلين:
تتميز ذاكرة البرنامج في متحكمات AVR بديمومة10,000 دورة مسح/كتابة على الأقل، كما أنها قابلة لإعادة البرمجة في النظام دون الحاجة إلى نقل المتحكم إلى مبرمجة خاصة وهو ما يدعى بـالبرمجة الضمنية أو ”In System Programing”. كذلك يملك المتحكم ATmega32A عداد برنامج (PC) بطول 16bit (وهو متغير الطول بالنسبة بكل معالج) وبذلك يستطيع عنونة كامل مجال ذاكرة البرنامج الذي هو بطول 16KB x 16bit. |
|
الشكل 12: خريطة ذاكرة البرنامج |
ذاكرة البيانات SRAM
وهي عبارة عن ذاكرة وصول عشوائي مؤقتة يتم فيها إجراء العمليات على المتحولات؛ يملك المتحكم ATmega32A ذاكرة بيانات من النوع SRAM بطول 2KB.
ملاحظة: التسمية SRAM هي اختصار للجملة الإنجليزية Static Random Access Memory والتي تعني ذاكرة الوصول العشوائي الثابت باللغة العربية. |
|
الشكل 13: تنظيم الذاكرة الدخلية SRAM للمتحكم ATmega128A |
ذاكرة المعطيات EEPROM
يملك المتحكم ATmega32A ذاكرة معطيات من النوع EEPROM بطول 1KB وهي منظمة مستقل لتخزين البيانات، ويمكن فيه القراءة من أو الكتابة على أي بايت من بايتات هذه الذاكرة بشكل مستقل، كما تسمح ديمومة الذاكرة EEPROM بـأكثر من 100000 عملية كتابة ومسح. |
مصادر التوقيت في متحكمات AVR
تملك متحكمات AVR العديد من مصادر إشارة التوقيت والتي تقسم بشكل رئيسي إلى خمسة مصادر:
يتم ضبط مصدر إشارة التوقيت من خلال ضبط الفيوزات الداخلية للمتحكم والمسؤولة عن مصدر التوقيت (CKSEL3:0). لمزيد من التفاصيل يمكن الرجوع إلى الوثيقة الفنية للمتحكم/الفقرة "8.2 - Clock Sources". |
تملك معظم متحكمات AVR وخصوصاً العائلة ATmega هزاز RC داخلي معاير مخبرياً بتردد ثابت يمكن ضبطه من أجل القيم 1MHz و 2MHz و 4MHz و 8MHz، وإن الحالة الافتراضية لمصدر إشارة التوقيت لمعظم متحكمات AVR-Mega هو "هزاز RC داخلي معاير" بتردد 1MHz ويمكن تغييره من خلال الفيوزات الداخلية للمتحكم الخاصة بمصدر إشارة التوقيت (CKSEL3:0). |
من أجل دقة أعلى لإشارة التوقيت، أو من أجل تشغيل المعالج عند تردد عمل أكبر من 8MHz، فإنه يمكن استخدام هزاز كريستالي خارجي يتم وصله مع المتحكم عبر القطبين XTAL1 (الدخل) والقطب XTAL2 (الخرج) مع مراعات إضافة مكثفات تحميل خارجية بقيمة 12 إلى 22pF كما هو موضح على الشكل14. |
||
الشكل 14: وصل هزاز كريستالي خارجي مع المتحكم المصغر |
||
من الضروري إعادة ضبط الفيوزات الداخلية للمتحكم والخاصة بمصدر إشارة التوقيت (CKSEL3:0) على “External Crystal Resonator”. |
وصل هزاز كريستالي خارجي ذو تردد منخفض
يمكن وصل هزاز كريستالي خارجي بتردد منخفض 32.768KHz كمصدر توقيت مخصص لتطبيقات الساعات الرقمية بعد إعادة تعيين الفيوزات الداخلية للمتحكم الخاصة بمصدر إشارة التوقيت (CKSEL3:0) على“External Low-frequency Crystal” حيث ”CKSEL = “1001. |
من أجل التطبيقات التي لا تحتاج إلى دقة في إشارة التوقيت، فإنه يمكن استخدام دارة RC لتوليد إشارة التوقيت (100Hz إلى 12MHz) كما هو مبين على الشكل15.
القيمة التقريبية للتردد المولد يمكن حسابها من المعادلة: f = 1/(3 × R × C) حيث أن: قيمة C يجب أن تكون أكبر من 22pF. كما أن القيمة القصوية للتردد f يجب أن لا تتجاوز 12MHz. |
|
الشكل 15: وصل هزاز RC خارجي مع المتحكم المصغر |
|
يجب ضبط الفيوزات الداخلية للمتحكم الخاصة بمصدر إشارة التوقيت (CKSEL3:0) على “External RC Oscillator”. |
يمكن كتطبيق إشارة توقيت خارجية مباشرة على القطب XTAL1 بعد إعادة تعيين الفيوزات الداخلية للمتحكم الخاصة بمصدر إشارة التوقيت (CKSEL3:0) على“External Clock” حيث CKSEL = “0000”. يبين الشكل16 طريقة تطبيق الإشارة. |
|
الشكل16: تطبيق إشارة توقيت خارجية للمتحكم |
الدراسة التطبيقية – المتحكم المصغر ATmega32A
السبب في اختيار المعالج ATmega32 هو أنه يعتبر من المعالجات المتقدمة في العائلة ATmegaxxx ويضم معظم الميزات والوحدات المحيطية المتوفرة في العائلة Mega وبالتالي فإننا ندرس الآن الحالة الأعم والأشمل، كما أنه متوفر بغلاف من النوع PDIP.
بشكل عام وعند شراء دارة متكاملة ما، فإن أول ما يحتاج إليه هو معرفة خصائصها وميزاتها وكيفية عملها وتوزع أقطابها، وهذا يتم من خلال قراءة المعلومات المهمة من الوثيقة الفنية (Datasheet) الخاصة بالدارة المتكاملة. وهنا أود التنويه إلى أنه عند استخدام لغات البرمجة عالية المستوى فإن المبرمج لن يحتاج إلى قراءة الوثيقة الفنية للمتحكم المصغر كاملةً من أجل برمجته، وهذا بدوره يختصر وقتاً كبيراً في تعلم برمجة المتحكمات المصغرة بدون اللجوء إلى دراسة البنية الداخلية للمعالج مفصلةً كما هو الحال عند البرمجة بلغة التجميع (Assembly). لذلك، سوف أشرح المعلومات التي تفيدنا في الوثيقة الفنية كالميزات الأساسية للمعالج وتوزع الأقطاب، مع العلم أنه لابد – لاحقاً – من العودة إلى بعض التفاصيل في البنية الداخلية للمعالج عن مرحلة متقدمة. |
الميزات الأساسية للمتحكم ATmega32A
الميزات الأساسية تأتي دائماً في الصفحة الأولى من الوثيقة الفنية لأي دارة متكاملة... في ما يلي ميزات المعالج ATmega32A.
|
مخطط البنية الداخلية للمتحكم ATmega32A
لقد تم صناعة الشريحة ATmega32A باستخدام تقنية ذواكرATMEL الغير قابلة للزوال ذات الكثافة العالية، مع إمكانية برمجة ذاكرة البرنامج الوميضية (Flash) المبنية على شريحة المتحكم إما من خلال الوصلة التسلسلية SPI أو باستخدام مبرمجة تفرعية أو باستخدام برنامج إقلاع موجود على الشريحة (Boot program) حيث تستطيع البرمجية المخزنة في جزء الإقلاع (Bootloader) في الذاكرة الوميضية متابعة عملها أثناء تحديث القسم الرئيسي في ذاكرة البرنامج. لقد أدى الجمع ما بين معالجات RISC ذات 8bit مع ذاكرة البرنامج القابلة لإعادة البرمجة إلى إنتاج المتحكم ATmega132A الذي يتمتع بالقوة و المرونة العالية وبالكلفة المنخفضة للعديد من تطبيقات التحكم المتطورة. الشكل17 يبين المخطط الصندوقي للبنية الداخلية للمتحكم ATmega32 وهو يبين طريقة ربط الوحدات المحيطية والمسجلات مع وحدة المعالجة المركزية. |
الشكل 17: المخطط الصندوقي للبنية الداخلية للمتحكم Atmega32A |
تصنيفات الأقطاب وظيفياً في متحكمات AVR
يمكن تصنيف أقطاب متحكمات العائلة AVR من حيث وظائفها على الشكل التالي:
الواجهة البرمجية PDI (PDO, PDI)i. الواجهة البرمجية ISP (MISO, MOSI, SCK, RESET)i.
|
وصف أقطاب المتحكم ATmega32A
يملك المتحكم ATmega32A مجموعة من الأقطاب عددها 40 قطب موزعة على الأطراف الفيزيائية لشريحة المتحكم وهي: |
|
الشكل 18: توزع الأقطاب على الشريحة ATmega32A |
الاسم |
الوظيفة |
VCC |
قطب جهد التغذية الموجب VCC = 2.5 – 5.5V |
GND |
قطب جهد التغذية الصفري (الأرضي) GND = 0V |
Port A (PA7:PA0) |
البوابة A: وهي عبارة عن بوابة دخل/خرج ذات ثمانية أقطاب ثنائية الاتـجاه، وقد زودت الأقطاب بمقاومات رفع داخلية (Pull-up) مع إمكانية اختيار مقاومة الرفع لكل قطب على حدى. تمتلك البوابة A وظيفة ثانوية أخرى وهي قنوات المبدلات التشابهية الرقمية (ADC0-ADC7). |
Port B (PB7:PB0) |
البوابة B: وهي عبارة عن بوابة دخل/خرج ذات ثمانية أقطاب ثنائية الاتـجاه، وقد زودت الأقطاب بمقاومات رفع داخلية (Pull-up) مع إمكانية اختيار مقاومة الرفع لكل قطب على حدى، كذلك تمتلك البوابة B وظائف ثانوية أخرى وهي: واجهة اتصال تسلسلية SPI (MISO, MOSI, SCK, SS)i، وقطب توليد إشارة PWM (OC0)i، وأقطاب المقارن التشابهي (AIN0, AIN1)، المقاطعة الخارجية (INT2)، العدادات (T0/T1). |
Port C (PC7:PC0) |
البوابة C: وهي عبارة عن بوابة دخل/خرج ذات ثمانية أقطاب ثنائية الاتـجاه، وقد زودت الأقطاب بمقاومات رفع داخلية (Pull-up) مع إمكانية اختيار مقاومة الرفع لكل قطب على حدى. تمتلك البوابة C وظائف ثانوية أخرى حيث تعمل كنافذة تتبع أخطاء JTAG (TDI, TDO, TMS, TCK)i، نافذة تسلسليةI2C (SDA, SCK)i. |
Port D (PD7:PD0) |
البوابة D: وهي عبارة عن بوابة دخل/خرج ذات ثمانية أقطاب ثنائية الاتـجاه، وقد زودت الأقطاب بمقاومات رفع داخلية (Pull-up) مع إمكانية اختيار مقاومة الرفع لكل قطب على حدى. تمتلك البوابة D وظائف ثانوية أخرى وهي: |
RESET |
مدخل تصفير الشريحة؛ عند تطبيق إشارة كهربائية ذات منطق منخفض على القطب RESET لمدة دورتي آلة، فإن دارة التصفير الداخلية تعمل على تصفير المتحكم – عداد البرنامج PC = 0. |
XTAL1 |
مدخل الهزاز الخارجي: وهو عبارة عن مدخل دارة مضخم الهزاز العاكس. |
XTAL2 |
مدخل الهزاز الخارجي: وهو عبارة عن خرج دارة مضخم الهزاز العاكس. |
AVCC |
قطب التغذية للمبدل التشابهي الرقمي (ADC)، إذا كان المبدل ADC غير مُستخدم فإن هذا القطب يجب وصله إلى القطب Vcc، أما إذا كان المبدل ADC مُستخدماً فيوصل هذا القطب مع Vcc عن طريق مرشح تمرير مُنخفض. |
AGND |
إذا كانت الدارة التي نقوم بتصميمها لها أرضي تشابهي مستقل، فيجب ربط هذا القطب مع هذا الأخير، وإلا يُربط هذا القطب مع القطب الأرضي العام GND. |
AREF |
مدخل الجهد المرجعي التشابهي للمبدل ADC ويـجب أن تتراوح قيمته عند عمل المبدل ما بين 2V - AVcc. |
الحقوق الفكرية
حقوق النشر محفوطة م.وليد بليد Copyright © 2012 Walid Balid All rights reserved |
تأليف
المؤلف: وليد بليد (سوريا)
{jumi [*3]}
التعليقات
قال رسول الله صلى الله عليه وسلم :
(( لا تزولُ قدَمَا عبد يومَ القيامة ، حتى يُسألَ عن أربع : عن عُمُره فيمَ أفناه ؟ وعن عِلْمِهِ ما عمِل به ؟ وعن ماله من أين اكتسبه وفيم أنفقه ؟ وعن جسمه فيم أبلاه ؟ ))
اسأل الله العزيز الحكيم رب العرش الكبير ان يبارك لك في علمك وعملك وعمرك وبفضلكم بدأنا بكتابة البرامج وتطبيق الدارات
دمتم بكل خير و مودة