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

آموزش جامع کار با پورت های ورودی و خروجی در میکروکنترلر AVR (آموزش AVR #11)

سلام. آموزش جامع کار با پورت های ورودی و خروجی در میکروکنترلر AVR (آموزش AVR #11) را آماده کردیم. در این آموزش نحوه کار با پورت های Input و Output را به صورت کامل یاد میگیریم.

در قسمت قبلی سری آموزش های AVR ، ما با مبحث وقفه ها آشنا شدیم. پیشنهاد میکنیم ابتدا قسمت قبل را بخوانید.

قسمت قبل : وقفه چیست ؟ آموزش کامل Interrupt در میکروکنترلر AVR ( آموزش AVR #10)

در قسمت های پیشین ما به طور کامل با رجیستر های ورودی خروجی (GPIO) آشنا شدیم. اگر نمیدانید رجیستر GPIO چیست حتما سری آموزش های AVR را از اول بخوانید !

آموزش کار با پورت های Input و Output در میکروکنترلر AVR

خب رجیستر ها 8 بیتی بودند و هر بیت میتوانست 0 یا 1 باشد. ما تصمیم داریم که یک رجیستر را مقدار دهی کنیم. مثلا فرض کنید میخواهیم یک رجیستر با نام X که 8 بیتی است را مثل شکل زیر مقدار دهی کنیم :

11111

خب  رجیستر هست ، مقداری که میخواهیم به آن بدهیم هم هست. اما با چه فرمتی باید مقدار دهی کرد ؟

مقدار دهی باینری : X=0b01110101; | مقدار دهی هگزادسیمال : X=0x75;

0b و 0x عدد نیستند و فرمت مقدار دهی را مشخص میکنند.

مقدار دهی رجیستر ADMUX

به طور مثال ما میخواهیم رجیستر ADMUX را مقدار دهی کنیم. این رجیستر را در قسمت آموزش کامل آنالوگ به دیجیتال بررسی کردیم.

رجیستر ADMUX

11111

میتوانیم این رجیستر را به صورت های زیر مقدار دهی کنیم.

مقدار دهی باینری :

ADMUX=0b01110101;

مقدار دهی هگزادسیمال :

ADMUX=0x75;

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.

مقدار دهی با استفاده از عملگرهای بیتی :

ADMUX=((1<<MUX0)|(1<<MUX2)|(1<<MUX4)|(1<<ADLAR)|(1<<REFS0))

مثال برای مبحث پورت های خروجی در میکروکنترلر AVR

خب بحث اصلی ما کار کردن با پورت های ورودی و خروجی بود، پس برویم سراغ برنامه نویسی ! برنامه نویسی را در این قسمت در محیط کدویژن انجام میدهیم.

حتما ببینید :  آیرنکس ، پروژه و آموزش ! با قدرت شروع به کار کرد !

در این پروژه کدویژن ما یک LED را توسط میکروکنترلر Atmega32 کنترل میکنیم. یعنی پروژه چشمک زدن ال ای دی. برای اینکه LED روشن شود یک ولتاژ حدود 3 ولت باید در پایه های ال ای دی وجود داشته باشد.

همانطور که میدانید پایه شماره 10 میکروکنترلر یعنی VCC را به +5 ولت و پایه شماره 11 یا 31 که GND هستند را به 0 ولت وصل میکنیم. وقتی این اتصال ها را انجام دادید میکروکنترلر شروع به کار خواهد کرد.

ال ای دی را توسط یک مقاومت به پورت C0 میکروکنترلر متصل میکنیم مانند تصویر زیر :

آموزش جامع کار با پورت های ورودی و خروجی در میکروکنترلر AVR

حالا باید با رجیستر ها و پورت ها کار کنیم. پایه C0 میکروکنترلر را باید به عنوان خروجی تعریف کنیم. همانطور که قبلا توضیح دادیم برای این کار باید مقدار بیت متناظر با این پایه را 1 تعریف کنیم.

سپس برای اینکه ال ای دی روشن شود ، باید سطح ولتاژ پایه C0 زیاد شود. برای این کار  نیز بیت منتاظر با این پایه در رجیستر PortC برابر با 1 باشد. فرکانس کاری Microcontroller را در مبحث امروز بر روی 8 مگاهرتز تنظیم میکنیم.

توضیحات کد مثال

در قسمت اول کد ما کتابخانه میکروکنترلر مگا 32 را فراخوانی میکنیم.

#include <mega32.h>

سپس کتابخانه Delay را فراخوانی میکنیم. این کتابخانه وظیفه اش تاخیر زمان است.

#include <delay.h>

این کتابخانه دو تابع را در برمیگیرد یعنی :

delay_us(time); و delay_ms(time);

که از اولی برای ساخت تاخیرهای در حد میلی ثانیه و از دومی برای ساخت تاخیرهای در حد میکروثانیه استفاده میشود.

با کد زیر نیز همانطور که گفته شد پایه C0 را به عنوان خروجی تعریف میکنیم.

DDRC=0x01; // ya : 0b00000001

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

while(1){}

سپس به قسمت اصلی کد میرسیم. این قسمت در باکس زیر توضیح داده شده است.

PORTC=0x01; // فعال شدن پورت
delay_ms(250); // به مدت 250 میلی ثانیه
PORTC=0x00; // خاموش شدن پورت
delay_ms(250); // به مدت 250 میلی ثانیه

و اینطور میشود که LED بی نهایت بار هر 250 میلی ثانیه روشن میشود!

حتما ببینید :  نمایشگر سون سگمنت چیست ؟ آموزش کامل 7 Segment ، مالتی پلکس و اثر فلیکر

کد کامل :

#include <mega32.h>
#include <delay.h>


void main(void){

DDRC=0x01;

while(1){

PORTC=0x01;
delay_ms(250);
PORTC=0x00;
delay_ms(250);
}
}

آموزش پورت ورودی خروجی AVR

مثال برای مبحث پورت های ورودی در میکروکنترلر AVR

خب کار با پورت های خروجی را یادگرفتیم. حالا چطور میتوانیم از پورت های ورودی استفاده کنیم ؟

ما باید مقدار بیت متناظر با پین مورد نظر خود را در رجیستر DDRC برابر با 0 قرار دهیم.

و سپس اگر مقدار بیت مورد نظر در رجیستر PINC برابر 1 شد ، یعنی ورودی 5+ داریم و اگر مقدار بیت 0 شود یعنی ورودی نداریم !

در این جا LED نداریم. ما باید پین C0 میکروکنترلر را به عنوان ورودی تعریف کنیم و چک کنیم که اگر مقدار این پایه برابر 1 شد ، کاری را برایمان انجام بدهد.

توضیحات کد مثال

در ابتدا که مانند کد قبل ، کتابخانه میکروکنترلر را فراخوانی میکنیم. سپس با کد زیر ، پین C0 را به عنوان ورودی تنظیم میکنیم.

DDRC=0x00;

سپس شرط را تعیین میکنیم. به کد زیر دقت کنید. ما در خط اول این کد گفتیم اگر مقدار پین C0 ، برابر با 1 شد ، خط دوم (بین پرانتز) را انجام بدهد. یعنی به جای محل قرار گیری کد ها شما کد های مورد نیاز خود را وارد میکنید. این کدها میتوانند روشن شدن یک پایه ی دیگر باشند یا یک عملیات پیچیده !

if (PINC==0x01){
محل قرار گیری کد ها
}

کد کامل :

#include <mega32.h> 
void main(void){
 DDRC=0x00;
  if (PINC==0x01){
   // Codes 
} 
}

خب ما در این قسمت به طور ساده با مبحث پورت های خروجی و ورودی آشنا شدیم. در صورتی که قسمتی را متوجه نشدید در نظرات اعلام کنید.

در قسمت بعد یک پروژه دماسنج را با سنسور LM35 و میکروکنترلر AVR میسازیم به همراه توضیحات خط به خط کد.

قسمت بعدی : آموزش کامل پروژه دماسنج AVR با سنسور LM35 و سون سگمنت (آموزش AVR #12)

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
برچسب ها

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (لطفا در خصوص سوالات مربوط به مطالب سایت از قسمت نظرات همان مطلب اقدام کنید و به دایرکت اینستاگرام یا پیوی تلگرام پیام ندهید.)

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

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

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