آشنایی با GPIO در میکروکنترلرهای AVR: ورودی/خروجی همه‌منظوره

  • نویسنده موضوع نویسنده موضوع Ali
  • تاریخ شروع تاریخ شروع

اطلاعات موضوع

درباره موضوع در تاریخ, در دسته َAVR ایجاد شده و آغاز کننده آن Aliمی باشد و موضوع آن: آشنایی با GPIO در میکروکنترلرهای AVR: ورودی\/خروجی همه‌منظوره است. این موضوع تا کنون 10 بازدید کننده و, 0 پاسخ داشته و 0 بار پسندیده شده...
نام دسته َAVR
نام موضوع آشنایی با GPIO در میکروکنترلرهای AVR: ورودی\/خروجی همه‌منظوره
آغاز کننده موضوع Ali
تاریخ شروع
پاسخ‌ها
0
بازدیدها
10
پسندها
0
آخرین ارسال توسط Ali

Ali

مسئول نظارت بر محتوا
پرسنل مدیریت
ناظم انجمن
Jun 7, 2020
984
1,269
پین‌های ورودی/خروجی همه‌منظوره (General Purpose Input/Output - GPIO) از اساسی‌ترین و پرکاربردترین قابلیت‌های هر میکروکنترلری، از جمله خانواده AVR، هستند. این پین‌ها به میکروکنترلر اجازه می‌دهند تا با دنیای خارج ارتباط برقرار کند؛ اطلاعات را از سنسورها، کلیدها و سایر ورودی‌ها دریافت کرده و فرمان‌هایی را به LEDها، رله‌ها، موتورها و سایر خروجی‌ها ارسال کند. درک نحوه کار با GPIOها برای هر کسی که قصد برنامه‌نویسی AVR را دارد، ضروری است.

ساختار پین‌های GPIO در AVR

هر پورت در میکروکنترلرهای AVR (مانند Port A, Port B, Port C, Port D) معمولاً شامل ۸ پین است که هر کدام می‌توانند به صورت مستقل به عنوان ورودی یا خروجی پیکربندی شوند. برای کنترل این پین‌ها، سه رجیستر اصلی برای هر پورت وجود دارد:

1. DDRx (Data Direction Register):
* این رجیستر جهت هر پین را تعیین می‌کند.
* اگر بیتی در DDRx روی 1 تنظیم شود، پین مربوطه به عنوان خروجی عمل می‌کند.
* اگر بیتی در DDRx روی 0 تنظیم شود، پین مربوطه به عنوان ورودی عمل می‌کند.
* مثال: DDRB = 0xFF; تمام پین‌های Port B را به عنوان خروجی تنظیم می‌کند. DDRD = 0x00; تمام پین‌های Port D را به عنوان ورودی تنظیم می‌کند.

2. PORTx (Port Data Register):
* برای پین‌های خروجی: با نوشتن 1 یا 0 در بیت مربوطه از PORTx، می‌توان وضعیت منطقی (High/Low) پین خروجی را تعیین کرد. 1 پین را High (ولتاژ تغذیه) و 0 پین را Low (زمین) می‌کند.
* برای پین‌های ورودی: با نوشتن 1 در بیت مربوطه از PORTx، می‌توان مقاومت پول‌آپ (Pull-up) داخلی را برای آن پین فعال کرد. این کار برای جلوگیری از وضعیت شناور (floating) پین‌های ورودی و اطمینان از خواندن یک وضعیت منطقی مشخص (High) در صورت عدم اتصال خارجی مفید است. نوشتن 0 مقاومت پول‌آپ را غیرفعال می‌کند.

3. PINx (Port Input Pins Register):
* این رجیستر فقط برای خواندن وضعیت منطقی پین‌های ورودی استفاده می‌شود.
* با خواندن بیت مربوطه از PINx، می‌توان وضعیت فعلی (High یا Low) پین ورودی را تشخیص داد.
* نوشتن در این رجیستر هیچ تأثیری ندارد.

پیکربندی و استفاده از GPIO

1. تنظیم پین به عنوان خروجی و کنترل آن:

برای مثال، فرض کنید می‌خواهیم یک LED را به پین PB0 (پین ۰ از Port B) متصل کرده و آن را روشن و خاموش کنیم.

  • گام اول: تنظیم جهت پین:
کد:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید
  • گام دوم: کنترل وضعیت پین:
کد:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید
برای تغییر وضعیت (Toggle) یک پین خروجی، می‌توان به رجیستر PINx نوشت. این یک ویژگی خاص در AVR است:
کد:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

2. تنظیم پین به عنوان ورودی و خواندن آن:

فرض کنید می‌خواهیم وضعیت یک کلید متصل به پین PD2 را بخوانیم.

  • گام اول: تنظیم جهت پین:
کد:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید
  • گام دوم: فعال کردن مقاومت پول‌آپ (اختیاری اما توصیه شده):
کد:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید
با فعال کردن پول‌آپ، اگر کلید فشرده نشود، پین PD2 در وضعیت High قرار می‌گیرد. با فشرده شدن کلید (که پین را به زمین متصل می‌کند)، وضعیت پین Low می‌شود.
  • گام سوم: خواندن وضعیت پین:
کد:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

مثال کامل: چشمک‌زن LED و خواندن کلید

این کد یک LED متصل به PB0 را هر ۵۰۰ میلی‌ثانیه روشن و خاموش می‌کند و اگر یک کلید متصل به PD2 فشرده شود، LED سریع‌تر چشمک می‌زند.

C:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید

نکات مهم:

  • نام‌گذاری پین‌ها: در فایل avr/io.h، نام‌های مستعاری مانند PB0, PD2 و ... برای بیت‌های پورت‌ها تعریف شده‌اند که استفاده از آن‌ها کد را خواناتر می‌کند.
  • عملگرهای بیتی: برای کار با رجیسترها، استفاده از عملگرهای بیتی (|, &, ~, <<) بسیار مهم است تا فقط بیت‌های مورد نظر تغییر کنند و به سایر بیت‌ها آسیبی نرسد.
  • مقاومت‌های پول‌آپ/پول‌داون خارجی: در برخی موارد، ممکن است نیاز به استفاده از مقاومت‌های پول‌آپ یا پول‌داون خارجی باشد، به خصوص اگر جریان مورد نیاز بیشتر از توان مقاومت‌های داخلی باشد یا برای ورودی‌های آنالوگ.

با درک این مفاهیم پایه، می‌توانید به راحتی با پین‌های GPIO میکروکنترلرهای AVR کار کرده و پروژه‌های متنوعی را پیاده‌سازی کنید.
 

عقب
بالا