کنترل ورودی/خروجی (GPIO) در میکروکنترلرهای AVR

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

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

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

Ali

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

پورت‌های AVR

میکروکنترلرهای AVR پین‌های GPIO خود را در گروه‌هایی به نام "پورت" سازماندهی می‌کنند. هر پورت معمولاً ۸ پین دارد (مثلاً PORTA، PORTB، PORTC، PORTD و غیره). هر پین در یک پورت با یک شماره (از ۰ تا ۷) مشخص می‌شود، به عنوان مثال PA0، PB3، PC7.

رجیسترهای کلیدی GPIO

برای کنترل پین‌های GPIO، سه رجیستر اصلی برای هر پورت وجود دارد:

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

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

3. PINx (Port Input Pins Register):
* این رجیستر برای خواندن وضعیت فعلی پین‌های ورودی استفاده می‌شود.
* اگر پین مربوطه ولتاژ بالا (High) داشته باشد، بیت مربوطه در PINx برابر با 1 خواهد بود.
* اگر پین مربوطه ولتاژ پایین (Low) داشته باشد، بیت مربوطه در PINx برابر با 0 خواهد بود.
* توجه داشته باشید که برای خواندن وضعیت پین، باید آن پین به عنوان ورودی پیکربندی شده باشد (بیت مربوطه در DDRx = 0).

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

۱. پیکربندی پین به عنوان خروجی (Output):
برای کنترل یک LED یا رله، پین باید خروجی باشد.
  • گام اول: بیت مربوطه در رجیستر DDRx را 1 کنید.
  • گام دوم: برای روشن/خاموش کردن، بیت مربوطه در رجیستر PORTx را 1 یا 0 کنید.

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

۲. پیکربندی پین به عنوان ورودی (Input):
برای خواندن وضعیت یک کلید یا سنسور، پین باید ورودی باشد.
  • گام اول: بیت مربوطه در رجیستر DDRx را 0 کنید.
  • گام دوم (اختیاری اما توصیه شده): برای فعال کردن پول‌آپ داخلی، بیت مربوطه در رجیستر PORTx را 1 کنید. این کار باعث می‌شود در صورت عدم اتصال کلید، پین در وضعیت High قرار گیرد.
  • گام سوم: برای خواندن وضعیت، رجیستر PINx را بخوانید.

مثال (خواندن وضعیت کلید متصل به PD2 و کنترل LED متصل به PB0):
فرض کنید کلید به زمین (GND) متصل است و با فشار دادن، پین را Low می‌کند.

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

نکات مهم:

  • ماسک کردن بیت‌ها: برای تغییر وضعیت یک بیت خاص بدون تأثیر بر سایر بیت‌ها، از عملگرهای بیتی | (OR), & (AND), ~ (NOT) و << (شیفت به چپ) استفاده کنید.
* تنظیم بیت به 1: PORTB |= (1 << PB0);
* تنظیم بیت به 0: PORTB &= ~(1 << PB0);
* تغییر وضعیت بیت (Toggle): PORTB ^= (1 << PB0);
  • پین‌های چندمنظوره: بسیاری از پین‌های GPIO در AVR علاوه بر عملکرد ورودی/خروجی عمومی، قابلیت‌های دیگری مانند ADC، PWM، SPI، I2C و UART را نیز دارند. هنگام استفاده از این قابلیت‌ها، باید رجیسترهای مربوط به آن ماژول‌ها را نیز پیکربندی کنید و معمولاً پین به طور خودکار از حالت GPIO خارج می‌شود.
  • جریان مجاز: هر پین GPIO دارای محدودیت جریان خروجی است. برای راه‌اندازی بارهای با جریان بالا (مانند موتورها یا رله‌های بزرگ)، باید از ترانزیستورها یا درایورهای مناسب استفاده کنید.

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

عقب
بالا