میکروکنترلر چیست؟

در یک بیان ساده می توان گفت میکروکنترلر نوعی کامپیوتر کوچک و محدود است. ما از یک کامپیوتر انتظار داریم که بتوانیم به آن برنامه بدهیم (برایش برنامه نویسی کنیم) و کامپیوتر با اجرای آن برنامه ها بتواند یکسری ورودی ها را بگیرد و خروجی های مناسب را ایجاد کند و همچنین بتواند اطلاعاتی را در حافظه اش ذخیره کند. میکروکنترلر همه این قابلیت ها را دارد، پس یک کامپیوتر است. در واقع میکرو مثل هر کامپیوتری دارای پردازنده (سی پی یو)، حافظه دائم و حافظه موقت (رم) ،البته در ابعاد بسیار کوچک است. اما چند تفاوت مهم بین یک میکروکترلر و یک کامپیوتر شخصی (که در خانه استفاده میکنید) وجود دارد:

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

دوم این که نوع برقراری ارتباط با یک میکرو (ورودی ها و خروجی های آن) با کامپیوتر شخصی کاملا متفاوت است. در حالی که یک کامپیوتر شخصی توسط کیبورد و موس از شما ورودی میگیرد و توسط مانیتور به شما خروجی تحویل میدهد ،ارتباط یک میکرو با محیط خارج فقط از طریق پایه(پین) های آن است. یعنی میکرو میتواند ولتاژها و جریان های الکتریکی روی پایه های خود را به عنوان ورودی دریافت کند و بر اساس برنامه ای که به آن داده شده ولتاژهای الکتریکی لازم را روی پایه هایش به عنوان خروجی ایجاد نماید. به این شکل میکرو میتواند مدارها و دستگاه های الکترونیکی را کنترل کند یا با آن ها ارتباط برقرار کند.

از نظر الکترونیکی میکروکنترلر یک آی سی (مدار مجتمع) پیشرفته است. از نظر ظاهری هم میکرو به شکل یک آی سی با تعدادی پایه و معمولا در ابعادی کوچکتر از یک انگشت است. مثل هر ابزار دیگری شرکت های مختلفی میکروکنترلرها را در مدل های مختلف تولید می کنند. طبیعتاً مدل های مختلف از نظر قدرت و امکانات با هم متفاوت هستند. خانواده میکروکنترلرها به چند مدل میکرو کنترلر میگویند که ساحتار آن ها بسیار به هم شبیه است و فقط تفاوت های کمی در امکاناتشان هست (مثل خانواده میکروهای AVR).

برنامه نویسی برای میکروکنترلرها

برنامه نویسی برای یک میکرو را می توان با یک کامپیوتر شخصی (PC) انجام داد و سپس برنامه را به حافظه میکرو انتقال داد. برای این کار شما باید از یک نرم افزار کامپایلر خاص استفاده کنید تا برنامه شما را به زبان ماشین که توسط میکرو قابل فهم است تبدیل کند. معمولاً هر کامپایلر ویژه برنامه نویسی برای یک خانواده خاص میکروها ساخته می شود. مثلا برای برنامه نویسی برای خانواده AVR نرم افزارهایی مثل BASCOM و CodeVision به بازار آمده است.

در هر کامپایلر می توانید با یک زبان برنامه نویسی خاص برنامه بنویسید. برای میکروهای قدیمی فقط کامپیلرهایی با زبان اسمبلی وجود داشت، اما امروزه می توانید با زبان های معروف C و Basic برای میکرو برنامه بنویسید که کار را خیلی راحت کرده است. اصول برنامه نویسی و الگوریتم برای میکروها با برنامه نویسی برای کامپیوتر تفاوتی ندارد. فقط در برنامه نویسی میکرو شما دستورات و توابع خاصی برای کار با امکانات میکرو در اختیار دارید. مثلا می توانید ولتاژ روی پایه های میکرو را در برنامه مثل یک متغیر تغییر دهید (روشن و خاموش کنید).

پروگرم (Program) کردن میکروکنترلر

پروگرم کردن میکرو یعنی انتقال برنامه ای که برایش نوشته اید (برنامه کامپایل شده) از کامپیوتر به حافظه دائم میکرو. برای این کار شما به غیر از کامپایلر، نیاز به ابزاری به نام پروگرمر دارید که به عنوان واسطی بین کامپیوتر و میکرو عمل میکند.

پروگرمر در اصل یک مدار الکترونیکی است که به شکل دستگاه آماده در بازار موجود است و شما می توانید با توجه به نوع میکرو خود آن را بخرید. اما برای بعضی میکروها مدار پروگرمر را خودتان هم به سادگی میتوانید بسازید. اگر خودتان آن را بسازید هزینه خیلی کمتری برایتان خواهد داشت، اما اشکال آن این است که سرعت انتقال برنامه به میکرو کمتر می شود و احتمال آسیب رسیدن به آن هم هست.

یک میکرو را می توان هزاران بار مجدادا برنامه ریزی کرد. البته وقتی یک برنامه روی حافظه دائم میکرو ریخته شود، در زمان اجرای برنامه نمی توان تغییری در آن ایجاد کرد. یعنی برای تغییر برنامه دوباره نیاز است با پروگرمر روی میکرو برنامه جدید ریخته شود و نصب برنامه جدید روی آن حین کار (مثل کامپیوترهای شخصی) ممکن نیست. به چنین برنامه هایی که کاربر به راحتی نمی تواند آن ها را تغییر دهد Firmware می گویند.

 

پایه های ورودی-خروجی (IO) میکروکنترلر

گفتیم که میکروکنترلر دارای تعدای پایه است (تعداد پایه ها در مدل های مختلف متفاوت است). بعضی از پایه های میکروکنترلر کاربردهای خاص دارد، مثلاً یک پایه مخصوص اتصال به منبع تغذیه است. بقیه پایه های میکرو عمومی هستند و نقش ورودی-خروجی را دارند. در برنامه باید تعیین کنید که می خواهید از یک پایه یا پورت(گروهی خاص از پایه ها) به عنوان ورودی استفاده کنید یا خروجی. در حالت خروجی میتوانید یک ولتاژ را برای پایه در هر لحظه معین کنید و در حالت ورودی می توانید ولتاژ روی آن را بخوانید. توجه کنید که مقادیر ورودی و خروجی میکرو اصولاً دیجیتال (صفر و یک) است. یعنی ولتاژ روی پایه یا باید حدود صفر باشد یا حدود 5 ولت(یا نزدیک ولتاژ منبع) و مقادیر بین این ها معنایی برای میکرو ندارد (مگر در موارد خاص که میکرو ورودی آنالوگ هم بپذیرد).

کلاک (Clock) میکروکنترلر

هر پردازنده (CPU) برای این که بتواند محاسبات را انجام دهد به یک موج الکتریکی (معمولا موج مستطیلی) نیاز دارد. به این موج "کلاک سیستم" و به فرکانس آن "فرکانس کلاک" می گویند. هر چه فرکانس کلاک بیشتر باشد سرعت کار پردازنده بیشتر می شود. برای ایجاد کلاک به مداری به نام نوسان ساز (Oscillator) نیاز داریم.

میکروها هم برای کار به کلاک نیاز دارند. اکثر میکروها در داخل خودشان دارای نوسان ساز هستند که کلاک آن ها را تامین می کند. اما اگر شما بخواهید فرکانس کلاک را بالاتر ببرید می توانید یک مدار نوسان ساز (یا مدار تشدید) در خارج میکرو ایجاد کرده و به آن متصل کنید. اما توجه کنید که هر چه قدر بخواهید نمی توانید فرکانس را بالا ببرید زیرا فرکانس کلاک هر میکرو باید در بازه مشخصی باشد که توسط شرکت سازنده اش اعلام می شود.  

امکانات جانبی میکروکنترلر

گفتیم که اساس کار میکرو این است که برنامه ای را که روی آن میریزید اجرا می کند و بر اساس آن پایه های ورودی و خروجی را کنترل می کند. اما هر میکرو برای آسان شدن کار شما از یکسری امکانات جانبی هم برخوردار است که طبیعتا در مدلهای پشرفته تر این امکانات بیشتر است. مثلاً یکی از این امکانات تایمر است که می تواند دستوراتی را که تعیین می کنید در فواصل مشخص زمانی مرتباً اجرا کند. یکی دیگر از امکانات مبدل آنالوگ به دیجیتال است که می تواند ولتاژ آنالوگ را روی یکی از پایه ها بخواند و ان را به یک مقدار عددی (دیجیتال) تبدیل کند.

میکروکنترلرهای AVR

امروزه در بازار خانواده های مختلف میکرو مثل ARM و PIC از کارخانه های مختلف موجود است. اما میکروهایی که در ایران بیشترین کاربردهای آموزشی و تجاری را دارد خانواده AVR تولید شرکت Atmel است. این میکروها در کل جهان به خاطر آسان بودن برنامه نویسی،قیمت مناسب و کارایی بالا محبوب هستند. در بازار ایران هم به راحتی می توانید یک مدل مناسب از این خانواده را با قیمتی حدود 3-2 هزار تومان تهیه کنید.

ضمناً شرکت سازنده هر میکروکنترلر برای آن یک فایل به نام دیتاشیت (Datasheet) در اینترنت منتشر می کند که همه اطلاعات لازم مربوط به آن از جمله سرعت ،حافظه، ولتاژ کاری، نام و کاربرد هر کدام از پایه ها، امکانات میکرو و... در آن نوشته شده است. تصویر زیر مربوط به میکروی Mega8 از خانواده AVR است که در دیتا شیت آن آمده است.