شنبه, اردیبهشت 1, 1403
More
    خانهپروژه های میکروکنترلر AVRپروژه با انواع LCDراه اندازی ADC در میکروکنترلر AVR

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

    اگر بخواهیم مبدل انالوگ به دیجیتال (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

     

     

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

    عابد رازانی
    عابد رازانیhttps://emic.ir/
    فارغ التحصیل کارشناسی الکترونیک از دانشکده باهنر شیراز و علاقمند به برنامه نویسی و طراحی مدارات الکترونیکی, در حال حاضر به تولید محتوای آموزشی و طراحی و انجام پروژه مشغول هستم.

    12 نظرات

    1. اگر ولتاژ ورودی 12 ولت- تغذیه 25 ولت. از مقاومتهای کاهش ولتاژ استفاده می شود.
      در شرط if مقدار a کوچکتر از چه قدر است؟

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

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

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

        • سلام
          خسته نباشید
          در کد ویژن، اگر یک کانال adc رو بخونم به درستی کار میکنه
          اما اگر کانال دوم رو هم بخونم، تداخل ایجاد میشه و هر دو کانال رو یکی و مثل هم میخونه وتداخل ایجاد میشه، هر کانال رو هم دو بار پشت سر هم خوندم اما باز هم فایده ای نداشت
          مشکل کجاست؟

    ارسال دیدگاه

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

    spot_img