30 0 6MB
فكرة املشروع : تحسين فعالية وآلية عمل أنظمة الطاقة الشمسية المستخدمة إلنارة الشوارع من خالل اإلدارة األفضل لعملية اإلنارة .
هدف املشروع : • إطالة عمر البطاريات واأللواح الشمسية في حال األنظمة التي تركب بشكل منفصل (كل عامود يركب عليه لوح شمسي و بطاريات). • توفير فرصة لالستفادة من الطاقة الفائضة وذلك في األنظمة التي تركب بشكل مجمع ( بنك بطاريات و مجموعة ألواح تركب مجمعة في موقع واحد و يستخدم انفرتر و كابالت نقل لنقل القدرة لألعمدة ) مما سيساهم باسترداد قيمة المصروفات على المشروع بشكل أسرع و تأمين محطة توليد احتياطية تؤمن الكهرباء في حالة االنقطاعات الطويلة للمنشآت الحيوية حيث يمكن االستفادة من الطاقة الموفرة ليالا عن طريق استجرارها من األلواح صباح ا دون اإلضرار بالبطاريات . • تحسين شروط اإلضاءة للمشاة و السيا ارت عند تضعيف اإلضاءة ليالا مما يمكن من تخفيض اإلضاءة في وقت مبكر . • القيام بدراسة للكلفة اإلجمالية لمشروع عملي ينفذ على الطريق الواصل بين دوار تدمر و دوار السيد الرئيس و تحديد التجهيزات الالزمة و زمن استرداد الكلفة .
أهمية املشروع : تعد كلفة مشاريع إنارة الشوارع بالطاقة الشمسية كبيرة نوع ا ما و حتى عند تنفيذ هذه المشاريع فإن كلفة الصيانة تظل مرتفعة و ذلك بسبب تلف البطاريات و نقص سعتها مع الزمن .يمكن من خالل هذا المشروع تنفيذ تعديالت على دارة القيادة الكهربائية لمصابيح LEDتمكن من تضعيف
اإلضاءة بعد فترة أقل من فترة دارات القيادة التقليدية بسبب طريقة اإلنارة المعتمدة على حركة السيارات و المشاة مما سيمكن من تقليل استهالك المدخرات و األلواح مع المحافظة على شروط إنارة مقبولة بالنسبة للمشاة و السيارات . باإلضافة إلى إمكانية إمداد إحدى المنشآت القريبة من مكان إنجاز المشروع بالكهرباء و ذلك عند انقطاعها حيث ستكون هذه المحطة على الرغم من صغر استطاعتها موردا حيوي ا في األزمات يسهم في استمرار هذه المؤسسة في أداء عملها و ذلك بكلفة مادية صغيرة و باالستفادة من مورد متوفر و هو نظام إنارة الشارع مما سيوفر كلفة إنشاء محطة مخصصة لهذه المنشأة .
مقدمة : إن من أهم األمور التي تمس حياة المواطن و تؤثر على عمله و راحته و معيشته موضوع الطاقة الكهربائية ,و نظ ار للظروف التي تمر بها البالد و النقص الحاد في موارد الطاقة التي تحتاجها محطات التوليد الكهربائية نتيجة لوقوع مصادر الطاقة الكهربائية في المناطق الساخنة ظهرت إلى السطح مشكلة انقطاع الكهرباء و التقنين لساعات طويلة والتي أثرت بشكل كبير في حياة المواطن السوري و حرمته من نعمة كبيرة بعد أن عاش عقودا طويلة لم يلق لها باالا ،ومن وحي هذه المعاناة قامت الحكومة السورية بإنشاء مشاريع للتخفيف من الضغط على الشبكة الكهربائية و التحميل العالي لها و من ضمن هذه المشاريع كانت المشاريع الخاصة بإنارة بعض الشوارع باستخدام الطاقة الشمسية .لقد بقيت الكلفة العالية لهذه المشاريع أهم العوائق أمام تعميم هذه المشاريع على عدد أكبر من الشوارع نظ ار لغالء البطاريات الكبيرة و من هنا برزت الحاجة لتحسين فعالية استهالك البطارية و الحاجة إلنارة الطرقات بطريقة أكثر فعالية من الطريقة التقليدية و بكفاءة مشابهة لهذه الطريقة .في اإلضاءة التقليدية تبقى المصابيح مضاءة طوال الليل و بغض النظر عن حالة الطرقات و بغض النظر عن التوقيت و هي سلبية كبيرة بالنسبة لهذا النوع من اإلضاءة فبعد غياب الشمس بعدة ساعات تنخفض حركة السيارات بشكل كبير على الطرقات عن مثيلتها في ساعات الصباح و بالتالي ال داعي إلبقاء المصابيح تعمل باستطاعتها الكاملة خالل هذه الفترات ألن ذلك سيفرغ البطارية بشكل أكبر و بالتالي عمر البطارية سينقص بشكل كبير و عبء ماديا كبي ار يضاف إلى كلفة هذه األنظمة سنضطر الستبدالها بشكل متكرر و هذا سيشكل ا و ذلك ضمن ميزانية الصيانة. تعتمد هذه الطريقة على خفض إضاءة مصابيح
LEDالمستخدمة في اإلنارة باستخدام مفهوم
تعديل عرض النبضة حسب حركة السيارات على الطريق ,فعند خلو الشارع من السيارات والمشاة
يتم تشغيل مصباح LEDباستطاعة أقل ،حيث يتم نشر حساسات في الشوارع و التي ممكن أن تكون حساسات أشعة تحت الحمراء IRأو حساسات حركة لتحسس حركة السيارات والمشاة في الشوارع .فعند مرور إحدى السيارات يتم إضاءة مجموعة من األعمدة أمام السائق ولمسافة مناسبة له بحيث يستطيع القيادة بشكل مريح و آمن له و للمشاة . تم تنفيذ النموذج الخاص بهذا المشروع باستخدام متحكم ATmegaو حساسات من نوع Reed Switchالمغناطيسية لكي يكون النموذج مناسبا للعرض و توضيح الفكرة و لكي ال يتأثر بحركة الحضور أو أي مصدر إضاءة خارجي ممكن أن يشكل مصد ار للتشويش أو الضجيج . و تم تنفيذ التعديالت على دارة القيادة باستخدام Attiny13و حساس PIRو لغة أردوينو سي و موديول إرسال و استقبال . ASK و تم تقديم دراسة مفصلة للطريق بين دوار تدمر و دوار السيد الرئيس من حيث عدد األعمدة و توزيعها و تفاصيل التجهيزات المستخدمة و تم تقديم تصميم لدارة التحكم مناسبة للتطبيق العملي من حيث الكفاءة و الكلفة . آملين أن يكون هذا المشروع خطوة إلى األمام في مسيرة بالدنا إلى التقدم و التطور .
الفهرس القسم النظري .1المتحكمات الصغرية مقدمة إلى المتحكمات الصغرية ……………………………………………1 .….…. مقدمة إلى متحكمات 2 ………….…………………………………………… AVR عائالت متحكمات 3 …..…….……………………………………………… AVR مقارنة بين أشهر عائالت المتحكمات ………………………………5 …..…………. قراءة تكويد معالجات العائلة 6 ……..………………………………………… AVR نواة معالجات 8 ……………..……………………………………………… AVR وحدة الحساب والمنطق 9 ……………….…………………………………… ALU الذواكر في متحكمات 10 ………………….………………………………… AVR المميزات األساسية للمتحكم 12 ............................................. Atmega16 البنية الخارجية للمتحكم 14 …….……………………………………… Atmega16 بوابات الدخل والخرج في متحكمات 15 …….…………….…………………… AVR مسجالت بوابات الدخل والخرج في متحكمات 17 …….………………………… AVR طرق توصيل األحمال مع أقطاب المتحكم ………………………………………… 18 حساب قيمة واستطاعة مقاومة تحديد التيار …………………………19 ……………..
مفاتيح التحكم الترانزستورية …………………………………21 ……………………. استخدام مفاتيح التحكم الترانزستورية ثنائية القطبية ……………22 ……………………..
.2مبادئ الربجمة بلغة Cاملدجمة (املضمنة) Embedded C الهيكل الرئيسي للبرنامج ………………………………24 …..…………………….. إعدادات الدخل والخرج الرقمي – المسجالت ……………25 ………..……………….. مقاومات الرفع والخفض …………………………………28 ………………..…….. العمليات الحسابية …………………………………………30 ……………………. العمليات المنطقية …………………………………………30 ……………………. عمليات اإلزاحة ………………………………………………………………… 32 التحكم على مستوى البت ………………………………………………………… 33
.3املقاطعة Interrupt مقدمة عن المقاطعة …………………………………………35 …………………. كيف تعمل المقاطعة الخارجية …………………………………………………… 35 خطوات تفعيل المقاطعة الخارجية ……………………………………37 ………….. تشغيل المقاطعة 37 ………………………………………………………… INT0 اإلشارات الرقمية ………………………………………………40 ……………….
.4املبدل التشابهي الرقمي ADC مقدمة عن المبدل التشابهي الرقمي ……………………………………………… 45 طريقة عمل الـ 46 …………………….…………………………………… ADC تركيب الـ ADCداخل متحكمات 47 ………………………………… Atmega16 المسجالت داخل الـ 48 …………………...……………………………… ADC خطوات تشغيل الـ 48 ……………………..……………………………… ADC قراءة جهد متغير باستخدام مقاومة متغيرة ……………………………………… 49 تحويل القيمة الرقمية إلى فرق جهد ………………………56 ……………………. حساسية القياس ……………………………………………………………… 57
.5تعديل عرض النبضة PWM توليد 58 …………………..…………………………………………… PWM ثابت الملئ 59 …………………………………………………… Duty Cycle أنماط عمل الـ PWMباستخدام المؤقتات في متحكمات 60 …….………… Atmega توليد إشارة PWMباستخدام 61 ……….…….………………………… Timer0 المسجل 63 ……………….…………………………………………… OCR0 مقاطعة المؤقتات ………………………………………………64 …………….
.6احلساسات المقاومة الضوئية 65 ………………..…………………………………… LDR حساس 68 ……………………..………………………………………… PIR 70 ……………….…………………………………………… Reed Switch
.7تقنيات االتصال املمكن استخدامها لتحقيق الربط بني األعمدة تقنية الـ 72 …………..……………………………………………… ZigBee تقنية تعديل 74 ………….……………………………………………… ASK
قسم الطاقة الشمسية إنتاجية نظام شمسي 1كيلو وات 75 ................................................. حجم النظام الشمسي إلضاءة الشوارع والممرات …………………77 …………….. موديل و مواصفات اللوح الشمسي …………………………………………… 82 موديل و مواصفات منظم الشحن …………………………………83 …………. التصميم باستخدام أعمدة اإلنارة المدمجة ……………………………………… 85 مكونات أعمدة اإلنارة الشمسية ………………………………86 ………………. أعمدة اإلنارة الشمسية المدمجة ……………………………………………… 91
مميزات وعيوب أعمدة اإلنارة الشمسية ……………………………92 ………….. الحسابات المطبقة على الطريق المدروس من دوار تدمر إلى دوار السيد الرئيس 93 .... زوايا ميل األلواح الشمسية ………………………………………99 ………….. توجيه األلواح الشمسية …………………………………………101 …………. حساب مساحة اللوح الشمسي ……………………………………………… 108 تأثير الح اررة على األلواح الشمسية ……………………………………108 ……. مقارنة بين إنتاجية هياكل تثبيت األلواح الشمسية ………………………109 ……. توضيح بعض المصطلحات و الواحدات في علم قياس الضوئي 111 .................
القسم العملي متطلبات النظام ……………………………………………113 …….………. مقارنة بين النظام المستخدم حالي ا والنظام الجديد المدروس …………………117 …. جدوى اقتصادية وكشف تقديري للنظام الجديد …………………………118 …….. الدارة العملية للمشروع والتي سوف يتم إضافتها ألعمدة اإلنارة الجديدة ……119 ……. دارة النموذج التوضيحي المنفذ …………………………………132 …….……. املراجع العلمية140 .......................................................................
المتحكمات الصغرية مقدمة إلى المتحكمات الصغرية : تمتلك المتحكمات العديد من المميزات األس ـ ــاس ـ ــية و المميزات المحيطية الوظيفية وإن الهدف من هذا التنوع هو تقليل عدد العناصر الخارجية على الدارة المطبوعة وذلك بهدف : • تخفيض استهالك الطاقة . • تخفيض كلفة تطوير النظام من خالل تصغير زمن التصميم. • الحصول على أداء أعلى . • الحصول على وثوقية أعلى. إض ـ ـ ــافة إلى المميزات األس ـ ـ ــاس ـ ـ ــية التي تش ـ ـ ــترك بها جميع المتحكمات المص ـ ـ ــغرة فإن العديد من المميزات ظهرت مؤخ ار وأدت لــدفع عجلــة المتحكمــات الصـ ـ ـ ـ ـ ـ ــغريــة لتكون بــديال عن اسـ ـ ـ ـ ـ ـ ــتخــدام المعالجات الصغرية في العديد من مشاريع األنظمة المدمجة. تمتلك معظم المتحكمات المصغرة الوحدات الرئيسية التالية : • وحدة المعالجة المركزية . CPU • ذاكرة برنامج . ROM • ذاكرة معطيات دائمة . EPROM • ذاكرة عشوائية . RAM • أقطاب الدخل و الخرج . I/O • وحدة التوقيت و العد . T/C • وحدات االتصال التسلسلي . UART , SPI , I2C • كما أن بعض المتحكمات تمتلك نوافذ اتصـال تسـلسـلي عالية السـرعة مثل CAN,Ethernet . USB و يبين الجدول التالي بعض أوجه االختالف العامة بين خصائص المتحكمات الصغرية واألنظمة المدمجة بصورة عامة و الحواسيب الشخصية : 1
مقدمة إلى متحكمات : AVR تعتبر متحكمات AVRإحدى منتجات شركة ATMELاألمريكية ,و قد تم تطويرها في مختبرات الشركة الموجودة في النرويج في أواخر التسعينيات و تعتبر من أكثر المتحكمات الصغرية انتشا ار لما تتميز به من العديد من الميزات التي تجعلها مناسبة لكثير من التطبيقات لقد أحدثت شركة ATMELثورة في عالم المتحكمات الصغرية بإنتاجها متحكمات AVRالتي تفوقت بشكل كبير على العديد من نظيراتها من متحكمات 8-bitحيث تم استخدام بنية RISCالتي تتميز باألداء 2
العالي و بالطاقة المنخفضة و احتوت قائمة التعليمات في متحكمات AVRعلى 132تعليمة ينفذ معظمها خالل دورة آلة واحدة وبالتالي عند وصل هزاز 16MHzإلى المتحكم فإنه سينفذ حوالي 16MIPSكما زودت المتحكمات بذاكرة قابلة للمسح و الكتابة ألكثر من 100000مرة و ضمنت الشركة أن يبقى البرنامج داخل المتحكم بشكل صحيح حتى 25سنة ,كما تملك متحكمات AVRوحدات محيطية مدمجة متعددة الوظائف األمر الذي يوفر استخدام دارات متكاملة خارجية ,كذلك زودت معظم متحكمات AVRبمبدل رقمي تشابهي متعدد األقنية مدمج داخل المتحكم ,إضافة إلى إمكانية البرمجة دون فصله من النظام
In-System
, Programmingو كذلك تتوفر في األسواق بكميات كبيرة و سعر منخفض مقارنة مع مميزاتها. عائالت متحكمات : AVR تنقسم عائالت متحكمات AVRذات عرض ناقل 8-bitإلى أربع مجموعات أساسية إضافة إلى مجموعات أخرى ذات وظائف خاصة ,تمتلك جميعها نفس البنية و تختلف في المواصفات و الخصائص الموجودة في كل نوع : * العائلة : AT90xxxxالعائلة الكالسيكية الني كان منها االنطالقة األولى لمتحكمات AVR في عام 1997و قد توقف تصنيعها . * العائلة : ATinyxxو هي العائلة الصغرى لمتحكمات AVRالمطورة والتي ظهرت في أوائل عام 2000و هي تمتلك عدد أقطاب قليل نسبيا و حجم ذاكرة برنامج صغير نسبي ا و موارد محدودة على الشريحة األمر الذي يجعل سعرها منخفض بالمقارنة مع متحكمات . Atmega
3
* العائلة :ATmegaxxxxو هي العائلة الكبرى لمتحكمات AVRالمطورة و التي ظهرت في أوائل العام 2000و هي تمتلك عدد أقطاب كبير و حجم ذاكرة برنامج كبير نسبيا وموارد متنوعة على الشريحة .
* العائلة : ATxmegaxxxxو هي العائلة المتطورة و األحدث لمتحكمات AVRوالتي ظهرت في عام 2008و هي تمتلك مميزات متنوعة و سعة معالجة كبيرة و تعمل بترددات أعلى من سابقاتها 32MHzكما أنها تمتلك عدد أقطاب كبير و حجم ذاكرة برنامج كبيرة إضافة إلى ميزات جديدة ال تتوفر في سابقاتها.
4
* إضافة للعائالت األربعة األساسية يوجد عائالت أخرى ذات وظائف و تطبيقات خاصة موضحة بالجدول أدناه :
مقارنة بين أشهر عائالت المتحكمات : يبين الجدول التالي مقارنة بين أشهر عائالت متحكمات : 8-bit
من خالل الجدول نستنتج أفضلية متحكمات AVRلألسباب التالية: • متحكمات AVRأسرع من متحكمات PICبأربع مرات و أسرع من متحكمات 8051بثمانية مرات . • متحكمات AVRتمتلك ذاكرة برنامج ذات حجم أكبر من باقي العائالت مما يمكن من كتابة برامج ضخمة. 5
• متحكمات AVRمبنية على تقنية Harvardالتي تقوم على الفصل بين ذاكرة البيانات و ذاكرة التعليمات بحيث يكون لكل من الذاكرتين خطوط عنونة منفصلة و كذلك األمر بالنسبة لخطوط التحكم و ممر المعطيات ,األمر الذي يمكن من أن تحدث عملية قراءة التعليمات مع قراءة أو كتابة
البيانات
في نفس اللحظة بسبب عدم اشتراك البيانات
و التعليمات في نفس الذاكرة .بالمقارنة مع البنية فون-نيومان فإن هذه األخيرة منظمة بحيث ال يوجد فصل بين ذاكرة التعليمات و ذاكرة البيانات و لهما نفس خطوط العنونة و ممر المعطيات ,و بالتالي فإن الفائدتين اللتان تم ذكرهما سابقا ال توفرهما بنية فون-نيومان مما يجعل بنية هارفارد ذات أداء أعلى من حيث سرعة المعالجة و تنفيذ البرنامج. • متحكمات AVRتملك نواة من نوع RISCالتي تمكن من إنجاز تعليمة خالل دورة هزاز واحدة بخالف تقنية CISCالتي تحتاج عدة دورات هزاز لتنفيذ تعليمة واحدة ,كذلك فإن بنية RISCأٌل كلفة من بنية .CISC
قراءة تكويد معالجات العائلة : AVR بشكل عام تزود الشرائح المتكاملة و العناصر اإللكترونية برقم أو تكويد خاص بكل صنف يمكننا معرفة الكثير عن الشريحة الخاصة بعائلة AVRمن خالل التكويد الموجود على غالفها الخارجي ،لنأخذ على سبيل المثال المتحكم المصغر ATmega8الموضح بالشكل ,نالحظ أن الغالف يحوي رمز الشركة الصانعة Atmelو رقم تصنيع تسلسلي 0619Iخاص برقم الدفعة و بيئة عمل المعالج و من ثم تكويد المعالج و هو : ATmega8-16PU
6
بالنسبة لبيئة عمل المعالج فهو يستخدم للداللة على نوع التطبيق الذي يمكن أن يستخدم المعالج ألجله ,فإما أن يكون تجاريا
Cأو صناعيا Iأو عسكريا Mو االختالف في ذلك في قدرة
المتحكم على تحمل الح اررة و الضجيج العالي :
بالنسبة للكود فهو على الشكل التالي:
من الجدير ذكره أن شركة Atmelقامت بدمج المعالج ذو الالحقة ( ATmegaxxxl_8xxيعمل عند جهد منخفض 2.7Vو تردد منخفض ) 8MHzمع المعالج ( ATmegaxxx_16xxيعمل عند الجهد 4.5Vو تردد ) 16MHzفي معالج جديد متطور ATmegaxxxA-xxبجمع 7
خصائص كال المعالجين هذا األخير يعمل عند جهود 2.5V-5.5Vوتردد 1-16MHzو قد صدر عام 2010ليحل محل هذه االصدارات. يبين الشكل مقارنة بين الحاالت الثالث لتكويد المتحكم : ATmega128 ATmega128L-8AUقديم لم يعد في طور التصنيع . ATmega128-16AUقديم لم يعد في طور التصنيع . ATmega128A-AUالجيل الجديد و هو موافق تماما لسابقيه.
نواة معالجات : AVR تتمثل المهمة الرئيسية لنواة المعالج في ضمان تنفيذ البرنامج بشكل صحيح و الذي بدوره يتطلب توفير امكانية الولوج إلى الذواكر و القدرة على تنفيذ العمليات الحسابية و التحكم بالطرفيات إضافة إلى التعامل مع المقاطعات المختلفة .
نظرة عامة على البنية الداخلية للنواة : تعتمد العائلة AVRالبنية Harvardبهدف زيادة األداء و العمل المتوازي بحيث تكون هناك ذاكرة مخصصة للبيانات مع ممر معطيات خاص و ذاكرة أخرى منفصلة لتعليمات البرنامج مع ممر خاص أيض ا . يتم تنفيذ التعليمات بمستوى وتحد من المعالجة التفرعية بحيث أنه في الوقت الذي تقوم فيه وحدة المعالجة المركزية ب تنفيذ إحدى التعليمات يتم إحضار شفرة التعليمة التالية لها من ذاكرة البرنامج ،إن هذا المبدأ يسمح بتنفيذ تعليمة كل نبضة ساعة.
8
يرتبط مع وحدة الحساب و المنطق ALUملف المسجل ذو الولوج السريع و الذي يحوي على 32مسجال لألغراض العامة طول كل منها 8bitو بزمن وصول قدره نبضة ساعة واحدة ويقصد بالولوج السريع لملف المسجالت على أنه الولوج الذي يستغرق زمن قدره نبضة ساعة واحدة ، و هذا يعني أنه خالل دورة ساعة واحدة تقوم وحدة الحساب و المنطق بتنفيذ عملية واحدة ،فهي تقوم أوال بإخراج المعاملين من ملف المسجالت و كل ذلك يتم خالل دورة ساعة واحدة. وحدة الحساب و المنطق : ALU تدعم وحدة الحساب و المنطق العمليات الحسابية و المنطقية بين محتوى المسجالت أو بين محتوى مسجل و قيمة ثابتة ,كما يمكن إجراء عملية معينة على محتوى مسجل وحيد و بعد تنفيذ العملية يتم تحديث مسجل الحالة ليعطي المعلومات عن ناتج العملية .تتمتع وحدة الحساب و المنطق ALUعالية األداء في العائلة AVRباالرتباط المباشر مع مسجالت العمل االثنين و الثالثين ذات األغراض العامة ,فخالل دورة ساعة واحدة تنفذ وحدة الحساب و المنطق عملية ما بين مسجلين في ملف المسجالت أو ما بين مسجل و قيمة ثابتة ،و تقسم عمليات ALUإلى ثالث فئات رئيسية و هي :فئة حسابية – فئة منطقية – فئة العمليات على مستوى البت .كما تمتلك معالجات AVRفي بنيتها ضارب متطور يدعم عمليات الضرب لألعداد المؤشرة و غير المؤشرة و األعداد الكسرية .
9
الذواكر في متحكمات : AVR تمتلك متحكمات AVRثالث أنواع من الذواكر المدمجة على الشريحة و هي : • ذاكرة البرنامج . • ذاكرة البيانات . • ذاكرة المعطيات .
.1ذاكرة البرنامج : يملك المتحكم ATmega32aذاكرة ومضية Flashمدمجة ذمن الشريحة بحجم 32KB مخصصة لتخزين البرنامج ,و بما أن جميع تعليمات AVRهي ذات شيفرة وحيدة وبطول كلمة واحدة 16bitأو كلمتين 32bitفقد تم تنظيم ذاكرة البرنامج لتشكل 16K*16كما تم تقسيمها لقسمين منفصلين قسم لإلقالع و قسم للتطبيق و ذلك بهدف الحماية من سرقة البرنامج ،تتميز ذاكرة البرنامج في متحكمات AVRبديمومة 10000دورة مسح – كتابة على األقل كما أنها قابلة إلعادة البرمجة في النظام دون الحاجة إلى نقل المتحكم لمبرمجة خاصة و هو ما يدعى in ، system programmingكذلك يملك متحكم ATmega32aعداد pcبطول 16-bit و بذلك يستطيع عنونة كامل مجال الذاكرة الذي هو بطول . 16KBx16bit
10
.2ذاكرة البيانات : SRAM و هي عبارة عن ذاكرة وصول عشوائي static random access memoryمؤقتة يتم فيها إجراء العمليات على المتحوالت ,يملك المتحكم ATmega32Aذاكرة بيانات من النوع SRAMبطول . 2KB
.3ذاكرة المعطيات : EEPROM يملك المتحكم ATmega32Aذاكرة معطيات من النوع EEPROMبطول 1KBو هي منظمة بشكل مستقل لتخزين البيانات ,و يمكن القراءة أو الكتابة من أي بايت من بايتات هذه الذاكرة بشكل مستقل ,كما تسمح ديمومة الذاكرة EEPROMبأكثر من 100000عملية كتابة و مسح.
11
المميزات األساسية للمتحكم ( Atmega16المرجع DATA SHEETالمتحكم) : .1أداء ٍ عال مع استهالك منخفض للطاقة . .2بنية RISCعالية األداء و التي تؤمن : • تنفيذ واحدة من 131تعليمة خالل دورة ساعة واحدة . •
32سجل عمل عام سعة 8بت ( وهي السجالت المستخدمة لتناقل البيانات آني ا أثناء تطبيق البرنامج ) .
•
سرعة في تنفيذ التعليمات تصل إلى مليون تعليمة في الثانية في حال كان تردد العمل 1ميغا هرتز ( وتقبل تردد عمل حتى 8ميغا هرتز و ذلك باستخدام المهتز الداخلي .)RC
.3الذواكر غير المتطايرة ( Non Volatileويقصد بها تلك الذواكر التي ال تفقد البيانات بانقطاع التيار). • ذاكرة البرنامج بسعة 16كيلوبايت قابلة إلعادة البرمجة ,قابلة للمحو والكتابة لعدد من المرات يصل إلى 10000دورة ( محو /كتابة ) . • ذاكرة EEPROMبسعة 512بايت ( 100000دورة محو /كتابة ) •
ذاكرة SRAMداخلية بسعة 1كيلوبايت .
.4إمكانية إقفال برمجيا وذلك لحماية البرنامج المحمل على المتحكم . .5واجهة ( JTAGموافقة لمعايير ) IEEE std. 1149.1وهي الواجهة التي يمكن من خاللها التخاطب مع المتحكم أثناء عمله بشكل مباشر وتصحيح أعطاله بعمليات debugفورية وآلية وتتضمن : • فحوصات كلية للبرنامج وعمليات مقارنة للنتائج وتصحيحها وفق ا للحاجة . • إمكانية إعادة برمجة خارجية لذاكرة البرنامج وذاكرة EEPROMوبتات الحماية والقفل . .6ميزات الطرفيات : • عدادان/مؤقتان ( ) Timer / Counterبسعة 8بت . 12
•
عداد/مؤقت بسعة 16بت .
•
عداد زمن حقيقي مع مهتز خاص به .
•
4قنوات . PWM
•
8قنوات للمبدل التمثيلي الرقمي . ADC
•
واجهة اتصاالت تسلسلية SPIللتخاطب مع متحكمات أخرى .
•
واجهة اتصاالت تسلسلية USARTللتخاطب مع الحاسوب .
•
مؤقت مراقبة قابل للبرمجة مع مهتز خاص به متوضع على الرقاقة .
•
مقارن تمثيلي .
.7ميزات خاصة بالمتحكم : • قابلية إلعادة الضبط Resetأثناء وقت التشغيل وأنماط حماية للعمل قابلة للبرمجة . • هزاز ( مقاومة – مكثفة ) داخلي معاير . • مصادر مقاطعة داخلية وخارجية . • ستة أنماط لحفظ الطاقة . .8بوابات الدخل /الخرج والحزم : • 32خط ( 4*8بوابات ) دخل /خرج قابل للبرمجة . • 40رجالا PINموزعة في بنية من النمط . PDIP .9جهد التغذية : • 5.5 – 2.7للنوع . Atmega16L • 5.5 – 4.5للنوع . Atmega16 .10تردد العمل : • 8 – 0ميغا هرتز للنوع .Atmega16L • 16 – 0ميغا هرتز للنوع . Atmega16
13
.11استهالك الطاقة عند تردد العمل 1ميغا هرتز و الجهد 3فولت للنوع : Atmega16L • في حالة العمل 1.1 :ميلي أمبير . • في نمط السبات 0.35 :ميلي أمبير . • في نمط حفظ الطاقة :أقل من 1ميكرو أمبير .
البنية الخارجية للمتحكم : Atmega16 يمتلك المتحكم 40 Atmega16رجالا مرقمة و قد وضعت عليها المسميات ،أما ما بين قوسين فهي الوظيفة األخرى ،ويدل نصف الدائرة المفرغ على الجهة األمامية للمتحكم وهو ظاهر على الصورة ،أما توزيع االطراف فهو كالتالي : • البوابة :Port Aتتألف من األرجل (. )PA0….PA7 • البوابة :Port Bتتألف من األرجل (. )PB0….PB7 • البوابة :Port Cتتألف من األرجل (. )PC0….PC7 • البوابة :Port Dتتألف من األرجل (. )PD0….PD7 • : RESETمدخل إعادة التشغيل . • : VCCمدخل التغذية ( ) 5.5 – 4.5فولت من أجل Atmega16و ( ) 5.5 – 2.7 فولت من أجل Atmega16l • : GNDاألرضي . • : XTAL1مدخل الكريستالة الخارجية . • : XTAL2خرج الكريستالة الخارجية.
14
بوابات الدخل و الخرج في متحكمات : (GPIOs in AVR MCUs) AVR تتمتع جميع أقطاب بوابات متحكمات العائلة AVRبأنها أقطاب ثنائية االتجاه وظائف قراءة وكتابة وتعديل عند استخدامها كأقطاب دخل/خرج لألغراض العامة ( , )GPIOsكمت يمكن تغيير اتجاه أحد أقطاب بوابة بشكل منفصل – خالفا لمتحكمات - 8051فيمكن تعريف كل قطب من األقطاب على حدى كقطب دخل أو خرج .كذلك تمتلك األقطاب عند تعريفها كأقطاب دخل مقاومات رفع داخلية – إلى التغذية -يمكن تفعيلها أو إلغاء تفعيلها لكل قطب بشكل منفصل . إن بنية األقطاب هي من النوع push-pullأي أنها قادرة على قيادة الخرج على المستوى المنطقي " "0والمستوى " "1حيث أن التيار الذي يمكن أن يزوده القطب قادر على قيادة ثنائي ضوئي ( )LEDبشكل مباشر دون الحاجة إلى دارة مفتاح ترانزستوري .كما أن جميع األقطاب مزودة بدارة حماية من تفريغ الشحنات الستاتيكية ( )ESDمؤلفة من ثنائيين شوتكي أحدهما موصل إلى التغذية ( للحماية من شحنات التفريغ الموجبة ) واآلخر موصل إلى النقطة األرضية ( للحماية من شحنات التفريغ السالبة ) كما هو مبين في الشكل التالي :
15
يتم تصنيف أقطاب الدخل/الخرج العامة ( )GPIOsفي مجموعات تسمى بوابات portsكل بوابة تتألف من ثمانية أقطاب Pinsويختلف عدد البوابات باختالف عدد أقطاب المتحكم حيث يمكن أن يصل عدد البوابات في المتحكمات AVRالمتقدمة إلى أحد عشر بوابة ويشار إليها باألحرف . PORT A,B,C,D,E,F,G,H,J,K,L
16
مسجالت بوابات الدخل والخرج في متحكمات )AVR MCUs GPIO Registers ( AVR تمتلك كل بوابة من بوابات المتحكم ثالث مسجالت تحكم ,حيث يمثل الرمز Xرمز البوابة ( )A,B,C,C,D,E,F,G,H,K,Lوالرمز yقطب البوابة (. )0:7 -1مسجل التحكم باتجاه المعطيات للبوابة : )Data Direction Register( DDRx يتم من خالله تحديد وظيفة كل قطب – دخل أو خرج .تمثل كل خانة من خانات مسجل اتجاه المعطيات الثمانية قطباُ من أقطاب البوابة الموافقة ( المسجالت أدناه هي للبوابة ) A حيث أنه عند وضع القيمة " "1في خانة المسجل DDRx.yفإن القطب الموافق لهذه الخانة يصبح قطب خرج ,أما عند وضع القيمة " "0في خانة المسجل DDRx.yفإن القطب الموافق لهذه الخانة يصبح قطب دخل .
-2مسجل الخرج للمعطيات :)Data Output Register( PORTxيوجد له وظيفتان : • في حال كان القطب معرف ا في مسجل DDRxكقطب خرج (" ,)DDRx.y="1فإن مسجل خرج المعطيات سيحدد الحالة المنطقية المطبقة على القطب بحيث إما أن يكون منبع للتيار (" ,)"1أو مصرف للتيار(".)"0 • في حال كان القطب معرف ا في مسجل DDRxكقطب دخل (" ,)DDRx.y="0فإن مسجل خرج المعطيات سيتحكم بوصل (" )"1أو فصل (" )"0مقاومة الرفع الداخلية للقطب المعني .
-3مسجل الدخل للمعطيات : )Data Input Register( PINxيستخدم لقراءة الحالة الخارجية المطبقة على القطب المعني (" )"1"/ "0عند تعريف القطب في مسجل اتجاه المعطيات كقطب دخل ( ") DDRx.y ="0 17
طرق توصيل األحمال مع أقطاب المتحكم (:)Interfacing Loads with MCU إن بنية األقطاب في متحكمات AVRومتحكمات PICهي من النوع , Push-Pullأي أنها قادرة على قيادة الخرج على المستوى المنطقي " "0والمستوى " "1حيث أن التيار الذي يمكن أن يزوده القطب قادر على قيادة ثنائي ضوئي LEDبشكل مباشر دون الحاجة إلى دارة مفتاح ترانزستوري ،وبالتالي يمكن وصل األحمال مع أقطاب المتحكم بطريقتين : القطب يعمل كمنبع لتيار تشغيل الحمل sourceالشكل (. )A القطب يعمل كمصرف لتيار تشغيل الحمل SINKالشكل (. )Bفي الحالة األولى – القطب يعمل كمنبع لتيار تشغيل الحمل – يتم تزويد التغذية للحمل عن طريق التغذية الداخلية للمتحكم والتصريف يكون من خالل النقطة األرضية مباشرة أما في الحالة الثانية – القطب يعمل كمصرف لتيار تشغيل الحمل – فإنه يتم تزويد التغذية للحمل مباشرة من التغذية الرئيسية ويتم التصريف من خالل المتحكم والنقطة األرضية له .في كال الحالتين سيكون األداء للمتحكم واحدا إال أنه يوصى عادة بالطريقة الثانية وذلك لتخفيض ضجيج التغذية VCCداخل المتحكم ,كما توزع مسارات النقطة األرضية GNDداخل المتحكم أكبر وبالتالي التصريف سيكون موثوقا ومناعته للضجيج أكبر .
18
إن مبدأ سير التيار في الحالة األولى (المسار باللون األحمر على اليسار) والثانية ( المسار باللون األخضر على اليمين ) داخل البنية الداخلية ألقطاب المتحكم مبين على الشكل:
حساب قيمة واستطاعة مقاومة تحديد التيار()Calculating Current Resistor Value إن قيمة مقاومة تحديد التيار للحمل تتعلق بشدة مباشرة بجهد تشغيل الحمل و تياره ومقاومته األم امية .من أجل حساب قيمة مقاومة تحديد التيار لثنائي ضوئي على سبيل المثال فإنه يجب معرفة تيار و جهد التشغيل للثنائي .إن تيار وجهد العمل للثنائيات الضوئية يختلف حسب لون الثنائي الضوئي والجدول التالي يوضح المواصفات الكهربائية للثنائيات الضوئية :
19
: IF maxالتيار األعظمي المار في الثنائي. : VF typالجهد األمامي النموذجي من أجل تشغيل الثنائي . : VF maxالجهد األمامي األعظمي الني يمكن للثنائي أن يتحمله . : VR maxالجهد العكسي األعظمي الني يمكن للثنائي أن يتحمله . : Luminous intensityشدة السطوع للثنائي . : Viewing angleزاوية انعكاس الرؤية لإلضاءة . : Wavelengthطول موجة الضوء الصادر . وبالتالي من أجل ثنائي ضوئي ذو لون أحمر فإن جهد وتيار العمل 2V/20m Aوبالتالي يمكن حساب مقاومة تحديد التيار من العالقة :
وبالتالي فإن الذي نحتاجه هو مقاومة Ω150ذات استطاعة . 1/4 Watt
20
مفاتيح التحكم الترانزستورية (: )Transistors as Control Switches من أجل التحكم بأحمال ذات تيارات كبيرة ( محركات ,ريليه ,سخانات ) فإن تيار الخرج لقطب المتحكم 20m Aال يمكنه قيادة هذه األحمال ,لذا يتم استخدام الترانزستورات كمفاتيح إلكترونية () للتحكم بهذه األحمال .بشكل عام يوجد نوعين من الترانزستورات: الترانزستورات ثنائية القطبية . BJT الترانزستورات أحادية القطبية . FETعملياُ إن االستخدام لكل منها يختلف بحسب طبيعة الحمل المقاد ,الجدول التالي يبين الفرق يبين النوعين :
يتم استخدام الترانزستورات ثنائية القطبية من أجل التحكم باألحمال ذات التيارات الصغيرة .بينما الترانزستورات الحلقية من أجل التحكم بأحمال ذات تيارات وجهود متوسطة وكبيرة . إن مجال استخدام الترانزستورات في أنظمة التحكم الرقمي يقتصر على استخدام هذه الترانزستورات كمفاتيح إلكترونية تحكمية ( )on/offيعمل في منطقتي القطع واإلشباع ,وبالتالي فإن اختيار الت ارنزستور نسبة إلى الحمل سيعتمد على ثالث عوامل أساسية : التيار المار في الترانزستور . االستطاعة المبددة في الترانزستور. سرعة الفتح واإلغالق للترانزستور .21
في حالة القطع ( : )offsetيكون تيار القاعدة . IB=0 في الحالة الفعالة ( : )On active stateيكون فيها تيار المجمع Ic=IB*h FEوهي الحالة التي يستخدم فيها الترانزستور كمضخم فغال – أي زيادة في تيار القاعدة ينتج عنها زيادة في تيار المجمع. في حالة اإلشباع ( : )On saturate stateفي هذه الحالة يمرر الترانزستور كامل التيار .
استخدام مفاتيح التحكم الترانزستورية ثنائية القطبية : يمكن توصيل المفاتيح الترانزستورية بطريقتين : -1متحكم بها لتكون فعالة عند المنطق العالي " "1وبالتالي فإن الترانزستور سوف يعمل كمفتاح لوصل /فصل النقطة األرضية GNDوفي هذه الحالة سوف يستخدم الترانزستور من نوع NPNالشكل . A -2متحكم بها لتكون فعالة عند المنطق المنخفض" "0وبالتالي فإن الترانزستور سوف يعمل كمفتاح لوصل /فصل نقطة التغذية VCCوفي هذه الحالة سوف يستخدم الترانزستور من نوع PNPالشكل . B
22
-3في بعض األحيان يحصل خطأ في تصميم دارة المفتاح اإللكتروني باستخدام الترانزستور ثنائي القطبية وهو من خالل استخدام الترانزستورات من نوع NPNكمفتاح لوصل/فصل نقطة التغذية VCCللحمل كما في الشكل . C أو استخدام الترانزستور من نوع PNPكمفتاح لوصل/فصل النقطة األرضية GNDللحمل كما في الشكل . D
23
مبادئ البرمجة بلغة Cالمدمجة (المضمنة) Embedded C لماذا نستخدم لغة ANSI-Cبدال من اللغات و معايير البرمجة األخرى مثل Bascom و Flow Codeبالرغم من أن هذه الطرق قد تكون أسهل في البرمجة ؟ لكي نفهم اإلجابة علينا أوال أن نتعرف على كلمة ANSIو التي تعني " المعهد الوطني األمريكي للمعايير" ،هذا المعهد قام بوضع معيار موحد للغة السي و ذلك حتى تصبح البرامج المكتوبة بها صالحة و قابلة للتطبيق على منصات مختلفة (حتى وإن تطلبت تعديالت بسيطة ) فمثال يمكنك كتابة نفس البرنامج بلغة ال Cعلى نظام ويندوز و من ثم تقوم بعمل ترجمة له دون تعديل ليعمل على نظام لينوكس أو العكس و باستخدام نفس المترجم . Compiler إن تعلم لغة السي المعيارية و التدرب على تقنيات كتابة األكواد يمكن من التعامل مع أنواع كثيرة من المتحكمات الدقيقة ,فمثال يمكن قراءة البرامج المكتوبة لمتحكمات ARMبدون مجهود كبير و قد تتواجد العديد من األوامر المتشابهة في الكثير من الحاالت (باختالف أسماء المسجالت ). حيث أن برمجة أي نوع آخر من المتحكمات تصبح عملية سهلة طالما أن المترجم يدعم لغة C المعيارية . الهيكل الرئيسي للبرنامج: عادة ما تنقسم البرامج البسيطة للمتحكمات إلى 3أجزاء رئيسية هي : • استدعاء المكتبات و تعريف الثوابت. • الدالة الرئيسية للبرنامج. • الدوال اإلضافية إن وجدت. هيكل البرنامج : يتم في البداية استدعاء المكتبات كما في األمثلة التالية:
24
المكتبة األولى io.hمسؤولة عن GPIOو التحكم بها و كذلك تسمية كل مخرج باسم خاص به مثل ... PORTA , PB0,PC1إلخ . المكتبة الثانية هي delay.hو هي المسؤولة عن التالعب بالزمن و حساب الوقت الذي يمر على تشغيل المع الج و هي المكتبة التي تمكننا من إضافة تأخير زمني أو التحكم في وقت تشغيل أي مخرج .
الجزء الثاني من البرنامج هو الدالة الرئيسية و التي ستحتوي بداخلها على البرنامج الحقيقي الذي يتم تشغيله على المتحكم الدقيق .غالبا ما يتم تقسيم الدالة الرئيسية إلى جزئين أساسيين كالتالي:
إعدادات الدخل و الخرج الرقمي : تمتلك متحكمات 3 AVRمسجالت أساسية للتحكم في أي بورت و التي يتم ضبطها في الدالة الرئيسية . و أشهر هذه المسجالت هي :
25
المسجل : DDRx register DDRxهو مسجل 8بت يتحكم في اتجاه البيانات و يعتبر المسؤول عن التحكم في أطراف أي بورت لتعمل إما كدخل أو خرج inputأو خرج . outputالحرف xفي نهاية اسم المسجل يعبر عن أحد الرموز A,B,C,Dو هي أسماء البورتات .فمثال DDRCهو مسجل اتجاه بيانات البورت cو المسجل DDRAهو الخاص بالبورت .... Aكل بت من هذا المسجل يتحكم في أحد األطراف الخاصة بالبورت حيث يعبر الرقم 1عن أن الطرف يعمل مخرج أما الرقم 0يعبر عن أن الطرف يعمل كمدخل. و كما نرى في الجدول التالي الخاص بالمسجل DDRAصفحة 66من دليل بيانات ATmega16نجد أنه يتكون من 8بت بدءا من البت رقم 0حتى : 7
يتم التحكم في هذه البتات عبر وضع القيمة المطلوبة بها مباشرة مثل أن نكتب األمر : و هذا يعني أن نضع القيمة 00000001داخل المسجل DDRAو التي تعني أن البت األولى فقط واحد و الباقي أصفار مما يعني أن PA0يعمل كخرج بينما يعمل الباقي كدخل كما في الصورة اآلتية:
26
و إذا قمنا بالتعديل التالي :
يصبح لدينا:
و الحالة االبتدائية initialهي أن تعمل جميع البورتات كدخل . المسجل : PORTX register يتحكم المسجل PORTXفي الخرج الرقمي ألي طرف .و الصورة التالية تمثل المسجل PORTAفي دليل البيانات :
مثال:
27
يقوم هذا البرنامج بإخراج 1منطقي على الرجل PB0لمدة ثانية واحدة ثم يقوم بإخراج 0منطقي على نفس الرجل لمدة ثانية واحدة و ذلك ضمن حلقة النهائية . المسجل : PINX register يقوم المتحكم الدقيق بقراءة محتويات جميع األطراف بصورة تلقائية و يخزنها في المسجل PINX فمثال المسجل PINBيقوم بتسجيل قيمة الجهد على جميع أطراف البورت Bبصورة مستمرة و يتم تحديث هذا المسجل بنفس سرعة عمل المتحكم فمثال إذا كان المتحكم الدقيق يعمل بسرعة 1 ميجا هرتز فهذا يعني أن المسجل PINBيتم تحديثه مليون مرة في الثانية و في كل مرة يقوم بقراءة جميع أطراف البورت . B يحتوي المسجل PINXعلى 8بتات و كل بت تمثل قراءة الجهد على أحد أطراف البورت فمثال المسجل PINBنجد أنه يتكون من البتات التالية :
البت رقم صفر يمثل قراءة الجهد على الطرف PB0و البت رقم 1يمثل قراءة الجهد على الطرف PB1و هكذا.... المسجالت PINXمن النوع read onlyمما يعني أنه يمكن أن نق أر منها فقط و ال يمكن أن نقوم بتغيير محتواها و يتم تحديث محتوى المسجالت بشكل تلقائي.
مقاومات الرفع و الخفض : pull up and pull down resistors من أشهر الكلمات في عالم اإللكترونيات الرقمية كلمة المقاومة الرافعة أو الخافضة للجهد و هذه المقاومات التي تتراوح قيمتها بين 2.2و 10كيلو أوم تستخدم بصورة أساسية في دخل األنظمة انتهاء بالمتحكمات الدقيقة ، الرقمية digital inputsبداية من البوابات المنطقية البسيطة و ا استخداماتها هي : 28
.1إلغاء الدخل العائم : حيث جميع اإللكترونيات الرقمية التي تتعامل بالصفر والواحد تعاني من مشكاة خطيرة جدا تسمى المنطقة العائمة floating areaأو noise marginهذه المنطقة هي فارق الجهد بين الصفر و الواحد المنطقي و تستخدم مقاومات pull-upأو pull downلحل هذه المشكلة.
.2عكس الجهد الداخل : في بعض الحاالت يكون مطلوب عكس الجهد الداخل من المفتاح مثال : في حال استخدام المقاومة : pull-up
وفي حال استخدام مقاومة : pull-down
كما هو موضح باألشكال التالية :
29
.3محول جهد إلى تيار: بعض الحساسات الشهيرة مثل الميكروفون أو المقاومة الضوئية LDRأو الح اررية NTCتقوم بتحويل الح اررة والضوء إلى تغير في التيار الكهربائي و ليس إلى جهد مما يمثل مشكلة في فهم هذه الحساسات . حيث نجد أن جميع المتحكمات الدقيقة التي تحتوي على ADCيمكنها قراءة تغير الجهد وال تستطيع التعرف على التيار الكهربائي المتغير لذلك يتم استخدام مقاومة pull-down or pull- upلتحويل التيار المتغير إلى جهد . من الممكن استخدام خاصية ال internal pull-upمن خالل جعل الرجل تعمل كمدخل و كتابة واحد منطقي في المسجل PORTXللرجل الموافقة.
العمليات الحسابية : تماثل العمليات الحسابية في لغة cالتقليدية:
العمليات المنطقية : هي مجموعة من األوامر التي تساعدنا على القيام ببعض التحكم المتقدم سواء على المتغيرات أو إعدادات المتحكم أو أطراف المتحكم ( الدخل و الخرج ) . 30
جميع العمليات المنطقية تسمى أيضا الدوال المنطقية تمثل نفس البوابات المنطقية المستخدمة في الدوائر اإللكترونية لكن يتم تطبيقها بصورة برمجية . الجدول التالي يوضح قائمة بهذه العمليات و الرموز المستخدمة في لغة ال cلتنفيذ كل واحدة منها .
أمثلة : استخدام : NOT
استخدام : OR
31
استخدام التعليمة : AND
مالحظة :في المثال السابق تم استخدام الصيغة المختصرة للتعليمة حيث القيمة االبتدائية لـ xNumberهي. xNumber=0b01110011 :
عمليات اإلزاحة : تعرف عمليات اإلزاحة بأنها عمليات تحريك البتات نحو اليمين أو نحو اليسار داخل متغير أو مسجل أو أي قيمة رقمية .تعد هذه العملية من أهم األوامر التي تستخدم في برمجة المعالجات المصغرة و المتحكمات الدقيقة. بفرض لدينا الرقم 0b00000001و لنقم بتطبيق عمليات اإلزاحة لجهة اليسار .
و بفرض أن لدينا الرقم 0b00000101و لنقم بتطبيق نفس العمليات عليه .
32
ليكن لدينا العدد 0b01100000و لنقم بتطبيق عملية اإلزاحة نحو اليمين .
تدعم لغة ال Cاألوامر البرمجية لعمل إزاحة نحو اليمين أو نحو اليسار و تكتب على الشكل التالي :
التحكم على مستوى البت : single bit في بعض الحاالت نحتاج إلى تعديل طرف واحد من أطراف المتحكم أو بت من بتات مسجل ما دون تعديل باقي البتات الخاصة بالبورت أو المسجل .يمكننا ذلك بسهولة عن طريق دمج مجموعة من العمليات المنطقية و عمليات اإلزاحة حيث تتوفر صيغ برمجية معينة تمننا من وضع واحد أو صفر داخل بت محددة في أي متغير أو مسجل .كما يمكننا أن نعكس بت معينة أو نعزلها عن باقي البتات .
كتابة 1داخل أي بت : Set Bit تعرف الصيغة البرمجية set bitبأنها وضع 1داخل قيمة أي بت .بفرض أننا نريد أن نضبط الطرف PA0ليعمل كخرج بغض النظر عن باقي أطراف البورت Aو يمكن ذلك عن طريق دمج األمر orمع left shiftو تكون الصيغة العامة:
33
يتم استبدال الكلمة registerبالمسجل المطلوب و يتم استبدال كلمة bitNameباسم البت المطلوب تغيير قيمته . مثال ( : 1تطبيق هذه الصيغة على المسجل DDRAوالطرف ) PA0
مثال ( : 2وضع setالبتين PA1,PA2بأمر مختصر واحد )
كتابة صفر داخل أي بت : Reset Bit عملية ال Reset Bitهي عكس عملية ال Set Bitوتعني وضع صفر داخل البت المطلوب وتتم عبر دمج 3أوامر AND – Left Shift – Invertو الشكل العام لها :
عكس بت محددة : Toggle Bit تعد الصيغة البرمجية Toggle Bitمن أفضل الصيغ المستخدمة في البرمجة و تعني أنه في حالة أن البت المطلوب = 1قم بعكسها إلى 0وإذا كانت تساوي 0قم بعكسها إلى 1وتكون الصيغة القياسية لها كالتالي :
تعد مجموعة الصيغ البرمجية السابقة من أهم األوامر التي تستخدم في برمجة النظم المدمجة خاص اة أنها مكتوبة بلغة الـ Cالمعيارية مما يجعلها طريقة " معيارية " لعمل setأو resetألي بت مهما اختلف المتحكم الدقيق أو الشركة المنتجة ( طالما أن المترجم الخاص بهذا المتحكم يدعم لغة الـ Cالمعيارية .
34
المقاطعة Interrupt
مقدمة عن المقاطعة : The interrupt في الكثير من األنظمة المدمجة نجـد بعض الوظائف التي تتطلب استجابة فائقة السرعة لحدث معين ،لذا تمت مراعاة هذا األمر في معظم المعالجات والمتحكمات الدقيقة (حتى القديمة منها) حيـث تم إضافة تقنية المقاطعة interruptوهي عبارة عن طرف دخل input pinأو حدث برمجي يتسبب في جعل المعالج يتوقف عن ما يفعله اآلن ويستجيب للحدث المسبب للمقاطعة ويعالجه بسرعة ثم يعود مرة أخرى لما كان يفعله .مثالا نجد أن النظام المدمج داخل وحدة تحكم السيارة يعمل على إدارة الوقود وعرض سرعة الحركة ومع ذلك في حالة حدوث اصطدام بجسم ما نجد أن النظام يستجيب بسرعة عالية ( بالرغم أنه كان مشغول بمعالجة الوقود والسرعة ) .تحدث هـذه االستجابة فائقة السرعة بسبب أن الحساسات المسؤولة عـن االصـطدام يتم توصيلها على أطراف دخل المقاطعة وتسمى هذه األطراف . External interrupts الحقيقة أنه هناك أنواع كثير للمقاطعة ( بعضها داخلي وبعضها خارجي ) سنتحدث في هذا الفصل عن النوع الخارجي فقط External interruptوسيتم شرح بعض األنواع األخرى على مدار الفصـول التالية مثل مقاطعة الـ ( ADCفي الفصل التالي ) ومقاطعة المؤقتات .Timer interrupt كيف تعمل المقاطعة الخارجية : في جميع المعالجات والمتحكمات الدقيقة يتم تصميم الكود المسؤول عن معالجة المقاطعات بصورة مستقلة تماما عن البرنامج الرئيسي . main programفنجد دائما أن برنامج المقاطعة ويسمى ( Interrupt service routingيختصر بكلمة ) ISRيكتب في جزء بعيد عن دالة ( )main 35
فمثالا مكنك أن تكتب برنامج mainليقوم بعمل محدد إلى األبد ثم تكتب برنامج الـ ISRليقوم بوظيفة محددة وسريعة عند تشغيل حساس أو زر معين .يمتلك المتحكم الدقيق من فئة ATmega16/ATmega32عدد 3أطراف للمقاطعة الخارجية يمكن توصيلها بأي حساس أو مفتاح رقمي وهذه األط ارف هي : )INT0 (pin 2 on port D )INT1 (pin 3 on port D )INT2 (pin 2 on port B
أيضا يمكن اعتبار الطرف RESETأحد أطراف الـ . External interrupt مالحظة :الـ RESETفي عالم المتحكمات الدقيقة يختلف قليالا عن الحاسب اآللي .فمثالا نجد في الحاسب اآللي ( أو الهاتف الجوال ) الزر RESETأو Restartوالذي يعني إيقاف تشغيل الطاقة عن الحاسب ثم إعادة تشغيله .أما في المتحكمات الدقيقة الزر RESETهو مقاطعة خارجية تأمر المعالج أن يترك ما يفعله اآلن وينتقل إلى أول أمر في البرنامج المخزن بداخله مع تصفير جميع المسجالت ووحدات الذاكرة ( وهذا يحاكي إعادة تشغيل المتحكم الدقيق ) ومع ذلك تظل الكهرباء متصلة بالمتحكم وال يتم فصلها .والسر وراء تصميم الـ RESETبهذه الطريقة هو أن إعادة فصل وتوصيل الكهرباء بالمتحكم قد يستغرق 60مللي ثانية وهذا رقم كبير نسبيا في التطبيقات التي تحتاج استجابة سريعة بينما المقاطعة يتم تشغيلها في أقل من 1ميكرو ثانية 36
( يعني أسرع بنحو 60,000ضعف من فصل الكهرباء وإعادة توصيلها ) ،عند إدخال إشارة رقمية على هذه األطراف تحدث المقاطعة .وعندها يترك المتحكم الدقيق البرنامج الرئيسي الذي ينفذه وينتقل إلى برنامج الـ ISRليقوم بمعالجة المقاطعة الكود التالي يمثل التركيب البسيط للـ ISR مع الـ main program
خطوات تفعيل المقاطعة الخارجية : يتم تفعيل المقاطعة الخارجية بمجموعة من اإلعدادات كالتالي : .1ضبط األطراف التي ستستخدم للمقاطعة مثل INT0أو INT1لتعمل كدخل . input .2ضبط نوع اإلشارة الكهربائية التي ستسبب المقاطعة على حسب نوع الحساس أو المفتاح الذي سيولد إشارة المقاطعة (انظر للشرح باألسفل) . .3يتم تفعيل قبول استقبال المقاطعة على الطرف المطلوب مثل . INT0 .4تفعيل قبول استقبال المقاطعة بشكل عام . .5كتابة البرنامج الخاص بالمقاطعة . ISR مثال :تشغيل المقاطعة INT0 الدائرة التالية عبارة عـن 2دايـود ضوئي +مفتاح الـدايود المتصـل بالطرف PA0سنقوم بتشغيله بصورة طبيعية ليقوم بعمل Blinkكل مئة مللي ثانية .أما الدايود المتصل بالطرف PC0سيتم تشغيله أو إطفاؤه فقط عند حدوث مقاطعة على الطرف .INT0
37
الكود :
38
شرح الكود : في بداية الكود قمنا باستيراد المكتبة المسؤولة عن المقاطع وذلك عن طريق األمر :
هذه المكتبة تحتوي على بعض األوامر الهامة والتي سنستخدمها في الكود ،بعد ذلك بدئنا في الدالة mainالرئيسية بضبط األطراف التي سيتصل بها الدايودات الضوئية وهي الطرفين PA0 و PB0وذلك عن طريق األمرين :
الخطوة التالية كانت ضبط الطرف PD2ليعمل كدخل وذلك حتى يتمكن من استقبال إشارة المقاطعة من المفتاح المتصل به .كما قمنا بتشغيل مقاومة الرفع الداخلية internal pull up وذلك حتى نستخدم المفتاح دون الحاجة لتوصيل أي مقاومة إضافية وتم ذلك عن طريق األمرين
ثم تلى ذلك ضبط نوع المقاطعة الخارجية ونوع اإلشارة الكهربائية التي تسبب المقاطعة وقبل أن نبدأ في شرح األوامر الخاصة بهذا األمر علينا أن نتعرف على بعض األشياء المتعلقة باإلشارات الكهربائية الرقمية .
39
❖ اإلشارات الرقمية : تنقسم اإلشارات الكهربائية الرقمية إلى نوعين وهما Logic Levelو Falling or Rising Edge النوع األول وهو المعروف لدى الجميع ويسمى HIGHأو LOWأو يعبر عن القيم الرقمية التقليدية 0 & 1وتكون كل إشارة سواء 0أو 1لها زمن محدد يقاس على حسب الـ clock المستخدمة لتشغيل المتحكم الدقيق ،فمثالا لو كان المتحكم يعمل بـ ( clock = 1 MHzمليون هرتز) بأن زمن النبضة الواحد = 1ميكرو ثانية ويكون هذا الزمن هو نفس الزمن المطلوب لعمل إشارة كهربائية بقيمة 1أو صفر ،الصور التالية توضح شكل إشارة رقمية مقسمة إلى واحدات و أصفار ( حيث يمثل كل مربع رمادي اللون زمن إشارة واحدة ) .
النوع الثاني من اإلشارات الرقمية يسمى " الحواف " Edgesوالتي تنقسم إلى نوعين وهما الحافة الصاعدة Rising Edgeوالحافة الهابطة . Falling Edgeهذا النوع من اإلشارات الكهربائية يتميز بأنه فائق السرعة وال يلتزم بزمن محدد وغالب ا ما يحدث في زمن يقاس بالنانو ثانية (جزء من مليار من الثانية) .وتعتبر الحواف الصاعدة هي تحول اإلشارة الكهربائية من LOW level إلى HIGH levelفي زمن صغير جدا بينما الحواف الهابطة هي تحول اإلشارة الكهربائية من HIGH levelإلى . LOW level
إن أي إشارة رقمية تحتوي على حواف عددها يساوي ضعف عدد األصفار و الواحدات والصورة التالية توضح الحافة الهابطة الصاعدة مع إشارة LOWثم : HIGH
40
األطراف التقليدية التي تعمل كدخل للمتحكم الدقيق ال تستطيع أن تستشعر هذه الحواف سواء كانت الصاعدة أو الهابطـة وذلك ألنها تتم فـي زمن صغير جدا .وهنا تظهر مشكلة خطيرة حيث نجد أن بعض الحساسات يكون الخرج الكهربائي الخاص بها سريع جدا لدرجة أن اإلشارات الكهربائية الناتجة منه تكون في زمن يقاس بالنانو ثانية (مثل الحواف الصاعدة والهابطة) وتمسى هذه اإلشارات السريعة بالـ Electric Impulseأو Electric Edgesلحل هذه المشكلة قام مصممو المتحكمات الدقيقة بصناعة دائرة إلكترونية خاصة تتصل بأطراف المقاطعات وتسمى بالـ ( Edge Detectorمكتشف الحواف) .وتكون هذه الدوائر مسؤولة عن اإلحساس باإلشارات الكهربائية فائقة السرعة وإبالغ المتحكم بأنه هناك مقاطعة مطلوبة فو ار ،تمتلك متحكمات AVR هذه الدوائر الخاصة على جميع أطراف المقاطعات وبذلك يمكننا أن نجعل المقاطعـة تعمل على جميع المفاتيح أو الحساسات فائقة السرعة ،حيث يمكن ضبط المقاطعة أن تعمل إما بإشارة تقليدية 0 & 1أو عن طريق إشارة سريعة . Edgeيتحكم في هذا األمر المسجل MCUCRوالذي يحتوي على مجموعة من البتات مسؤولة عن تحديد نوع إشارة المقاطعة وتسمى ( ISCxxيتم استبدال xxبرقمي 0و 1كما سنرى في الشرح التالي ) .
• تتحكم البت ISC00و ISC01في إعدادات اإلشارة الخاصة بطرف المقاطعة INT0 • تتحكم البت ISC10و ISC11في إعدادات اإلشارة الخاصة بطرف المقاطعة INT1 عند تغير قيم هذه البتات يمكننا تحديد نوع إشارة المقاطعة المطلوبة وذلك تبعا للجدول التالي : 41
الخيار األول :هو ترك قيمة ISC00و ISC01بصفر وهذا سيجعل المقاطعة تعمل عند إدخال إشارة من نوع LOWعلى الطرف ( INT0معنى ذلك أنه طالما الطرف INT0يدخل إليه إشارة HIGHفلن تعمل المقاطعة) . الخيار الثاني :جعل قيمة ISC00تساوي 1بينما قيمة ISC01تساوي صفر وهذا سيجعل المقاطعة تعمل عند حدوث أي تغيير منطقي logic changeعلى الطرف INT0ومعنى ذلك أنه إذا أدخلت إشارة HIGHشرط أن تكون اإلشارة السابقة LOWأو العكس ستعمل المقاطعة . الخيار الثالث :جعل قيمة ISC00تساوي 0بينما قيمة ISC01تساوي 1وهذا سيجعل دائرة الـ edge detectorتعمل على التقاط أي إشارة كهربائيــة هابطـة وتشغيل المقاطعة الخيار الرابع :جعل قيمة ISC00وذلك ISC01تساوي 1وهذا سيجعل دائرة الـ edge detectorتعمل على التقاط أي إشارة كهربائية صاعدة وتشغيل المقاطعة . واآلن نعود إلى الكود مرة أخرى سنجد األمر :
والذي وضع رقم 1داخل البت ISC01وبما أن البت ISC00تساوي صفر بصورة افتراضية فإن هذا األمر سيجعل المقاطعة تعمل عند الحافة الهابطة .ولقد اخترت هذا النوع من اإلشارات ألن المفتاح المتصل بالطرف INT0يعمل مع المقاومة الداخلية لهذا الطرف مما يعني أنه عند الضغط على المفتاح سيتحول الطرف INT0من الحالة HIGHإلى الحالة LOWوهو ما يوازي الحافة الهابطة .أيضا كان يمكن أن نترك كال ISC00و ISC01بقيمة صفر وهذا سيجعل المقاطعة تعمل عند الضغط على المفتاح لفترة زمنية قصيرة ( 1ميكرو ثانية على األقل) ،بعد االنتهاء من ضبط نوع إشارة المقاطعة علينا أن نخبر المتحكم الدقيق بأننا نريد تفعيل استقبال
42
إشارات المقاطعة على الطرف INT0ويتم ذلك عن طريق التالعب بالبتات الخاصة بالمسجل . GICR
يمتلك هذا المسجل 3بتات هامة جدا وهي INT0و INT1و INT2كل بت من الثالثة تتحكم في تفعيل استقبال المقاطعة على أحد األطراف مثالا فعندما نضع القيمة 1داخل البت INT0 فهذا يعني أن المتحكم سيبدأ استقبال إشارات المقاطعة على الطرف INT0وهكذا ..لذا استخدمنا األمر التالي ألخبار المتحكم أن يبدأ تفعيل المقاطعة : INT0
واآلن يأتي األمر :
هذا األمر مسؤول عن تفعيل استقبال طلبات المقاطعة بشكل عام للمتحكم الدقيق وبدون كتابته فلن تعمل أي مقاطعة مهما كانت وذلك حتى وإن كنت قد كتبت جميع أوامر ضبط المقاطعة . ويعتبر استخدام هذا األمر مع األمر cliأحد الوسائل في التحكم في سير البرامج الهامة التي ال يمكن مقاطعتها . وأخي ار نأتي لنهاية الدالة الرئيسية mainحيث سنقوم بجعل المتحكم يشغل ويطفئ الدايود الضوئي المتصل على الطرف PA0كل 100مللي ثانية إلى األبد .
43
بعد االنتهاء من الدالة الرئيسية يأتي دور دالة معالجة المقاطعة ISRحيث نجد أن هذه الدالة مكتوبة باألسلوب التالي :
جميع دوال المقاطعة المختلفة يتم كتابتها عن طريق التعريف ) ISR(interrupt_vectorويتم استبدال كلمة interrupt_vectorبنوع المقاطعة المطلوبة وبالنسبة للـ External interrupts هناك 3أنواع وهي : INT0_vect INT1_vect INT2_vect فإذا أردنا أن نكتب البرنامج الخاص بالمقاطعة INT0فإننا نكتب :
فإذا أردنا أن نكتب البرنامج الخاص بالمقاطعة INT1فإننا نكتب :
مع وضع األوامر المطلوبة من المقاطعة داخل القوسين } { .في المثال السابق استخدام أمر يقوم بعكس حالة الطرف PB0وهذا ما سيجعل الدايود الضوئي يضيئ أو ينطفئ عند كل مرة يتم فيها تفعيل المقاطعة . INT0
44
المبدل التشابهي -الرقمي ADC
مقدمة عن المبدل التشابهي -الرقمي : ADC اإلشارات الكهربائية في العالم الخارجي ليست مقتصرة فقط على اإلشارات الرقمية Digitalبل على العكس فإن العديد من األجهزة و الحساسات اإللكترونية تصدر إشارات تماثلية Analog فمثالا نجد أن معظم الحساسات المتوفرة في األسواق يمكنها تحويل كمية فيزيائية معينة مثل (درجة الح اررة – رطوبة – ضغط – تركيز مادة كيميائية ...الخ ) على فرق جهد كهربائي يتغير بتغير هذه القيمة الفيزيائية .بصورة طبيعية ال تستطيع الحواسيب أو المتحكمات الدقيقة أن تفهم اإلشارات التماثلية فكل ما تفهمه هذه الحواسيب هي اإلشارات الرقيمة مثل 1و 0أو HIGHو LOWلذا قام مصممو اإللكترونيات بصناعة شريحة خاصة تسمى بالمبدل التشابهي الرقمي Analog to Digital Converterو تُختصر بكلمة ADCهذه الشريحة ُيمكن شراؤها بصورة مستقلة
و توصيلها مع المتحكم الدقيق .إن مصممي متحكمات AVRقاموا بدمج هذه الشريحة بصورة
جاهزة للعمل على معظم متحكمات عائلة mega AVRوبعض متحكمات عائلة ATTiny و سيناقش هذا الفصل طريقة تشغيل الـ ADCالمدمج بعائالت . AVR كيف يعمل المبدل التشابهي الرقمي : تحتوي معظم المتحكمات الدقيقة ( من مختلف الشركات ) و منها AVRعلى ADCمن نوع Successive Approximation ADCهذا المبدل يعمل بطريقة مشابهة "للميزان القديم"
45
طريقة عمل الـ : ADC نجد أن الـ ADCيحتوي على مجموعة مكونات تعمل مثل الميزان .
المكون األول ُيسمى دائرة التقطيع ( أخذ العينة ) و تُسمى Sample & Hold ( S/H ) Circuit
هذه الدائرة تأخذ عينة من فرق الجهد المطلوب تحويله للصورة الرقمية و تُدخله للجزء التالي من
المكون الثاني ُيسمى بـ Analog Comparatorو هو شريحة إلكترونية تُماثل الـ . ADCو ُ طبق على طرفها الميزان بالضبط و تمتلك طرفان للمقارنة حيث تقوم بالمقارنة بين فرق جهد ُم ا األول ( و الذي يتم الحصول عليه من دائرة الـ ) Samplingو فرق جهد مطبق على طرفها المكونان المكون الثالث فهو عداد رقمي تزايدي +مبدل رقمي تشابهي ، DACهذان ُ الثاني .أما ُ يعمالن مثل الوزن حيث نجد أن كال المكونين يقومان بتوليد جهد صغير و إرساله إلى الطرف
الثاني لشريحة الـ Comparatorو إذا لم يتساوى كال الجهدين يقوم العداد و الـ DACبزيادة الجهد مرة أخرى و هكذا ...وتظل هذه العملية على أن تقوم شريحة الـ Comparatorبالتبليغ المطبق من العداد و الـ DACقد تساوى أو تفوق على الجهد المطبق من عينة القياس أن الجهد ُ .عندما يحدث التبليغ يتوقف العداد و الـ DACعن العمل و يتم تسجيل الرقم الذي توقف عنده و يتم حفظ هذا الرقم في مسجالت خاصة تُسمى ADCLو ADCHو من خالل هذا الرقم يمكننا معرفة قيمة الجهد الذ تم إدخاله للـ . ADC
46
تركيب الـ ADCداخل المتحكم : ATmega16
الصورة السابقة تمثل تركيب الـ ADCللمتحكم ATmega16حيث يتميز الـ ADCالموجود داخل ATmega16بعدة إمكانيات مفيدة : أوالً ُ :يمكن تشغيل هذا الـ ADCفي وضعين و هما 8 bitو 10 bitاالختالف األساسي بين الوضعين هو " حساسية القياس " للجهد التناظري و أقل قيمة جهد ُيمكن قياسها .سيتم تناول
الدقة 8 bitفي هذا الفصل .
ثانياً :يتصل دخل الـ ADCبشريحة Analog Multiplixerو التي تتصل أطرافها بجميع أطراف الـ port Aهذه الشريحة تعمل كبوابة توصيل حيث ُيمكن ضبطها لتوصيل أي طرف في
الـ port Aكدخل للـ ADCو هذا يجعل المتحكم ATmega16يمتلك 7أطراف كاملة ُيمكن استعمالها كدخل تماثلي و ُيسمى كل طرف " قناة دخل " Input Channelمع مراعاة أنه ُيمكن
تشغيل طرف واحد فقط في نفس الوقت .أيضا يحتوي الـ ADCعلى شريحة op-ampتعمل
كمكبر جهد ( ُيمكن تشغيله بصورة اختيارية ) و دائرة مقارنة Comparatorتعمل على األطراف
الثالثة األولى . PA0,PA1,PA2
47
المسجالت : المسجالت سنستخدم 3منهم لتشغيل وضع الـ 8بت . يحتوي الـ ADCعلى مجموعة من ُ المسجل مسؤول عن اختيار الطرف الذي سيتم توصيله بالـ ADCلقياس الجهد : ADMUXهذا ُ كما يحتوي على مجموعة من البتات الهامة لضبط الـ . Analog Refrence
المسجل مسؤول عن تشغيل و إيقاف الـ ADCو كذلك التحكم في سرعة : ADCSRAهذا ُ تشغيله . : ADCL & ADCHهذه المسجالت ُمستخدمة في حفظ قيم القياس .
خطوات تشغيل الـ : ADC لقراءة الجهد التناظري يجب أن نقوم بمجموعة من الخطوات لتفعيل الـ ADCو ضبطه بصورة صحيحة ،هذه الخطوات هي كالتالي : المسجل .1تفعيل الـ ( ADCالوضع االفتراضي للـ ADCأنه غير ا فعال لذا سنقوم بتفعيله من ُ
. ) ADCSRA
.2ضبط الـ Clockو التي تتحكم في سرعة تشغيل العداد الداخلي للـ ADCو الذي بدوره يتحكم في سرعة قراءة الجهد . .3اختيار الـ Channelالمطلوبة ( طرف القياس ) و ذلك من خالل ضبط الـ Analog . Multiplixer .4بدء عملية القياس و التحويل ثم قراءة قيمة الجهد .
48
مثال :قراءة جهد ُمتغير باستخدام مقاومة متغيرة في هذا المثال سنستخدم المقاومة المتغيرة Potentimeterكمصدر متغير للجهد .تتواجد هذه المقاومة في برنامج Proteusباسم POT-HGأو Active Potentimeterويتم توصيل السفلي بالـ GNDأما الطرف األوسط فسيكون مصدر الطرف العلوي لها بالـ Vccو الطرف ُ الجهد المتغير .
في هذا المثال سنقوم بتوصيل طرف الجهد المتغير بالطرف PA1كما سنستخدم 8دايودات ضوئية لعرض قراءة الـ ADCعلى الـ PORT Cكما هو موضح في الصورة التالية:
49
الكود :
50
شرح الكود : في بداية البرامج قمنا بعمل متغير 8بت من نوع unit8 _ tباسم adcValueسيستخدم هذا المتغير في حفظ القيمة الرقمية الناتجة من تحويل الجهد في الـ ADCلكن هناك كلمة غريبة ظهرت ألول مرة بجانب المتغير و هي volatileفما هي ؟ قبل أن نتعرف على هذه الكلمة علينا أن نتعرف على أحد الخواص الهامة للمترجمات و تُدعى
Code Optimizationو كما نعلم أن جميع المترجمات مهمتها هي تحويل اللغات عالية المستوى ( مثل الـ ) Cإلى لغة التجميع Assemblyو الحقيقة أن األمر الواحد من لغة الـ Cقد يتحول إلى 1أو 3أو حتى 10أوامر من لغة التجميع . المترجمات الذكية تستطيع اختصار عدد أوامر لغة التجميع و ذلك لزيادة سرعة الـ ( Codeأوامر أقل = سرعة أكبر ) هنا يأتي دور الـ Code Optimizationو هي خاصية مدمجة في معظم المترجمات سواء المجانية مثل gccأو المدفوعة مثل IAR Workbenchوتهدف إلى اختصار أكبر قدر ممكن من أوامر الـ ، Assemblyو اآلن نعود إلى البرنامج السابق سنجد أن المتغير المسجل الذي ُيحفظ فيه القيمة الرقمية المسجل ( ADCHو هو ٌ ُ adcValueيستخدم لنسخ قيمة ُ
سيستخدم في نقل هذه القيمة إلى الـ PORT Cفي مجموعة لعملية التحويل ) ثم نجد أن المتغير ُ األوامر التالية :
في الحالة الطبيعية إذا لم نكتب كلمة volatileسنجد أن المترجم قرر حذف المتغير adcValue ألنه بال فائدة و ذلك ألنه من الممكن أن نستبدل كال األمرين السابقين بأمر واحد فقط و هو وضع قيمة ADCHمباشرة داخل الـ PORT Cدون الحاجة لنسخها لمتغير . adcValue
بالتأكيد بعد اختصار عدد األوامر أمر مفيد جدا و سيجعل الـ Codeيعمل أسرع لكن في هذه الحالة قد يكون كارثي ألننا قد نحتاج هذا المتغير في إجراء عمليات حسابية أخرى ( كما سنرى 51
المترجم بحذفه سيتسبب ذلك األمر في أخطاء غير معروفة و هنا في المثال القادم ) و إذا قام ُ المترجم أن يترك المتغير adcValueو ال يقوم بحذفه . يأتي دور كلمة volatileو التي تُخبر ُ
المتغير نأتي للدالة الرئيسية mainحيث بدأنا بضبط البورتات ليعمل الـ بعد االنتهاء من تعريف ُ PORT Aكدخل و يعمل الـ PORT Cكخرج ( لتوصيل الدايودات الضوئية الثمانية ) .
ثم تبدأ مرحلة ضبط الـ ADCعبر سلسلة من األوامر .في البداية يجب أن ُنشغل الـ ADCألن
فعل لتوفير الطاقة و يتم ذلك الوصع االفتراضي للـ ADCداخل جميع متحكمات AVRأنه غير ُم ّ عبر تغيير قيمة البت ADENو هي اختصار ، ADC enableتتواجد هذا البت داخل الـ
. ADCSRA
المرحلة الثانية هي ضبط الـ Clockالخاصة بالـ ADCو كما علمنا في بداية الفصل أن الـ ADC يحتوي على عداد تزايدي ُيستخدم لزيادة جهد المقارنة و يحتاج هذا العداد الرقمي لـ Clock
لتشغيله .المشكلة الوحيدة لهذا العداد هو أنه يجب أن يعمل ببطء مقارنة بسرعة المتحكم فمثالا ال يمكن أن ُندخل الـ Clockالرئيسية للتحكم مباشرة إلى العداد ( ألنها تكون 1ميغا أو أعلى ) لذا
نستخدم شريحة تُسمى بالـ Prescaler Registerو هي شريحة تقوم بقسمة الـ Clockالرئيسي على رقم محدد ( من مضاعفات الرقم ) 2مثل 128 – 64 – 32 – 16 – 8 – 4 – 2 و ُيسمى هذا الرقم بمعامل القسمة Division Factorو يتم تحديد هذا الرقم من البت ADPS0
المسجل ADCSRAمن خالل الجدول التالي : و ADPS1و ADPS2الموجودة داخل ٌ
52
بالتأكيد سيظهر سؤال هام على أي أساس نختار معامل القسمة و ما هو تأثيره ؟ في البداية هناك قاعدة عامة لجميع الـ ADCالموجودة داخل عائلة ATmegaو هي أن الـ Clockالخاصة بالـ ADCيجب أن ال تزيد عن 128كيلو هرتز ( و يمكن أن تكون أقل من ذلك ) فمثالا إذا كانت الـ Clockالرئيسية = 1ميجا هرتز إذا يجب أن نختار معامل القسمة = 8أو أكثر وذلك ألن حاصل قسمة مليون 125 = 8 /ألف هرتز وهو رقم أقل من 128كيلو . لنأخذ مثال آخر : لنفترض أن سرعة الـ Clockالرئيسية كانت 4ميغا هرتز فما هو معامل القمة المناسب ؟ سنجد أن المعامل المناسب هو ( 32أو أكثر) و ذلك ألن حاصل قسمة 4مليون 125 =32 / ألف هرتز أو ُيمكن استخدام معامل قسمة 64أو 128فكالهما سيجعل الـ ADC Clockأقل بكثير من 128كيلو هرتز .
أذاً ما االختالف بين أن نختار 32أو 64أو 128إذا كانت كل هذه المعامالت مناسبة ؟ االختالف الرئيسي هو سرعة تحويل الجهد إلى قيمة رقمية فكلما زادت سرعة الـ ADC Clock كلما استطاع أن ُيحول الجهد إلى قيمة رقمية في زمن أقل . لنعد مرة أخرى إلى المثال السابق حيث كانت سرعة المتحكم الرئيسية 1ميغا لذا استخدمنا معامل ُ
قسمة = 8وذلك عبر وضع قيمة 1داخل كل من البت ADPS0و ADPS1
53
الخطوة التالية هي اختيار وضع تشغيل الـ 8 ( ADCأو 10بت ) في حالة الـ 8بت يتم وضع المسجل . ADMUXالوضع االفتراضي لهذا البت = الرقم 1داخل البت ADLARالموجود في ُ ( 0أي أن الـ ADCيعمل في وضع 10بت ) .
المسجل ADCH عدما يعمل الـ ADCفي وضع الـ 8بت فإن قيمة تحويل الجهد يتم تسجيلها في ُ
و عندما يعمل في وضع الـ 10بت فإن قيمة التحويل يتم تسجيلها في ُمسجلين
( ألنها 10بت و ال يكفي ٌمسجل واحد لحفظ قيمتها ) و هما ADCLو ADCHو ُيسمى هذا الوضع بالـ Left Adjustedحيث تُوضع أول 8بتات من النتيجة في الـ ADCLويوضع آخر 2بت في الـ ، ADCHو أخي ار نقوم بضبط الطرف الذي سيكون Input Channel
( الطرف الذي سنقيس من خالله الجهد الكهربائي المتغير ) . في المثال السابق استخدمنا الطرف PA1لذا وجب أن يتم وضع 1داخل البت MUX0
حيث تتحكم هذه البت مع البتات ) MUX(1,2,3,4في اختيار قناة الدخل كما هو موضح في الجدول التالي :
54
مالحظة :الطرف ADC0يتصل بالطرف PA0و الطرف ADC1يتصل بالطرف PA1 وهكذا ..إلى نهاية الـ . PORT A بعد االنتهاء من ضبط الـ ADCيمكننا اآلن أن نبدأ عملية التحويل و قراءة الجهد و سيتم ذلك عبر إعطاء الـ ADCاألمر ببدء عملية التحويل و ذلك عبر وضع 1داخل البت ADSCوهي اختصار لكلمة . ADC Start Conversion
هنا سيبدأ الـ ADCبقراءة الجهد و تحويله إلى قيمة رقمية و لكن كما نعرف مسبق ا أن الـ ADC ُيعتبر بطيء جدا مقارن اة بالمتحكم الدقيق لذا ال يمكننا أن نحصل على النتيجة فو ار و يجب أن ننتظر حتى ينتهي الـ ADCمن عملة التحويل و يتم ذلك عبر األمر :
عبد بدء عملية التحويل تظل البت ADSCقيمتها = 1و ال تتحول إلى صفر إال عند انتهاء عملية التحويل بنجاح لذا استخدمنا األمر السابق و الذي يعني انتظر حتى تصبح البت ADSC المسجل ADCH قيمتها 0و بذلك تتوقف الـ . Whileو أخي ار يمكننا قراءة القيمة الرقمية من ُ حيث نستطيع إما أن نستخدمها مباشرةا أو ننسخها إلى أحد المتغيرات ( في المثال السابق استخدمنا
الـ PORT Cليعرض هذه القيمة و كذلك المتغير adcValueلنسخ هذه القيمة ) .
قم بترجمة الكود السابق ثم ابدأ محاكاة المشروع على برنامج . Proteusيمكنك أن تحرك المقاومة المتغيرة ألعلى و ألسفل لتشاهد أن الدايودات الثمانية تعرض أرقام من 00000000إلى 11111111كما هو موضح في الصورة التالية :
55
حسابات الـ : ADC في المثال السابق استطعنا أن نحول الجهد التناظري المتغير إلى أرقام بين 00000000إلى ( 11111111ما بين 255 – 0بالصيغة العشرية ) لكن هذه األرقام ال تُمثل قيمة فرق الجهد بصورة مباشرة لذا سنتعرف في هذا الجزء على بعض المعادالت البسيطة التي ستساعدنا في حساب فرق الجهد و كذلك حساب قيم الحساسات التماثلية . تحويل القيمة الرقمية إلى فرق جهد : المعادلة التالية تقوم بتحويل القيمة الرقمية إلى فرق جهد :
: Digital Valueالقيمة الرقمية الموجودة في ( ADCHبالصيغة العشرية ) . : Vrefالجهد المرجعي للـ . ADC : nوضع دقة التشغيل ( 8بت أو 10بت ) . الـ Vrefهو الجهد المرجعي الذي يعتمد عليه الـ ADCلحساب الجهد المتغير ،هذا القسم يساهم في تحديد حساسية قياس الـ ADCويتم تحديده من خالل البتات REFS0و REFS1في المثال السابق تركنا هذه البتات على الوضع االفتراضي ( صفر ) والذي يعني أن الجهد المرجعي ، Vref = Vcc = 5 voltوالصورة التالية توضح طريقة تغير الـ Vrefبالتغير في قيمة REFS0,REFS1في المسجل ADMUX 56
لنفترض أن القيمة الرقمية التي حصلنا عليها = 128وكان الـ ADCيعمل على الوضع 8بت إذا بالتعويض في المعادلة السابقة نجد أن قيمة الجهد الذي تم قياسه يساوي :
مثال أخر :لنفترض أن القيمة الرقمية التي حصلنا عليها = 56إذا بالتعويض في المعادلة السابقة نجد أن قيمة فرق الجهد هي :
حساسية القياس : تعرف حساسية القياس بأنها أقل جهد يمكن للـ ADCأن يقيسه ويتعرف عليه بصورة صحيحة وتعتمد حساسية القياس للـ ADCعلى عاملين وهما وضع التشغيل ( 8أو 10بت ) والجهد المرجعي ، Vrefكال العاملين يؤثران بشكل كبير جداّ في دقة القياس والمعادلة التالية تمثل حساسية القياس :
مجددا تمثل nوضع القياس ( 8أو 10بت ) .فمثالا لو أن Vref = Vcc = 5 voltويعمل الـ ADCبدقة 8بت فهذا يعني أن حساسية القياس تساوي :
مما يعني أن أقل جهد يمكن قياسه هو 0.019فولت ( نحو 20مللي فولت ) . 57
تعديل عرض النبضة : ) Pulse Width Modulation ( PWM إن تقنية تعديل عرض النبضة هي تقنية تعديل يتم فيها تغيير عرض نبضة الحامل بما يتناسب مع إشارة المعلومات (اإلشارة التشابهية ) . يمكن استخدام تقنية PWMللتحكم بالطاقة المغذاة إلى جهاز كهربائي مثل المحرك الكهربائي (محرك تيار مستمر ) ,مكبر الصوت . .... speaker توليد :)PWM Generation( PWM الطريقة األبسط لتوليد إشارة PWMهي بواسطة مقارنة إشارة معروفة مسبق ا مع قيمة جهد مرجعية ثابتة كما هو مبين في الشكل .
في الشكل السابق اإلشارة المعروفة (المحددة ) مسبق ا هي إشارة سن المنشار ونقوم بمقارنة هذه اإلشارة مع قيمة مرجعية محددة مسبق ا ويوجد لدينا ثالثة أنماط عمل لمقارنة الخرج وهي :
58
-1النمط المعكوس : Invertedفي هذا النمط إذا كانت قيمة اإلشارة المحددة مسبق ا أكبر من القيمة التي نقارنها معها عندها يكون الخرج له قيمة مرتفعة highوخالف ذلك يكون الخرج له قيمة منخفضة كما في الشكل Bباألعلى . -2النمط غير المعكوس : None-Invertedيبقى الخرج في الحالة المرتفعة طالما أن القيمة التي نقارن اإلشارة المحددة مسبقا معها أكبر من هذه اإلشارة ويكون الخرج منخفضا خالف ذلك . -3نمط التبديل : Toggleفي هذا النمط الخرج يتبدل وذلك عند حدوث تطابق في المقارنة أي أن إذا كان الخرج مرتفع يصبح منخفض والعكس بالعكس . ويمكن أال تكون القيمة التي نقارن معها قيمة ثابتة حيث يمكن أن تكون هذه القيمة متغيرة بشكل جيبي أو بأي شكل أخر كما هو مبين بالشكل .
ثابت الملئ : Duty Cycle يعطى ثابت الملئ بالعالقة التالية :
x 100 %
𝑛𝑜𝑇 𝑓𝑓𝑜𝑇𝑇𝑜𝑛+
59
= 𝑒𝑙𝑐𝑦𝐶 𝑦𝑡𝑢𝐷
أنماط عمل PWMباستخدام المؤقتات في متحكمات : ATmega بشكل عام يوجد 3أنماط عمل لمؤقتات PWMفي متحكمات ATmegaوهي : PWMالسريع (. )Fast PWM نمط تصحيح الطور (. )Phase Correct PWM نمط تصحيح التردد والطور (. )Frequency and Phase Correct PWM• نمط PWMالسريع :
60
يكون لدينا إشارة محددة مسبقاُ (مرجعية) هي إشارة سن المنشار وتكون لدينا قيمة جهد ولتكنA يكون لدينا الخرج كما هو مبين في الشكل( )Aلنقم بزيادة قيمة المقارنة إلى القيمة Bعندها سينقص عرض النبضة كما هو مبين بالشكل( )Bوبالتالي ينقص ثابت الملئ. يمكن استخدام أي مؤقت في تعديل عرض النبضة حيث يعتمد اختيار المؤقت على نوع التطبيق فمثالا TIMER0 ,TIMER2يملكان دقة 8 bitبينما في TIMER1تكون الدقة . 16 bit فمثالا للتحكم بسرعة محرك DCيمكن اختيار TIMER0الذي يملك دقة . 8 bit أما في محركات servoفتحتاج لدقة أعلى فنستخدم . TIMER1 اختيار نمط العمل : يمكن اختيار أي من األنماط الثالثة المعكوس وغير المعكوس ونمط التبديل ولكن المستخدم بكثرة هو النمط غير المعكوس . None-Inverted توليد إشارة PWMباستخدام : TIMER0 سنقوم اآلن بإعداد TIMER0ليعمل بنمط تعديل عرض نبضة سريع fast PWMوذلك لتوليد إشارات PWMبثابت ملئ متغير ويمكن بذلك تغيير نصوع الثنائي الباعث للضوء . LED إن تشغيل المؤقت TIMER0في وضع fast PWMيحتاج للتعامل مع مسجل واحد يدعى TCCR0أي . Timer Counter Control Register for Timer0 كما هو مبين بالشكل التالي : 1
1
CS00 0
2
3
CS02 CS01 0
4 COM00
Name FOCO WGM00 COM01
WGM01 0
0
5
6
7
Bit No
1
0
61
0
0
Initial Val
: WGM – Wave Form Generation Mode fast PWM ويهمنا منها نمطTIMER0 الشكل التالي يبين األنماط المختلفة المدعومة من قبل . WGM00=1 ,WGM01=1 ومن الجدول يجب Mode
WGM00
WGM01
Mode Of
0
0
0
Normal
1
0
1
PWM Phase
Operation
Correct 2
1
0
CTC
3
1
1
Fast PWM
: COM – Compare Output Mode بوضعfast PWM ونختار منها نمطTIMER0 يبين الجدول أنماط الخرج المستخدمة في . GOM00=1 , GOM01=0 COM01
COM00
0
0
Output Mode Normal Port Operation (OCO disconnected)
1
0
RESERVED
0
1
Non Inverted PWM
1
1
Inverted PWM
: بالعالقةfast PWM الخاص بالمتحكم في حالة العمل بنمطPWM يعطى تردد خرج مخرج 𝑓𝑜𝑐𝑛(𝑃𝑊𝑀) =
𝑓𝐶𝐿𝐾−𝐼/𝑂 𝑁×256
62
𝑂 :𝑓𝐶𝐿𝐾 − 𝐼/هي سرعة التردد األساسي للنظام ( تردد الكريستالة ) أو تردد مصدر الساعة الرئيسي . : Nهو رقم الـ prescalarأي المقسم األولي . الجدول 14-6من الـ data sheetللمتحكم Atmega16يبين قيمة الـ prescalar
المسجل : )Output Compare Register( OCR0 يمكن تغيير قيمة ثابت الملئ عن طريق تغيير القيمة الموضوعة في المسجل . OCR0 مالحظة : يجب تعيين البت الثالث ( خرج ) PWMفي الـ Port Bفي متحكم Atmega16كخرج لكي نحصل منه على خرج . PWM مثال : التابع التالي يقوم بعمل تهيئة للمؤقت Timer0ليعمل بتردد المعالج no prescalalingوالنمط هو Fast PWMوخرج PWMغير معكوس . ويقوم بجعل الـ OCO Pinتعمل كخرج .
63
) (Void InitPWM { ;)TCCR0l=(1