AVR از معماري RISC با تعداد دستورالعمل بالا بهره ميبره كه دربين ميكروها كم نظير هست. اكثر دستورالعمل هاي آن باوجود زياد بودن تعداد دستورالعملها در يك سيكل انجام ميشه.
اين ميكرو از مدهاي كاهش توان به خوبي بهره برده و تاييد كننده آن زياد بودن مدهاي كاهش توان آن و استفاده از تقسيم كلاك به صورت نرم افزاري است كه در كمتر ميكرويي ديده ميشه.
AVR حتي برعكس ميكروهاي ديگه هيچ تقسيم كلاكي انجام نميده(مثلا 8051 كلاك رو بر 12 و PIC كه يه ميكرو قدرتمند هست كلاك رو بر 4 تقسيم ميكنه). اين امر كه AVR كلاك رو تقسيم نميكنه موجب كاهش مصرف انژي و افزايش MIPS شده.
تكنولوژي بكار رفته در AVR موجب شده كه حتي ميتوان از آن در محيط هاي صنعتي و پر نويز براحتي از آن استفاده كرد(به گفته خود ATMEL والا هنوز خودم يه تست دقيق انجام ندادم ولي اون رو با يه فيبر يه رو و با يه كابل LCD تقريبا 20 سانتي و يا استفاده از باتري ماشين در كنار شمع پيكان غير انژكتوري تست كردم ولي فقط در فاصله تقريبا 5-6 سانتي از اون صفحه LCD قاتي ميكرد ولي نميدونم ميكرو هم ريست ميشد يا نه .
در ضمن قسمت تغذيه فقط از يك 7805 تشكيل شده بود. و اين آزمايش هم براي خودم و هم براي چند تا از دوستانم كه كارهاي صنعتي انجام ميدادن شگفت آور بود). اما به دليل اينكه هنوز هيچ كسي اون رو تابه حال در محيط صنعتي تست نكرده و به دليل اطمينان بالاي PIC هيچ كسي دوست نداره اعتبار خودش رو به خطر بندازه.
يه جا يه مهندسه ميگفت توي يه محط صنعتي كه حتي كامپيوتر ريست ميكرده PIC به خوبي كار خودشو انجام ميداده!!!!!!!!!!
در ضمن AVR مجهز به آخرين امكانات مثل تايمر واچ داگ و برون اوت ديتكتور و مبدل هاي ADC و PWM است.
يكي از مهمترين بخشي كه كمتر در هر ميكرويي ديده ميشه مقايسه كننده آنالوگ با گين 1 و 10 و 200 و .. است كه بسته به ميكرو فرق ميكنه.
اين مقايسه كننده ميتونه تو ورودي مبدل ADC قرار بگيره . اين بخش براي بعضي طراحان خيلي مهمه و اونا رو مجذوب خودش كرده.
خانواده ميكروكنترلرهاي AVR شامل طيف گسترده اي از آي سي ها است كه از 8 پايه شروع و به 64 پايه ختم مي شود. اما در بين اين طيف گسترده تعدادي استفاده عمومي تري دارند مانند ATMEGA32 . كه در تمام مثالهاي آورده شده از اين آي سي استفاده شده است .
برنامه اي كه براي ميكروكنترلر در كامپيوتر نوشته ميشود وقتي كه براي استفاده در آي سي ريخته ميشود ( توسط پروگرامر مخصوص آن خانواده ) در مكاني از آن آي سي ذخيره خواهد شد بنام ROM . حال در ATMEGA32 مقدار اين حافظه به 32KB ( 32 كيلوبايت ) ميرسد .
در اين آي سي مكاني براي ذخيره موقت اطلاعات يا همان RAM هم وجود دارد كه مقدارش 2KB است .
در RAM اطلاعات فقط تا زماني كه انرژي الكتريكي موجود باشد خواهد ماند و با قطع باتري اطلاعات از دست خواهند رفت . به همين منظور در ATMEGA32 مكاني براي ذخيره اطلاعات وجود دارد كه با قطع انرژي از دست نخواهند رفت . به اين نوع حافظه ها EEPROM گفته ميشود كه در اين آي سي مقدارش 1KB است و تا 100,000 بار ميتواند پر و خالي شود .
نرم افزار مورد نياز براي برنامه نويسي :
LCD :
در كل دو نوع LCD وجود دارد . يكي از آنها را LCD كاركتري گويند كه فقط قابليت نمايش حروف و اعداد و كاركترهايي همچون ؟ و ! و غيره را دارد و نوع ديگر LCD گرافيكي است كه قابليتهاي LCD گرافيكي بعلاوه ي نمايش تصوير در آن جمع شده اند . هدف ما در اينجا كار با LCD كاركتري خواهد بود .
معرفي LCD كاركتري :
LCD هاي كاركتري خود به چند نوع ديگر از لحاظ اندازه تقسيم بندي ميشوند . كه از LCD هايي با 1 سطر و 1 ستون آغاز ميشوند تا اندازهايي مثل 4 سطر و 40 ستون كه البته تمام آنها از 16پايه تشكيل شده اند.
براي راه اندازي LCD توسط AVR نيازي به دانستن جزئيات طرز كار LCD نيست . براي كار با LCD علاوه بر پايه هاي تغذيه و CONTRAST ( تنظيم روشنايي ) كه بايد مانند شكل مداري پايين باياس شوند نياز به 6 پايه ي ديگر است كه عبارتند از پايه هاي :
RS , E , DB4 , DB5 , DB6 , DB7 .
تحليل برنامه :
1:براي تعيين نوع LCD از كلمات كليدي Config و بعد از آن Lcd استفاده شده و آنها را مساوي نوع LCD مورد استفاده قرار ميدهيم كه در اينجا نوع مورد استفاده داراي 2 سطر و 16 ستون ميباشد. پس بصورت زير خواهيم نوشت :
Config Lcd = 16*2
2: در مرحله ي بعد ترتيب وصل كردن پايه ها را معرفي خواهيم كرد و براي اينكار پايه هايي از LCD را كه براي راه اندازي آن استفاده ميشود و قبلا نيز گفته شده بود را مساوي پايه هايي از ميكروكنترلر قرار ميدهيم كه ميخواهيم به آنها وصل شود و البته اين نوع راه اندازي توسط AVR را كه تنها با شش پايه صورت ميگيرد را نوع راه اندازي PIN ميگويند . پس طبق سخت افزار نشان داده شده بصورت زير خواهيم نوشت :
Config Lcdpin = pin , Rs = porta.0 , e = porta.1 , db4 = porta.2 , db5 = porta.3 , db6 = porta.4 , db7 = porta.5
( به علامت , بين بخشها دقت كنيد . )
3: بعد از انجام كارهاي بالا كه جزو بخش معرفي سخت افزار محسوب ميشوند به سراغ برنامه اصلي ميرويم كه كار آن نمايش متن روي LCD است و براي انجام اينكار از كلمه كليدي LCD و در جلوي آن متني كه بايد نمايش داده شود استفاده ميكنيم و بايد توجه داشت كه متن را بايد داخل كوتيشن قرار داد .
4: در انتهاي برنامه نيز END را مينويسيم .
نحوه ي كامپايل برنامه و پروگرام كردن IC
كامپايل برنامه نوشته شده :
بعد از نوشتن برنامه بايد آنرا كامپايل كرد تا اگر اشتباهي در تايپ كلمه اي وجود داشته باشد براي اصلاح آن اخطار داده شود و فايلهاي از جمله فايل هگز كه براي پروگرام كردن نياز است ابجاد گردند . براي كامپايل برنامه همانطور كه در تصوير بخش اول نمايش داده شده است بايد از دكمه ي F7 استفاده كرد . با انجام اينكار برنامه ي ما كامپايل خواهد شد .
پروگرام كردن IC :
بعد از كامپايل برنامه نوبت به آن رسيده است كه با نحوه ريختن برنامه داخل IC يا باصطلاح پروگرام كردن آشنا شويد . پس نياز است كه يك دستگاه پروگرامر مختص به خانواده AVR داشته باشيد . براي پروگرام كردن ميكروكنترلرهاي خانواده AVR انواع مختلفي پروگرامر كه از استانداردهاي خاصي پيروي ميكنند وجود دارد كه مصرف عمومي تر را پروگرامهاي نوع STK200/300 دارند كه البته داراي مدار بسيار ساده ايست و براي پروگرام كردن از كابل LPT ( پرينتر ) استفاده ميكند و در بازار هم بيشتر اين نوع پروگرامر يافت ميشود .
هنگاميكه ميخواهيم كار پروگرام كردن را شروع كنيم ابتدا بايد پروگرامر را به كامپوتر وصل نموده و بعد از توسط محيطي از نرم افزار Bascom AVR نوع آنرا براي كامپيوتر معرفي كنيم ( اينكار فقط يكبار انجام شود كافيست ) . براي شناساندن پروگرامر به كامپيوتر از منوي Option گزينه Programmer را انتخاب ميكنيم :
بعد از انتخاب اين گزينه كادر نمايش داده شده كه در قسمت نمايش داده شده توسط خط قرمز نوع پروگرامر را انتخاب ميكنيم :
بعد از انجام تنظيمات بالا ميتوان آي سي را پروگرام كرد . به اين صورت كه
گزينه Program را انتخا ب ميكنيم . بعد از انتخاب اين گزينه كادر زير باز خواهد شد كه با كليك روي آيكون مربوط آي سي پروگرام ميشود .
همچنين دستگاههايي براي تست برنامه نوشته شده وجود دارند كه روي آنها تمام وسايل مورد نياز مانند LCD و Keypad و ... قرار دارد و كاربرميتواند با سيم بندي اي كه براحتي توسط كابلهاي مخصوصي انجام ميدهد پورتهاي آي سي را به سخت افزارهاي جانبي اتصال دهد و برنامه خود را مورد آزمايش قرار دهد . به اين دستگاهها Emulator ميگويند.
حال ميخواهيم طرز نوشتن برنامه براي ميكروكنترلرهاي خانواده ي AVR را شروع كنيم . پس براي اينكار نياز به يك نرم افزار داريم كه بتوانيم در آن برنامه ي خود را بنويسيم . يكي از نرم افزارهاي قدرتمند براي انجام دادن اينكار نرم افزاريسيت بنام Bascom AVR . در اين نرم افزار همانطور كه از نامش معلوم است برنامه بايد بزبان Basic كه زباني با سطح بالا (HLL) است نوشته شود . همچنين اين نرم افزار داراي شبيه ساز داخلي براي تست كردن برنامه نوشته شده است كه يكي از ويژگيهاي اين نرم افزار ميباشد .
تحليل برنامه
حال به توضيح تك به تك قسمتها ميپردازيم :
1:در قسمت معرفي آي سي از كلمه كليدي $Regfile براي معرفي استفاده شده است . اين دستور به اين صورت است كه بايد بعد ازآن كلمه معرف آي سي مورد استفاده را در جلوي آن وارد كنيم . البته براي هر آي سي كلمه ي مخصوصي وجود دارد كه براي ATMEGA32 بايد كلمه ي M32def.dat را تايپ كرد . البته بايد توجه داشت كه اين كلمه بايد داخل يك جفت كوتيشن ( گ Shift ) قرار گيرد :
$Regfile = "M32def.dat"
2: در قسمت بعدي كه تعيين فركانس كاري است كلمه كليدي $Crystal بايد نوشته شود و آنرا بايد مساوي با فركانس كار بر حسب هرتز قرار داد :
$Crystal = 1000000
3: حال به بخش معرفي سخت افزار رسيديم . در اين برنامه چون پورت B بايد بتواند جريان بيرون دهد و سخت افزار خارجي اي كه همان LED است را روشن كند بعنوان خروجي تعريف ميشود . هميشه براي معرفي سخت افزار از كلمه كليدي Config اسفاده ميشود . پس براي خروجي كردن پورت B مينويسيم :
Config Portb = output
4: چون در اين برنامه نيازي به تعريف متغيري نبود به بخش برنامه اصلي ميرويم و در اين قسمت عددي را به پورت B خواهيم فرستاد تا طبق آن LED ها روشن شوند . البته ذكر اين نكته لازم است كه اگر بخواهيم عددي را در مبناي دودويي بنويسيم ابتدا بايد &B را نوشته و بعد ععد مورد نظر را تايپ كنيم و همينطور براي نوشتن در مبناي هگز كه &H تايپ ميشود و اگر هيچكدام از كلمات ذكر شده را ننويسيم عدد در مبناي دسيمال محسوب ميشود .
5: در آخر برنامه نيز از كلمه كليدي END براي مشخص نمودن پايان برنامه استفاده شده است .
مقايسه ما با تمام ميكروهاي 8 بيتي هست يعني در مجموع ميشه گفت AVR يه رقيب قدرتمند براي بقيه ميكروهاي قوي است و يه انقلاب بزرگ هم به شمار ميره. هنوز هيچ ميكرويي به سرعت بالاي AVR در محاسبات دست پيدانكرده .در ضمن AVR قادره كه محاسبات 16 بيتي رو هم انجام بده. شهار ATMEL هم اينكه شما پول يه ميكرو 8 بيتي رو ميديد ولي ميتونيد از قايليتهاي يك ميكرو 16 بيتي استفاده كنيد.