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

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

ADC چیست؟

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

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

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

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

نحوه کار ADC

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

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

اگر تيكِ گزينه‌ي “Use 8 bits” را برداريم، بازه‌ي ما به 0 تا 1024، گشترش پيدا خواهد كرد و در حقيقت دقت اندازه‌گيري ما 4 برابر خواهد شد. يعني 5 ولت ما، به جاي 255، با عدد 1024 گزارش خواهد شد، و ولتاژهاي بين 0 و 5 ولت نيز متناسباً با عددي بين 0 تا 1024 گزارش خواهند شد. اما در كار‌هاي ما نيازي به اين دقت بالا نيست و معمولاً “Use 8 bits” را تيك مي‌زنيم تا بازه‌ي ما بين 0 تا 255 باشد.

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

خروجی دیجیتالی =ولتاژ مرجع/ (ولتاژ ورودی * 1024)

Digital output =(Vin * 1024)/Vref

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

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

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

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

if (read_adc(0)) > 100;

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

int a;
a = read_adc(1);

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

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

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

 

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


توسط

برچسب‌ها:

دیدگاه‌ها

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

  1. مهدی ابراهیمی نیم‌رخ

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

  2. اشکان نیم‌رخ
    اشکان

    بسیار روان و گویا بود من رشته ام مهندسی مکانیک هست و برای ساخت یک دستگاه نیاز به یادگیریavr پیدا کردم . با اینکه اطلاعات برقی ام خیلی ضعیفه ولی کل مطلب رو متوجه شدم . کاش سایر مطالب رشته برق هم هم به همین صورت در نت وجود داشت.
    خدا خیرتون بده

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

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