ميكروكنترلر avr خانواده میکروکنترلرهای AVR شامل طیف گسترده ای از آی سی ها است که از 8 پایه شروع و به 64 پایه ختم می شود. اما در بین این طیف گسترده تعدادی استفاده عمومی تری دارند مانند ATMEGA32 . که در تمام مثالهای آورده شده از این آی سی استفاده شده است .

مشخصات سخت افزاری ATMEGA32 :

شکل ظاهری و پایه ها:

ATMEGA32 در سه نوع بسته بندی PDIP با 40 پایه و TQFP با 44پایه و MLF با 44 پایه ساخته میشود که در بازار ایران بیشتر نوع PDIP موجود میباشد .



ATMRGA32 دارای چهار پورت 8بیتی ( 1 بایتی ) دارد که علاوه بر اینکه بعنوان یک پورت معمولی میتوانند باشند کارهای دیگری نیز انجام میدهند . بطور مثال PORTA میتواند بعنوان ورودی ADC (تبدیل ولتاژ آنالوگ به کد دیجیتال ) استفاده شود که این خاصیت های مختلف پورت در برنامه ای که نوشته میشود تعیین خواهد شد .
ولتاژ مصرفی این آی سی از 4.5 V تا 5.5V میتواند باشد .
فرکانس کار هم تا 16MHz میتواند انتخاب شود که تا 8MHz نیازی به کریستال خارجی نیست و در داخل خود آی سی میتواند تامین شود . فرکانس کار از جمله مواردی است که باید در برنامه تعیین شود . لازم به ذکر است که این فرکانس بدون هیچ تقسیمی به CPU داده میشود . بنابراین این خانواده از میکروکنترلرها سرعت بیشتری نسبت خانواده های دیگر دارند .
پایه ی شماره 9 نیز ریست سخت افزاری میباشد و برای عملکرد عادی آی سی نباید به جایی وصل شود و برای ریست کردن نیز باید به زمین وصل میشود .
پایه های 12 , 13 نیز برای استفاده از کریستال خارجی تعبیه شده است .


ساختار داخلی ATMGA32 :
برنامه ای که برای میکروکنترلر در کامپیوتر نوشته میشود وقتی که برای استفاده در آی سی ریخته میشود ( توسط پروگرامر مخصوص آن خانواده ) در مکانی از آن آی سی ذخیره خواهد شد بنام ROM . حال در ATMEGA32 مقدار این حافظه به 32KB ( 32 کیلوبایت ) میرسد .
در این آی سی مکانی برای ذخیره موقت اطلاعات یا همان RAM هم وجود دارد که مقدارش 2KB است .
در RAM اطلاعات فقط تا زمانی که انرژی الکتریکی موجود باشد خواهد ماند و با قطع باتری اطلاعات از دست خواهند رفت . به همین منظور در ATMEGA32 مکانی برای ذخیره اطلاعات وجود دارد که با قطع انرژی از دست نخواهند رفت . به این نوع حافظه ها EEPROM گفته میشود که در این آی سی مقدارش 1KB است و تا 100,000 بار میتواند پر و خالی شود .

نرم افزار
نرم افزار مورد نیاز برای برنامه نویسی :
حال میخواهیم طرز نوشتن برنامه برای میکروکنترلرهای خانواده ی AVR را شروع کنیم . پس برای اینکار نیاز به یک نرم افزار داریم که بتوانیم در آن برنامه ی خود را بنویسیم . یکی از نرم افزارهای قدرتمند برای انجام دادن اینکار نرم افزاریسیت بنام Bascom AVR . در این نرم افزار همانطور که از نامش معلوم است برنامه باید بزبان Basic که زبانی با سطح بالا (HLL) است نوشته شود . همچنین این نرم افزار دارای شبیه ساز داخلی برای تست کردن برنامه نوشته شده است که یکی از ویژگیهای این نرم افزار میباشد .


تحلیل برنامه

حال به توضیح تک به تک قسمتها میپردازیم :

۱:در قسمت معرفی آی سی از کلمه کلیدی $Regfile برای معرفی استفاده شده است . این دستور به این صورت است که باید بعد ازآن کلمه معرف آی سی مورد استفاده را در جلوی آن وارد کنیم . البته برای هر آی سی کلمه ی مخصوصی وجود دارد که برای ATMEGA32 باید کلمه ی M32def.dat را تایپ کرد . البته باید توجه داشت که این کلمه باید داخل یک جفت کوتیشن ( گ + Shift ) قرار گیرد :
$Regfile = “M32def.dat”

۲: در قسمت بعدی که تعیین فرکانس کاری است کلمه کلیدی $Crystal باید نوشته شود و آنرا باید مساوی با فرکانس کار بر حسب هرتز قرار داد :
$Crystal = 1000000

۳: حال به بخش معرفی سخت افزار رسیدیم . در این برنامه چون پورت B باید بتواند جریان بیرون دهد و سخت افزار خارجی ای که همان LED است را روشن کند بعنوان خروجی تعریف میشود . همیشه برای معرفی سخت افزار از کلمه کلیدی Config اسفاده میشود . پس برای خروجی کردن پورت B مینویسیم :
Config Portb = output

۴: چون در این برنامه نیازی به تعریف متغیری نبود به بخش برنامه اصلی میرویم و در این قسمت عددی را به پورت B خواهیم فرستاد تا طبق آن LED ها روشن شوند . البته ذکر این نکته لازم است که اگر بخواهیم عددی را در مبنای دودویی بنویسیم ابتدا باید &B را نوشته و بعد ععد مورد نظر را تایپ کنیم و همینطور برای نوشتن در مبنای هگز که &H تایپ میشود و اگر هیچکدام از کلمات ذکر شده را ننویسیم عدد در مبنای دسیمال محسوب میشود .

۵: در آخر برنامه نیز از کلمه کلیدی END برای مشخص نمودن پایان برنامه استفاده شده است .

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 .

تحلیل برنامه :

۱:برای تعیین نوع LCD از کلمات کلیدی Config و بعد از آن Lcd استفاده شده و آنها را مساوی نوع LCD مورد استفاده قرار میدهیم که در اینجا نوع مورد استفاده دارای 2 سطر و 16 ستون میباشد. پس بصورت زیر خواهیم نوشت :
Config Lcd = 16*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
( به علامت , بین بخشها دقت کنید . )

۳: بعد از انجام کارهای بالا که جزو بخش معرفی سخت افزار محسوب میشوند به سراغ برنامه اصلی میرویم که کار آن نمایش متن روی LCD است و برای انجام اینکار از کلمه کلیدی LCD و در جلوی آن متنی که باید نمایش داده شود استفاده میکنیم و باید توجه داشت که متن را باید داخل کوتیشن قرار داد .

۴: در انتهای برنامه نیز END را مینویسیم .

نحوه ی کامپایل برنامه و پروگرام کردن IC

کامپایل برنامه نوشته شده :
بعد از نوشتن برنامه باید آنرا کامپایل کرد تا اگر اشتباهی در تایپ کلمه ای وجود داشته باشد برای اصلاح آن اخطار داده شود و فایلهای از جمله فایل هگز که برای پروگرام کردن نیاز است ابجاد گردند . برای کامپایل برنامه همانطور که در تصویر بخش اول نمایش داده شده است باید از دکمه ی F7 استفاده کرد . با انجام اینکار برنامه ی ما کامپایل خواهد شد .
پروگرام کردن IC :
بعد از کامپایل برنامه نوبت به آن رسیده است که با نحوه ریختن برنامه داخل IC یا باصطلاح پروگرام کردن آشنا شوید . پس نیاز است که یک دستگاه پروگرامر مختص به خانواده AVR داشته باشید . برای پروگرام کردن میکروکنترلرهای خانواده AVR انواع مختلفی پروگرامر که از استانداردهای خاصی پیروی میکنند وجود دارد که مصرف عمومی تر را پروگرامهای نوع STK200/300 دارند که البته دارای مدار بسیار ساده ایست و برای پروگرام کردن از کابل LPT ( پرینتر ) استفاده میکند و در بازار هم بیشتر این نوع پروگرامر یافت میشود .
هنگامیکه میخواهیم کار پروگرام کردن را شروع کنیم ابتدا باید پروگرامر را به کامپوتر وصل نموده و بعد از توسط محیطی از نرم افزار Bascom AVR نوع آنرا برای کامپیوتر معرفی کنیم ( اینکار فقط یکبار انجام شود کافیست ) . برای شناساندن پروگرامر به کامپیوتر از منوی Option گزینه Programmer را انتخاب میکنیم :

بعد از انتخاب این گزینه کادر نمایش داده شده که در قسمت نمایش داده شده توسط خط قرمز نوع پروگرامر را انتخاب میکنیم :
بعد از انجام تنظیمات بالا میتوان آی سی را پروگرام کرد . به این صورت که
گزینه Program را انتخا ب میکنیم . بعد از انتخاب این گزینه کادر زیر باز خواهد شد که با کلیک روی آیکون مربوط آی سی پروگرام میشود .
همچنین دستگاههایی برای تست برنامه نوشته شده وجود دارند که روی آنها تمام وسایل مورد نیاز مانند LCD و Keypad و ... قرار دارد و کاربرمیتواند با سیم بندی ای که براحتی توسط کابلهای مخصوصی انجام میدهد پورتهای آی سی را به سخت افزارهای جانبی اتصال دهد و برنامه خود را مورد آزمایش قرار دهد . به این دستگاهها Emulator میگویند.