معماری
خانه / آموزش مجازی / میکروکنترلر / دوره آموزشی برنامه نویسی میکروکنترلر AVR با کامپایلر CodeVision / جلسه CV,2.x : مبدل آنالوگ به دیجیتال (ADC) در کامپایلر CodeVision-AVR

جلسه CV,2.x : مبدل آنالوگ به دیجیتال (ADC) در کامپایلر CodeVision-AVR

دوره آموزشی برنامه نویسی میکروکنترلر AVR با کامپایلر CodeVision ، فصل ۱ : آموزش مقدماتی CodeVision ، جلسه ۱ : مبدل آنالوگ به دیجیتال (ADC) در کامپایلر CodeVision-AVR

ADC چیست؟

ADC مخفف “Analog-Digital Converter” و به معناي مبدل آنالوگ به ديجيتال است.اگر بخواهيم اين قابليت را به صورت ساده توصيف كنيم، يك ولت متر ديجيتال است كه بر روي پايه‌هاي ميكروكنترلر نصب شده است و به وسيله‌ي آن مي‌توان ولتاژ پايه‌هاي ورودي را با دقت مناسبي اندازه‌گيري كرد.

همانطور كه مي‌دانيد ما تا به حال در هيچ‌ آي سي نمي‌توانستيم شدت ولتاژ ورودي را به دقت اندازه گيري كنيم و فقط مي‌توانستيم بدانيم آيا ولتاژ ورودي بالاي ۲٫۵ ولت است يا زير ۲٫۵ ولت، و ورودي‌هايمان را به صورت ۰ و ۱ برسي مي‌كرديم.(آي سي ها ورودي‌هاي خود را منطقي مي‌كنند)اما به كمك اين قابليتِ ميكروكنترلر‌هايِ خانواده‌ي AVR، ما مي‌توانيم با دقت مناسبي ولتاژ ورودي خود را بررسي كنيم.

ابتدا به CodeWizard رفته و از قسمت Analog to Digital Converter تیک گزینه ADC Enabled را زده و مانند تصویر زیر تنظیمات را انجام می دهیم.

همانطور كه مي‌بينيد، دومين قسمتي كه تيك زده شده “Use 8 bits” است.در ادامه در مورد دليل اين كار توضيح داده شده است.

نحوه کار ADC

همانطور كه گفته شد، وظيفه‌ي ADC، اندازه گيري ولتاژي است كه بر روي پايه‌ي ورودي قرار گرفته است. اما ADC عددي را كه مولتي متر به ما نشان مي‌دهد گزارش نمي‌كند، بلكه متناسب با ولتاژ پايه‌ي ورودي، عددي را در بازه‌ي ۰ تا ۲۵۵ به ما گزارش مي‌كند. يعني عدد ۰ را به ولتاژ ۰ولت اختصاص مي‌دهد، و ۲۵۵ را به ۵ ولت؛ و هر ولتاژي بين ۰ تا ۵ ولت را، متناسباً، با عددي بين ۰ تا ۲۵۵ گزارش مي‌كند. در حقيقت براي سهولت در محاسبه، مي توانيد فرض كنيد اندازه‌ي ولتاژ ورودي بر حسب ولت، ضربدر ۵۱، برابرست با عددي كه ADC براي آن ولتاژ مشخص، به ما گزارش مي‌كند.

به عنوان مثالي ديگر، اگر خروجي مدار يك سنسور نوري را به پايه‌ي ورودي ADC متصل كرده باشيد، و خروجي مدار سنسور ۲ ولت باشد،‌ADC عدد ۱۰۲ را به ما گزارش مي‌كند.

اگر تيكِ گزينه‌ي “Use 8 bits” را برداريم، بازه‌ي ما به ۰ تا ۱۰۲۴، گشترش پيدا خواهد كرد و در حقيقت دقت اندازه‌گيري ما ۴ برابر خواهد شد. يعني ۵ ولت ما، به جاي ۲۵۵، با عدد ۱۰۲۴ گزارش خواهد شد، و ولتاژهاي بين ۰ و ۵ ولت نيز متناسباً با عددي بين ۰ تا ۱۰۲۴ گزارش خواهند شد. اما در كار‌هاي ما نيازي به اين دقت بالا نيست و معمولاً “Use 8 bits” را تيك مي‌زنيم تا بازه‌ي ما بين ۰ تا ۲۵۵ باشد.

فورمول كلي ADC به شكل زير استفاده ميشه:

خروجی دیجیتالی =ولتاژ مرجع/ (ولتاژ ورودی * ۱۰۲۴)

Digital output =(Vin * 1024)/Vref

درباره‌ي تنظيمات ADC مطالب زيادي وجود دارد كه ما از مطرح كردن تمام آن‌ها در اين بخش مي‌پرهيزيم، دوستاني كه علاقه‌مند هستند، مي‌توانند از طريق كتاب‌هاي مرجع و ديگر مراجع موجود، مطلب را پي بگيرند، اما در همين حدي كه مطالب در اينجا مطرح مي‌شوند، براي كار ما تقريباً كافيست و الزامي در مطالعه‌ي منابع جانبي نيست

استفاده از ADCدر برنامه

در میکرو کنترلر ATMEGA16، ۸ پایه ی به ADC اختصاص داده شده، یعنی شما می توانید به صورت همزمان، خروجیِ ۸ سنسور یا مدار جانبی را به میکروکنترلر خود وصل کنید و اطلاعات آن ها را به وسیله ی ADC دریافت کنید.با فعال کردن ADC در CodeWizard، این پایه ها در اختیار ADC قرار می گیرند. دقت کنید که برای استفده از ADC حتماً باید قبلاً تنظیمات را در CodeWizard انجام داده باشید.
این ۸ پایه طبق شکل زیر از ADC0 تا ADC7 نام گذاری شده اند.

هنگامیکه شما تنظیمات اولیه را برای فعال سازی ADC در CodeWizard انجام می دهید، به شما این امکان داده می شود که در هر قسمت از برنامه، مقدار هر یک از ۸ ADC را بخوانید و از آن استفاده کنید. عبارت” ( شماره پایه )  read_adc ” در هر قسمت از برنامه، حاوي مقدار ADC مورد نظر شماست. مثلاً اگر بخواهيم مقدار ADC0 را بررسي كنيم كه آيا از ۱۰۰ بزرگتر است يا خير، به شكل زير عمل مي‌كنيم:

if (read_adc(0)) > 100;

يا مثلاً اگر بخواهيم مقدار ADC1 را در داخل يك متغير نگه داري كنيم، به شكل زير عمل مي كنيم:

int a;
a = read_adc(1);

يا مثلا اگر بخواهيم بر حسب ولتاژ اعداد ورودي را داشته باشيم، بايد به صورت زير عمل كنيم (البته اگر تيك Use 8 bit زده نشده باشه)

a= read_adc(3);
a= (a/1024)*5;

در اينجا متغير a مقدار دقيق ولتاژ را براي يك ولتاژ مرجع ۵ ولت نشان مي دهد.

 

مبدل آنالوگ به ديجيتال، يكي از مهمترين قابليت‌هايست كه اكثر ميكروكنترلر‌هاي خانواده‌ي AVR آن را دارند. در ميكروكنترلر‌هاي قديمي‌تر، براي اين كار، بايد يك آي سي به صورت جداگانه بر روي مدار تعبيه مي‌شد.

یک دیدگاه

  1. عالی بود آقا کیوان آموزنده و خیلی راحت متوجه شدم ممنون

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

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

قالب وردپرس