آموزش کار با میکروکنترلر های AVR: مقدمه
مدتی پیش در tabriz.io بخشی را تحت عنوان آکادمی فنی ایجاد کردیم. از هم اکنون می خواهیم در این بخش، دوره آموزشی استفاده از میکروکنترلر های AVR را آغاز کرده و قدم به قدم پیش ببریم.
AVR، نامیست که تمامی دانشجویان رشته های مهندسی برق و الکترونیک و مهندسی سختافزار آن را شنیدهاند. این نشان تجاری، به گروهی از میکروکنترلر ها اطلاق میشود که بنا به معماری سخت افزاری و ویژگی های فنی خود، انتخاب اول برای بسیاری از پروژه های آموزشی دانشجویی، دوره های آموزش مبانی الکترونیک و روباتیک و بسیاری از پروژه های سختافزاری محسوب میشوند. از امروز در آکادمی فنی tabriz.io، قصد داریم از ابتدای راه، روش راه اندازی، برنامه نویسی و توسعه میکروکنترلر های AVR را قدم به قدم فرا بگیریم.
قبل از هر چیز، اجازه دهید مشخص کنیم که این دوره آموزشی به چه صورتی ارائه می شود و قرار است به درد چه کسانی بخورد. برای آن که بتوانید از این دوره استفاده کنید، احتیاجی به پیش نیاز های تخصصی مثل تسلط به زبان های برنامه نویسی و طراحی سختافزار الکترونیکی ندارید، چون قرار است این موارد را به تناسب نیاز در طول دوره مرور کنیم. مهم ترین موارد لازم، علاقه و اعتماد به نفس برای شروع و انرژی برای ادامه هستند. در صورتی که با مفاهیمی بسیار ابتدایی مثل وظیفه پردازنده و حافظه موقت و دائمی و مفهوم بیت و بایت آشنایی دارید و می خواهید با دنیای جدیدی که تلاقی الکترونیک و برنامه نویسی است آشنا شوید، آماده شوید که میخواهیم شروع کنیم!
خب، سؤالی که ممکن است در ابتدا برایتان پیش آمده باشد، این است که اصلاً میکروکنترلر چیست؟ میکروکنترلر ها چیپ های فیزیکی هستند که از پردازنده مرکزی، حافظه رم، حافظه Flash، پورت های ورودی و خروجی و در کل، هر چیزی که برای ساخت یک کامپیوتر مورد نیاز است، تشکیل شدهاند. ابعاد میکروکنترلر های رایج به ندرت از یکی دو سانتی متر مربع بالاتر میرود، و قدرت آن ها هم متناسب با اندازه آن هاست. البته ممکن است توان پردازشی و منابع ذخیره سازی آن ها به نظر اندک بیاید، اما کاملاً برای وظیفه ای که برای آن ساخته شده اند مناسب است. احتمالاً تا کنون حدس زده اید که در عمل، میکروکنترلر ها ترکیبی از سختافزار و نرمافزار هستند، یعنی شما با زبان برنامه نویسی مناسب، دستورات مورد نظرتان را نوشته و کامپایل میکنید، دستوراتتان را در حافظه میکروکنترلر آپلود میکنید و میکروکنترلرتان با قرار گرفتن در مدار الکترونیکی، دستورات را اجرا میکند.
اگر میخواهید در مورد کاربرد های این ابزار بدانید، باید بگوییم که درون تقریباً تمامی ابزار های هوشمند ریز و درشتی که در اطرافمان هستند، میکروکنترلر به کار رفته، از پروژه های سختافزاری رنگارنگ KickStarter و لوازم الکترونیکی مجهز به اینترنت اشیاء گرفته تا ماشین های لباسشویی هوشمند و حتی پرینتر های سه بعدی که دست بر قضا اخیراً ساختنشان حسابی در کشورمان باب شده است. در واقع، هر جایی که به قدرت پردازشی زیادی نیاز نبوده و کنترل چند قطعه سخت افزاری و ارسال و دریافت داده های کم حجم، کار را راه بیندازد، تنها گزینه موجود استفاده از میکروکنترلر است.
می دانید، دنیای میکروکنترلر ها دنیای بزرگ و گسترده ایست. توسعه دهندگان نرمافزار و وب، بر این موضوع واقفند که دنیای برنامهنویسی، چه پیچیدگی ها و تنوع ها و البته چه لذت هایی دارد. اگر به این ها، پیچیدگی ها و لذت های دنیای الکترونیک را هم اضافه کنید، می بینید که نمی توان در عرض چند هفته، همهی چم و خم برنامه نویسی و توسعه سخت افزار را آن هم به صورت هم زمان یاد گرفت، اما به شما قول می دهیم که با حفظ سادگی، این مسیر را قدم به قدم طی کنیم.
این را هم اضافه کنیم که میکروکنترلر ها برای ارتباط با دنیای خارج، پورت USB و صفحه نمایش ندارند، در عوض از استاندارد های ارتباطی دیگری استفاده میکنند که همه این روش ها از طریق پین ها (پایه های فلزی که به بدنه شان متصل شده است) اجرا میشوند. می توانید از استاندارد های ارتباط سریال برای اعمال “پالس” های شناخته شده استفاده کنید، یا خودتان به صورت دستی، پالس ایجاد کنید. اگر این اصطلاحات برایتان نامأنوس هستند نگران نباشید، در ادامه به طور کامل به بحث این موارد و ورودی و خروجی ها خواهیم پرداخت.
![AVR Microcontroller](http://www.kosmodrom.com.ua/pic/TQFP44.jpg)
یک میکروکنترلر در پکیج SMD
حال که کمی با ماهیت میکروکنترلر آشنا شدیم، باید بدانیم که AVR چیست و چرا میکروکنترلر های AVR را برای این دوره انتخاب کردهایم. میکروکنترلر ها انواع مختلفی با معماری های مختلف دارند. در صورتی که دانشجوی رشته مهندسی برق باشید، به احتمال زیاد نام هایی مثل ۸۰۵۱، ARM و PIC به گوشتان خوردهاند. قصد نداریم کل تاریخچه میکروکنترلر ها و ویژگی های فنی انواع مختلف آنها را بررسی کنیم، اما بد نیست اگر به طور خلاصه با رایج ترین انواع آن ها آشنا شوید.
شناخته شده ترین انواع میکروکنترلر ها، با نام های ARM، PIC و AVR مشخص میشوند. تفاوت این سه گروه در معماری سختافزاری، منابع سخت افزاری، روش برنامه نویسی، میزان پایداری و اصطلاحاً نویز پذیری و مواردی از این قبیل هستند. میکروکنترلر های ARM، از دو دسته دیگر در سطح بالاتری قرار می گیرند. توان پردازشی بالایی داشته و حافظه زیادی در اختیار کاربر قرار میدهند. همچنین، این میکروکنترلر ها ۳۲ بیتی بوده و نویز پذیری بسیار کم تری نسبت به انواع دیگر دارند. در واقع، برای پروژه های تجاری و سطح بالا، ARM انتخاب اول مهندسان محسوب میشود. انواع PIC و AVR، قدرت و پایداری کم تری داشته و در عوض، قیمت ارزانتری دارند. اکثر تفاوت های مابین معماری های PIC و AVR، مربوط به حوزه هایی میشوند که قصد نداریم فعلاً آن ها را بررسی کنیم. مثلاً پردازنده PIC تنها میتواند ۲۵۶ بایت حافظه رم را به طور مستقیم مدیریت کند، در حالی که پردازنده AVR، قادر است تا ۶۴ کیلوبایت حافظه را بدون مشکل آدرس دهی کند.
اما چرا AVR را انتخاب کردیم؟ واقعیت این است که علاوه بر مزیت های فنی، حداقل در ایران AVR بسیار بیشتر مورد استفاده قرار میگیرد. این یعنی منابع رفع اشکال، رفع خطا، کد های آماده آموزشی و سختافزار و نرمافزار های سازگار بسیار بیشتری برای AVR پیدا خواهید کرد. و البته با یادگیری صحیح و کامل نحوه کار با میکروکنترلر های AVR، خواهید توانست به سادگی کار با سختافزار های پیچیده تر مثل ARM را فرا بگیرید.
میکروکنترلر های AVR، ساخته شرکت Atmel بوده و خود به دسته های مختلفی مانند ATxmega، ATmega، ATtiny و AT90S تقسیم میشوند که هر یک مزایا و معایب مختص خود را دارند. برای مثال، ATxmega قدرت و انعطاف بیشتری داشته و قیمت بالاتری دارد، در حالی که ATtiny، قیمت فوقالعاده پایین و قدرت کمتری نسبت به ATmega و ATxmega داشته و با توجه به توان پردازشی خود، برای پروژه های کوچک انتخاب مناسبیست. در این دوره، ما از یک میکروکنترلر AVR ATmega32A استفاده خواهیم کرد که از تمامی امکانات مورد نیازمان بهره میبرد، کار با آن ساده بوده و قیمت مناسبی نیز دارد.
![AVR ATmega32](http://home.roboticlab.eu/_media/images/avr/avr_atmega32_dip.jpg)
میکرو کنترلر ATmega32 در پکیج DIP
اجازه دهید سخن کوتاه کنیم و با بیان تجهیزات مورد نیاز برای اولین جلسه، مقدمه را به پایان برسانیم. با توجه به اینکه قرار است با سخت افزار کار کنیم، باید تجهیزاتی در اختیار داشته باشید تا به مرور که در دوره پیش می رویم، یادگیری های خود را در عمل مورد آزمایش قرار دهید و از تسلط خود اطمینان پیدا کنید. البته ممکن است بدون این تجهیزات هم بتوانید کاملاً موارد گفته شده را فرا گیرید، یا حتی از نرمافزار های شبیه ساز مانند Proteus استفاده کنید (در پایان دوره، به نحوه کار با این شبیه ساز خواهیم پرداخت)، اما هیچ چیز جای تجربه عملی را نمیگیرد. بنابراین، بهتر است برای جلسه بعد، تجهیزات زیر را در اختیار داشته باشید:
- برد بورد (Bread Board)
- سیم برد بورد یا سیم جامپر
- میکروکنترلر AVR ATmega32A پکیج DIP
- مقاومت ۱۰ کیلو اُهم
- مقاومت ۱ کیلو اُهم
- مقاومت ۲۲۰ اُهم
- سوئیچ ۴ پایه
- ال ای دی (LED) شیشهای
- نمایشگر کاراکتری ۱۶×۲
- پروگرامر AVR USB ASP
علاوه بر این قطعات، نیاز به یک محیط برنامه نویسی در کامپیوتر و نرمافزاری برای انتقال کد های آماده شده به میکروکنترلر (اصطلاحاً پروگرمینگ) هستیم. به عنوان محیط برنامه نویسی، از CodeVisionAVR نسخه ۳ و برای پروگرم کردن میکروکنترلر، از نرمافزار ProgISP استفاده خواهیم کرد.
در صورتی که در حال حاضر تجهیزات گفته شده را ندارید، میتوانید آن ها را از فروشگاه های الکترونیک فیزیکی یا آنلاین تهیه کنید. در جلسه بعد، نحوه کار با این قطعات را نیز به طور مختصر توضیح داده و کار با میکروکنترلر های AVR را شروع میکنیم.
این هم از مقدمه دوره آموزشی کار با میکروکنترلر های AVR. امیدواریم که این دوره برایتان کاربردی باشد و از آن لذت ببرید. پس تا هفته بعد و اولین جلسه، بدرود!
پس بقیه جلسات چی شد
ممنون دوست خوبم از بابت این مقاله و زحمتی که میکشید.
عالی
مقالتون خیلی خوب بود