میکروکنترلر یا ریزکنترلگر (به انگلیسی: Microcontroller) نوعی قطعهی الکترونیکی است که دارای CPU، پورتهای ورودی و خروجی، حافظهی RAM و ROM، و برخی قطعات دیگر است. میکروکنترلرها معمولا برای کاربردهای کوچک طراحی میشوند؛ به همین دلیل، برخلاف میکروپروسسورها (ریزپردازندهها) مهمترین مسئله، سادگی و مصرف کم توان است. یک نوع میکروکنترلر پر استفاده، میکروکنترلر AVR نام دارد. در این مقاله از فنولوژی، ابتدا نگاهی به تفاوتهای میکروکنترلرها با میکروپروسسورها و کامپیوترها میاندازیم. سپس به این سوال پاسخ میدهیم که میکروکنترلر AVR چیست و چه ویژگیهایی دارد و با کاربردهای آن در برق و الکترونیک آشنا میشویم. در آخر نیز نگاهی عمیقتر به اجزای داخلی میکروکنترلر و نحوهی عملکرد آنها میاندازیم.
تفاوت میکرپروسسور با میکروکنترلر چیست؟
معمولا دو مفهوم میکروپروسسور (ریزپردازنده) و میکروکنترلر (ریزکنترلگر) با یکدیگر اشتباه گرفته میشوند. میکروکنترلرها در حالی که شباهتهای زیادی به میکروپروسسورها دارند، تفاوتهای مهمی نیز دارند. میکروکنترلرها نوع پیشرفتهی میکروپروسسورها هستند.
میکروپروسسورها مدارهای مجتمعی هستند که فقط دارای CPU میباشند. در حالی که میکروکنترلرها علاوه بر CPU، دارای حافظههای RAM و ROM، واحدهای ورودی و خروجی، و برخی قطعات داخلی دیگر نیز هستند. گاهی به میکروکنترلرها کامپیوترهای کوچک، یا کامپیوتر تک تراشهای نیز میگویند. اما آیا این به آن معناست که میکروکنترلر نام دیگری برای کامپیوتر است؟
تفاوت کامپیوتر با میکروکنترلر AVR چیست
کامپیوتر طوری طراحی شده است که میتوان از آن برای انجام کارهای عمومی بسیاری روی تنها یک دستگاه استفاده کرد؛ برای مثال میتوان با استفاده از آن محاسبات ریاضی را انجام داد، یا این که اطلاعاتی را در آن ذخیره کرد، یا به اینترنت دسترسی پیدا کرد. این در حالی است که میکروکنترلرها طوری طراحی شدهاند که فقط یک دستور را اجرا کنند؛ برای مثال یک دستگاه تهویه را هنگامی که دما از حدی بیشتر شد روشن کنند و زمانی که دما از حدی کمتر شد آن را خاموش کنند.
پردازندههای کامپیوتری حداقل ۳۲ بیتی هستند؛ به این معنا که دادهها را در دستههای ۳۲ رقمی یا بیشتر پردازش میکنند. اما میکروکنترلر AVR بسیار سادهتر است و معمولا دادهها را به شکل هشت بیتی پردازش میکند. البته میکروکنترلرهای AVR جدیدتری هم وجود دارند که ۱۶ یا ۳۲ بیتی هستند.
به همان دلیل که اگر روی کامپیوتر خود برنامهای نصب نکنید، کامپیوتر بی استفاده میماند، برنامههای میکروکنترلر AVR نیز باید روی آن نصب شوند. این برنامه بر روی حافظهی داخلی AVR ذخیره میشود. بارگذاری برنامههای AVR بر روی آن به وسیلهی وسیلهای به نام پروگرمر (programmer) انجام میشود. در ادامهی این مقاله با شیوههای برنامه نویسی میکروکنترلر AVR آشنا خواهیم شد.
میکروکنترلر AVR چیست برق و الکترونیک
میکروکنترلر AVR چیست ؟ AVR نوعی میکروکنترلر است که توسط شرکت Atmel تولید شد. میکروکنترلر AVR یکی از اولین میکروکنترلرها بود که در آن از حافظهی فلش داخلی برای ذخیرهسازی برنامهها استفاده شد؛ برخلاف حافظههای ROM با قابلیت یک بار برنامهنویسی (one-time programmable ROM)، حافظهی EPROM و EEPROM که در بقیهی میکروکنترلرهای آن زمان استفاده میشد.
تاریخچهی میکروکنترلر AVR
میکروکنترلر AVR قطعهای الکترونیکی است که ابتدا در سال ۱۹۹۶ معرفی شد. معماری میکروکنترلر AVR توسط Alf-Egil Bogen و Vegard Wollan طراحی شد. نام میکروکنترلر AVR نیز از طراحان آن گرفته شده است؛ Alf-Egil Bogen Vegard Wollan RISC که همچنین با نام Advanced Virtual RISC نیز شناخته میشود. AT90S8515 اولین میکروکنترلری بود که بر اساس طراحی AVR تولید شد؛ با این حال تا زمانی که میکروکنترلر AT90S1200 در سال ۱۹۹۷ وارد بازار نشده بود، هنوز میکروکنترلر AVR شناخته شده نبود.
دلیل انتخاب میکروکنترلر AVR چیست
میکروکنترلرها انواع مختلفی دارند. مهندسان برق با آگاهی از ویژگیهای هر کدام از میکروکنترلرها، از آنها در کاربردهای مختلف استفاده میکنند. چند نمونه از مشهورترین میکروکنترلرها، میکروکنترلر AVR، PIC، و ۸۰۵۱ هستند. اما ویژگی خاص میکروکنترلر AVR چیست ؟
مقایسه AVR با PIC – تقاوت AVR با ۸۰۵۱
اصلیترین ویژگی میکروکنترلر AVR، سرعت بالای آن است. میکروکنترلر AVR در هر چرخهی اجرایی، دستورهای بسیاری را با سرعت بالا اجرا میکند. AVR حدود چهار برابر سریعتر از میکروکنترلر PIC است، توان کمتری مصرف میکند و میتواند در حالتهای مختلف ذخیرهی توان کار کند. در جدول زیر، مقایسهای از انواع پر استفادهی میکروکنترلرها میبینیم:
۸۰۵۱ | PIC | AVR | |
سرعت | کم | متوسط | زیاد |
حافظه | کوچک | بزرگ | بزرگ |
معماری | CISC | RISC | RISC |
مبدل آنالوگ به دیجیتال (ADC) | ندارد | دارد | دارد |
تایمر | دارد | دارد | دارد |
مدولاسیون پهنای باند (PWM) | ندارد | دارد | دارد |
توضیح: معماری RISC یا Reduced instruction Set Computing، نوعی از طراحی CPU است که با سادهسازی دستورات، بازده و سرعت اجرا را بالا میبرد. در مقابل آن، CISC یا Complex Instruction Set Computing وجود دارد که به معنای مجموعه دستورات پیچیده است.
ویژگیهای کلیدی میکروکنترلر AVR برق الکترونیک
بنابراین موارد زیر را میتوان اصلیترین ویژگیهای میکروکنترلر AVR دانست:
- سرعت بالا
- عملکرد عالی
- حافظهی زیاد
- توان مصرفی پایین
- بهینهسازی شده
- قیمت پایین
- معماری RISC
دستهبندیهای میکروکنترلر AVR چیست
میکروکنترلرهای AVR، بر اساس ویژگیهای ساختاری خود، به سه دسته تقسیم میشوند:
- TinyAVR – دارای حافظهی کمتر و اندازهی کوچکتر است و برای کاربردهای سادهتر مناسب است.
- MegaAVR – میکروکنترلر مگا، مشهورترین نوع AVR است. دارای حافظهی نسبتا خوب (تا ۲۵۶ کیلوبایت) و قطعات جانبی بیشتری است و برای کاربردهای متوسط تا پیچیده مناسب است.
- XmegaAVR – برای کاربردهای پیچیدهای که نیاز به حافظهی بیشتر و سرعت بالاتر دارند استفاده میشود.
در جدول زیر مقایسهای از مشخصات این سه نوع میکروکنترلر AVR را میبینیم:
تعداد پین | حافظهی فلش (کیلوبایت) | ویژگیهای خاص | |
TinyAVR | ۶ – ۳۲ | ۰.۵ – ۸ | اندازهی کوچک |
MegaAVR | ۲۸ – ۱۰۰ | ۴ – ۲۵۶ | قطعات جانبی بیشتر |
XmegaAVR | ۴۴ – ۱۰۰ | ۱۶ – ۳۸۴ | دستیابی مستقیم به حافظه (DMA) |
خانوادهی میکروکنترلر MegaAVR
برخی از پراستفادهترین میکروکنترلرها از خانوادهی Mega هستند:
- میکروکنترلر ATmega8
- میکروکنترلر ATmega16
- میکروکنترلر ATmega32
- میکروکنترلر ATmega328
جدول زیر مقایسهی مشخصات انواع این میکروکنترلرها را نشان میدهد:
نحوهی نامگذاری میکروکنترلر AVR
در میکروکنترلر ATmega16، حروف AT به کمپانی سازندهی میکروکنترلر AVR، یعنی Atmel اشاره دارد. Mega به نوع AVR، و ۱۶، مقدار حافظهی آن را مشخص میکند، که ۱۶ کیلوبایت است.
کاربرد میکروکنترلر AVR چیست برق و الکترونیک
میکروکنترلرها در بسیاری از وسایل برقی و الکترونیکی که به صورت خودکار کنترل میشوند، استفاده میشود. برای مثال، سیستمهای کنترل موتور خودروها، دستگاههای پزشکی، ریموت کنترلها و بسیاری از وسایل برقی خانگی مثل پرینترها، ماشینهای لباسشویی، مایکروویوها، برخی اسباببازیها و …
میکروکنترلر AVR نیز در بسیاری از کاربردها، مثل اینترنت اشیا و خانهی هوشمند، صفحات لمسی، خودروها و … استفاده میشود. در ادامه، با برخی ویژگیها و کاربردهای هر یک از میکروکنترلرهای MegaAVR آشنا خواهیم شد.
میکروکنترلر ATmega8
ویژگیهای میکروکنترلر ATmega8
- ۲۸ پین
- یک کیلوبایت حافظهی داخلی RAM
- هشت کیلوبایت حافظهی فلش
- دو interrupt خارجی
کاربردهای میکروکنترلر ATmega8
- استفاده در پروژههای برق و الکترونیک
- نوشتن متن با استفاده از ماتریسهای LED
- اندازهگیری شدت نور با استفاده از LDR
- زنگهای خطر
ساختن ساعت با استفاده از ماتریسهای LED و میکروکنترلر AVR
میکروکنترلر ATmega16
ویژگیهای میکروکنترلر ATmega16
- ۴۰ پین
- یک کیلوبایت حافظهی داخلی RAM
- هشت کیلوبایت حافظهی فلش
- سرعت یک میلیون دستور در ثانیه
- حالتهای مختلف ذخیرهسازی توان
کاربردهای میکروکنترلر ATmega16
- سیستمهای خانهی هوشمند
- وسایل پزشکی
- سیستمهای نهفته (Embedded systems)
- پروژههای برق و الکترونیک
- خودروها و اتوماسیون صنعتی
- دستگاههای کنترل دما و فشار
میکروکنترلر ATmega16
میکروکنترلر ATmega32
ویژگیهای میکروکنترلر ATmega32
- ۴۴ پین
- دو کیلوبایت حافظه داخلی RAM
- ۳۲ کیلوبایت حافظهی فلش
- سرعت ۱۶ میلیون دستور در ثانیه
کاربردهای میکروکنترلر ATmega32
- دستگاههای کنترل دما و فشار
- اندازهگیری سیگنالهای آنالوگ
- سیستمهای نهفته مثل دستگاه قهوه ساز یا موبایلها
- سیستمهای کنترل موتورها
- پردازش سیگنال دیجیتال
میکروکنترلر ATmega328
ویژگیهای میکروکنترلر ATmega328
- ۲۸ یا ۳۲ پین
- دو کیلوبایت حافظهی داخلی RAM
- ۳۲ کیلوبایت حافظهی فلش
- سرعت ۲۰ میلیون دستور در ثانیه
کاربردهای میکروکنترلر ATmega328
- استفاده در ساخت آردوینو (Arduino)
- رباتیک
- سیستمهای کنترل و مدیریت توان
استفاده از میکروکنترلر AVR در آردوینو
زبان برنامه نویسی AVR چیست
زبان برنامه نویسی AVR، چه زبانی است؟ برای پاسخ به این سوال ابتدا باید بدانیم یک برنامه چیست؟ برنامه مجموعهای از دستورهای ساده است که دادههایی را دریافت میکند و تغییراتی روی آنها اعمال میکند. در اکثر کاربردها هنگام استفاده از میکروکنترلر AVR، مثل ماشین لباسشویی، این به معنای آن است که دادههایی دریافت میشوند، مقادیر آنها خوانده میشود و بر اساس آنها عملی انجام میشود. گاهی، مثلا برای نمایش دادهها روی صفحهی LCD، لازم است تغییراتی روی دادهها اعمال شود و دادهها به دستگاه دیگری فرستاده شوند.
اسمبلی، ابتداییترین زبان برنامه نویسی AVR
برای اجرای این دستورالعملها، باید آنها را به صورت کدهای سادهی دودویی (binary) نوشت. هر کدام از این دستورهای دودویی یک معادل در زبان اسمبلی (assembly) دارند که به زبان ما نزدیکتر است. ابتداییترین روش نوشتن برنامههای میکروکنترلر AVR، نوشتن دستورهای اسمبلی است؛ با این حال امکان نوشتن کدها در زبان دودویی نیز وجود دارد، اما این کار در کاربردهای معمول منطقی نیست.
استفاده از زبان اسمبلی به ما کمک میکند تا ساختار میکروکنترلر AVR و نحوهی کار قطعات مختلف آن را بهتر بشناسیم. علاوه بر آن، این کدها کوتاه و سریع خواهند بود. اما نقطهی ضعف آن این است که شما به عنوان برنامهنویس، باید همهی کارها را انجام دهید. این کارها شامل مدیریت حافظه و ساختار برنامه میشود که میتواند بسیار ملال انگیز باشد.
معمولترین زبان برنامه نویسی میکروکنترلر AVR چیست
برای اجتناب از این مشکل، برنامهنویسان از زبانهای برنامهنویسی سطح بالا برای ساختن برنامههای AVR استفاده میکنند. برخی از معمولترین زبانهای برنامه نویسی AVR، شامل C، Java و Basic میشوند. سطح بالا به معنای این است که در زبانهایی مثل C، هر خط کد به تعداد زیادی خط کد اسمبلی ترجمه میشود.
همچنین به دلیل این که کامپایلر، خود، به مدیریت حافظه و ساختار برنامه میپردازد، کار برنامهنویس سادهتر میشود. دستورهای معمول و پر استفاده نیز در کتابخانههای این زبانها به راحتی قابل دسترسی هستند.
نگاهی عمیقتر به میکروکنترلر AVR برق و الکترونیک
میکروکنترلرهای زیادی از خانوادهی AVR وجود دارند و هرکدام در برق و الکترنیک برای کاربردهای خاصی استفاده میشوند. در اینجا نگاهی عمیقتر به میکروکنترلر ATmega16 خواهیم داشت. میکروکنترلر ATmega16 دارای ۱ کیلوبایت حافظهی RAM و ۴۰ پین و سرعت یک میلیون دستور در ثانیه است. برخی ویژگیهای آن عبارتند از:
- ۳۲ پین ورودی/خروجی
- یک کیلوبایت حافظهی ذخیره سازی داده EEPROM
- یک تایمر ۱۶ بیتی و یک تایمر هشت بیتی
- مبدل آنالوگ به دیجیتال
قطعات داخلی میکروکنترلر ATmega16
در این بخش هر یک از قسمتهای داخلی میکروکنترلر ATmega16 را بررسی میکنیم.
پورتهای ورودی/خروجی: ATmega16 دارای چهار نوع (PORT A، PORT B، PORT C و PORT D) پورت ورودی/خروجی هشت بیتی است.
اسیلاتور (نوسانساز) داخلی: برای تنظیم کلاک داخلی، میکروکنترلر ATmega16 دارای یک اسیلاتور داخلی یک مگاهرتزی است. حداکثر فرکانس این اسیلاتور هشت مگاهرتز است. همچنین امکان اتصال میکروکنترلر ATmega16 به اسیلاتور خارجی و افزایش فرکانس آن تا ۱۶ مگاهرتز نیز وجود دارد.
مبدل آنالوگ به دیجیتال (ADC): میکروکنترلر ATmega16 دارای هشت کانال تبدیل آنالوگ به دیجیتال ۱۰ بیتی است. ADC، ورودی آنالوگ دستگاههایی مثل سنسورها را میخواند و آنها را تبدیل به اطلاعات دیجیتالی قابل فهم برای میکروکنترلر میکند.
مبدل دیجیتال به آنالوگ (DAC): میکروکنترلر ATmega16 دارای یک مبدل دیجیتال به آنالوگ است که برعکس ADC عمل میکند.
تایمر/شمارشگر: میکروکنترلر ATmega16 دارای دو تایمر/شمارشگر هشت بیتی و یک تایمر/شمارشگر ۱۶ بیتی است. تایمرها برای کارهایی مثل فاصله انداختن بین اجرای دو دستور کارآمد هستند.
تایمر واچداگ (Watchdog timer): تایمر واچداگ در کنار اسیلاتور داخلی قرار دارد. این تایمر به صورت ممتد میکروکنترلر را زیر نظر قرار دارد و اگر میکروکنترلر بیش از مدت زمان مشخصی در بخشی از کد گیر کند، میکروکنترلر AVR را ریست میکند.
وقفه (Interrupt): وقفه در میکروکنترلر AVR یکی از واحدهای بسیار مفید و کاربردی است. اگر شرط دستوراتی که در قسمت interrupt نوشته شده است در حین اجرای برنامه صدق کند، CPU اجرای دستورات برنامه را متوقف کرده و پس از اجرای دستورات interrupt، آنها را ادامه میدهد. میکروکنترلر ATmega16 دارای ۲۱ وقفه است که چهار تای آنها خارجی هستند.
USART: پروتکل USART، نوعی پروتکل ارتباط بین فرستنده و گیرنده است و امکان انتقال اطلاعات بین میکروکنترلر AVR و سیستمهای دیگر را فراهم میکند.
SPI: بخش SPI یا Serial Peripheral Interface، برای تبادل اطلاعات بین دو دستگاه با منبع کلاک یکسان استفاده میشود. نرخ انتقال اطلاعات SPI از USART بیشتر است.
ISP: در میکروکنترلر AVR، میتوان به کمک ISP، با استفاده از پروگرمر بدون جدا کردن میکروکنترلر از مدار، برنامه را روی آن بارگذاری کرد.
حافظه: ATmega16 دارای سه نوع حافظهی مختلف است.
- حافظهی فلش: فلش EEPROM یا حافظهی فلش برای ذخیرهسازی دادهها استفاده میشود و به راحتی به میتوان به صورت الکتریکی آن را پاکسازی کرد. این حافظه بدون وجود اتصال الکتریکی نیز اطلاعات را در خود نگه میدارد. میکروکنترلر ATmega16 دارای ۱۶ کیلوبایت حافظهی فلش EEPROM است.
- Byte Addressable EEPROM: این حافظه نیز مانند حافظهی فلش، اطلاعات را بدون اتصال الکتریکی در خود نگه میدارد. ATmega16 دارای ۵۱۲ بایت از این نوع حافظه است.
- SRAM: حافظهی SRAM یا حافظهی ثابت، حافظهای است که با قطع شدن جریان برق اطلاعات آن پاک میشود. میکروکنترلر ATmega16 دارای یک کیلوبایت SRAM داخلی است که توسط CPU و برخی قطعات دیگر میکروکنترلر استفاده میشود.
پایههای ATmega16
برخی پایههای مهم میکروکنترلر ATmega16 به شرح زیر هستند:
VCC: ولتاژ تغذیهی دیجیتال
GND: زمین
PORT A (PA0 … PA7): پایههای PORT A میتواند به عنوان ورودیهای آنالوگ استفاده شود. همچنین اگر از مبدل آنالوگ به دیجیتال استفاده نشود، مانند پورتهای ورودی/خروجی هشت بیتی عمل میکند.
PORT B، PORT C و PORT D: این پایهها، همگی به عنوان پورتهای ورودی/خروجی هشت بیتی عمل میکنند.
RESET: این پایه برای اجرای ریست سخت افزاری است. اگر این پایه به زمین متصل شود، میکروکنترلر ریست میشود.
XTAL1 و XTAL2: این پایهها برای اتصال به نوسانساز کریستال خارجی هستند. میکروکنترلر ATmega16 میتواند تا فرکانس ۱۶ مگاهرتز در صورت استفاده از کریستال خارجی کار کند.
پایههای ۳۰ تا ۳۲: اگر قصد استفاده از مبدل آنالوگ به دیجیتال داریم، این پایهها را به ولتاژ مرجع خود متصل میکنیم.
منابع: ENGINEERSGARAGE و MEDIUM و KANDA