علت نیاز به ربات ها در صنعت کشاورزی
۳۰ مرداد ۱۳۹۷آشنایی با ربوکاپ – شبیهسازی امداد
۳۰ مرداد ۱۳۹۷میکروکنترلر ARM
در این مقاله نحوهی راهاندازی GPIO مربوط به میکروکنترلر ARM را آموزش میدهیم. لازم به ذکر است تمام آموزشها، مربوط به میکروکنترلر ARM- LPC1768 میباشد، در همه جای مقالات آموزشی ARM، منظور از کلماتی نظیر “میکرو”، “میکروکنترلر”، “آرم” و …. میکروکنترلر ARM – LPC1768 میباشد.
به صورت کلی برای راهاندازی هر بخش از میکروکنترلر باید رجیسترهای بخش مربوطه را کاملا مسلط بود، به عبارت دیگر باید بدانیم در هر بخش چه رجیسترهایی وجود دارد، و هر رجیستر برای انجام چه کاری طراحی شده است، در نتیجه برای راهاندازی بخش GPIO باید رجیسترهای این بخش را بشناسیم، نکتهی مهم دیگر اینکه همهی رجیسترهای این میکرو 32 بیتی هستند.
رجیسترهای مربوط به GPIO
- رجیستر مربوط به تغذیهی GPIO: این رجیستر به صورت پیشفرض همیشه فعال میباشد، اما برای راهاندازی بخشهای دیگر حتما باید تغذیه مربوط به آن بخش را فعال کنیم که در مقالات بعدی این موضوع را شرح خواهیم داد.
- FIODIR: با مقداردهی این رجیستر میتوان جهت پایههای هر پورت را تعیین کرد، منظور از جهت پایه، ورودی/خروجی بودن پایه میباشد، به صورت پیشفرض همهی پایهها به صورت ورودی میباشند، برای اینکه یک پایه را به صورت خروجی تعریف کنیم، باید مقدار ‘1’ را به این رجیستر بدهیم، برای مثال اگر بخواهیم اولین پایه از پورت دو را به صورت خروجی تعریف کنیم ، باید از دستور زیر استفاده کنیم.
LPC_GPIO2-> FIODIR = 0x01
با این دستور پایهی P2.0 به صورت خروجی تعریف میشود، اگر هم زمانی بخواهیم پایهای را به صورت ورودی تعریف کنیم باید مقدار ‘0’ را در این رجیستر مقداردهی کنیم.
- FIOSET: برای اینکه به IO مد نظر ولتاژ High یا همان یک منطقی بدهیم از این رجیستر استفاده میکنیم، برای این منظور باید بیت مربوطه را ‘1’ بدهیم، برای مثال اگر بخواهیم همان پایه P2.0 را ولتاژ High بدهیم باید از دستور زیر استفاده کنیم.
LPC_GPIO2-> FIOSET = 0x01
نکتهی دیگر اینکه اگر مقدار صفر منطقی به این رجیستر بدهیم، اتفاق خاصی نخواهد افتاد، اتفاق به این معنی که پین مورد نظر با نوشتن صفر در آن Pull Down نمیشود و همانطور Pull Up باقی میماند.
- FIOCLR: برای اینکه به IO مد نظر ولتاژ Low یا همان صفر منطقی بدهیم از این رجیستر استفاده میکنیم، برای این منظور باید بیت مربوطه را ‘1’ بدهیم، برای مثال اگر بخواهیم همان پایه P2.0 را ولتاژ Low بدهیم باید از دستور زیر استفاده کنیم.
LPC_GPIO2-> FIOCLR = 0x01
نکتهی دیگر اینکه اگر مقدار صفر منطقی را به این رجیستر بدهیم، اتفاق خاصی نخواهد افتاد، اتفاق به این معنی که پین مورد نظر با نوشتن صفر در ان Pull Up نمیشود و همانطور Pull Down باقی میماند.
- FIOPIN: این رجیستر برای خواندن مقدار پایهها استفاده میشود، میتوان از این رحیستر برای مقداردهی به پایهها هم استفاده کرد، اما سازندهی میکرو این کار را توصیه نمیکند و بهتر است از FIOSET و FIOCLR استفاده شود، برای مثال اگر بخواهیم مقدار P2.3 را بخوانیم از دستور زیر استفاده میکنیم:
LPC_GPIO2->FIOPIN & (1 << 3 )
نکات دیگر
- در این میکرو، میتوان وقفههای تعداد قابل توجهی از پایهها را فعال کرد، در این میکرو حدود 45 وقفه (GPIO_Interrupt) وجود دارد که یکی از نکات برجستهی این میکرو میباشد، در مقالات بعدی، یکی از مقالات را به موضوع وقفههای این میکرو اختصاص خواهیم داد.
- به صورت پیش فرض همهی پایه ها در حالت IO قرار دارند.
نمونه کد
در انتها نمونه کد زیر برای GPIO نوشته شده است:
#include <lpc17xx.h> int main() { LPC_GPIO2->FIODIR = 0xFF; LPC_GPIO2->FIOSET = 0xFF; }
در خط اول کتابخانهی میکروکنترلر lpc1768 افزوده شده است، این کتابخانه، دستورات مورد نیاز برای ارتباط و کار با قطعات جانبی را فراهم میکند و هر میکروکنترلر کتابخانهی مخصوص به خود را دارد.
در خط سوم تابع main تعریف شده است، تابع main بدنهی کدنویسی به زبان C است و در اکثر زبانهای مشتقشده از C نیز به این صورت است.
در خط هفتم، LPC_GPIOn مربوط به کلاسهای کار با ورودی و خروجیهاست، به جای n در این کد شماره PORT قرار داده میشود، برای مثال در این پروژه پورت دو LPC_GPIO2 انتخاب شده است.
در این هفتم جهت پایههای P2.0 تا P2.7 به صورت خروجی تعریف میشوند و در خط نهم هر هشت پایه ولتاژ High میگیرند.
ارتباط با ما
به منظور مشاوره و ارتباط با ما؛ در تلگرام به آیدی زیر پیام بدهید:
یا با شماره تلفن:
تماس حاصل فرمایید.
سایر راههای ارتباطی را در صفحه «تماس با شرکت رباتسازان» در اختیار شماست.