مهمترین هدف برنامه سازی سیستم، دسترسی، مدیریت و بهره برداری از سخت افزار یک سیستم کامپیوتری می باشد.
در محیط PC ، دسترسی به سخت افزار از ۳ طریق ممکن است اولین راه، دسترسی مستقیم به سخت افزار است که برای بررسی و تحلیل دسترسی ها با استفاده از این روش ، در صدد برامدیم که از میکروکنترلر های AVR استفاده می کنیم دانشجویان واساتید ارجمند بهتر است برای درک بهتر، برنامه هایی را در کلاس های عملی برای این میکروکنترلرها نوشته و نحوه ارتباط با سخت افزار را بطور قابل لمس تری مشاهده نمایند.
میکروکنترلر چیست؟ و نحوه برنامه ریزی آن به چه صورت است؟
میکروکنترلر در واقع یک کامپیوتر تک تراشه ای می باشد. کامپیوتر تک تراشه ای بدین معنا است که کل سیستم کامپیوتر در داخل تراشه مدار مجتمع جای داده شده است. میکروکنترلری که بر روی تراشه سیلیکونی ساخته می شود دارای خصوصیاتی مشابه خصوصیات کامپیوترهای شخصی استاندارد است. در واقع میکروکنترلر قطعه ای است که می توان با دادن فرمان آنرا به عملیات مختلف وا داشت یعنی یک کنترل کننده قابل برنامه ریزی است.
نخستین ویژگی میکرو قابلیت ذخیره سازی و اجرای برنامه است. یک میکرو تمامی خصوصیات یک کامپیوتر را به صورت محدودتر داراست. میکروکنترلرها تراشه هایی هستند که توسط یک نرم افزار به یکی از زبانهای C یا Basic یا اسمبلی برنامه نویسی می شوند و سپس برنامه نوشته شده (که همان اعمال مورد نظر کاربر از میکروکنترلر است) توسط کامپایلر یا اسمبلر کامپایل شده و اگر کامپایل بدرستی صورت گیرد فایلی را تولید خواهد کرد که این فایل دقیقا همان دستورات، اما به زبان ماشین (یعنی زبان قابل فهم توسط میکروکنترلر) است ، در نهایت این فایل تولید شده توسط ابزاری به نام پروگرمر به میکروکنترلر منتقل می شود . با اتصال منبع تغذیه مناسب به میکرو و ابزارهای جانبی و مورد نیاز به پایه های آن، میکروکنترلر شروع به اجرای دستورات خواهد نمود.
چرا AVR ؟
خانواده های مختلف میکروکنترلر:
امروزه خانواده های مختلفی از میکروکنترلر وجود دارد که موارد زیر نمونه هایی از آنها می باشد.
Intel شرکت ۸۰۴۸ و ۸۰۵۱
Motorola شرکت۶۸HC11
Zilog شرکتZ80
Microchip شرکت PIC
Hitachi شرکت H8
Atmel شرکت AVR
در حالت کلی هیچ نوع میکروکنترلری را نمی توان بعنوان بهترین معرفی کرد چرا که هر میکروکنترلر، کاربردهای خاص خودش را دارد و بر اساس خصوصیات داخلی، می توان تنها برای موارد ویژه ای بعنوان بهترین انتخاب گردد . اما برخی ویژگی های خاص این میکرو عبارتند از :
۱-دارای بهترین MCU برای حافظه فلش در جهان ! (MCU: Master Control Unit)
۲-دارای سیستمی با بهترین هماهنگی
۳-دارای بالاترین کارایی و اجرا در CPU (یک دستورالعمل در هر سیکل کلاک)
۴-دارای کدهایی با کوچکترین سایز
۵-دارای حافظه خود برنامه ریز
۶-دارای واسطه JTAG که با IEEE 1149.1 سازگار است.
(IEEE: Institute of Electrical and ELECTRONICS Engineers.)
۷-دارای سخت افزار ضرب کننده روی خود
۸-دارای بهترین ابزارها برای پیشرفت و ترقی
۹-دارای حالات زیادی برای ترفیع دادن یا Upgrade
میکروکنترلر های AVR دارای ویژگی های منحصر بفردی دیگری نیز نسبت به میکروکنترلرهای دیگر موجود هستند، از جمله AVR ها میکروکنترلرهایی ۸ بیتی از نو ع CMOS با توان مصرفی پایین هستند که بر اساس ساختار پیشرفته RISC ساخته شده اند که با استفاده از این معماری عملیات خود را در یک کلاک سیکل انجام می دهند. خانواده AVR ، ۳۲ رجیستر همه منظوره و مجموعه دستورات قدرتمندی را شامل می گردند. تمام این ۳۲ رجیستر مستقیما به ALU متصل شده اند. بنابراین دسترسی به ۲ رجیستر در یک کلاک سیکل هم امکان پذیر است. این ساختار موجب می گردد تا سرعت آنها نسبت به میکروکنترلرهای CISC بتواند تا ۱۰ برابر هم افزایش یابد.
میکروکنترلرهای AVR ، میتوانند تا ۱۰۰۰۰ مرتبه پاک شده و مجددا برنامه ریزی شوند. این میکروها از تکنولوژی حافظه کم مصرف غیر فرار استفاده می کنند.
مقدمه ای بر میکروکنترلرها با تمرکز بر میکروکنترلرهای AVR
با پیشرفت علم و تکنولوژی در عرصه الکترونیک، تراشه هایی به عنوان میکروپروسسورها طراحی و تولید شدند تا قبل از سال ۱۹۷۱ میلادی اگر شخص طراح، قصد طراحی سیستمی را داشت باید سیستم مورد نظر را به شرکت های سازنده میکروپروسسور ارائه می داد تا طراحی و ساخته شود و یا اینکه مجبور بود با استفاده از IC هایی سیستم مورد نظر خود را طراحی کند. از این پس شرکت های سازنده میکروپروسسورها، از جمله شرکت Zilog تصمیم به ساخت میکروپروسسوری نمود که بتوان آن را در اختیار کاربر قرار داد و به هر صورت ممکن که می خواهد سیستم مورد نظر خود را طراحی کند و به همین دلیل میکروپروسسور Z80 را به بازار عرضه کرد و نرم افزار کامپایلر به زبان اسمبلی و پروگرمر آنرا نیز ارائه نمود. بطور کلی اگر یک شخص از میکروپروسسور ۸ بیتی Z80 برای سیستمی استفاده کند، باید المان های جانبی CPU را نیز علاوه بر سخت افزار سیستم مورد نظر، در کنار میکروپروسسور Z80 قرار دهد.
شکل بلوک دیاگرام یک CPU بهمراه اجزای جانبی آن
ابتدا بهتر است تفاوت میکروپروسسورها را با میکروکنترلرها بصورت مختصر بیان کنیم. همانطور که در بلوک دیاگرام شکل ۱ نشان داده شده است برای اینکه از یک میکروپزوسسور حتی برای ساده ترین عملکرد بخواهیم استفاده کنیم، باید از المان های جانبی دیگری نیز بهره گیریم. این عمل سبب افزایش قیمت و پیچیده شدن سخت افزار پروژه مورد نظر می گردد. بنابراین شرکت های سازنده قطعه را به فکر انداخت تا به طراحی تراشه ای بپردازند که تمامی امکانات جانبی میکروپروسسور را به همراه خود CPU داشته باشد، تا شخص طراح با قیمت مناسب و سخت افزار کمتر، بتواند سیستم مورد نظر خود را طراحی نماید.
درسال ۱۹۸۱ میلادی شرکت اینتل تراشه ای را به عنوان میکروکنترلر خانواده ۸۰۵۱ به بازار عرضه کرد که این میکروکنترلر دارای CPU 8 بیتی، تایمر یا کانتر، تبادل سریال ، حافظه SRAM و حافظه غیر فرار (Flash) داخلی بود. ابتدا این میکروکنترلر حافظه PROM بهره می برد که فقط یکبار قابل برنامه ریزی بود. سپس این میکروکنترلر را توسعه دادند و در آن از حافظه EPROM استفاده کردند مزیت استفاده از این نوع حافظه در آن است که می توان توسط پنجره شیشه ای که در بالای تراشه قرار داشت، در مجاورت نور ماورائ بنفش مانندنور خورشید قرار داده و بعد از چند دقیقه آنرا پاک کرد. با ادامه این روند شرکت اینتل تصمیم به استفاده از حافظه ای گرفت که بتواند با ولتاژ الکتریکی نوشته و پاک شود (حافظه Flash). این سری با شماره ۸۹Cxx آغاز می شود که امروزه نیز مورد استفاده قرار می گیرد. شرکت های سازنده دیگری از جمله شرکت Atmel تحت لیسانس شرکت اینتل میکروکنترلر ۸۰۵۱ تولید کردند. شرکت Atmel بعدا نوع توسعه یافته ۸۰۵۱ را با سری AT89Sxx ارائه کرد.
این روند با ارائه میکروکنترلرهای جدیدی که دیگر شرکت های سازنده قطعه از جمله شرکت Microchip که میکروکنترلرهای PIC را تولید کرده است ادامه یافت تا در نهایت شرکت Atmel خانواده AVR را در سال ۱۹۹۷ به بازار عرضه نمود.
طراحی برای زبانهای Basic و C
زبانهای Basic و C بیشترین استفاده را در دنیای امروز بعنوان زبانهای HLL (high level language) دارند. امروزه معماری بیشتر میکروها برای زبان اسمبلی طراحی شده و کمتر از زبانهای HLL حمایت شده است.
هدف Atmel طراحی معماری بود که هم برای زبان اسمبلی و هم زبانهای HLL مفید باشد. بطور مثال در زبانهای C و Basic می توان یک متغیر محلی به جای متغیر سراسری در داخل زیر برنامه تعریف کرد، در این صورت فقط در زمان اجرای زیر برنامه مکانی از حافظه RAM برای متغیر اشغال می شود در صورتی که اگر متغیری بعنوان سراسری تعریف گردد در تمام وقت مکانی از حافظه Flash را اشغال کرده است.
برای دسترسی سریعتر به متغیرهای محلی و کاهش کد، نیاز به افزایش رجیسترهای همه منظوره است. AVR ها دارای ۳۲ رجیستر هستند که مستقیما به ALU (Arithmetic Logic Unit) متصل شده اند، و تنها در یک کلاک سیکل به این واحد دسترسی پیدا می کنند.
معماری میکروکنترلر های AVR :
بطورکلی دو نوع معماری برای ساخت میکروکنترلرها وجود دارد:
- معماری CISC : (Complex Instruction Set Computer)
هدف از این معماری این بود که یک دستورالعمل برای هر عبارتی که در زبان سطح بالا نوشته شده باشد وجود داشته باشد. اما ثابت ش که هر چه تعداد دستورات و روش های آدرس دهی در کامپیوتر بیشتر باشد مدارهای سخت افزاری بیشتری برای پیاده کردن و پشتیبانی آنها لازم است و این امر سبب می گردد سرعت محاسبات کاهش یابد. بنابراین در این معماری تعداد دستورات بیشتر و پیچیده تر است اما برنامه نویسی آن بخصوص اسمبلی ساده تر شده و از طرفی سرعت اجرایی دستورات پایین تر آمده است.
- معماری RISC (Reduced Instruction Set Computer)
هدف از این معماری کوتاه کردن زمان اجرا، با کاهش مجموعه دستورات در کامپیوتر است. در این معماری جدید تعداد دستورات کاهش پیدا کرد و از طرفی سرعت اجرایی دستورات تقریبا ۱۰ برابر نسبت به معماری قبلی افزایش یافت و برنامه نویسی به زبان اسمبلی را قدری پیچیده و سخت کرد اما با وجود ساختار بهینه شده میکروکنترلرهای AVR با حافظه های ظرفیت بالا و همچنین استفاده از معماری RISC امکان برنامه نویسی به زبان سطح بالا مانند C و BASIC فراهم گردید.
فیوز بیت های میکرو کنترلر ATMEGA32
فیوز بیت ها قسمتی از حافظه FLASH هستند که امکاناتی را در اختیار کاربر قرار می دهند. فیوز بیت ها با پاک کردن میکروکنترلر (ERASE) از بین نمی روند و می توانند توسط بیت های قفل مربوطه، قفل شوند. تغییر آنها فقط از طریق پروگرمر امکان پذیر است و برای تنظیم آنها نیاز به برنامه نویسی خاصی نداریم و موقع پروگرم کردن توسط ابزار نرم افزار Codevision یا BASCOM آنها را تنظیم و برنامه ریزی می کنیم. فیوز بیت ها با ۰ برنامه ریزی و با ۱ غیر فعال می شوند. توجه کنید که برنامه ریزی فیوزبیت ها باید قبل از قفل کردن تراشه صورت گیرد. میکرو کنترلر های AVR بسته به نوع قابلیتی که دارند دارای فیوز بیت های متفاوتی هستند. بعلت توجه بیشتر این کتاب به میکرو کنترلر ATMEGA32 ، به توضیح فیوز بیت های این میکرو می پردازیم. برای اینکه بدانید میکروکنترلری که با آن کار می کنید دارای چه ویژگی و چه فیوز بیت هایی می باشد. به Data Shit آن مراجعه نمایید.
منبع: اندیشه نو