۱-۳ مفهوم ورودی در میکروکنترلرهای AVR
۱۲ دی ۱۳۹۷۳-۳ خواندن چندین ورودی به صورت همزمان
۱۲ دی ۱۳۹۷برای راهاندازی ورودی در میکروکنترلرهای AVR پس از آنکه یک پروژهی جدید را در CodeVision تعریف کردید تمامی پورتها به صورت پیشفرض به عنوان ورودی فرض شدهاند. در واقع برای تعیین ورودی در ابتدای تعریف پروژه نیاز به انجام کار خاصی نیست.
تنها کاری که میتوانید انجام دهید تعیین یک مقاومت Pull Up برای هرپایهی ورودی است.
با انجام این کار دو اتفاق مهم رخ میدهد که باید آنها را در نظر داشته باشید:
- با این پایه که Pull Up شده است تنها میتوانید مقادیر ولتاژهای Low را تشخیص دهید.
- در پایههای پورت A، زمانی که میخواهید از قابلیت ADC استفاده کنید باید این نکته را در نظر داشته باشید که نباید پایههای پورت A را بهصورت دائم در حالت Pull Up قرار دهید. در مورد علت این امر در فصل مربوط به ADC بیشتر صحبت میکنیم.
به شکل زیر نگاه بیندازید:
بخشی که با کادر قرمز رنگ در شکل ۸ نشان داده شده عنوان ستونی است که شما با استفاده از آن ستون میتوانید پایههایی که ورودی شدهاند را در حالت Pull Up قرار دهید. این کار تنها با کلیک کردن روی حرف T مقابل هر پایه صورت میگیرد و پس از این کار یک P در این کادر به جای T میآید که به معنای Pull Up شدن این پایه است. دقت کنید که با این پایه تنها مقادیر صفر را میتوانید بخوانید. در CodeVision دستور کار کردن با ورودی از یک پایه به صورت PINX.Y است که X نشان دهندهی نام پورت و Y نشان دهندهی شمارهی پایه در پورت مربوط به خودش است.
حال در اینجا میخواهیم پروژهای را تعریف کنیم که با استفاده از پین B.0 که به عنوان ورودی تعریف شده و در حالت Pull Up قرار گرفته است، زمانی که به این پایه صفر اعمال میشود یک LED که به پایهی B.1 وصل شده را روشن کند و در بقیهی زمانها این LED خاموش باشد. ابتدا با توجه به آنچه که تا کنون آموختهاید تنظیمات مربوط به ورودی بودن پین B.0 و همچنین خروجی بودن B.1 را انجام دهید. دقت کنید که پین B.0 باید در حالت Pull Up قرار گیرد، حال مدار شکل پایین را در Proteus طراحی کنید.
همانطور که در شکل ۹ مشاهده میکنید مدار از یک مقاومت متصل به LED و یک سوئیچ که به زمین وصل شده است طراحی شده است.
این سوئیچ برای متصل کردن GND به پین B.0 است که در واقع همان دادن صفر منطقی به پین B.0 است زمانی که سوئیچ در حالت وصل است.
در غیر این صورت پین B.0 که به حالت Pull Up رفته است همواره مقدار دیجیتال 1 را بر روی خود میبیند. حال شروع به نوشتن کدها در CodeVision میکنیم. قطعه کد زیر را در نظر بگیرید:
[php] while (1) { if(PINB.0==0) PORTB.1=1; else PORTB.1=0; }; [/php]
در این کد با توجه به تعریف پروژه میخواهیم هر زمان که پین B.0 مقدار 0 را تشخیص داد LED متصل به پایهی B.0 را روشن کند و در غیر این صورت LED خاموش باشد. برای این منظور از قالب برنامه نویسی شرطی استفاده میکنیم.
منظور از دستور (if(PINB.0==0 این است که زمانی که پین B.0 مقدار صفر را احساس کرد اعمال مربوط به if انجام شود و دستور else به معنی انجام دادن اعمالی است در صورتی که پین B.0 مقدار روی خود را 1 تشخیص دهد. حال به شکل زیر که نشان دهندهی حالت مدار در زمانی است که سوئیچ فشرده نشده است، توجه کنید.
حال به شکل ۱۱ توجه کنید که نشان دهندهی مدار در حالتی است که سوئیچ فشرده شده است. در این حالت پین B.0 به سطح Low برده شده است و پس از تشخیص این حالت توسط میکرو LED روشن شده است. مربع آبی رنگ در کنار پایهی B.1 نشان دهندهی Low بودن سطح این پایه است.
در بخش بعدی به سراغ خواندن چند ورودی به صورت هم زمان میرویم. با استفاده از این قابلیت شما میتوانید چندین ورودی را به صورت همزمان بخوانید و خروجیهای متفاوتی نیز تولید کنید.