درسنامه آموزشی دانش فنی پایه مکاترونیک کلاس دهم مکاترونیک (صنعت)
پودمان 2: برنامه نویسی
مقدمهای بر میکروکنترلرها
با پیشرفت علم و تکنولوژی در زمینه الکترونیک، مدارهای مجتمع با عنوان میکروپروسسور (ریز پردازندهها) وارد عرصه الکترونیک شدند. در سالهای قبل از 1971 میلادی، طراحان سیستمهای الکترونیک، سیستمهای موردنظر خود را با استفاده از مدارهای مجتمع دیجیتال و یا آنالوگ و یا ترکیبی از آنها طراحی میکردند. در طراحیهای حرفهای و عمده، طرح این سیستمها جهت ساخت، به شرکتهای سازنده مدارات مجتمع ارائه میشد تا طراحی و ساخته شوند.
پس از این سالها شرکتهایی از قبیل Zilog اقدام به ساخت میکروپروسسورها بهصورت عمومی نمودند تا کاربران بتوانند با در اختیار داشتن آن طرحهای موردنظر خود را به صورت مستقل طراحی و پیادهسازی کنند. این شرکت اولین میکروپروسسور ساخت خود را با نام Z80 روانه بازار نمود. یکی از معایب طراحی با پروسسورها، نیاز به ادوات و بخشهای جانبی متعدد، بهصورت مجزا از هم بود. در شکل زیر دیاگرام بلوکی یک سیستم میکروپروسسوری را مشاهده میکنید.
سختافزار میکروکنترلر
در سال 1981 با عرضه محصول جدیدی از شرکت Intel با عنوان میکروکنترلر، مشکلات مربوط به سیستمهای پروسسوری مرتفع گردید، شرکت Intel این محصول خود را تحت عنوان خانواده 8051 معرفی و روانه بازار نمود.
این محصول تمام بخشهای مورد نیاز به عنوان یک رایانه کوچک (از قبیل حافظه موقت، حافظه دائم، درگاههای ورودی و خروجی، تایمر/کانتر، مبدل آنالوگ به دیجیتال، ارتباط سریال و...) را در خود جای داده بود و از اینرو در بسیاری موارد از سیستمهای میکروکنترلری با عنوان "سیستمهای نهفته" نام برده میشود. بر خلاف میکروکنترلرهای امروزی که در انواع مختلفی از نظر برنامهریزی موجود هستند، میکروکنترلرهای اولیه فقط یک بار قابل برنامهریزی بودند (One Time Programmable) که این ویژگی، با کلمه اختصاری OTP شناخته میشود.
در شکل زیر چند نمونه میکروکنترلر AVR، محصول شرکت اتمل (ATMEL) را مشاهده میکنید.
پایههای خروجی برخی میکروکنترلرهای AVR

تعاریف
تعریف بیت (Bit)
کوچکترین واحد حافظه است که میتواند یک عدد باینری را در خود ذخیره نماید. بنابراین یک بیت میتواند عدد 0 یا 1 را در درون خود ذخیره نماید.
تعریف بایت (Byte)
هر 8 بیت که کنار هم قرار گرفته باشند تشکیل یک بایت را میدهند. با توجه به اینکه هر بیت میتواند 0 یا 1 باشد، بنابراین یک بایت میتواند از (00000000) هشت عدد 0 تا (11111111) یعنی هشت عدد 1 به خود مقدار بگیرد که معادل آن در مبنای دهدهی از 0 تا 255 است.
برای سنجش میزان حافظههایی که متشکل از تعداد زیادی بایت میباشند، از پیشوندهایی قبل از نام بایت استفاده میگردد (کیلو، مگا، گیگا نمونههایی از این پیشوندها میباشند). جدول زیر، نامها، حروف اختصاری و مقادیر پیشوندهای بایت را نشان میدهد.
تعریف درگاه (PORT)
درگاه یا پورت، وظیفه ارتباط میکروکامپیوتر با دستگاههای جانبی را بر عهده دارد. با توجه به اینکه این درگاهها قابلیت ورودی یا خروجی بودن در حالت دیجیتال را دارا هستند. به طور کلی اگر در میکروکنترلرها این پورتها در حالت دیجیتال پیکربندی شوند به آنها ورودی/خروجی دیجیتال یا همان (Digital I/O) گفته میشود.
تعریف گذرگاه (BUS)
وظیفه انتقال سیگنال دیجیتال را بر عهده دارد و در عمل چیزی جز مجموعه سیمهای کنار هم قرار گرفته نیست. در هر میکروکنترلر 3 نوع گذرگاه وجود دارد که وظیفۀ انتقال داده، آدرس و سیگنالهای کنترلی را بر عهده دارد.
انواع گذرگاه
گذرگاه داده (Data Bus)
جهت نقل و انتقال دادهها بین ماژولهای میکرو بهکار میرود و در میکروکنترلرها اصطلاحاً عرض گذرگاه حداقل 8 بیت است. هرچه تعداد خطوط گذرگاه بیشتر باشد سرعت انتقال دادهها بیشتر و توان پردازش میکروکنترلر بیشتر خواهد بود.
گذرگاه آدرس (Address Bus)
در سیستمهای رایانهای اعماز میکروکامپیوترها و میکروکنترلرها، شناسایی، انتخاب و ارتباط با هر وسیله (حافظهها، I/Oها) توسط CPU مستلزم اشاره به آدرس آن وسیله میباشد، این آدرس باید برای هر کدام از بخشهای جانبی میکروکنترلر منحصربهفرد باشد. هرچه تعداد خطوط آدرس بیشتر باشد، میکروکنترلر میتواند تعداد مکانهای بیشتری را آدرسدهی کند، در نتیجه میتواند به تعداد بیشتری I/O و مقدار بیشتری حافظه و... دسترسی داشته باشد.
گذرگاه کنترل (Control Bus)
شامل خطوط کنترلی دستگاههای موجود مثل Read ،Write و غیره است. هرچه تعداد خطوط کنترلی بیشتر باشد، میکروکنترلر امکانات کنترلی بیشتری در اختیار برنامهنویس قرار میدهد.
تعریف میکروکامپیوتر
یک سیستم میکروکامپیوتر حداقل شامل پردازنده (CPU)، حافظهموقت (RAM)، حافظهدائمی (ROM) و (درگاههای ورودی/خروجی) میباشد که بهوسیله گذرگاهها بههم ارتباط دارند و همه مجموعه روی یک برد اصلی (Main board) قرار میگیرند. تمام کامپیوترهای خانگی امروزی مانند PCها و لپتاپها از این نوع هستند که علاوهبر واحدهای فوق قطعات و واحدهای دیگری نیز به آنها اضافه شده است مانند شکل زیر:
تعریف میکروکنترلر (Microcontroller)
هنگامیکه قطعات سازنده یک میکروکامپیوتر در یک تراشه و در کنار هم قرار گیرند، یک میکروکنترلر بهوجود میآید. در واقع میکروکنترلر یک آیسی شامل یک CPU به همراه مقدار مشخصی از حافظههای ROM و RAM و یا Flash، پورتهای ورودی/خروجی و همچنین واحدهای جانبی دیگری نظیر تایمر، رابط سریال، مبدل آنالوگ به دیجیتال و ... میباشد. به عبارت دیگر میکروکنترلر یک تراشه الکترونیکی قابلبرنامهریزی است که استفاده از آن باعث افزایش سرعت و کارایی مدار و در مقابل، کاهش حجم و هزینه مدار میگردد.

معرفی برخی رجیسترهای کاربردی AVR
ریجستر Data Direction
این رجیستر همانطور که از نامش مشخص است رجیستر جهت داده پورت بوده و تعیین میکند که پورت ورودی است یا خروجی. بدین صورت که اگر روی هرکدام از بیتهای این رجیستر یک نوشته شود پین متناظر آن پورت خروجی بوده و در غیر این صورت ورودی میباشد.
به عنوان مثال اجرای دستور $DDRA = 0b10111101;$ در برنامه، وضعیت ورودی/خروجی پورت A را بهصورت زیر پیکربندی مینماید.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | DDRA |
| 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | نام بیت |
| خروجی | ورودی | خروجی | خروجی | خروجی | خروجی | ورودی | خروجی | جهت داده |
رجیستر PORTx
عملکرد این رجیستر بستگی به جهت دادۀ پورت دارد. در صورتی که به عنوان خروجی پیکربندی شده باشد، صفر یا یک منطقی در این رجیستر، سطح منطقی پایه خروجی معادل آن را تعیین میکند و در صورتیکه ورودی باشد با یک کردن هر بیت، مقاومت Pull-up داخلی مربوط به آن پین فعال میشود.
به عنوان نمونه در ادامه مثال قبل، با اجرای دستور $PORTA = 0b11010100;$ وضعیت پورت بهصورت زیر خواهد بود:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | شماره بیت |
| 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | DDRA |
| 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | PORTA |
| خروجی با سطح منطقی صفر | ورودی بد.ن مقاومت Pull-up | خروجی با سطح منطقی یک | خروجی با سطح منطقی صفر | خروجی با سطح منطقی یک | خروجی با سطح منطقی صفر | ورودی با مقاومت Pull-up | خروجی با سطح منطقی یک | جهت داده |
رجیستر PINx
برای خواندن مقدار هر پین باید محتویات این رجیستر خوانده شود. بهعنوان مثال چنانچه PORC را قبلا بهصورت ورودی پیکربندی کرده باشیم و مقدار رجیستر PINC برابر $0b11010000$ باشد، سطح منطقی اعمال شده به پین بهصورت زیر میباشد:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | PINC |
| 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | نام بیت |
| صفر | صفر | صفر | صفر | یک | صفر | یک | یک | جهت داده |
فعالسازی پایههای میکروکنترلر به عنوان خروجی
در بسیاری از کاربردهای میکروکنترلرها، تمامی محاسبات و زمانسنجیها و شمارش وقایع و .... به فعالکردن و یا غیرفعالکردن یکی از خروجیها منتهی میشود، از اینرو شاید بهتر باشد، اولین تجربههای کاری که میتوان با یک میکروکنترلر انجام داد فعالسازی یک یا چند خروجی باشد. در ادامه این بخش، مثالهایی از چند کاربرد راهاندازی پایههای میکروکنترلر به عنوان ورودی/خروجی دیجیتال را مشاهده خواهید کرد.
با توجه به حالت حافظه قفلشونده (Latch) در میکروکنترلرها، از زمان صدور یک دستور در مورد وضعیت یک بیت و یا یک پایه ورودی/خروجی دیجیتال، تا ارسال دستور جدید به همین بیت و یا پایه، آخرین وضعیت آن ثابت باقی خواهد ماند. اثر این دستورات، تا زمان باقی بودن تغذیه میکروکنترلر ادامه خواهد داشت.
با توجه به تصویر بالا، برای خاموش شدن LED باید دستور جدیدی جهت این کار به رجیسترهای مربوط به پایه موردنظر ارسال شود. مسئله قابلتوجه این است که این دستور باید به اندازه کافی با دستور قبلی فاصلهزمانی داشته باشد، در غیراینصورت چشم انسان قادر به مشاهده روشن شدن LED نبوده و در کسر کوچکی از ثانیه LED روشن شده و با دستور بعدی بلافاصله خاموش میشود.
فعالیت 1 (صفحه 63 کتاب درسی)
با توجه به شکل زیر:

الف) برنامهای بنویسید که در آن LEDها بر روی 4 بیت اول از پورت C خاموش و 4 بیت بعدی آن روشن شده و در همان حالت باقی بمانند.
ب) هنرجویان برنامهای بنویسند که LEDها برروی پورت C بهصورت فعال پایین، یک در میان (کنترل بیتی خروجی) روشن شده و در همان حالت باقی بماند.
ج) عدد AA هگزادسیمال یا معادل باینری آن (10101010) را در مدار صفحۀ قبل روی پورت C قرار دهید و نتیجه را مشاهده کنید.
د) عدد 55 هگزادسیمال یا معادل باینری آن (01010101) را در مدار صفحۀ قبل روی پورت C قرار دهید و نتیجه را مشاهده کنید.
کاربرد تأخیر در تغییر وضعیت منطقی پایههای خروجی
یکی از روشهای مرسوم برای برنامهریزی زمانی دستورات در میکروکنترلرها، استفاده از دستورات ایجاد تأخیر در برنامه است. با استفاده از دستورات تأخیر دهنده، میکروکنترلر در وضعیت فعلی باقی مانده و پس از پایان زمان تأخیر، دستور بعدی را اجرا میکند.
در نرمافزار CODEVISION در محدوده میلیثانیه از دستور ()delay_ms و در محدوده میکروثانیه از دستور ()delay_us برای ایجاد تأخیر زمانی استفاده میشود. برای استفاده از این دستور در برنامه، لازم است فایل سرآمد delay.h در ابتدای برنامه فراخوانی شود. در داخل پرانتز، عدد موردنظر برای تأخیر در برنامه نوشته میشود. این عدد میتواند از صفر تا 65535 مقدار داشته باشد. شکل زیر نحوه کاربرد این دستور را در بین خطوط برنامه نشان میدهد.
بهعنوان مثال، میتوان برای پر کردن مخازن مایعات، دستور باز شدن شیر برقی را با استفاده از یک پایه خروجی میکروکنترلر صادر نموده و پس از گذشت مدت زمان مشخص، دستور بستهشدن آن را صادر نمود. به یک چنین سیستم کنترلی، سیستم کنترل حلقه باز گفته میشود، در این مثال اگر فشار مایع و یا مقدار اولیه آن در مخزن و ... تغییر کند ممکن است مخزن پر نشود و یا مایع از آن سر ریز کند. (بیان این مثال، صرفاً جنبه آموزشی داشته و به جهت مطرح کردن اشکالات سیستمهای کنترلی حلقه باز مطرح گردید، به طور معمول، کاربردهایی از این دست، بر مبنای سیستم کنترل حلقه بسته طرح میگردند که در ادامه همین بخش به آن پرداخته شده است.
فعالیت 2 (صفحه 66 کتاب درسی)
الف) هنرجویان با کمک مربی برنامهای بنویسند که یک LED بر روی بیت صفر از پورت B بهصورت فعال پایین، روشن شده و پس از 2 ثانیه روشن ماندن خاموش شده و در همان حالت باقی بماند.
ب) برنامهای بنویسید که پس از گذشت 5 ثانیه از شروع برنامه، یک LED برروی PORTB.0 روشن شده و در همان حالت باقی بماند.
ج) در یک میکسر مواد شیمیایی در یک کارخانه تولید رنگ، لازم است شیر برقی ماده A به مدت 1 دقیقه و شیر برقی ماده B به مدت 30 ثانیه باز باشد، پس از گذشت مدت زمان 2 دقیقه جهت ترکیب مواد، شیر تخلیه میکسر به مدت 2 دقیقه باز باشد تا مواد ترکیب شده از میکسر خارج شود و دوباره همین روند تکرار شود، برنامهای مناسب برای عملکرد این میکسر رنگ بنویسید.
د) برنامهای مناسب برای کنترل وضعیت چراغ راهنمایی یک چهارراه بنویسید که فقط دارای دو وضعیت سبز و قرمز در هر سمت بوده و پس از گذشت 30 ثانیه وضعیت آن تغییر کند و این کار را بهصورت مداوم ادامه دهد.
کنترل وضعیت پایههای خروجی با توجه به وضعیت پایههای ورودی
یکی دیگر از کاربردهای میکروکنترلرها در ارتباط با ورودی/خروجیهای دیجیتال، اعمال کنترلی با استفاده از دادن فرمانهای خارجی به میکروکنترلرهاست.
زمانی که دکمه خاموش/روشن یک نمایشگر رایانه و یا تلفن هوشمند و یا دکمه کنترل سرعت بر روی سیستم تهویه اتوماتیک را میفشاریم، در حقیقت با تغییر وضعیت پایههای ورودی، سیستم کنترلی را وادار به بررسی و تصمیمگیری بر اساس فرمانهای داده شده مینماییم.
با مشاهده عملکرد مدار درمییابیم که پس از یکبار فشردن کلید، پایه خروجی فعالشده و تا زمانی که دستور غیرفعالشدن را به آن نداده باشیم، در وضعیت فعال باقی خواهد ماند، در برنامه مثال 2-3 دستوری برای غیرفعالکردن پایه خروجی در نظر گرفته نشده است.
بهطور کلی اینکه با فعال شدن یک ورودی، چه اتفاقی باید بیفتد و یا اینکه اثر آن اتفاق تا چه زمانی برقرار باشد و یا اینکه با غیر فعال شدن مجدد آن چه اتفاقی بیفتد (یا تغییری در روند برنامه رخ ندهد) کاملاً به نیازهای پروژه و تعریف پروژه موردنظر بستگی دارد.
این تجهیزات در حقیقت رسیدن مایع به یک سطح مشخص را تشخیص میدهند، علت بهکاربردن لفظ "سنسور" (Sensor) در مورد این نوع سوئیچها نیز همین موضوع است. شکلهای زیر برخی از انواع این تجهیزات را نمایش میدهد.
فعالیت 3 (صفحه 69 کتاب درسی)
الف) برای کنترل یک شیر برقی روشویی، برنامهای بنویسید که با تحریک (Active Low) یک پایه ورودی میکروکنترلر توسط سنسور مادون قرمز، یک پایه خروجی فعال شده (Active Low) و شیر برقی را باز نگه دارد و تا 2 ثانیه بعد از قطع شدن تحریک ورودی فعال بماند.
ب) یک مخزن ویژه نگهداری مایع، دارای دو سنسور، یکی در قسمت بالای مخزن (High Level) و یکی در قسمت پایین مخزن (Low Level) و نیز دو شیر برقی در بالا و پایین مخزن است. با توجه به شکل و نکات زیر، برنامهای بنویسید که در صورت فعالشدن سنسور سطح پایین مخزن، شیر برقی توسط یک پایه خروجی میکروکنترلر باز شده و با فعال شدن سنسور سطح بالای مخزن، پایه خروجی غیرفعال و شیر برقی بسته شود.
تغییر وضعیت (Toggle) خروجی با تحریک یک پایه ورودی
فعالیت 4 (صفحه 70 کتاب درسی)
الف) با اضافه کردن دستور while به برنامه مثال 2-4، آن را بازنویسی نموده و با حفظ عملکرد صحیح برنامه، مقدار تأخیر در (خط هفدهم) برنامه را به حداقل رسانیده و یا آن را حذف نمایید.
ب) تغییرات مناسب در مدار مثال 2-4، برای کنترل چپ گرد/راست گرد یک موتور DC اعمال نموده (استفاده از یک رله با دو جفت کنتاکت باز/بسته و ترانزیستور راهانداز رله ...) و با استفاده از برنامه همین مثال (بدون تغییر) عملکرد مدار جدید را مشاهده نمایید.
ج) برنامهای بنویسید که در آن با فعال شدن یک پایه ورودی، اگر پس از گذشت 2 ثانیه هنوز پایه ورودی فعال باقی مانده بود، یک پایه خروجی با هر بار تکرار این عمل، بین حالتفعال و غیرفعال تغییر وضعیت دهد (عملکرد خاموش و روشن تلفن همراه و ...).
نمایش اعداد بر روی نمایشگر هفت قطعهای (7seg)
در بسیاری از پروژههای میکروکنترلری، نمایش اطلاعات ورودی، وضعیت و یا نتایج محاسبات، کمک بسیار بزرگی به روند کنترل و بررسی چگونگی عملکرد سیستم مینماید، یکی از مناسبترین نمایشگرها، نمایشگرهای LED هستند. در شکل زیر برخی از انواع این نمایشگرها را مشاهده میکنید.
همانطور که در شکل مشاهده میکنید برخی از این نمایشگرها متشکل از چند کاراکتر ویژه ثابت هستند و برخی دیگر دارای کاراکترهایی هستند که قابلیت نمایش تعدادی حروف و اعداد را دارا هستند، هر یک از این کاراکترها بهطور معمول دارای هفت و یا چهارده قطعه است که هر یک با استفاده از یک LED روشن میشوند. ترتیب خاموش و یا روشن بودن این LEDها، کاراکتر موردنظر را بهوجود میآورد.
شمارنده تک رقمی 0 تا 9 با استفاده از نمایشگر هفت قطعهای
با وجود پیشرفت در زمینه تولید انواع نمایشگرهای رنگی با کیفیت بالا، مزیت ارزانبودن، وضوح بالا و قابلیت تشخیص از فاصله دور نسبت به سایر نمایشگرها، استفاده از نمایشگرهای هفت قطعهای هنوز هم در بین طراحان و تولیدکنندگان رواج دارد، شکل زیر مربوط به یک شمارنده تک رقمی از 0 تا 9 با فاصله زمانی یک ثانیه است.
فعالیت 5 (صفحه 72 کتاب درسی)
الف) با استفاده از نمایشگر هفت قطعهای دو رقمی، یک شمارنده از 0 تا 99 طراحی نموده و عملکرد آن را مشاهده کنید.
ب) با استفاده از سه نمایشگر هفت قطعهای، کلمه "ALI" را نمایش دهید.
کنترل توانالکتریکی DC بار، با استفاده از تکنیک PWM
یکی از قابلیتهای میکروکنترلرها کنترل توان DC بهوسیله سیگنال PWM است (کنترل دیجیتال). این تکنیک بهسبب کاهش توان تلفاتی در قطعات قدرت سیستمهای کنترل توان DC دارای اهمیت ویژه است. در این شیوه از کنترل سوئیچ قدرت که نقش تأمین توانالکتریکی بار را دارد، اصولاً در حالت قطع و اشباع کار میکند همین مسئله موجب کاهش قابلتوجه توان تلفاتی، خصوصاً در بارهای پرمصرفی مانند موتورهای الکتریکی، سلونوئیدها، هیترها، لامپهای التهابی و ... میگردد.
در یک سیستم کنترل توان DC با تکنیک PWM، انرژی منتقل شده به بار، با تغییر نسبت زمان روشن بودن به زمان خاموشی قطعه قدرت کنترل میشود. این نسبت با نام دوره چرخهکار (Duty Cycle) یا به اختصار D.C شناخته میشود.
تعریف Duty Cycle
در یک موج مربعی، نسبت زمان روشن بودن $({t_{on}})$ به کل زمانتناوب $(T = {t_{on}} + {t_{off}})$ با عنوان Duty Cycle نام برده میشود.
تولید موج PWM با فرکانس مشخص
عملکرد واحد PWM در میکروکنترلرها به اینصورت است که با شروع شمارش رجیستر timerX خروجی این واحد به حالت (1) منطقی میرود و تا زمانی که مقدار رجیستر تایمر (TCNTX) با مقدار مقایسه OCRX برابر شود در وضعیت (1) منطقی باقی میماند، بهمحض برابری مقدار تایمر با رجیستر مقایسهای OCRX (رجیستر مقدار PWM موردنظر)، خروجی این واحد تغییر وضعیت داده و به حالت (0) منطقی میرود و تا زمان سرریز رجیستر TCNTX (رجیستر کنترلی تایمر/کانتر موردنظر) در حالت (0) منطقی) باقی میماند.
زمان (1) بودن پالس خروجی ${({t_{on}})}$ برابر ضرب مقدار OCRX در طول زمان یک کلاک پالس ورودی به واحد تایمر است و کل زمان تناوب یک پالس (T) برابر حداکثر ظرفیت عددی رجیستر TCNTX در طول زمان یک کلاک پالس ورودی واحد تایمر است.
$\left\{ \begin{gathered} {{\text{t}}_{on}}{\text{ = OCRX }} \times {\text{Clock Pulse time}} \hfill \cr {\text{T = CNTX top value}} \times {\text{Clock Pulse time}} \hfill \cr \end{gathered} \right.$
${\text{T = }}\frac{1}{{{f_{out}}}}$
${f_{out}} = \frac{1}{{{\text{TCNTX top value}} \times {\text{Clock Pulse time}}}} = \frac{{{\text{Clock Pulse Frequency}}}}{{{\text{TCNTX top value}}}}$
با استفاده از مطالب بالا (و رابطه عکس فرکانس با زمان) میتوان گفت فرکانس کلاک ورودی، بر مقدار حداکثر رجیستر تایمر مربوطه تقسیم میشود. چون به همین تعداد پالس نیاز است تا رجیستر از صفر به حداکثر رسیده و به ازای هر بار سر ریز این رجیستر، یک پالس در خروجی ظاهر میشود.
اگر وضعیت خروجی را در حالت Non Inverting قرار داده باشیم پالس خروجی مستقیماً در پایه خروجی OCRX در میکروکنترلر ظاهر خواهد شد و در صورت انتخاب وضعیت Inverting قرینه این پالس در خروجی (مکمل D.C) ظاهر خواهد شد.
بهطور مثال اگر پالسی با درصد D.C معادل 25 درصد در واحد PWM ساختهشده باشد، با انتخاب وضعیت Inverting در خروجی یک پالس 75 درصد در خروجی ظاهر میشود.
مبدل آنالوگ به دیجیتال (ADC)
عمده روشهایی که برای تبدیل آنالوگ به دیجیتال وجود دارند عبارتاند از: تبدیل آنی یا Flash، روش تقریبهای متوالی یا Successive Approximation Register (SAR) مبدلهای Delta-Encoded Adc or Counter RampDigital Ramp ،Pipelined Adc ،Delta Sigma و غیره که از این میان میکروکنترلرهای AVR از روش تقریبهای متوالی استفاده میکنند.
دیاگرام بلوکی روش تقریبهای متوالی
بلوک دیاگرام سادهشدۀ این مبدل بهصورت زیر است:

برخی از مشخصات ADC در میکروکنترلر AVR
± 2 LSB Absolute Accuracy
65 - 260 μs Conversion Time
Up to 15 kSPS at Maximum Resolution
8 Multiplexed Single Ended Input Channels
7 Differential Input Channels
2 Differential Input Channels with Optional Gain of 10x and 200x
0 - VCC ADC Input Voltage Range
Selectable 2. 56V ADC Reference Voltage
Free Running or Single Conversion Mode
ADC Start Conversion by Auto Triggering on Interrupt Sources
Interrupt on ADC Conversion Complete
Sleep Mode Noise Canceler
پایههای ورودی مبدل آنالوگ به دیجیتال
پینهای ورودی ADC عملکرد دوم PORAT میباشند که بهصورت مالتیپلکس شده به ADC اعمال میشوند. ولتاژ ورودی بین صفر تا ولتاژ مرجع بوده و ولتاژ مرجع از سه منبع AVCC، پین و ولتاژ داخلی 2.56 ولت قابل تأمین میباشد. جهت کاهش نویز مؤثر بر روی واحد ADC تغذیۀ آن بهصورت جداگانه از پین AVCC تأمین میشود. ولتاژ این پین نباید بیشتر از 0/3 ولت با VCC تفاوت داشته باشد. در صورتیکه از VCC بهعنوان AVCC استفاده میشود، میتوان بهوسیلۀ یک فیلتر LC این پایه را به VCC متصل نمود.
فیلتر کاهش نویز (داخلی)
مدارات داخلی میکروکنترلر با ایجاد نویز باعث کاهش دقت مقدار خوانده شده توسط ADC میشوند، برای بهبود این مشکل میتوان در زمان تبدیل میکروکنترلر را به یکی از Modeهای کمتوان ADC Noise Reduction یا Idle برده تا عملیات تبدیل بعد از خاموش شدن CPU انجام شود.
مدار زیر، تصویر شماتیک برای مبدل ADC بهصورت استاندارد را نمایش میدهد، در این مدار ولتاژ خروجی حاصل از یک سنسور LM35 به کانال صفر ADC متصل شده و مقدار قرائتشده پس از تبدیل به واحد اصلی (درجه سانتیگراد) بر روی نمایشگر LCD نمایش داده شده است.

متن برنامه نمایش دمای سنسور LM35 بر روی LCD

فعالیت 6 (صفحه 78 کتاب درسی)
الف) با افزودن دستورات شرطی به متن برنامه بالا، آن را به نحوی بازنویسی نمایید که با رسیدن دما به عددی که طی نوشتن برنامه تعیین میکنید، PORTB.0 ست (فعال بالا یا "1" منطقی) شود.
ب) بهعنوان یک برنامه کاربردی برای تهویه کلی یک سوله پرورش دام، برنامهای بنویسید که دمای یک سنسور LM35 را قرائت نموده، با کاهش دما از میزان تعیین شده در برنامه PORTB.0 فعال و با کمک رله یک هیتر صنعتی را فعال نماید و با افزایش آن PORTB.1 با کمک یک رله یک فن صنعتی را راهاندازی نمایید.
ماژول فاصلهسنج SRF05 (ارتباط I2C)
حسگرهای فراصوت مشابه رادار یا ردیابصوتی، تشخیص ویژگیهای هدف از طریق تحلیل بازتاب امواج رادیویی یا صوتی میباشد. حسگرهای فراصوت امواجصوتی با فرکانس بالا ایجاد میکنند. این حسگرها با محاسبه زمان بین فرستادن سیگنال و گرفتن بازتاب، فاصله جسم را محاسبه میکنند. از این فناوری میتوان در اندازهگیری فاصله بین ماژول با اجسام مقابل آن، ارتفاع و حجم مایع در مخازن، اندازهگیری قد اشخاص و سنسور دندهعقب خودرو و کشف جای پارک خالی برای خودروهای هوشمند استفاده کرد.
در تصاویر زیر برخی از کاربردهای ماژولهای فاصلهسنج با مدارات توسعهیافته را مشاهده میکنید.




مدار زیر نمونهای از مدار راهاندازی ماژول SRF05 به کمک میکروکنترلر ATMEGA16 بهمنظور سنجش فاصله و نمایش آن بر روی نمایشگر کریستال مایع میباشد.

متن برنامه نمونه جهت راهاندازی ماژول فاصلهسنج و نمایش بر روی LCD

ادامه متن برنامه

از کاربردهای دیگر امواج فراصوت، ردیابهای صوتی (Sonar)، بخورها (Humidifier)، فراوانگاری (سونوگرافی فراصوت) تصویربرداری 3 یا 4 بعدی از درون اشیاء، سنسورهای تشخیص حرکت، دزدگیرها و آزمایشات غیرمخرب (Nondestructive testing)، تشخیص نشتگاز و یا تشخیص محل شکستگی یا ترک و ... میباشد. ماژول التراسونیک SRF05 درواقع نمونه تکاملیافته SRF04 است و با هدف افزایش انعطافپذیری و افزایش رنج از 3 متر به 4 متر و کاهش قیمت طراحی شده است. عملکرد جدید (Mode در صورت اتصال به پین زمین) این ماژول امکان استفاده از تنها یک پین برای تریگرواکو را بهطور همزمان میدهد. در نتیجه در تعداد پین مصرفی از میکروکنترلر صرفه جویی میشود. وقتی پین Mode بدون اتصال رها میشود، ماژول SRF05 با استفاده از پینهای جداگانه تریگرواکو همانند SRF04 عمل میکند.
فعالیت 7 (صفحه 82 کتاب درسی)
الف) با استفاده از ماژول SRF05، مداری بسازید که فاصله سپر عقب اتومبیل با اشیاء یا اشخاص را برروی نمایشگر نشان دهد و در صورت تشخیص فاصله کمتر از 60 سانتیمتر به کمک یک LED یا بازر، هشدار مناسب ایجاد نماید.
الف) در مثال 2-6 تغییرات لازم جهت افزودن امکان کنترل چپگرد/راستگرد را در مدار شماتیک و متن برنامه اعمال نموده و نتیجه را مشاهده کنید.
ب) با توجه به مثال 2-6 مداری جهت کنترل دو عدد موتور DC طراحی و برنامه مناسب با آن را بنویسید.
نمایشگر کریستال مایع یا LCD
LCD مخفف عبارت "Liquid Crystal Display" به معنای صفحه نمایش کریستال مایع است. کریستالهای مایع موادی هستند که ظاهر مایع دارند، اما مولکولهای آنها آرایش خاصی نسبت به یکدیگر دارند. به همین دلیل کریستال مایع خصوصیاتی شبیه به مایع و جامد داشته و به همین دلیل با چنین اسم متناقضی خوانده میشوند.
برای ساخت LCD دو شیشه پلاروید را با 90 درجه اختلاف نسبت به یکدیگر قرار میدهند و یک کریستال مایع بین آنها میگذارند. وقتی کریستال به جریان برق وصل نباشد؛ نور از قطبشگر اول میگذرد و وارد کریستال مایع میشود، جهتش 90 درجه تغییر کرده و به همین دلیل از قطبشگر دوم هم عبور کرده و به چشم میرسد. اما وقتی که جریان به کریستال وصل باشد، نور دیگر چرخشی نخواهد داشت و نمیتواند از کریستال دوم عبور کند.
در بسیاری از موارد، سیستمهای کنترلی، با یک نمایشگر تکرنگ (Monochrome)، اطلاعات کافی برای ارتباط با کاربر را در اختیار او قرار میدهند.
سادهترین انواع این نمایشگرها، نمونههایی معروف به نمایشگر کریستال مایع کاراکتری (CHARACTER LCD یا Alphanumeric LCD) میباشد. این نمایشگر، بهطور معمول دارای تعدادی کاراکتر ماتریسی (بهطور معمول $5 \times 7$ یا $5 \times 8$) در یک یا چند سطر است که هر کدام از این کاراکترها میتوانند با روشن و خاموش نگه داشتن خانههای خود حرف یا شکلی را نمایش دهند.
در بازار الکترونیک، نمایشگرهایی بهصورت $8 \times 1,8 \times 2,16 \times 1,16 \times 2,20 \times 2,20 \times 4,40 \times 4$ داریم، بهطور مثال، منظور از $16 \times 1$ در حقیقت شانزده کاراکتر در یک سطر است. شکل زیر کاراکترهای یک نمایشگر را نشان میدهد که سطر بالا تمام پیکسلها روشن و سطر پایین تماماً خاموش هستند.
در شکل زیر برخی از انواع نمایشگر کریستال مایع کاراکتری را مشاهده میکنید.
فعالیت 8 (صفحه 84 کتاب درسی)
الف) با توجه به مثال 2-7، برنامهای بنویسید که در آن کلمه "SCIENCE" در خط دوم متحرک به سمت چپ و راست خود شود.
ب) با استفاده از مدار بالا، برنامه یک شمارنده 0 تا 99 بر روی نمایشگر LCD بنویسید.
ج) تصویر یک باتری قلمی بهصورت ایستاده، یک دوشاخه برق و یک فن را بر روی نمایشگر LCD نمایش دهید.
ارزشیابی پایانی پودمان (صفحه 84 کتاب درسی)
1- با توجه به پیشرفت تکنولوژی و امکان ساخت میکروکنترلرهایی با قابلیت هزارانبار برنامهریزی مجدد، به نظر شما علت استفاده از میکروکنترلرها بهصورت OTP خصوصاً در تولید انبوه تجهیزات میکروکنترلری چه عواملی میتواند باشد؟
2- تفاوت اصلی نوشتن دستورات یک برنامه، بلافاصله بعد از تابع اصلی (main) با نوشتن دستورات برنامه در حلقه تکرار بینهایت (while) در برنامه چیست؟
3- در صورت منطقی و مجاز بودن استفاده از تأخیرهای طولانی، با استفاده از دستور ( )delay_ms حداکثر به چه مقدار تأخیر زمانی میتوان دسترسی داشت؟ با استفاده از دستور ()delay_us چطور؟
4- در یک برنامهنویسی اصولی بهویژه در صنعت، وضعیت فعال ورودیها و خروجیها با منطق Active Low طراحی و ساخته میشوند، این موضوع تا حدی حائز اهمیت است که گاهی به قیمت افزایش خطوط برنامه و یا افزایش برخی قطعات جانبی، رعایت میشود. مزایای این شیوه طراحی را بنویسید.
5- در برنامه مثال 2-4 اگر دستور (500)delay_ms در خط هفدهم، حذف شود چه اتفاقی میافتد، این مسئله تحت عنوان چه نامی در برنامهنویسی شناخته میشود؟
6- مزیت مشترک نمودن تمامی آندها و یا کاتدها در نمایشگرهای هفت قطعهای چیست؟
7- جمعی از هنرجویان، کاربرد و مزایای آیسی MAX9655 را با استفاده از برگه اطلاعات آن، در قالب یک تحقیق گروهی، بررسی نموده و بهصورت کنفرانس در کلاس ارائه نمایند.
8- علت کاهش قابلتوجه تلفات قطعات قدرت، در سیستمهای کنترل PWM را مختصر شرح دهید.