در سال 1980 شرکت اینتل نخستین میکروکنترلرها را با نام 8051 و با معماری معروف Harvard Architecture 8051 به بازار عرضه نمود و از آن تاریخ به بعد، میکروکنترلرها انقلاب عظیمی را دنیای الکترونیک و صنایع مربوط به آن ایجاد کردند.
همزمان با سایر پیشرفتهای تکنولوژی میکروکنترلرها نیز در طول زمان دچار تغییر و تحول شدند و امروزه ما میکروهایی مانند AVR ،ARM و PIC را داریم که در مقایسه با نمونههای اولیه بسیار بهینهتر و در عین حال کممصرفتر هستند. ظرفیتها و قابلیتهای بیشتری دارند و استفاده از آنها به مراتب سادهتر است چرا که در آنها از به روزترین پروتکلهای ارتباطی مانند USB ،I2C ،SPI ،CAN و … استفاده میشود. در کنار اینها، ظهور مواردی چون بوردهای رزبریپای و آردوینو نیز دیدگاهها در مورد توانمندی و قابلیتهای میکروکنترلرها را حتی بیشتر از قبل متحول ساخت. بوردی مانند رزبریپای دیگر نه تنها یک میکروکنترلر بلکه یک میکروکامپیوتر محسوب میشود.
این آموزش اولین جلسه از یک مجمومهی آموزشی در مورد میکروکنترلرهای PIC است که به شما کمک میکند از زوایای مختلف با این خانواده از میکروها آشنا شوید و کار کردن با آنها را بیاموزید. مطالعهی این مجموعه را به تمام کسانی که مقدمات مدارهای الکترونیکی را گذرانده و مترصد فرصتی برای یادگیری میکروکنترلرها و استفاده از آن در ساخت مدارهای کاربردیتر بودهاند، توصیه میکنیم.
شاید بپرسید چرا باید از میکروهای PIC شروع کنیم؟ به نظر ما و بسیاری از افراد حرفهای در این زمینه، خانوادهی میکروهای PIC یک انتخاب مناسب برای شروع پیمودن این راه هستند. چرا که اولا دارای فرومهای آموزشی و پشتیبانی بسیار زیادی هستند و در ثانی یادگیری مفاهیم آنها مانند پایهای عمل میکند که قرار گرفتن بر روی آن ، یادگیری مفاهیم سایر میکروکنترلرها را سادهتر میکند.
پیش رفتن با این مجموعه آموزشها هم برای کارآموزان مبتدی مناسب خواهد بود و هم برای کارآموزان با سطح متوسط، چرا که سعی کردهایم پروژهها را از ساده به پیچیده پیش ببریم. بنابراین از خوانندگان این انتظار را نداریم که از قبل دانش بخصوصی دربارهی میکروکنترلر ها داشته باشند. ما این جا هستیم تا به تمام سوالات شما در این زمینه پاسخ دهیم و همین که با مفاهیم مقدماتی الکترونیکی آشنایی داشته باشید کافی خواهد بود. روال این است که در تمام قسمتها ابتدا یک بخش آموزش تئوری و توضیحی داریم، سپس شبیهسازی (simulation) و در انتها پروژهی عملی. و در هیچ کدام از این پروژه ها از بوردهای آماده و بخصوص استفاده نمیکنیم و هر مداری که نیاز داشته باشیم را با استفاده از یک بورد سوراخدار معمولی میسازیم. پس تردید نکنید و هر هفته بخشی از زمانتان را با ما همراه باشید تا وارد دنیای میکروکنترلرها شویم.
بسیار خب؛ بیایید این جلسه را با مقدمهای از میکروکنترلرهای PIC و برخی نرمافزارهایی که برای راهاندازی آنها استفاده میشوند شروع کنیم.
ویدئویی که در انتهای این جلسه قرار دارد را هم ببینید تا با طریقهی نصب و راهاندازی نرمافزارهای MPLABX ،XC8 و Proteus آشنا شده و نگاهی نیز به محتویات درون کیت پروگرمر PICkit3 programmer داشته باشید.
آشنایی با معماری میکروکنترلر PIC و کاربردهای آن
این خانواده از میکروکنترلرها در سال 1993 توسط شرکت Microchip Technologies ارائه شدند. هدف اولیه از ساخت آنها این بود که به عنوان قطعهای درونی از کامپیوترهای PDP یا Programmed Data Processor استفاده شوند و تمام پریفرالهای جانبی آن کامپیوترها به واسطهی این قطعه با هم اینترفیس داشته باشند. در واقع نام آنها نیز از همینجا گرفته شد: Peripheral Interface Controller یا به اختصار PIC. به مرور و پس از آن شرکت میکروچیپ سریهای مختلف و متنوع دیگری نیز از این IC تازه متولد شده ارائه نمود به گونهای که در موارد بسیاری کاربرد پیدا کردند؛ از پروژههای سادهای مانند کنترل روشنایی تا موارد پیچیدهتر.
اما هر میکروکنترلری باید براساس یک معماری خاص طراحی و ساخته شود. یکی از مشهورترین معماریهایمورد استفاده Harvard Architecture است. میکروکنترلرهای PIC نیز برپایهی همین معماری طراحی و ساخته شدهاند و به همین دلیل به گروه میکروهای کلاسیک 8051 تعلق دارند. در این جا بد نیست قدری بیشتر با این معماری آشنا شویم.
میکروکنترلر PIC16F877A را در نظر بگیرید. این میکرو از یک CPU داخلی، تعدادی پورت I/O، مموری، مبدلهای A/D (آنالوگ به دیجیتال و بالعکس)، تعدادی تایمر و کانتر، واحد تولید وقفه (interrupts)، درگاههای ارتباط سریال، اسیلاتور و ماژول CCP تشکیل شده است و همانطور که پیداست در مجموع برای کسانی که میخواهند به تازگی وارد این وادی شوند یک IC نسبتا کامل و قدرتمند محسوب میشود. بلوک دیاگرام کلی این میکرو PIC را در تصویر زیر ببینید.
CPU یا واحد پردازش مرکزی
هر میکروکنترلر یک Central Processing Unit) CPU) دارد که وظیفهی آن انجام عملیاتهای ریاضی، گرفتن تصمیمات منطقی و نیز انجام اموری است که با مموری در ارتباط هستند. به واسطهی داشتن چنین نقشی، CPU به نوعی هماهنگ کنندهی RAM با سایر پریفرالهای میکروکنترلر به حساب میآید. اما در درون خود این واحد پردازشی چه چیزهایی قرار دارد؟
- یک ALU یا Arithmetic Logic Unit؛ با کمک آن محاسبات ریاضی و تصمیمات منطقی را انجام میدهد.
- یک MU یا Memory Unit؛ از آن برای ذخیره کردن دستورات پس از انجام شدنشان استفاده میکند. طبیعتا ظرفیت این MU تعیین کنندهی این خواهد بود که سایز برنامهای که میتوان روی آن میکروکنترلر ریخت، چقدر میتواند باشد.
- یک CU یا Control Unit؛ به عنوان یک باس ارتباطی بین CPU و سایر بخشهای میکرو عمل میکند. این باس کمک میکند که دستورات و دادهها پس از پردازش شدن در رجیسترهای مخصوص بتوانند دریافت (fetch) شوند.
حافظهی RAM
حافظهی رم (Random Access Memory) بخشی است که سرعت میکروکنترلر ما را تعیین میکند. درون این واحد مجموعههایی از رجیسترها وجود دارند که هرکدام وظیفهای بخصوص برعهده دارند و در مجموع میتوان آنها را به دو گروه تقسیمبندی کرد:
- رجیسترهای عمومی یا GPR
- رجیسترهای خاص منظوره یا SFR
همانطور که از نام آنها قابل حدس است، از رجیسترهای GPR برای انجام توابع عمومی مانند جمع، تفریق و امثالهم استفاده میشود. معمولا این عملیاتها در قالبهای 8 بیتی انجام میشوند و تمام رجیسترهایی که در این گروه قرار دارند هم قابلیت خواندن توسط کاربر و هم قابلیت نوشته شدن را دارند. نکتهای که در مورد این رجیسترها وجود دارد این است که موظف به انجام یک تابع مشخص و از پیش تعیین شده نیستند و هرچیزی را که نرمافزار از آنها بخواهد و در محدودهی توابع عمومی باشد انجام میدهند.
در مقابل رجیسترهای SFR هستند که از آنها برای انجام توابع خاص و بعضا پیچیده استفاده میشود. توابعی که ممکن است بعضا به عملیاتهای 16 بیتی نیز نیاز داشته باشند. نکتهی مهم در مورد آنها این است که فقط قابل خواندن هستند و کاربر نمیتواند چیزی بر روی آنها بنویسد. چرا که در زمان ساخت و تولید انجام وظیفه و تابعی مشخص به آنها محول شده است و در حین استفاده از میکرو تنها میتوانند نتایج آن تابع به خصوص و از پیش تعیین شده را برای ما تولید کنند. نتایج این توابع بخصوص به ما کمک خواهند کرد که عملیاتهای دیگرمیکرو را انجام دهیم.
حافظهی ROM
این حافظه جایی است که برنامهی ما در آن ذخیره میشود و تعیین کنندهی حداکثر سایز برنامه نیز هست به همین دلیل به آن حافظهی برنامه (Read Only Memory) نیز میگویند. زمانی که میکروکنترلر در حال کار کردن است، برنامهای که از قبل در حافظهی ROM ریخته و ذخیره شده است، دستور به دستور در کلاک سایکلهای متوالی اجرا میشود. بنابراین کاربر تنها در زمانی میتواند به این حافظه دسترسی داشته و روی آن چیزی بنویسد که در حال برنامه ریختن روی میکرو باشد، در زمان کار، میکرو دیگر در دسترس نیست و به یک حافظهی فقط خواندنی تبدیل میشود.
حافظهی EEPROM
EEPROM یا (Electrically Erasable Programmable Read Only Memory) یکی دیگر از واحدهای حافظه است که در حین اجرای برنامه، مقادیر میتوانند در آن نگهداری شوند. تفاوت آن با دیگر مموریها در این است که مقادیر نگهداری شده بر روی آن تنها با دخالت روشهای الکتریکی پاک میشوند و این بدان معناست که در صورتی که دخالت الکتریکی صورت نگرفته باشد، حتی در زمان خاموش شدن و خاموش بودن میکرو نیز این اطلاعات حفظ خواهند شد. این حافظه را معمولا کوچک و با ظرفیتی در مقیاس KB میسازند و مقادیری که در طول اجرای برنامه ممکن است تولید شده و بعدا مورد نیاز باشند را در آن ذخیره میکنند.
حافظهی فلش
این حافظه نیز از نوع PROM، یعنی فقط خواندنی و برنامهپذیر است. تفاوت آن با مورد قبلی در این است که بارها و بارها میتوان به راحتی آن را پاک کرد و اطلاعات جدیدی وارد آن نمود. معمولا میکروهای PIC از این نوع حافظه دارند.
پورت های ورودی/خروجی
- مثلا میکروی PIC16F877A که از آن نام بردیم، دارای 5 عدد پورت با نامهای A ،B ،C ،D و E است.
- پورت A از نوع 16 بیتی، پورت E از نوع 3 بیتی و بقیه از نوع 8 بیتی هستند.
- بسته به تنظیمات رجیستر TRIS، هرکدام از این پورت ها میتوانند به عنوان ورودی یا خروجی (I/O) مورد استفاده قرار گیرند.
- جدا از اینکه میتوانند به عنوان ورودی و خروجی استفاده شوند، میتوان از آنها برای منظورهای خاص مثلا در پروتکل SPI، اعمال توابع وقفه و PWM نیز استفاده کرد.
باس
باس (Bus) به مجموعهای از سیمها و وایرها سامان یافته گفته میشود که وظیفه دارند بین CPU،RAM و ورودی/خروجیها ارتباط برقرار کنند.
اگر از نوع Data Bus باشد وظیفهی آن حمل و جابهجایی دادههاست.
و اگر از نوع Address Bus باشد، وظیفهی آن جابهجا کردن آدرسهای حافظه از پریفرالهای مختلف به CPU است.
از طرفی درگاههای ورودی/خروجی نیز با پریفرالهای خارجی اینترفیس دارند. مثلا پروتکلهای UART و USART که هر دو پروتکلهای ارتباط سریال هستند و از آنها برای برقراری ارتباط بین میکرو و ماژولهای خارجیای مانند GSM ،GPS، بلوتوث، IR و … استفاده میشود.
انتخاب یک میکروکنترلر PIC برای مطالب آموزشی که در پیش رو داریم
میکروکنترلرهای PIC که توسط شرکت میکروچیپ ساخته میشوند به طور کلی به چهار خانوادهی بزرگ تقسیم میشوند. هرکدام از این خانوادهها قطعات مختلفی در درون خود دارند که باعث شده است ویژگیها متمایزی با سایز گروهها داشته باشند.
- خانوادهی اول؛ (PIC10 (10FXXX: شناخته شده به عنوان گروه Low End .
- خانوادهی دوم؛ (PIC12 (PIC12FXXX: گروه Mid-Range (میان رده) نامیده میشوند.
- خانوادهی سوم؛ (16FXXX)PIC16 .
- خانوادهی چهارم؛ (PIC 17/18 (18FXXX.
از آنجایی که قصد ما آموزش کار با میکروهای PIC است، بهتر است نوعی را انتخاب کنیم که تقریبا در تمام دنیا شناختهشده، متداول و در دسترس است. این IC به خانوادهی سوم یعنی 16Fها تعلق دارد و نام کامل آن PIC16F877A است. در تمام آموزشهای این مجموعه از همین میکرو استفاده خواهیم کرد چرا که تقریبا تمام ویژگیهای پیشرفتهای که با آنها سروکار داریم مثلا SPI، I2C و UART را دارد. اما اگر در حال حاضر شما میکرویی در دسترس دارید که این امکانات را ندارد، فعلا جای نگرانی نیست و میتوانید در مراحل بعدی تهیه کنید چرا که ما مرحله به مرحله جلو خواهیم رفت و در نهایت به جایی میرسیم که از تمام این ویژگیها استفاده میکنیم.
پس از انتخاب IC ، همواره مهمترین کار این است که به سراغ دیتاشیت (datasheet) آن رفته و با ریز جزییات و ویژگیهای آن میکرو دقیقتر آشنا شویم. بسیار خب ، در اینجا نیز همین کار را میکنیم.
اگر به دیتاشیت این میکرو مراجعه کنیم، میبینیم در آن نوشته شده است که این میکرو دارای 3 عدد تایمر است. دو تا از این تایمرها از نوع پیشتقسیمکننده (pre-scaler) 8 بیتی هستند و یکی از نوع 16 بیتی. از این تایمرها میتواند برای توابع زمانبندی مورد نیاز در برنامه استفاده کرد. همچنین میتوانند به عنوان کانتر نیز استفاده شوند.
همچنین معلوم میشود که این میکرو دارای امکانات Capture Compare and PWM) CCP) نیز هست که باعث میشوند میکرو قادر باشد سیگنال PWM نیز بسازد و سیگنالهای فرکانسی دریافت شده را بخواند، و یا اینکه دراین دیتاشیت قید شده است که همانطور که گفتیم، این میکرو برای برقراری ارتباط با دیوایسهای بیرونی، دارای انواع پروتکلهای SPI ،I2C ،PSP و USART است.
در بحث موارد امنیتی نیز، ذکر شده است که این میکرو دارای ویژگی Brown-out Reset) BOR) نیز هست که با استفاده از آن میتوان میکرو را در حین برنامهریزی نیز ریست نمود. دارای ویژگی WDT (Watchdog Timer) نیز هست که یک تایمر مستقل برای ریست کردن میکرو در مواردی است که مورد نیاز باشد.
در بخش ویژگیهای آنالوگ میبینیم که این میکرو دارای ADC ده بیتی 8 کاناله است. معنای این ویژگی این است که این میکرو قادر است مقادیر آنالوگ را با رزولوشن 10 بیت، به مقادیر معادل دیجیتال آنها تبدیل کند و این کار را همزمان از طریق 8 کانال میتواند انجام دهد.
همچنین دارای دو واحد مقایسهگر (comparator) نیز در درون خود هست که با استفاده از آنها قادر است ولتاژ ورودی را مستقلا و بدون نیاز به خوانده شدن از طریق نرمافزار دریافت و مقایسه کند.
سری هم به قسمت ویژگیهای منحصر به فرد این میکرو بزنیم.
طبق اطلاعات توضیح داده شده، این میکرو دارای 100/000 سیکل پاککردن/نوشتن (erase/write) است. به تعبیر واضحتر شما میتوانید این میکرو را 100/000 بار پروگرم کنید. با استفاده از روش برنامهریزی ICSP، میتوان این میکرو را با استفاده از PICKIT3 به صورت مستقیم در مدار برنامهریزی کرد. دیباگ کردن آن نیز با روش In-Circuit Debug) ICD) امکانپذیراست.
در تصویر زیر شکل ظاهری پایههای این IC را میبینیم. در کنار هر پایه، نام و احیانا ویژگی آن مشخص شده است. این تصویر در اینترنت و در دیتاشیت میکرو وجود دارد اما حتیالامکان آن را در جایی قرار دهید که در دسترستان باشد چرا که در انجام پروژهها بسیار به آن مراجعه خواهیم کرد.
انتخاب نرمافزارهای مورد نیاز
نرمافزارهای مختلفی در بازار عرضه شدهاند که میتوان میکروهای PIC را با استفاده از آنها پروگرم کرد. افرادی وجود دارند که همچنان ترجیح میدهند از زبان اسمبلی برای برنامهنویسی این میکروها استفاده کنند. با این حال ما قصد داریم از بهروزترین و کاملترین نرمافزار و کامپایلری که خود شرکت میکروچیپ ارائه کرده است، استفاده کنیم.
برای پروگرم کردن این میکروها، ما اولا به یک Integrated Development Environment) IDE) نیاز داریم. عمل اصلی پروگرم کردن با استفاده از این محیط انجام میشود.
دوما به یک کامپایلر نیاز داریم. وظیفهی کامپایلر این است که برنامهای که ما نوشتهایم را به زبان قابل فهم برای میکرو (فایل HEX) تبدیل کند.
و در نهایت به یک Integrated Programming Environment) IPE) نیز نیاز داریم که فایل هگز تولید شده را به میکروکنترلر منتقل کند.
خب، حالا برای هر کدام از این سه ابزاری که نیاز داریم؛ ما به طور خاص نرمافزارهای زیر را انتخاب میکنیم.
برای IDE | ( MPLABX نسخهی 3.35) |
برای کامپایلر | XC8 |
برایIPE | (MPLAB IPE نسخهی 3.35) |
شرکت میکروچیپ هر سهی این نرمافزارها را به صورت رایگان عرضه کرده است و میتوانید آنها را به صورت مستقیم از سایت رسمی خودشان دانلود کنید. برای راحتی شما ما لینک هر کدام را نیز قرار دادهایم. پس از دانلود آنها را نصب کنید و اگر در حین نصب مشکلی داشتید، همانطور که در ابتدای این آموزش گفتیم، میتوانید به ویدئویی که در انتهای مطلب برای شما قرار دادهایم مراجعه کنید. در آنجا طریقهی نصب هر سه مورد را خواهید دید.
برای سیمولیشن نیز از نرمافزار PROTEUS استفاده میکنیم (عرضه شده توسط Labcenter). این نرمافزار میتواند کدهای نوشته شده در MPLABX را سیموله کند.
آمادگی برای کارهای سختافزاری پروژه
گفتیم که تمام آموزشهای ما در این مجموعه به یک کار عملی با سختافزار ختم میشوند. در واقع بهترین روش یادگیری کار با میکروکنترلرها و از جمله میکروی PIC، این است که کدها و مدار طراحی شده را در انتها بر روی سختافزار تست کنیم. اهمیت این کار در این است که نتایج حاصل شده از سیمولیشن در بسیاری اوقات چندان قابل اطمینان نیستند و ممکن است در عمل نتایجی خلاف آنها حاصل شود. کدهایی که در دنیای سیمولیشن و مدارهای شبیهسازی شده ممکن است بدون مشکل اجرا شوند، زمانی که در دنیای مدارهای واقعی آزمایش میشوند ممکن است از خود اشکالاتی بروز دهند که مختص جهان عملی است و در زمان شبیهسازی موضوعیتی ندارد. به همهی این دلایل ما ناگزیریم که همواره کدها را به صورت عملی و با میکروهای واقعی نیز تست کنیم تا از صحت کارکرد آنها اطمینان حاصل کنیم. در این آموزشها ما این تستهای عملی را به سادهترین حالت ممکن یعنی با یک بورد سوراخدار معمولی انجام میدهیم. برای بارگذاری کدها بر روی میکرو نیز به یک کیت PICkit 3 نیاز داریم. این چیپ که هم پروگرمر و هم دیباگر است، یک کیت کمقیمت و in-circuit است و میتوان آن را با یک کامپیوتر خانگی که بر روی آن MPLAB IDE (ورژن 8.2 یا بالاتر) نصب شده باشد، کنترل کرد. این کیت بخشی جداییناپذیر از مجموعه ابزارهای مهندسی برای توسعهی بردها محسوب میشود پس تهیه کردن آن حتما مفید خواهد بود. به بورد سوراخدار و دستگاه لحیم، میکرو کنترلر PIC از مدلی که نام بردیم، کریستال اسیلاتور، خازن و المانهای مداری از این قبیل نیز نیاز داریم.
بسیار خب، زمانی که نرمافزارها را نصب و نیازمندیهای سختافزاری را هم تهیه کردید، آماده هستیم تا وارد آموزش جلسات بعدی بشویم. منتظر قسمتهای بعدی باشید.
- منبع: ترجمه از سایت circuitdigest.com
امیدواریم این آموزش براتون مفید واقع شده باشه. توصیه میکنیم مقالات آموزش میکروکنترلرهای PIC را هم ببینید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
بسیار عالی