GPIO چیست؟
واحد GPIO اولین واحدی است که در کار با هر سختافزار به آن برخورد میکنید. در این مقاله در مورد اینکه GPIO چیست و چه کاربردهایی دارد صحبت کردهایم.
واحد GPIO چیست؟
برای آنکه بدانیم GPIO چیست ابتدا باید نگاهی به ساختار میکروکنترلر بیاندازیم. هر میکروکنترلر از یک میکروپروسسور، حافظه و تعدادی پریفرال تشکیل شده است. میکروپروسسور مغز متفکر است و اعمال محاسباتی و پردازشی را انجام میدهد. حافظه محلی برای نگه داشتن کدها و متغیرها است و پریفرالها واسط میکروپروسسور با دنیای خارج از آن هستند. این ارتباط از طریق pinهای تعبیه شده روی چیپ میکروکنترلر (و البته در مواردی به صورت وایرلس مانند wifi و بلوتوث) تحقق مییابد.
یک پین میتواند به پریفرالهای مختلف تخصیص داده شود مثلا خط دریافت ارتباط UART باشد یا خط کلاک واحد SPI اما در هر لحظه از زمان فقط به یک پریفرال تعلق دارد. به عنوان مثال اگر یک پین به واحد UART تخصیص داده شده است دیگر نمیتوان به عنوان GPIO از آن استفاده کرد مگر آنکه ابتدا آن را از کنترل واحد UART خارج کرده باشید. تصویر زیر شمای بلوک دیاگرامی میکروکنترلر PIC است که به عنوان نمونه نمایش داده شده است
واحد GPIO یا همان (General Purpose Input Output) اجازه کنترل مستقیم پینها را از طریق برنامه در اختیار شما قرار میدهد. در این حالت اگر پین را در مد خروجی کانفیگ کرده باشید میتوانید مقدار 1 منطقی (high) یا 0 منطقی (low) را روی آن ایجاد کنید. اینکه مقدار 1 منطقی چه ولتاژی را ایجاد کند بستگی به میکروکنترلر شما دارد اما معمولا 3.3v است و مقدار 0 منطقی 0 ولت خواهد بود. همچنین اگر پین را در مد ورودی کانفیگ کنید میتوانید سطح ولتاژی را که روی پین افتاده در قالب 1 منطقی (high) یا 0 منطقی (low) بخوانید.
نکته بسیار مهم در استفاده از پینها این است که هر پین قابلیت جریان دهی بسیار محدودی دارد (در حد چند میلی آمپر) و در صورتی که جریانی بیشتر از ظرفیت از آن بکشید آسیب خواهد دید. این مقدار در دیتاشیت چیپ میکروکنترلر قید شده است و در برخی از میکروکنترلرها قابلیت تنظیم نیز دارد. به همین دلیل معمولا پینها وظیفه کنترلی و تولید سیگنالهای با جریاندهی پایین را به عهده دارند و برای راهاندازی ادواتی که جریانکشی بالایی دارند (مانند موتورها، رلهها و …) از مدارها یا ایسی های درایور استفاده میشود که به صورت واسط بین میکروکنترلر و تجهیز مربوطه قرار میگیرند.
در بسیاری از مدارات نیاز است که پین ورودی میکروکنترلر توسط یک مقاومت به vcc متصل شود (pull up) و یا توسط یک مقاومت به GND وصل شده باشد (pull down). برای کاهش قطعات استفاده شده در مدار و راحتی کاربر، برخی از میکروکنترلرها این حالت را درون خود تحقق دادهاند و از طریق برنامه میتوان برای پین حالت pull up یا pull down را فعال کرد. باید توجه داشت مقدار این مقاومت معمولا عدد بالایی است (بسته به میکروکنترلر در رنج 100 کیلو اهم) و اگر مدارات شما نیاز به مقاومت کمتری دارد تا حالت pulling قویتری ایجاد کند باید به صورت اکسترنال مقاومت مورد نظر را در مدارتان قرار دهید.
جهت اهمیت دارد که هرچه پالسهای تیزتری داشته باشید نویز بیشتری ایجاد میکنید و به اصطلاح EMI مدارات شما بالا است که پدیده نامطلوبی است. بنابراین توصیه میشود اگر به سرعت بالای پین احتیاج ندارید آن را در وضعیت کند قرار دهید.
هر پین در میکروکنترلر دارای رجیسترهایی است که وضعیت آن را مشخص میکند. مواردی مانند تعیین ورودی یا خروجی بودن، تعیین 0 یا 1 بودن مقدار پین (در حالت خروجی)، نشان دادن وضعیت 0 یا 1 بودن پین (در حالت ورودی)، فعال یا غیر فعال کردن pull up و pull down، تعیین سرعت تغییر حالت پین (فقط در میکروکنترلرهایی که این قابلیت را دارند)، تعیین میزان جریاندهی (فقط در میکروکنترلرهایی که این قابلیت را دارند) از جمله امکاناتی است که رجیسترها در اختیار شما قرار میدهند.
البته نیاز نیست نگران کار با رجیسترها باشید زیرا امروزه کتابخانههای متنوعی برای کار با میکروکنترلرها به وجود آمدهاند که برنامه نویس را از سطح رجیستر جدا میکنند و با زبانهای برنامه نویسی سطح متوسط (مانند C) یا سطح بالا (مانند Cpp و پایتون) امکان کنترل رجیسترها را فراهم میکنند.
کاربردهای GPIO چیست
در بسیاری از کاربردها نیاز است وقوع یا عدم وقوع یک اتفاق تشخیص داده شود. بسیاری از این کاربردها را در زندگی روزمره تجربه میکنید. به عنوان مثال
- – یک کلید فشرده شده است یا نه
- – خطایی اتفاق افتاده است یانه
- – دمای محیط از یک حد مشخص بالاتر رفته است یا نه
- – کسی به در نزدیک شده است یا نه
- – درب یخچال از مدت زمان مشخصی بیشتر باز مانده است یا نه
- – وزن لباسهای درون لباسشویی از حد مشخصی بیشتر شده است یا نه
- – جسمی لای درب آسانسور گیر کرده است یا نه
- – مدت زمان تنظیم شده برای ماکروفر به پایان رسیده است یا نه
- – درب خودرو بسته شده است یا نه
در تمام موارد فوق با دو حالت منطقی 0 و 1 سر و کار داریم. استفاده از یک پین دیجیتال به میکروکنترلر این امکان را میدهد وضعیت موجود را دریافت کرده و از محیط اطراف خود کسب اطلاعات کند تا بتواند پس از تحلیل وقایع تصمیم درست را اتخاذ کند. سیستم شروع به کار ماشین لباسشویی را در نظر بگیرید. یکی از موارد اساسی برای اینکه ماشین اجازه شروع به کار را داشته باشد این است که درب ماشین لباسشویی باز نباشد. میکروکنترلر موجود در ماشین لباسشویی این وضعیت را از طریق یک پین GPIO که به مدار تشخیص دهنده باز و بسته بودن درب متصل شده است میخواند.
همینطور در بسیاری از کاربردها نیاز است یک اتفاق ایجاد شود یا نشود. موارد زیر را در نظر بگیرید:
- – یک led روشن شود یا نه
- – بوق مربوط به باز ماندن درب یخچال تولید شود یا نه
- – صدای error زیاد بودن وزن لباسهای درون ماشین لباسشویی پخش شود یا نه
- – درب پارکینگ باز شود یا نه
- – فن ماکروفر روشن شود یا نه
- – چراغ درون یخچال روشن شود یا نه
- – چراغ چک اتومبیل روشن شود یا نه
- – آهنگ اتمام کار ماشین لباسشویی پخش شود یا نه
- – آب پاش گلخانه هوشمند شروع به آبپاشی کند یا نه
موارد فوق تنها نمونههایی ملموس از نیاز به ایجاد یک وضعیت منطقی است. مثال مربوط به باز ماندن ماشین لباسشویی را در نظر بگیرید. پس از آنکه میکروکنترلر ماشین لباسشویی از طریق خواندن یک پین دیجیتال متوجه بسته نشدن درب لباسشویی شد در صورتی که کاربر دکمه شروع را بزند شروع به کار نخواهد کرد و برای آنکه کاربر را از دلیل کار نکردن خود مطلع کند از طریق یک پین دیجیتال که به مدار تولید بوق لباسشویی متصل است صدای مربوط به error را پخش خواهد کرد.
علاوه بر مواردی که تنها با یک پین قابل تحقق هستند موارد دیگری نیز وجود دارند که با ترکیبی از پینهای دیجیتال پیادهسازی میشوند. از جمله این موارد میتوان به کنترلر استپر موتور، کنترل سروو موتور و راه اندازی سون سگمنت اشاره کرد که توضیحات مربوط به جزئیات پیادهسازی آنها موضوع این مقاله نیست و برای اطلاعات بیشتر میتوانید به مقالات مربوط به آنها مراجعه کنید.
یکی از امکانات پرکاربرد پایهها در میکروکنترلر، دریافت وقفه خارجی است. برای مطالعه در این مورد وقفهها میتوانید به مقاله وقفه چیست مراجعه کنید.
در پایان
در این مقاله توضیحاتی در مورد اینکه GPIO چیست و چه کاربردهایی دارد داده شد. برای کسب اطلاعات بیشتر در مورد GPIO میتوانید به منابعی مانند GPIO-wikipedia مراجعه کنید. بسیار خوشحال خواهیم شد اگر نظرات خود راجع به این مقاله و یا تجربیات ارزشمندتان در مورد GPIO را در بخش نظرات این مقاله با ما و دیگر دوستانتان به اشتراک بگذارید.
دیدگاهتان را بنویسید