![](https://blog.techshopbd.com/wp-content/uploads/2018/07/IMG_5585-Optimized.jpg)
![](https://blog.techshopbd.com/wp-content/uploads/2018/07/IMG_5585-Optimized.jpg)
Chapter 16: Making a clock with ATmega16 Microcontrollerm | পর্ব ১৬ঃ চলো ঘড়ি বানাই।
এই টিউটোরিয়ালে আমরা মাইক্রোকন্ট্রোলারের দুটি টাইমার কনফিগার করে একটি ছয় ডিজিটের(ঘন্টা, মিনিট, সেকেন্ড) ঘড়ি বানাব। এই এক্সপেরিমেন্টটি ভালোভাবে বুঝতে হলে আমাদের কয়েকটি বিষয় ভালোভাবে বুঝতে হবে। সেগুলো হচ্ছে-
১)ATmega16 মাইক্রোকন্ট্রোলারের টাইমার ০ এবং টাইমার ২ এর সিটিসি মোড, এই মোডের বৈশিষ্ট্য এবং মোডটি সিলেক্ট করার উপায়।
২)TCNT রেজিস্টার।
৩)OCR রেজিস্টার।
৪)টাইমার ০ এবং টাইমার ২ এর প্রিস্কেলার সিলেক্ট করা।
৫)TIMSK রেজিস্টারের বিভিন্ন বিট।
এই বিষয়গুলো আমাদের আগের টিউটোরিয়ালে এবং ATmega16 এর ডাটাশিটে বিশদভাবে আলোচনা করা হয়েছে।
প্রয়োজনীয় যন্ত্রপাতিঃ
প্রয়োজনীয় যন্ত্রপাতি | পরিমান | প্রোডাক্ট লিংক |
ATmega16 | 1 | http://bit.ly/2KlL7s2 |
Clock Display unit(mini) | 1 | http://bit.ly/2KvglNl |
Push button switch | 3 | http://bit.ly/2lPQ6SU |
Female to female jumper wires | 19 | http://bit.ly/2Gk1m1P |
10 K resistors | 3 | http://bit.ly/2KXzOTf |
আমরা এই টিউটোরিয়ালে মাইক্রোকন্ট্রোলার প্রোগ্রামিং এবং সার্কিট সেটআপের জন্য AVR trainer kit ব্যবহার করেছি। আপনারা চাইলে অন্যকোনো প্রোগ্রামার ব্যবহার করে ব্রেডবোর্ডে সার্কিট সেটআপ করতে পারেন। সেক্ষেত্রে ফিমেল-ফিমেল জাম্পারের পরিবর্তে মেল মেল জাম্পার ব্যবহার করতে হবে। এভিআর ট্রেইনার কিটে দুটি পুশ বাটন পুল আপ করা অবস্থাতেই আছে। সেগুলো সেটিং এর জন্য ব্যবহার করা যাবে। সেক্ষেত্রে অতিরিক্ত একটি পুশ বাটন আর পুল আপ রেজিস্টার নিলেই চলবে।নিচের কানেকশনগুলো সম্পন্ন করুন।
Microcontroller | Clock display unit(mini) | Button |
PD0 | A | |
PD1 | B | |
PD2 | C | |
PD3 | D | |
PD4 | E | |
PD5 | F | |
PD6 | G | |
VCC | Blink | |
PB4,PB5 | HH | |
PB2,PB3 | MM | |
PB0,PB1 | SS | |
VCC | Blink | |
GND | GND | |
PA7 | Set(Pulled up by 10K resistor) | |
PA5 | Up(Pulled up by 10K resistor) | |
PA6 | Down(Pulled up by 10K resistor) |
ক্লক ডিসপ্লে ইউনিট (মিনি):
এই মডিউলটি তৈরী করতে আমরা ব্যবহার করেছি আমাদেরই বানানো একটি মডিউল যার নাম ক্লক ডিসপ্লে ইউনিট(মিনি)। এই মডিউলটি ছয়টি কমন ক্যাথোড সেভেন সেগমেন্ট ডিসপ্লে দিয়ে তৈরী। আরও আছে দুটি কোলন তৈরীর জন্য চারটি এলইডি। এই ডিসপ্লে দিয়ে ছয় ডিজিটের একটি ঘড়ি সহজেই বানানো সম্ভব।
সেভেন সেগমেন্ট ডিসপ্লেগুলোকে সুইচিং করার জন্য ব্যবহার করা হয়েছে একটি ULN2003AN আইসি। এই আইসিটির ভেতরে রয়েছে সাতটি ডার্লিংটন পেয়ার ট্রাঞ্জিস্টর। এর ইনপুট পিনগুলোতে 1 দিলে আউটপুট পিনগুলোতে 0 আসবে। আরো ভালোভাবে বিষয়টি বুঝতে এই আইসির ডেটাশিট দেখুন।
এই আইসির সাতটি আউটপুট শর্ট করা হয়েছে সেভেন সেগমেন্টগুলোর কমন পিন এবং এলইডিগুলোর নেগেটিভ প্রান্তের সাথে।
ইনপুটগুলো শর্ট করা হয়েছে মডিউলের Address bus এর সাথে। তার মানে Address bus এর কোনো পিনে 1 দিলে সংশ্লিষ্ট আউটপুট পিনে 0 হবে এবং তার সাথে সংযুক্ত সেভেন সেগমেন্টের কমন পিনটিও লো হবে। এই কাজটি করতে হবে মাল্টিপ্লেক্সিং দিয়ে। ৬টি ডিজিট একের পর এক এত দ্রুতভাবে জ্বলবে যাতে কোনো মানুষের চোখ তা ধরতেই না পারে। যে দেখবে তার মনে হবে সবগুলো ডিজিটই সবসময় জ্বলে আছে। আমাদের এক্সপেরিমেন্টে আমরা Address bus এর পিনগুলো কানেক্ট করব মাইক্রোকন্ট্রোলারের PB0-PB7 পিনগুলোর সাথে। এবং এই পিনগুলোকে আমরা পর্যায়ক্রমে হাই করব। Data bus এর সবগুলো পিন কানেক্ট করা হবে PORTD এর সাথে।
টাইম সেটিংঃ আমাদের এক্সপেরিমেন্টে আমরা টাইম সেটিং এর জন্য তিনটি বাটন সুইচ ব্যবহার করব। বাটন তিনটি সংযুক্ত থাকবে PA5-PA7 পিনগুলোর সাথে। পিনগুলোর নাম দেওয়া যাক ‘Up’, ‘Down’ এবং ‘Set’।
সেকেন্ড পরিবর্তন করাঃ যদি আপনি একবার ‘Set’ প্রেস করেন তাহলে ঘড়িটি থেমে যাবে। এরপর ‘Up’, ‘Down’ প্রেস করে আপনি সেকেন্ড বাড়াতে ও কমাতে পারবেন।
মিনিট পরিবর্তন করাঃ যদি আপনি দুইবার ‘Set’ প্রেস করেন তাহলেও ঘড়ি থেমে থাকবে। এরপর ‘Up’, ‘Down’ প্রেস করে আপনি মিনিট বাড়াতে ও কমাতে পারবেন।
ঘন্টা পরিবর্তন করাঃ যদি আপনি তিনবার ‘Set’ প্রেস করেন তাহলেও ঘড়ি থেমে থাকবে। এরপর ‘Up’, ‘Down’ প্রেস করে আপনি ঘন্টা বাড়াতে ও কমাতে পারবেন।
চতুর্থবার ‘Set’ প্রেস করলে ঘড়ি আবার চলতে শুরু করবে।
কোড এবং সার্কিট ডায়াগ্রামঃ
কোড এবং সার্কিট ডায়াগ্রাম এইখান থেকে ডাউনলোড করুন।
কোড ডাইয়াগ্রাম কই
ওয়েবসাইটের URL পরিবর্তন হওয়ার কারনে কাজ করছে না, খুব দ্রুতই এটার সমাধান করা হবে। বিষয়টি জানানোর জন্য আপনাকে অসংখ্য ধন্যবাদ।