آموزش میکروکنترلر AVRمیکروکنترلرهمه ی مطالب

آموزش میکروکنترلر AVR قسمت نهم (پورت های I/O در میکروکنترلر AVR)

پورت های I/O در میکروکنترلر AVR:

وظیفه پردازش داده در یک میکروکنترلر بر عهده ی CPU است. CPU باید بتواند با دنیای خارج از میکروکنترلر ارتبا برقرار کند. اطلاعاتی که باید پردازش شود به CPU انقال یافته و نتیجه ی پردازش شده به بیرون از میکروکنترلر انتقال یابد. تبادل اطلاعات بین میکروکنترلر و دنیای خارج از آن از طریق پورت های I/O میکروکنترلر انجام می شود.

هر پورت مجوعه ای از پایه های I/O است در میکروکنترلر های هشت بیتی AVR هر پورت شامل 8 پایه است. در میکوکنترلر های AVR تعداد پورت ها متفاوت می باشد. به عوان مثال در ATMEGA32  برابر 32 در ATMEGA128 برابر 53  و در ATMEGA256  برابر 86 می باشد. در همه AVR ها پورت ها به صورت PORTA ,POORTB,PORTC  و … نام گذاری می شوند. که هر کدام از آن ها به صورت 8 بیتی عمل می کنند. پورت ها علاوه بر این که به عنوان I/O به کار می روندمعمولا دارای وظایف خاص دیگری نیز هستند که با توجه به میکروکنترلر مورد نظر این وظایف متفاوت است. که در ادامه آموزش به تدریج با این وظیف نیز آشنا می شویم.

ویژگی های پورت های I/O در میکروکنترلر AVR:

تمام پین های پورت های میکروکنترلر AVR دارای قابلیت Read-Modify-Write هستند. که جهت هر یک از پایه های آن ها می توانند بدون تاثیر بر روی پایه های  دیگر تغییر یابد. (مثلا پایه 0 از پورت A به صورت خروجی تنظیم و پایه 1 از پورت A می تواند به صورت ورودی تنظیم شود و بدون اختلال کار کنند.) بافر موجود در هر پایه می تواند به طور مستقیم یک LED را راه اندازی کند حداکثر می تواند 40 میلی آمپر بار به جریان بدهد البته مجموع جریان از یک پورت نباید از 100 میلی آمپر بیشتر شود و جریان کل پورت ها نباید از 200 میلی آمپر شود. تمامی پورت ها به کمک دیودهایی که به Vcc و GND متصل شده اند حفاظت می گردند.

دسترسی بیتی به ریجیستر های I/O:

برای دسترسی به ریجیستر های I/O از شماره ی بیت که بعد از نام ریجیستر I/O می آید استفاده می کنیم . به طور مثال:

DDRA.O=1;
PORTA.0=1;

در این دو سطر ابتدا بیت 0 از پورت A به صورت خروجی تنظیم می شود سپس سطح منطقی آن یک می شود. به عبارت دیگر پین شماره ی 0 از پورت A دارای سطح ولتاژ 5 ولت می شود.

تنظیم پورت های I/O در میکروکنترلر AVR:

به ازای هر پورت سه محل در حافظه I/O وجود دارد که عبارتند از:

1 –  DDRX:

(Port X Data Direction Register)

 ریجیستری برای تعیین جهت پورت برای ورودی یا خروجی کردن پورت است. بیت DDRX.n  از ریجیستر DDRX جهت پین را تعیین می کند(که X نام پورت را مشخص کرده و n پین مورد نظر از پورت را مشخص می کند.)

اگر (DDRX.n=1) باشد پین به صورت خروجی تنظیم می شود .

مثال: پین شماره صفر از پورت A  خروجی می شود.

DDRA.0=1;

یا می توان به دستور بالایی را به این صورت هم نوشت

DDRA=0b00000001;

که معادل باینری دستور بالا می باشد. (0b) بعد از علامت مساوی نشان دهنده ی باینری بودن عدد است.

اگر (DDRX.n=0) باشد پین به صورت ورودی تنظیم شده است.

مثال:

DDRA.0=0;
DDRA=0b00000000;

 

2-   PORTX:

(Port X Data Register)

این ریجیستر برای مقدار دهی به یک پورت است.  که دو حالت پیش می آید.

حالت اول پورت به صورت خروجی تنظیم می شود.

در این حالت اگر PORTX.n یک شود وضعیت منطقی پین 1 شده و در روی پین ولتاژ 5 ولت ظاهر می شود.

DDRA.0=1;
PORTA.0=1;

 اگر PORTX.n صفر شود وضعیت منطقی پین صفر شده و ولتاژ پین صفر می باشد.

DDRA.0=1;
PORTA.0=0;

 حالت دوم پورت به صورت ورودی تنظیم شود.

در این حالت اگر PORTX.n یک شود. Pull Up داخلی پین مربوطه فعال می شود.

DDRA.0=0;
PORTA.0=1;

 

3 – PIN:

(Port X  Input PIN Adress )

ریجیستری جهت خواندن مقدار از روی یک پورت است. ریجیستر PIN.X یک ریجیستر فقط خواندنی است و قابلیت نوشتن را ندارد.

از این ریجیستر برای اطلاع از وضعیت پین های یک پورت استفاده می شود.

در آموزش های بعدی نحوه راه اندازی کلید با میکروکنترلر AVR می باشد که بیشتر در مورد این ریجیستر بحث خواهد شد.

و در آخر یک برنامه ساده چشمک زن که شماتیک و برنامه آن در ادامه می آید.

مدار چشمک زن با AVR
مدار چشمک زن با AVR
#include <mega32.h> // کتابخانه مربوط به میکروکنترلر ATmega32 
#include <delay.h>  // کتابخانه ی مربوط به تابع delay 


void main(void){
  DDRA.0=1;
  DDRA.7=1;
while(1){ //ایجاد یک حلقه بی نهایت
  PORTA.0=1;/ با 1 شدن پورت ال ای دی روشن
  PORTA.7=1;
  delay_ms(1000);// ایجاد تاخیر 1 ثانیه ی
  PORTA.0=0;// با صفر شدن پورت ال ای دی خاموش 
  PORTA.7=0;
  delay_ms(1000);
}
}

 

علی عزتی

علی عزتی هستم. رشته ی مهندسی برق الکترونیک رو خوندم. علاقه ی من به یادگیری و به اشتراک گذاشتن چیز هایی که یاد گرفتم. باعث شد تا الکترولب ایجاد بشه. علاقه ی زیادی به الکترونیک دارم. و دوست دارم چیزهای جدید یادبگیرم و بسازم ... :))

نوشته های مشابه

3 دیدگاه

  1. با سلام خدمت مهندس عزیز بنده حقیر 53 سال سن دارم و دیگر گشش یادگیری برنامه نویسی را ندارم در ضمن 28 سال سابقه تعمیرات تلویریون و دوربینهای فیلمبرداری … و فلاش نور عکاسی را دارم حلاصه کنم چندی پیش فلاشی برای تعمیر داشتم که ایسی ان سوحته و ایسی جدید گه تهیه کردم خام بوذه چطور میتونم برنامه ان را نوشته یا تهیه نمایم لطفا راهنمایی فرمایید در ضمن با پروگرام قابل حواندن نبود شماره ایسی s3f9454bzz-dk94

    1. سلام
      باببت تاخیر در جواب دادنم ببخشید این IC که شما ذکر کردید یک IC خواص برای موارد خواصی هستش دنبال این نباشید که خودتون برای این IC برنامه بنویسید بهتره از انجمن ها و سایت های مربوط به تعمیرات کمک بخواهید تا اگر فایل آماده داشته باشند روی این IC پروگرم کنید.

  2. سلام خسته نباشید من تازه آموزش برنامه نویسی رو شروع کردم به خاطر همین هنوز چیز خواصی بلد نیستم داشتم یه برنامه ای می نوشتم که به مشکل برخوردم من می خواستم اطلاعاتی که داخل یکی از پایه ها هستش رو به یک پایه دیگه انتقال بدم اگه میشه کد مربوط به این رو به من توضیح بدید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

همچنین ببینید
بستن
دکمه بازگشت به بالا