راه اندازی واحد ADC توسط EasyMCU
راه اندازی واحد ADC توسط EasyMCU : قریب به اتفاق میکروکنترلرهای امروزی دارای واحد ADC می باشند. ADC کوتاه شده عبارت Analog to Digital Converter به مفهوم مبدل دیجیتال به آنالوگ می باشد که با A2D نیز شناخته می شود.
کاربرد ADC
دنیای بیرون شامل یک محیط آنالوگ و به طبع آن شامل سیگنال های آنالوگ می باشد، اما دنیای میکروکنترلر باینری است و در این دنیا فقط سطح منطقی 0 و یا 1 معتبر است که صرفا شامل 2 سطح ولتاژ بین 0 ولت و 3.3v یا 5v و یا … می باشد. هر گاه بخواهیم اطلاعاتی از دنیای بیرون (محیط آنالوگ) دریافت کنیم و این اطلاعات توسط پردازنده پردازش شود، نیاز به واسطی به نام ADC داریم که با نمونه گیری از سیگنال های آنالوگ ، نمونه های گرفته شده را در قالب مقادیر دیجیتال متناسب با سطح ولتاژ آنالوگشان در حافظه ذخیره می کند و به این ترتیب پردازنده قادر است از سیگنال های آنالوگ دنیای بیرون درک پیدا کند. برای مثال صحبت کردن و تمام اصوات در دنیای بیرون آنالوگ هستند و اگر قصد پردازش روی آنها یا انتقال این سیگنال ها در بستر دیجیتال را داشته باشیم ، نیاز است ابتدا این سیگنال ها به دیجیتال تبدیل شوند و بعد انتقال یابند که این امر نمونه برداری و تبدیل آنالوگ به دیجیتال به عهده واحد ADC می باشد. همینطور خیلی از سنسورها (دما، فاصله سنج و …) خروجی آنالوگ دارند و بسته به تغییراتی که احساس می کند ، سطوح مختلف ولتاژ را در خروجی ایجاد می کنند. مجدد چنین اطلاعاتی بایستی توسط واحد ADC نمونه برداری شده و تبدیل به مقادیر دیجیتال شوند تا پردازنده بتواند درکی از ورودی ها داشته و روی آنها پردازش انجام دهد و خروجی مناسب را ایجاد کند.
راه اندازی واحد ADC توسط EasyMCU
بورد Zcross دارای 6 کانال ADC می باشد که طبق pinout بورد zcross از پایه P5 تا P10 (به ترتیب CH6 تا CH1) در دسترس می باشند.
در ادامه نحوه ی اتصال یک پتانسیومتر به عنوان نماینده سیگنال آنالوگ به بورد Zcross را بررسی می کنیم.
توجه : بیشترین ولتاژ اعمالی مجاز به ADC برد zcross برابر 3.3v می باشد.
نحوه سیم بندی
متودها
نحوه خواندن مقدار آنالوگ
به صورت پیشفرض واحد adc فعال می باشد و مستقیم قابل استفاده است. در کد ذیل مقدار آنالوگ روی CH6 (معادل پایه P5) خوانده و نمونه برداری می شود و حاصل نمونه برداری که یک مقدار دیجیتال متناسب با مقدار آنالوگ نمونه برداری شده است در متغییر sensorvalue ذخیره می شود.
1 |
sensorValue = adc.read(CH6); |
لطفا هرگونه سوال و … راجع به این مطلب را در انجمن ایزی.ام.سی.یو مطرح نمایید.
مثال نمونه1:
راه اندازی واحد ADC توسط EasyMCU: چاپ کردن مقادیر دیجیتال نمونه برداری شده در محیط ترمینال EasyMCU سمت PC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include "headers.h" /* ReadAnalogVoltage Reads an analog input on pin 5, converts it to voltage, and prints the result to the serial monitor. Attach the center pin of a potentiometer to pin P5, and the outside pins to +3.3V and ground. This example code is in the public domain. */ int main() { // the setup routine runs once when you press reset: unsigned int sensorValue; while (1) {/* Loop forever */ // read the input on analog P5 -> CH6: sensorValue = adc.read(CH6); // sensorValue = analogRead(CH6); cdc.println(sensorValue); delay.ms(500); } /* while */ } /* main */ |
مثال نمونه2:
راه اندازی واحد ADC توسط EasyMCU: چاپ کردن مقادیر حقیقی ولتاژ خوانده شده از ورودی آنالوگ ( ولت متر )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include "headers.h" /* ReadAnalogVoltage Reads an analog input on pin 5, converts it to voltage, and prints the result to the serial monitor. Attach the center pin of a potentiometer to pin P5, and the outside pins to +3.3V and ground. This example code is in the public domain. */ int main() { // the setup routine runs once when you press reset: float voltage; unsigned int sensorValue; while (1) {/* Loop forever */ // read the input on analog P5 -> CH6: sensorValue = adc.read(CH6); // sensorValue = analogRead(CH6); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 3.3V): voltage = sensorValue * (3.3 / 4096.0); // print out the voltage value: cdc.println(voltage); delay.ms(500); } /* while */ } /* main */ |
مثال نمونه 3:
راه اندازی واحد ADC توسط EasyMCU: نمایش مقدار دیجیتال خوانده شده از پتانسیومتر در قالب LED های بورد zcross
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include "headers.h" /* AnalogReadLEDs Attach the center pin of a potentiometer to pin P5, and the outside pins to +3.3V and ground. This example code is in the public domain. */ int main() { // the setup routine runs once when you press reset: // Define a variable to keep analog value uint32_t sensorValue; // don't need to config board's LEDs, they configured as output at startUp by default. // if use USB CDC don't need to init/begin serial comunication, it will run by itself at start Up // the loop routine runs over and over again forever: while (1) {/* Loop forever */ // read the input on analog pin P5: sensorValue = adc.read(CH6); // sensorValue = analogRead(CH6); // by default analogRead have 12bits of ADC(Analog to Digital Converter) value // Zcross have 4 LED, so we can show just 4 bit to 4 LED of Zcross board. // so we need just 4 more significant bits, then shift its value 8 times to right sensorValue = sensorValue >> 8; // Show value read on boars's LEDs: io.portWrite(sensorValue,P1,P2,P3,P4); delay.ms(100); // delay in between reads for stability } /* while */ } /* main */ |