آخرین نوشته ها
خانه / آموزش / برنامه ریزی پورتها (I/O PORTS)

برنامه ریزی پورتها (I/O PORTS)

اتصال مدارات خارجی به پورتها

پورتهای ورودی و خروجی در میکروکنترلرها پر کاربردترین امکانات میکروکنترلرها می باشند و کمتر پروژه کاربردیی است که در آن از پورتها استفاده نشده باشد. بیشتر پینهای مربوط به پورتهای ورودی و خروجی در میکروکنترلر AVR کاربردهایی چندگانه دارند. ارتباط سریال، ارتباط TWI، ارتباط SPI، ADC ها، اینتراپت های خارجی و … . در اینجا تنها به کاربرد I/O ها می پردازیم و آن را طی یک پروژه شرح می دهیم. بیایید برای شروع آموزش مداری بسازیم که بتواند ۸ LED را به تناوب روشن و خاموش کند طوری که به نظر برسد یکی در حال حرکت است. برای این کار ابتدا نیاز به طراحی مدار داریم.

طراحی مدارات میکروکنترلری بسیار ساده است. پیچیدگی مدارات میکروکنترلری به نرم افزار آن بستگی دارد نه به مدارات آن. درواقع با یک سخت افزار ثابت می توانید پروژه های زیادی را انجام دهید. دلیل فراوانی بردهای آماده در انواع مختلف برای پروسسورها همین مطلب است. بنابراین نرم افزار پروتئوس را باز کرده و مدار زیر را در آن بکشید.

همانطور که می بینید میکروکنترلر ATMEGA8 استفاده شده است. برای کلاک میکرو از اسیلاتور داخلی با فرکانس ۸ مگاهرتز بهره برده ایم. تغذیه مدار ۵ ولت است که به صورت پیش فرض در نرم افزار پروتئوس به میکروکنترلر اعمال گردیده است. کاری که باید بکنیم آن است که با استفاده از پینهای پورت B، LED ها را روشن کنیم.

با استفاده از ویزارد کدویژن اسیلاتور و نوع میکروکنترلر را انتخاب کرده و پورت B را تماماً به صورت خروجی تعریف می کنیم. سپس ویزارد را تا انتها پیش برده و برنامه را تولید می کنیم. رجیسترها به سادگی در نرم افزار مقداردهی شده اند. تنها چیزی که ما نیاز داریم آن است که به تعریف متغیرهای محلی و عمومی پرداخته و برنامه را بنویسیم. برای اینکه تمام جزئیات برنامه رو توضیح دهیم کد را خلاصه کرده ایم. برنامه زیر را ببینید:

 

در AVR برای هر پورت ۳ رجیستر وجود دارد. با شناختن آنها تمامی کارهایی که با پورت می شود کرد را یاد گرفته اید. این ۳ رجیستر عبارتند از:

  • DDRX
  • PORTX
  • PINX

حرف X در واقع نام پورت است. مثلاً برای پورت A، حرف A جایگزین X خواهد شد. DDRX جهت پورت را تعریف می کند که ورودی باشد یا خروجی. با نوشتن ۱ پورت به صورت خروجی تعریف می شود و با نوشتن ۰ به صورت ورودی تعریف خواهد شد. PORTX رجیستری است که اگر روی آن مقداری بنویسیم مستقیماً روی پینها اعمال می گردد. یعنی اگر ۰ بنویسیم خروجی ۰V و اگر ۱ بنویسیم خروجی به مقدار Vcc می رسد؛ مثلاً ۵V. البته تمامی اینها به شرطی است که جهت پورت به صورت خروجی باشد. در صورتی که جهت پورت به صورت ورودی تعریف شده باشد مقدار ولتاژی که به صورت سخت افزاری به پین میکروکنترلر اعمال شده به صورت دیجیتال در این رجیستر وارد می گردد. در بحث فیوز بیت ها مطلبی در مورد سطح ولتاژی که ۱ است یا ۰ صحبت خواهد شد ولی به صورت سرانگشتی حدود ۰ ولت به ۰ و حدود ۵ ولت به ۱ نگاشته می شود.

در برنامه بالا تمامی پینهای پورت B به صورت خروجی تعریف شده و همه آنها ۱ شده اند و هر کدام از آنها ۰ شود LED مربوط به آن روشن می شود. توجه کنید که خطوط برنامه آنقدر سریع اجرا می شود که اگر تأخیر اعمال نکنیم روشن شدن LED ها دیده نخواهد شد. بنابراین باید تأخیر ایجاد کنیم؛ یعنی کدی بنویسیم که زمان میکرو را تلف کند. این اولین راهی است که به ذهن می رسد ولی ما امکان جدیدی را معرفی می کنیم.

توابع کتابخانه ای

در برنامه نویسی می توانیم از توابعی که در Codevision موجود است استفاده کنیم. برای این منظور نام کتابخانه را در اول برنامه اعلان می کنیم. برای تأخیر کتابخانه ای داریم به نام delay.h. این کتابخانه را باید در بالای برنامه قبل از تابع ()main فراخوانی کنیم. این کتابخانه دو تابع دارد:

delay_us(x)

delay_ms(x)

تابع اول به میزان عددی که به آن داده ایم تأخیری در واحد میکروثانیه ایجاد می کند و تابع بعدی به میزان عدد ورودی تأخیری در واحد میلی ثانیه تولید می کند. پس کافی است در بالای ()main عبارت زیر را بنویسیم:

#include <delay.h>

در کد بالا عدد ۱ روی پورت شیفت داده شده . معکوس آن روی پورت قرار می گیرد. به این صورت که تعداد شیفت به وسیله متغیر i مشخص می شود و به i در مرحله بعدی یکی اضافه می شود تا به ۷ برسد. پس از آن دوباره i صفر می شود. در هر مرحله ۲۰۰ میلی ثانیه تأخیر اعمال می گردد تا حرکت LED ها دیده شود. نتیجه به صورت زیر در می آید:

همانطور که می بینید LED روشن به تناوب جا به جا می شود.

درباره‌ی vahid

همچنین ببینید

پروگرامرهای AVR

پروگرامر (Programmer) اگر تا به حال برای کامپیوتر برنامه نویسی کرده باشید دیده اید که …

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

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