راه اندازی ADC در میکروکنترلر AVR

10

اگر بخواهیم مبدل انالوگ به دیجیتال (ADC) را به صورت ساده توصیف کنیم، یک ولت متر دیجیتال است که بر روی پایه های میکروکنترلر نصب شده است و به وسیله ی آن میتوان ولتاژ پایه های ورودی را با دقت مناسبی اندازه گیری کرد. همانطور که میدانید ما تا به حال در هیچ آی سی نمیتوانستیم شدت ولتاژ ورودی را به دقت اندازه گیری کنیم و فقط میتوانستیم بدانیم آیا ولتاژ ورودی بالای ۲.۵ ولت است یا زیر ۲.۵ ولت، و ورودی هایمان را به صورت ۰ و ۱ بررسی می کردیم. (آی سی ها ورودیهای خود را منطقی می کنن) اما به کمک این قابلیت میکروکنترلرهای خانواده ی AVR ، ما میتوانیم با دقت مناسبی ولتاژ ورودی خود را بررسی کنیم .

در میکروکنترلر ATMEGA16 (و ATMEGA32) هشت پایه به ADC اختصاص داده شده، یعنی شما می توانید به صورت همزمان ، خروجی ۸ سنسور یا مدار جانبی را به میکرو کنترلر خود وصل کنید و اطلاعات آن ها را به وسیله ی ADC دریافت کنید. اما این ۸ پایه کدام پایه ها هستند؟  این ۸ پایه ، پایه های مربوط به پورت A هستند که با فعال کردن ADC در کدویزارد، این پایه ها در اختیار ADC قرار می گیرند.

این پایه ها طبق شکل زیر از ADC0 تا ADC7 نام گذاری شده اند:

یکی از کاربردهای مهم ADC میتواند در رباتها برای تشخیص رنگ باشد. همانطور که میدانید هر رنگ میزان مشخصی از نور را بازتاب می دهد و بقیه را جذب می کند، ما با اندازه گیری مقدار نور بازتاب شده ، میتوانیم رنگ را تشخیص دهیم . در اینجا ما برای اندازه گیری میزان شدت نور بازتاب شده ، باید از ADC میکروکنترلر استفاده کنیم تا بتوانیم ولتاژ خروجی سنسور نوری خود را به دقت اندازه گیری کنیم.

 

در برنامه ای که در ادامه قرار داده خواهد شد, لازم است تا کاربرد یکسری توابع را بدانید :

برای خواندن مقدار انالوگ از یکی از پایه های adc میکرو از دستور زیر استفاده میکنیم

که بجای x شماره پین مورد نظر از 0 تا 7  (ADC0 تا ADC7) را قرار می دهیم. به عنوان مثال, دستور زیر مقدار ولتاژ انالوگ روی پین ADC0 را در متغیر a می ریزد ( البته خروجی این دستور عددی بین 0 تا 1023 می باشد که با استفاده از فرمول تناسب که در ادامه گفته می شود, ان را به ولتاژ تبدیل می کنیم )

 

فرمول تناسب در ADC :

مبدل آنالوگ به دیجیتال در میکرو کنترلر AVR به ازای ۰ تا ۵ ولت ورودی که به آن اعمال می شود عددی بین ۰ تا ۱۰۲۳ تولید می کند. پس اگر عدد تولید شده ۵۱۱ بود ولتاژ ورودی ۲.۵ ولت بوده است .
بنابراین هر مقداری را که با تابع (read_adc(x خواندیم درصورتی که بخواهیم به ولتاژ تبدیل کنیم , باید در تناسب قرار داده تا بفهمیم مقدار ولتاژ ورودی چقدر بوده است .

شماتیک :

در این پروژه مبدل انالوگ به دیجیتال میکرو (ADC) تشخیص می دهد که ولتاژی که به پین ADC0 می دهیم کمتر از 2 ولت است یا بیشتر و درنهایت عبارتی روی LCD کاراکتری نمایش می دهد

نکته : همانطور که در شماتیک بالا مشاهده می کنید, برای استفاده از ADC میکرو باید پین AREF و AVCC را به ولتاژ مرجع خود که در اینجا 5 ولت است متصل کنید. (پین 31 را هم که در شبیه سازی Proteus وجود ندارد, به منفی وصل کنید)

 

برنامه کدویژن :

در کدویزارد میکرو ATmega16 را انتخاب کنید و فرکانس ان را 1 مگا هرتز تنظیم کنید. تمام پین های پورت C را جهت اتصال به LCD خروجی کنید و LCD کاراکتری را برای اتصال به پورت C تنظیم کنید. تنظیمات ADC باید به صورت زیر باشد

اگر با تنظیمات محیط کدویزارد اشنا نیستید, حتما این پست ” اشنایی با محیط نرم افزار CodeVisionAVR ” را مطالعه کنید .

برنامه کامل این پروژه بصورت زیر است :

قسمت های مهم برنامه توضیح داده شده و نیاز به توضیح خاصی نیست اگر سوالی داشتید در قسمت نظرات مطرح کنید. اگر با دستورات مربوط به نوشتن روی lcd کاراکتری اشنا نیستید این مطلب ” نوشتن متن روی LCD کاراکتری ” رو مطالعه کنید .

کلیپ شبیه سازی در پروتئوس :

 

دانلود فایل ها

پسورد فایل زیپ : www.emic.ir

 

 

نظر یادتون نره …

10 دیدگاه‌ها

  1. اگر بخوام چندتا کانال ADC رو بخونم باید ADMUX رو چجوری تغییر بدم که هر بار تغییر بکنه؟ ممنونم

    • نیازی به تغییر در ADMUX نیست. برای خواندن هر کدام از پین های adc میکروکنترلر فقط کافی است شماره ان پین را در تابع read_adc قرار دهید و مقدار را بخوانید.

  2. سلام خسته نباشید. من میخوام مقدار adc رو روی نمایشگر نشون بدم اما با تغییر ولتاژ هیچ تغییری رو عدد نمایش داده شده ایجاد نمیشه.مشکا از کجاس؟

    • میکرو به درستی عمل نخواهد کرد باید فرکانسی که در کدویزارد تنظیم می کنید با فرکانسی که هنگام پروگرام کردن میکرو تنظیم می کنید یکی باشه

ارسال دیدگاه

لطفا دیدگاه خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید