مقدمه
تا این بخش از آموزش متوجه شدیم که میکروکنترلرها انواع مختلفی دارند و بسته به نوع کاری که مورد نظر است ، یکی از خانواده های میکروکنترلرها که برای انجام آن مناسب تر است ، انتخاب می شود . مثلا اگر سرعت پردازش بسیار بالا بدون هنگ کردن و قابلیت تغییر کل برنامه در یک کاربرد خاص در یک پروژه نیاز باشد (مانند پروژه های نظامی و فرکانس بالا ) بهتر است به سراغ FPGA و انواع آنها رفت . اگر در یک پروژه سرعت نسبتا بالا و قابلیت پشتیبانی از انواع ارتباطات جانبی مانند پورت USB ، ارتباطات سریال و … مورد نیاز باشد (مانند استفاده در تلفن همراه ، تبلت ها ، پروژه های پردازش سیگنال ، تلویزیون ها و … ) بهتر است از میکروکنترلرهای ARM استفاده کرد . اگر در یک پروژه سرعت بالا مورد نظر نباشد و فقط درست و بدون نقص انجام شدن کار مورد نظر باشد (مانند پروژه های صنعتی ) از میکروکنترلرهای PIC استفاده می شود که در محیط های پرنویز مانند کارخانه ها بیشتر از آنها استفاده می شود . و در نهایت اگر در کاربردهایی معمولی و متوسط با قابلیت های متوسط ( مانند پروژه های دانشگاهی ، منازل و… ) مورد نظر باشد از میکروکنترلرهای AVR بیشتر استفاده می گردد . بنابراین یاد گرفتن میکروکنترلرهای AVR در مرحله اول ضروری است چرا که از نظر معماری و کاربردها ساده تر بوده و مباحث اصلی و پایه ای در این مرحله وجود دارد.
معرفی و تاریخچه ساخت
AVR خانوادهای از میکروکنترلر ها است که شرکت ATMEL ، آن را روانهٔ بازار الکترونیک کرده است. این میکروکنترلر های هشت بیتی به خاطر دارا بودن قابلیت برنامهنویسی توسط کامپایلر های زبانهای برنامه نویسی سطح بالا ، مورد توجه قرار میگیرند. این میکروکنترلر ها از معماری RISC برخوردارند. همچنین شرکت اتمل کوشیدهاست تا با استفاده از معماری پیشرفته و دستورهای بهینه، حجم کد تولید شده را پایین آورده و سرعت اجرای برنامه را بالا ببرد. یکی از مشخصات این نوع میکروکنترلر ها بهره گیری از تکنولوژی CMOS و استفاده از حافظههای کم مصرف و غیر فرار Flash و EEPROM است.
میکروکنترلر AVR در سال ۱۹۹۶ توسط شرکت ATMEL ساختهشد. معماری این میکروکنترلر توسط دانشجویان دکترای دانشگاه صنعتی نروژ Alf-Egil Bogen و Vegard Wollan طراحی شد. شرکت اتمل میگوید نام AVR یک مخفف نیست و به نام خاصی اشاره نمیکند اما به نظر میرسد که این نام مخفف Alf (Egil Bogen) and Vegard (Wollan)’s RISC processor است.
انواع میکروکنترلرهای AVR
این میکروکنترلرها دارای ۴ سری می باشند که هر سری کاربردها و ویژگی های خاص خود را دارد .
- سری ATtiny : میکروکنترلرهای کوچک ، کم مصرف و پرقدرت برای کاربردهای خاص می باشند که دارای حافظه Flash بین ۰٫۵ تا ۱۶ کیلوبایت و بسته بندی بین ۶ تا ۳۲ پایه هستند .
- سری ATMega : این سری دارای امکانات وسیع و دستورالعمل های قوی می باشد که دارای حافظه Flash بین ۴ تا ۵۱۲ کیلوبایت و بسته بندی بین ۲۸ تا ۱۰۰ پایه هستند .
- سری XMega : جدیدترین ، پرسرعت ترین و قوی ترین نوع هستند که امکانات بیشتری نیز دارند که دارای حافظه Flash بین ۱۶ تا ۳۸۶ کیلوبایت و بسته بندی ۴۴، ۶۴ و ۱۰۰ پایه هستند .
- سری AT90s : نوع توسعه یافته میکروکنترلر ۸۰۵۱ هستند که امکانات کمتری داشته و کمتر کاربرد دارند چرا که تقریبا منسوخ شده اند .
معماری و ساختار میکروکنترلرهای AVR
شکل زیر معماری میکروکنترلرهای AVR را نشان می دهد . به طور کلی یک میکروکنترلر AVR از نظر ساختار داخلی حداکثر دارای واحدهای زیر می باشد :
- واحد پردازش مرکزی CPU
- واحد حافظه برنامه Flash
- واحد حافظه داده EEPROM
- واحد حافظه داده SRAM
- واحد ورودی و خروجی I/O
- واحد کنترل کلاک ورودی
- واحد کنترل وقفه
- واحد تایمر و کانتر
- واحد مبدل آنالوگ به دیجیتال ADC
- واحد مقایسه کننده آنالوگ
- واحد تایمر سگ نگهبان
- واحد ارتباطات سریال SPI ، TWI و USART
- واحد برنامه ریزی و عیب یابی JTAG
هسته مرکزی CPU ( واحد پردازش مرکزی )
این واحد که بر مبنای معماری RISC ساخته شده است ، تمام فعالیت های میکروکنترلر را مدیریت کرده و تمام عملیات لازم بر روی داده ها را انجام میدهد . همچنین وظیفه ارتباط با حافظه ها و کنترل تجهیزات جانبی را بر عهده دارد . درون هسته AVR به تعداد ۳۲ رجیستر همه منظوره ، واحد محاسبه و منطق (ALU) ، واحد رمز گشایی دستور ID ، رجیستر دستورالعمل IR ، رجیستر شمارنده برنامه PC ، رجیستر وضعیت SREG و اشاره گر پشته SP قرار دارند .
واحد محاسبه و منطق (Arithmetic Logic Unit)
ALU در میکروکنترلر AVR به صورت مستقیم با تمام ۳۲ رحیستر همه منظوره ارتباط دارد. عملیاتهای محاسباتی با رجیسترهای همه منظوره در یک کلاک سیکل اجرا می شوند به طور کلی عملکرد ALU را می توان به سه قسمت اصلی ریاضیاتی، منطقی و توابع بیتی تقسیم بندی کرد در برخی از ALU های توسعه یافته در معماری میکروکنترلرهای AVR از یک ضرب کننده با قابلیت ضرب اعداد بدون علامت و علامتدار و نیز اعداد اعشاری استفاده شده است.
مفهوم ثبات یا رجیستر
رجیستر ها نوعی از حافظه های موقت هستند (مانند RAM ) که از فلیپ فلاپ ها ساخته می شوند و میتوانند ۸ بیتی ، ۱۶ بیتی ، ۳۲ بیتی یا بیشتر باشند. از رجیستر ها به صورت گسترده در تمام ساختار و واحد های میکروکنترلرها استفاده می شود . میکروکنترلرهای AVR هشت بیتی هستند بدین معنا که تمامی رجیستر ها در آن ، ۸ بیتی هستند. مهمترین مسئله که در هنگام برنامه نویسی میکروکنترلرها با آن مواجه هستیم نحوه صحیح مقدار دهی رجیسترهای آن میکروکنترلر می باشد . اگر میکروکنترلر را به یک کارخانه تشبیه کنیم که این کارخانه دارای بخشهای زیادی است و در هر بخش یک اتاق کنترل وجود دارد و در هر اتاق کنترل تعدادی کلیدهای کنترلی وجود دارد ، این کلیدهای کنترلی همان رجیسترها هستند که مهمترین وظیفه یک برنامه نویس شناختن این کلیدها و مقداردهی مناسب آنها در برنامه است .
رجیستر های عمومی General Purpose Registers
میکروکنترلرهای AVR دارای ۳۲ رجیستر همه منظوره هستند این رجیسترها قسمتی از حافظه SRAM میکروکنترلر می باشند . تعداد این رجیستر ها ۳۲ عدد بوده و از R0 تا R31 شماره گذاری می شوند . هر رجیستر دارای ۸ بیت است که به طور مستقیم با واحد ALU در ارتباط است . رجیستر های R26 تا R31 به منظور آدرس دهی غیر مستقیم ، در فضای حافظه داده و برنامه استفاده میشوند که به آن ها رجیستر های اشاره گر می گویند و به ترتیب به صورت XL ، XH ، YL ، YH ، ZL و ZH نامگذاری می شوند . یک امکان برای دو رجیستر جدا از هم فراهم شده است که بتوان توسط یک دستورالعمل خاص در یک سیکل کلاک به آن دسترسی داشت . نتیجه این معماری کارایی بیشتر کدها تا ده برابر سریع تر از میکروکنترلر های با معماری CISC است .
رجیستر دستور Instruction Register
این رجیستر که در هسته پردازنده قرار دارد کد دستور العملی را که از حافظه برنامه FLASH خوانده شده و باید اجرا شود را در خود جای می دهد .
واحد رمز گشایی دستور Instruction Detector
این واحد تشخیص می دهد کد واقع در IR مربوط به کدام دستور العمل است و سیگنال های کنترلی لازم برای اجرای آن را صادر می نماید .
رجیستر شمارنده برنامه Program Counter
این رجیستر در واقع شمارنده آدرس دستورالعمل های برنامه کاربر است و در هر مرحله به آدرس خانه بعدی حافظه فلش که باید اجرا شود اشاره می کند . یعنی با اجرای هر دستور العمل محتوای رجیستر PC یک واحد افزایش یافته و به آدرس دستور العمل بعدی اشاره می کند .
رجیستر وضعیت Status & Control Register
این رجیستر ۸ بیتی واقع در هسته اصلی میکرو بوده و بیت های آن تحت تاثیر برخی عملیات CPU فعال میشوند . این بیت ها به ترتیب از بیت ۰ تا بیت ۷ به صورت زیر هستند :
پرچم کری C : این پرچم هنگامی که عملیات محاسباتی کری دهد یک می شود
پرچم صفر Z : این پرچم هنگامی که نتیجه یک عملیات محاسباتی یا منطقی صفر شود فعال می شود
پرچم منفی N : این پرچم هنگامی که نتیجه یک عملیات محاسباتی یا منطقی منفی شود فعال می شود
پرچم سرریز V : این پرچم زمانی که نتیجه یک عملیات علامت دار نادرست شود(سرریز) فعال می شود
پرچم علامت S : این پرچم همواره نتیجه XOR بین دو پرچم N و V می باشد
پرچم نیم کری H : اگر هنگام عملیات جمع یک انتقال از بیت ۳ به ۴ در یکی از رجیستر های عمومی یا نتیجه نیم بایت پایین ( بیت های ۰ تا ۳ ) بزرگتر از ۹ باشد ، این پرچم فعال خواهد شد
بیت T : از این بیت در هنگام استفاده از دستورات اسمبلی BLD و BST به عنوان مقصد یا مبدا استفاده می شود .
بیت فعالساز وقفه سراسری I : در صورت یک بودن این بیت وقفه سراسری فعال می شود و در غیر این صورت هیچ وقفه ای رخ نمی دهد . این بیت در هنگام رخ دادن وقفه صفر و دوباره یک می شود
رجیستر اشاره گر پشته Stack Pointer
پشته قسمتی از فضای حافظه داده SRAM است که جهت ذخیره اطلاعات و معمولا در اجرای دستور فراخوانی ( CALL) و یا اجرای برنامه وقفه نیاز می باشد . همچنین به کمک دستورات اسمبلی PUSH و POP میتوان به این قسمت نفوذ داشت . اشاره گر پشته یا SP دارای ۱۶ بیت است و از دو رجیستر ۸ بیتی SPL و SPH تشکیل شده است . در ابتدا وقتی سیستم روشن می شود CPU از محل استقرار حافظه پشته اطلاعی ندارد ( پیش فرض SP=0 ) بنابراین باید آدرسی از حافظه SRAM که مربوط به فضای پشته است را به اطلاع سیستم رساند .
با اجرای دستور PUSH R0 ، محتوای رجیستر R0 با محتوای خانه ای از فضای پشته که SP به آن اشاره میکند جایگزین شده و بعد از آن SP یک واحد کاهش می یابد . همچنین با اجرای دستور POP محتوای حافظه پشته بیرون آمده و SP یک واحد افزایش می یابد .
نحوه عملکرد واحد CPU
در هنگام روشن شدن میکرو کنترلر یک مقدار از پیش تعیین شده در درون رجیستر PC قرار می گیرد که این مقدار از پیش تعیین شده همان آدرسی از حافظه فلش است که کد دستور اول در آن قرار دارد . سپس CPU فرآیند خواندن دستور العمل را انجام می دهد که به این مرحله Fetch می گویند . سپس CPU بعد از خواندن کد دستور آن را در رجیستر IR قرار می دهد تا واحد رمز گشایی دستور (ID) کد موجود در IR را تجزیه و تحلیل کرده و عملی که باید انجام گیرد را مشخص می کند ( Decode ) . سپس با ارسال سیگنال های کنترلی ، سایر داده های مورد نیاز دستورالعمل را فراخوانی و واکشی کرده ( Memory Fetch ) و سرانجام ALU عملیات مشخص شده را بر روی داده ها انجام می دهد ( Execute ) . در نهایت مقدار PC تغییر کرده و آدرس بعدی که باید اجرا شود در آن قرار میگیرد و چرخه ادامه می یابد .
نکته : برنامه نویس به رجیسترهای درون CPU کاری ندارد . رجیسترهای درون هسته مرکزی ، رجیسترهای خود سیستم هستند که هر یک وظیفه مشخصی دارند و مقدار آنها دائما تغییر می کند . رجیسترهای فوق الذکر فقط برای شناخت بهتر AVR و درک عملکرد این واحد معرفی شدند و در عمل یک برنامه نویس نیازی به استفاده از آن ندارد اما برای یک مهندس بهتر است فراتر از یک برنامه نویس باشد و درک عمیق تری از سخت افزار داشته باشد .
خط لوله Pipelining
مراحل اجرای یک دستور که توسط کاربر نوشته می شود به این صورت است که بعد از روشن شدن میکرو اولین آدرس حافظه فلش که حاوی اولین دستورالعمل است واکشی می شود . بعد از واکشی ترجمه یا رمز گشایی می شود ، معماری این میکرو به صورتی طراحی شده است که قابلیت واکشی (Fetch) ، رمز گشایی (Decode) و اجرای دستور (Execute) را به صورت پشت سر هم را دارد . به عبارت دیگر وقتی یک دستور در مرحله اجراست دستور بعدی در مرحله رمز گشایی و دستور بعد از آن در مرحله واکشی قرار دارد تا همزمان همه واحد ها بیکار نباشند و سرعت پردازش چند برابر شود . به طور کلی معماری پایپ لاین در پردازنده را می توان به خط تولید کارخانه تشبیه کرد طوری که وقتی خط تولید شروع به کار می کند هیچ کدام از بخش ها بیکار نمی مانند و هر کدام وظایف مربوط به خود را به طور مداوم انجام می دهند. در شکل زیر نحوه انجام پایپ لاین توسط میکرو نشان داده شده است . در سیکل اول کلاک ، تنها دستور اول از حافظه واکشی می شود ، در سیکل دوم کلاک ، دستور اول که واکشی شده بود ، به واحد رمزگشایی میرود و دستور دوم واکشی می شود . در سیکل سوم کلاک دستور اول وارد مرحله اجرا می شود در حالی که دستور دوم به واحد رمزگشایی میرود و دستور سوم واکشی می شود و همین طور این کار دائما تکرار می شود . pipelining یکی از مزیت های بسیار مهم معماری RISC محسوب می شود که باعث افزایش سرعت می شود . پایپ لاین در میکروکنترلر های مختلف میتواند مراحل متفاوتی داشته باشد میکروکنترلرهای با ۳ ، ۵ ، ۸ و حتی ۱۳ مرحله پایپ لاین نیز وجود دارند اما در میکروکنترلرهای AVR ، پایپ لاین فقط ۲ مرحله Fetch و Execute را دارد.
معماری حافظه در AVR
در میکروکنترلر های AVR از معماری “هاروارد” استفاده شده است بطوریکه در این معماری حافظه میکروکنترلر به دو قسمت حافظه برنامه ( از نوع Flash ) و حافظه داده ( از نوع EEPROM ) تقسیم می شود و هر کدام از این دو حافظه از گذرگاه مجزا استفاده میکنند . معماری هاروارد در مقایسه با معماری سنتی فون نیومن سریع تر است. شکل زیر تفاوت دو معماری را نشان می دهد .
حافظه داده SRAM
این حافظه جهت ذخیره سازی موقت اطلاعات در اختیار کاربر قرار می گیرد . این حافظه به طور مستقیم در اختیار CPU نمی باشد ، برای دستیابی به آن از یکی از ۳۲ رجیستر عمومی به عنوان واسط استفاده میشود . یعنی جهت انجام هر عملیات دیتا نمیتواند مستقیما از SRAM به ALU منتقل شود بلکه باید ابتدا به یکی از ۳۲ رجیستر عمومی برود و از آنجا به ALU منتقل شود . در نتیجه برای استفاده از SRAM جهت انجام عملیات زمان بیشتری صرف می شود.
حافظه داده EEPROM
این حافظه که توسط رجیستر های عمومی ۳۲ گانه با CPU در ارتباط است دائمی بوده و با قطع برق از بین نمی رود .از این حافظه میتوان در مواقعی که مقدار یک داده در برنامه مهم بوده و نباید با قطع برق یا ریست شدن از بین برود استفاده کرد .
حافظه برنامه FLASH
این حافظه دائمی پرسرعت برای ذخیره برنامه کاربر استفاده می گردد . در واقع حافظه فلش در میکروکنترلر به دو قسمت تقسیم شده است بخشی برای بوت شدن سیستم و بخشی برای برنامه کاربر مورد استفاده قرار می گیرد. فیوز بیت ها ( Fuse Bits ) و بیت های قفل ( Lock Bits ) نیز در قسمت بوت لودر حافظه فلش وجود دارند. در قسمت دیگر این حافظه برنامه کاربر وجود دارد که در هنگام کار میکرو خط به خط خوانده شده و اجرا می شود .
معرفی واحدهای جانبی دیگر
واحد ورودی/خروجی (Input/Output)
این واحد وظیفه ارتباط میکرو با محیط پیرامون را به صورت موازی (پاراللParallel) برقرار می کند . اساسا ارتباط میکرو با محیط پیرامون به دو شکل موازی و سریال صورت می گیرد . واحد ورودی/خروجی به صورت موازی و واحد ارتباط سریال به صورت سریال با محیط پیرامون میکرو در ارتباط است . این واحد که با آن پورت نیز گفته می شود ، دارای چند رجیستر و بافر است و در نهایت به صورت پایه(پینPin) از میکرو خارج می شود . در میکروکنترلرهای AVR با توجه به نوع و سری میکروکنترلر تعداد آنها بین ۱ تا ۱۰ پورت متفاوت می باشد . پورت ها در AVR به صورت PORTA ، PORTB ، PORTC و… نامگذاری می شود. هر پورت ۸ بیت دارد که به صورت PORTX.0 تا PORTX.7 نامگذاری می شود .
واحد کنترل کلاک ورودی
این واحد وظیفه تامین کلاک میکرو را بر عهده دارد . منابع کلاک میکرو به دو دسته منابع کلاک خارجی و کلاک داخلی تقسیم می شود . همانطور که می دانید پالس کلاک یک پالس منظم و دارای فرکانس ثابت است که تمامی واحد های میکرو با لبه های آن پالس کار می کنند . برای تولید پالس کلاک به دو چیز احتیاج می باشد یکی کریستال و دیگری اسیلاتور . خوشبختانه در این واحد هم اسیلاتور وجود دارد و هم کریستال اما بر حسب نیاز به داشتن فرکانس های مختلف احتیاج به اسیلاتور خارجی و یا کریستال خارجی نیز داریم . بنابراین منابع کلاک در میکروکنترلرهای AVR به صورت زیر است :
- منبع کلاک خارجی: در این حالت از اتصال منبع کلاک با فرکانس مشخص به پایه X1 میکرو استفاده می شود . در این حالت پایه X2 آزاد است .
- کریستال خارجی: در این حالت از اتصال یک کریستال با فرکانس مشخص و دو عدد خازن بین پایه های X1 و X2 استفاده می شود . جنس بلور این کریستال ها معمولا کریستال کوارتز است . در این حالت از اسیلاتور داخل میکرو استفاده می شود.
- RC اسیلاتور داخلی: RC اسیلاتور داخلی یک خازن و یک مقاومت است که با فرکانس مشخصی نوسان می کند. در این حالت هر دو پایه X1 و X2 آزاد است .
واحد تایمرها و کانترها ( Timers & Counters )
در این واحد از یک سخت افزار خاص چندین استفاده متفاوت می شود . این سخت افزار خاص شامل چند رجیستر و چند شمارنده هستند که کارایی های متفاوتی دارند . کاربرد این واحد به عنوان تایمر ، کانتر ، RTC و PWM می باشد . رجیستر اصلی مورد استفاده در این واحد رجیستر تایمر نام دارد . اگر یک پالس ورودی منظم ( مانند تقسیمی از پالس کلاک میکرو ) به این واحد اعمال کنیم رجیستر تایمر شروع به زیاد شدن کرده و در زمان مشخصی پر و سرریز می شود. بنابراین میتوان با تنظیم مناسب پالس ورودی به این واحد زمان های مختلف را ایجاد کرد. اگر پالس ورودی تایمر را طوری تنظیم کنیم که رجیستر تایمر هر یک ثانیه سر ریز شود ، در این صورت RTC یا زمان سنج حقیقی ساخته می شود. در زمان استفاده از RTC به کریستال ۳۲۷۶۸ هرتز که به کریستال ساعت معروف است نیاز داریم . اگر رجیستر تایمر را قبل از سر ریز شدن ریست کنیم ، در این صورت میتوان با اعمال پالس خروجی از میکرو یک PWM یا مدولاسیون پهنای عرض پالس را روی یکی از پایه های میکرو داشت . اما اگر پالس ورودی به این واحد نامنظم باشد ( مانند پالسی که از بیرون به پایه میکرو اعمال می شود ) در این صورت یک شمارنده تعداد پالسهای ورودی روی رجیستر تایمر ساخته می شود .
واحد تایمر سگ نگهبان Whatchdog
این واحد متشکل از یک رجیستر تایمر و یک اسیلاتور است که با فعالسازی آن رجیستر تایمر شروع به افزایش می کند تا اینکه سرریز شود. با سرریز شدن رجیستر تایمر سگ نگهبان میکروکنترلر ریست می شود. کاربرد این واحد جهت جلوگیری از هنگ کردن میکروکنترلر است . در پروژه های دارای اهمیت میکرو نباید هنگ کند زیرا ممکن است خطرات و عواقب بدی داشته باشد . این واحد وظیفه دارد در صورت هنگ نمودن میکروکنترلر بلافاصله آن را ریست کند تا در کسری از ثانیه میکرو دوباره شروع به کار نماید .
واحد کنترل وقفه Interrupt
در هنگام بروز وقفه ، پردازنده کار فعلی خود را رها کرده و به اجرای وقفه مورد نظر می پردازد . علت بوجود آمدن واحد کنترل وقفه این است که باعث می شود پردازنده کمتر درگیر شود . در حالتی وقفه وجود نداشته باشد ، پردازنده مجبور است طی فواصل زمانی مشخصی چندین بار به واحد مورد نظر سرکشی کرده و بررسی کند که دیتای خواسته شده از آن واحد آماده است یا خیر که اغلب آماده نبوده و وقت پردازنده تلف می شود . برای مثال فرض کنید که یک صفحه کلید به ورودی میکرو متصل است ؛ در حالت سرکشی پردازنده باید یکی یکی کلید های صفحه کلید را در فواصل زمانی مشخص سرکشی کند تا در صورت فشرده شدن یک کلید پردازش مورد نظر را انجام دهد ، اما در حالتی که واحد کنترل وقفه فعال باشد ، پردازنده آزاد است و تا زمانی که کلیدی زده نشده است پردازنده به صفحه کلید کاری ندارد . سپس در صورتی که کلیدی زده شود واحد کنترل وقفه یک سیگنال وقفه به پردازنده مبنی بر اینکه ورودی آمده است ارسال می کند تا پردازنده برای یک لحظه کار خود را رها کرده و به صفحه کلید سرویس می دهد ، کلیدی که زده شده را شناسایی کرده و پردازش مورد نظر را روی آن انجام می دهد.
واحد ارتباطی JTAG
JTAG کوتاه شده ی عبارت Joint Test Access Group ، یک پروتکل ارتباطی بر روی دستگاه ها می باشد که این توانایی را ایجاد می کند که بتوان برنامه نوشته شده موجود در میکرو را خط به خط اجرا نمود تا در صورت وجود اشکال در برنامه نویسی آن را برطرف ( عیب یابی debug ) کرد . همچنین میتوان توسط JTAG حافظه Flash ، EEPROM ، فیوز بیت ها و قفل بیت ها را برنامه ریزی ( پروگرام Program ) کرد .
واحد مبدل آنالوگ به دیجیتال ( ADC )
همانطور که میدانید تمامی کمیت های فیزیکی ، آنالوگ هستند . کمیت های آنالوگ برای پردازش توسط میکروکنترلر ابتدا می بایست تبدیل به دیجیتال شوند. تبدیل ولتاژ ورودی آنالوگ به کد دیجیتال متناسب با آن ولتاژ ورودی توسط این واحد انجام می پذیرد . مسائلی که در هنگام کار با این واحد درگیر آن هستیم یکی سرعت نمونه برداری و دیگری ولتاژ مرجع VREF است . ولتاژ مرجع در این واحد به عنوان مرجعی برای سنجش ولتاژ آنالوگ ورودی به کار می رود به صورتی که بازه ی مجاز ولتاژ ورودی بین ۰ تا VREF است. همچنین سرعت نمونه برداری مسئله ی مهمی است که در بروزرسانی سریعتر اطلاعات نقش دارد .
واحد مقایسه کننده آنالوگ
یکی دیگر از امکانات موجود در میکروکنترلرهای AVR واحد مقایسه آنالوگ می باشد که با استفاده از آن می توان دو موج آنالوگ را با هم مقایسه کرد. عملکرد این قسمت مشابه عملکرد آپ امپ در مد مقایسه کننده می باشد با این تفاوت که در صورتی که ولتاژ پایه مثبت از پایه منفی بیشتر باشد ، خروجی مقایسه کننده یک می شود.
سوالی که ممکن است بوجود آید این است که با وجود مبدل آنالوگ به دیجیتال دیگر چه نیازی به این بخش می باشد؟ در جواب باید گفت سرعت عملکرد این بخش در مقایسه با مبدل انالوگ به دیجیتال بسیار بیشتر بوده و همین سرعت باعث احساس نیاز به چنین بخشی را فراهم کرده است.
واحد ارتباطات سریال
تبادل دیتا با محیط خارجی میکروکنترلر علاوه بر واحد ورودی/خروجی که به صورت موازی است ، می تواند از طریق این واحد به صورت سریال انجام گیرد . مهمترین مسئله در ارتباطات سریال یکی پروتکل ارتباطی و دیگری سرعت ارسال ( Baud Rate ) است. پروتکل های ارتباطی سریال که توسط میکروکنترلرهای AVR پشتیبانی می شود عبارتند از :
- پروتکل spi : دارای سرعت بالا می باشد . از طریق این پورت میکروکنترلر را میتوان پروگرام کرد .
- پروتکل USART : سرعت پایین تری دارد. برای مسافت های طولانی و ماژول های ارتباطی مناسب است.
- پروتکل TWI : یا پروتکل دوسیمه بیشتر برای ارتباط با المانهای جانبی سرعت پایین است .
در پایان شکل بهتری از واحد های یک میکروکنترلر و ارتباط آنها با یکدیگر را مشاهده می کنید . همانطور که از شکل نیز پیداست در پردازنده های AVR پهنای ارتباطی داده ( Data Bus ) دارای ۸ بیت و پهنای ارتباطی برنامه ( پهنای دستورالعمل ها ) دارای ۱۶ بیت می باشد.
انواع زبان های برنامه نویسی میکروکنترلرهای AVR
زبان های برنامه نویسی نظیر اسمبلی ، C ، C++ ، بیسیک و . . .
هر کدام از این زبان های برنامه نویسی یک نرم افزار مترجم ( کامپایلر ) مخصوص به خود را دارند که برنامه در درون آن نرم افزار توسط برنامه نویس نوشته می شود و سپس از طریق سخت افزاری به نام پروگرامر روی میکروکنترلر برنامه ریزی می شود . برای برنامه ریزی میکروکنترلر ها مستلزم دیدگاهی بر تلفیق سخت افزار و نرم افزار هستیم . پس از سالها فکر و بررسی در زمینه برنامه ریزی این نوع المان ها و استفاده از زبان های برنامه نویسی مختلف ، زبان برنامه نویسی C به عنوان یکی از بهترین و منعطف ترین زبان های برنامه نویسی در این زمینه معرفی شد . امروزه به جرات میتوان گفت که زبان برنامه نویسی C را می توان برای برنامه ریزی هر نوع میکروکنترلری به کار برد . زبان برنامه نویسی C با قرار گرفتن در سطح میانی بین زبانهای برنامه نویسی دیگر ، دسترسی کاربران را هم به بخش های سطح پایین و سطح بالا در برنامه نویسی فراهم میکند .
از کامپایلرهای معروف میتوان به AVR Studio ، CodeVision AVR و Bascom AVR اشاره کرد . ما از کامپایلر زبان C به نام CodeVision AVR استفاده می کنیم زیرا استفاده از آن به دلیل وجود ساختار CodeWizard (جادوگر کد ) راحت تر است.
برنامه ریزی (پروگرام) کردن میکروکنترلرهای AVR
بعد از نوشتن برنامه درون میکروکنترلر نوبت به انتقال آن به میکرو می شود که به آن اصطلاحا پروگرام کردن یا برنامه ریزی می گویند. وسیله ای که به کامپیوتر متصل می شود و توسط آن میکروکنترلر پروگرام می شود را اصطلاحا پروگرامر ( Programmer ) گویند.
برنامه ریزی میکروکنترلرهای AVR به سه روش صورت می گیرد : برنامه ریزی سریال ، موازی و JTAG
برنامه ریزی به روش موازی سریعتر انجام می گیرد اما نحوه انجام کار آن پیچیده تر است. ضمنا تمامی میکروکنترلرهای AVR از برنامه نویسی موازی و برنامه ریزی JTAG پشتیبانی نمی کنند. بنابراین برنامه ریزی سریال که از طریق رابط سریال spi صورت می گیرد و تمامی میکروکنترلرهای AVR از آن پشتیبانی می کنند بهترین گزینه است .
در برنامه ریزی سریال حافظه فلش از طریق رابط spi پروگرام می شود و برنامه نوشته شده کاربر درون میکرو قرار می گیرد. برقراری ارتباط بین PC و میکروکنترلر توسط سخت افزار جانبی به نام پروگرامر صورت می گیرد. پروگرامرها انواع مختلفی دارند. پروگرامرها از طریق پورت USB ، پورت سریال و پورت پرینتر می توانند به PC وصل شده سپس میکروکنترلر روی پروگرامر قرار میگیرد و اینگونه پروگرام می شود. ساده ترین پروگرامر stk300 نام دارد که به پورت پرینتر کامپیوترهای PC وصل می شود. بهترین نوع پروگرامرهای AVR آن هایی است که از رابط USB استفاده می کند. معروفترین پروگرامرهای موجود در بازار که به پورت USB متصل می شوند میتوان پروگرامرهای stk500،USBasp و isp mk2 را نام برد.
ISP چیست ؟
یکی از راههای پروگرام کردن میکروکنترلر های AVR روش ISP یا In System Programming می باشد. در این روش میکروکنترلر درون سیستم ( مدار ) پروگرام می شود. بدین معنی که به جای خارج کردن میکروکنترلر از مدار و قرار دادن آن روی پروگرامر ، میکروکنترلر در درون مدار و توسط پورت استاندارد ISP ، پروگرام می شود. در حقیقت در این روش از همان برنامه ریزی سریال با استفاده از پروتکل Spi استفاده می شود که تحت اتصال استاندارد ISP به صورت شکل زیر درآمده است .
تهیه پروگرامر مناسب
ساده ترین نوع پروگرامر میکروکنترلرهای AVR ، Stk200 می باشد که تنها به یک پورت LPT یا همان پورت پرینتر DB25 و چند مقاومت برای ساخت نیاز دارد. بنابراین خودتان به راحتی می توانید قطعات آن را تهیه و این پروگرامر را درست کنید. در شکل زیر این پروگرامر و نحوه اتصال آن به میکروکنترلر نشان داده شده است. در یک طرف آن پورت پرینتر قرار دارد که به کامپیوتر متصل می شود و در طرف دیگر میکروکنترلر قرار دارد که باید پروگرامر مطابق شکل به پایه های مشخص شده از میکرو متصل گردد. در این شکل چون میکروکنترلر از مدار خارج نمی شود ، روش پروگرام کردن ISP می باشد.
تذکر مهم : به دلیل اینکه دسترسی به پورت پرینتر سخت است و در هنگام کار با آن مشکلات ایجاد می گردد و ضمن اینکه لپتاپ ها و بسیاری از وسایل از پورت پرینتر پشتیبانی نمی کنند ، توصیه می شود یکی از پروگرامرهای USB را از بازار تهیه نمایید.
با کلیک بر روی تصویر زیر به بخش بعدی آموزش AVR بروید
در صورتی که این مطلب مورد پسندتان بود لایک و اشتراک گذاری فراموش نشود.
دیدگاه (6)
عالی و کامل…اما نیازی به یادگیری کامل تمام اطلاعات بالا نیست.هر چند اگه بدونیم خیلی بهتره….مرررسی از اموزش های عالی و کاملتون…… 🙂
سپاسگزارم دوست عزیز مطالبی که به نظرم ضروری و مهم رسیده بیان شده
سلام و خسته نباشید مرسی از اطلاعات بسیار مفیدتون
چرا در فرایند کاری cpu که شامل مراحل زیر است
Fetch
Decode
memory fetch
execute
حافظه موقت sram هیچ نقشی ندارد؟؟
سلام خیلی ممنونم
چرا نقش دارد در مرحله memory fetch داده ها از حافظه های Flash یا Sram جمع آوری و برای اجرا در اختیار CPU قرار می گیرد.
سلام خسته نباشید ببخشید شما پروژه برنامه نویسی دستگاه جوجه کشی انجام میدید؟متوسط قیمت چند؟
سلام دوست عزیز در خصوص انجام پروژه لطفا درخواست خود را از طریق ایمیل یا تلگرام مطرح نمایید