Chapter 12: ADC | পর্ব ১২ঃ এডিসি
এডিসি কী?
ইলেক্ট্রনিক্সে আমরা যেসব প্যারামিটার নিয়ে কাজ করি বা পরিমাপ করি সেগুলো সাধারনত অ্যানালগ। যেমন ভোল্টেজ, কারেন্ট, রেজিস্টেন্স, টেম্পারেচার ইত্যাদি। কিন্তু মাইক্রোকন্ট্রোলারের যে কয়টা প্রজেক্ট আমরা এই পর্যন্ত করেছি তা থেকে কী দেখতে পেলাম? মাইক্রোকন্ট্রোলার কি অ্যানালগ ডাটা চেনে? না। মাইক্রোকন্ট্রোলার চেনে শুধু 0 আর 1. তাই, মাইক্রোকন্ট্রোলার দিয়ে আমরা কোনোকিছু পরিমাপ করতে চাইলে অবশ্যই সেই ডাটাকে আমাদের অ্যানালগ থেকে ডিজিটালে রুপান্তর করতে হবে। এই কাজটাই করবে এডিসি(Analog to Digital Converter)। আমাদের আলোচ্য মাইক্রোকন্ট্রোলার ATmega16 এর নিজস্ব একটি ১০ বিটের এডিসি আছে। ১০ বিটের অর্থ হল, এটি প্রাপ্ত অ্যানালগ ডাটাকে 2^10=1024 টি ভাগে বিভক্ত করে।
রেফারেন্স এবং সাপ্লাই ভোল্টেজঃ
রেফারেন্স ভোল্টেজ নির্ধারণ করে সর্বোচ্চ এবং সর্বনিম্ন অ্যানালগ ইনপুট কত হবে। ম্যাক্সিমাম অ্যানালগ ইনপুট ভোল্টেজকে পিন AREF এ স্পেসিফাই করে দিতে হবে। বাই ডিফল্ট এর সর্বনিম্ন ভ্যালু ০। সাধারনত AREF= VCC। দুটি ইন্টারনাল রেফারেন্স ভোল্টেজ ৫ ভোল্ট এবং ২.৫৬ ভোল্টের মধ্য থেকেও AREF সিলেক্ট করা সম্ভব।
এডিসির একটি আলাদা অ্যানালগ সাপ্লাই ভোল্টেজ পিন আছে AVCC নামে। এটি VCC এর চেয়ে বড়জোড় ০.৩ ভোল্ট কম বা বেশি হতে পারে। ATmega16 এর প্রস্তুতকারকরা উপরের ফিল্টার সার্কিটটি ব্যবহার করতে বলেন।
রেজল্যুশনঃ
এডিসি ব্যবহারের ক্ষেত্রে রেজল্যুশন খুবই গুরুত্বপূর্ণ। রেজল্যুশন দ্বারা বোঝা যায় এডিসি কতটা সুক্ষভাবে ইনপুট সিগন্যাল পরিমাপ করতে পারে। ধরি, রেফারেন্স ভোল্টেজ=৫ ভোল্ট, ১০ বিটের এডিসির ক্ষুদ্রতম এক ভাগের মান হবে ৫/১০২৪=৪.৮ মিলিভোল্ট(প্রায়)।
এডিসি চ্যানেলঃ
ATmega16 এর এডিসির মোট আটটি চ্যানেল রয়েছে। ডেটাশিট অনুযায়ী চ্যানেলগুলোর লোকেশন নিম্নরুপ।
এডিসি ক্লকঃ
মাইক্রোকন্ট্রোলারের মতই এডিসিকে সচল করার জন্যও একটি ক্লক সিগন্যাল দরকার হয়। নিচের কয়েকটি অপশন থেকে সুবিধাজনকভাবে ক্লক সিলেক্ট করে নিতে হবে।
Fosc/2=8MHz/2= 4MHz
Fosc/4=8MHz/4=2MHz
Fosc/8=8MHz/8=1MHz
Fosc/16=8MHz/16=500KHz
Fosc/32=8MHz/32=250KHz
Fosc/64=8MHz/64=125KHz
Fosc/128=8MHz/64=62.5KHz
এডিসি এর রেজিস্টারসমূহঃ
১)এডিসি মাল্টিপ্লেক্সার সিলেকশন রেজিস্টার(ADMUX): ADMUX একটি আট বিটবিশিষ্ট রেজিস্টার। বিটগুলোর নাম এবং কাজ নিচে দেখানো হল।
REFS1 ও REFS0ঃ এই বিট দুইটি নির্ধারন করে এডিসির রেফারেন্স ভোল্টেজ কত হবে। উপরের ছবিটির বাম দিকে REFS1 ও REFS0 এর চারটি ভিন্ন ভিন্ন কম্বিনেশনে কিভাবে বিভিন্ন রেফারেন্স ভোল্টেজ সিলেক্ট করা যায় তা দেখানো হয়েছে।
ADLAR bit: আমরা জানি এডিসির রেজাল্ট ১০ বিট। কিন্তু রেজিস্টরগুলো ৮ বিট। এই কারনেই এডিসির রেজাল্টের প্রথম ৮ বিট একটি রেজিস্টারে জমা হবে এবং বাকি দুটো বিট আরেকটি রেজিস্টারে জমা হবে। এই যে বিটের ভাগাভাগি, এটা কিভাবে হবে তা নির্ধারিত হয় ADLAR bit দ্বারা।
যদি ADLAR=0 হয় তাহলে,
ADCH রেজিস্টারে ঢুকবে ফলাফলের শেষ দুটি বিট। অর্থাৎ ADC8 এবং ADC9।
ADCL রেজিস্টারে ঢুকবে ফলাফলের প্রথম আটটি বিট। অর্থাৎ, ADC0-ADC7 পর্যন্ত।
অর্থাৎ কনভারশনের সঠিক রেজাল্টটি পেতে হলে আমাদেরকে ADCH কে আটঘর বামে শিফট করে ADCL এর সাথে যোগ করতে হবে।
অপারেশনটিকে প্রকাশ করা হয় এভাবে,
ADC=(ADCH<<8)|ADCL;
যদি ADLAR=1 হয় তাহলে,
ADCH রেজিস্টারে ঢুকবে ফলাফলের শেষ আটটি বিট। অর্থাৎ ADC2 থেকে ADC9 পর্যন্ত।
ADCL রেজিস্টারে ঢুকবে ফলাফলের প্রথম দুটি বিট। অর্থাৎ, ADC0-ADC1 পর্যন্ত।
চ্যানেল সিলেকশন বিটঃ
MUX0 থেকে MUX4 চ্যানেল সিলেকশন বিট নামে পরিচিত। নিচের চার্ট অনুযায়ী এই বিটগুলোর মোট আটটি ভিন্ন ভিন্ন কম্বিনেশন করে আটটি চ্যানেল সিলেক্ট করা হয়।
২)এডিসি কন্ট্রোল অ্যান্ড স্ট্যাটাস রেজিস্টার এ(ADCSRA):
বিট নং ৭- ADEN(ADC enable):
এই বিটে 1 দিলে এডিসি সক্রিয় হয়, 0 দিলে ADC নিস্ক্রিয় থাকে।
বিট নং ৬-ADSC(ADC start conversion):
এই বিটে 1 দিলে অ্যানালগ থেকে ডিজিটালে রুপান্তর শুরু হয়।
বিট নং ৩-ADIE(ADC interrupt enable):
আমরা আগেই জেনেছি এডিসি ইন্টারাপট জেনারেট করতে সক্ষম। এই বিটে 1 দিলে এডিসি একটি ইন্টারাপ্ট জেনারেট করবে।
বিট নং ২ থেকে ০-ADPS2:0-(ADC prescaler select bit):
এই বিটগুলো নির্ধারণ করে মাইক্রোকন্ট্রোলারের ক্লকের ফ্রিকোয়েন্সিকে কত দিয়ে ভাগ করে এবং এডিসি এর ক্লকের ফ্রিকোয়েন্সি পাওয়া যাবে। যে সংখ্যা দিয়ে ভাগ করা হয় তাকে প্রিস্কেলার বলে।
চলুন বানাই ছোট্ট একটি ভোল্টমিটারঃ
এবার আমরা দেখব কিভাবে মাইক্রোকন্ট্রোলারের এডিসি ব্যবহার করে ভোল্টেজ পরিমাপ করতে হয়।
প্রয়োজনীয় যন্ত্রপাতিঃ
প্রয়োজনীয় যন্ত্রপাতি | পরিমান | লিংক |
AVR Trainer kit | 1 | এখানে ক্লিক করুন |
ATmega16/ATmega32 | 1 | এখানে ক্লিক করুন
or |
এই এক্সপেরিমেন্টে প্রথমে আমরা একটি ভোল্টেজ ডিভাইডার সার্কিট বানাবো। ভোল্টেজ ডিভাইডার সার্কিটটিতে একটি ১কিলোওহম রেজিস্টর এবং একটি ১০০ কিলোওহম ভ্যারিয়েবল পট রেজিস্টর পরস্পর সিরিজে থাকবে। সার্কিটটিতে যদি আমরা ৫ ভোল্ট সাপ্লাই দিই তাহলে ভোল্টেজ ডিভাইডার রুল অনুযায়ী ১০০ কিলোওহম পটের দুই প্রান্তের ভোল্টেজের পার্থক্য সবসময়ই পাঁচ ভোল্টের কম হবে। এই ভোল্টেজটিই আমরা পরিমাপ করব ADC0 চ্যানেল দিয়ে। অর্থ্যাত ভ্যারিয়েবল পটের ওয়াইপার পিনটি ADC0 তে কানেক্টেড থাকবে মাইক্রোকন্ট্রোলারের পোর্ট বি তে কানেক্ট করা থাকবে একটি কমন ক্যথোড সেভেন সেগমেন্ট ডিসপ্লে। পটটি ভ্যারি করার সাথে সাথে ADC0 পিনের ভোল্টেজ পরিবর্তিত হবে এবং সেই ভোল্টেজ দেখাবে সেভেন সেগমেন্টে।
সার্কিটটি হবে নিম্নরুপ।
এভিআর ট্রেনার কিটে উপরের সার্কিটের সকল পার্টস ইন –বিল্ট আছে। শুধু জিফ সকেটে একটি মাইক্রোকন্ট্রোলার বসিয়ে প্রয়োজনীয় কানেকশনগুলো দিয়ে নিলেই হল। কেউ ট্রেনার কিট ব্যবহার করতে না চাইলে প্রোগ্রামার দিয়ে আইসি প্রোগ্রাম করে, উপরের সার্কিটের সকল পার্টস আলাদাভাবে কিনে ব্রেডবোর্ডে বসিয়েও কাজ করতে পারেন।
প্রোগ্রামঃ
এবার নিচের প্রোগ্রামটি AVR studio তে লিখুন এবং কম্পাইল করে, বিল্ড করে হেক্স ফাইলটি মাইক্রোকন্ট্রোলারে লোড করে ফলাফল দেখুন।
উল্লেখ্য এই প্রোগ্রামটি মাইক্রোসি’র এডিসি লাইব্রেরি ব্যবহার করে আরও সংক্ষেপে লেখা যায় যার প্রয়োগ আমরা পরবর্তি বিভিন্ন সময়ে দেখব।