AVR মাইক্রোকন্ট্রোলার বেসিকের আজকের পর্বে থাকছে। কিভাবে একটা বেসিক বেসিক প্রোগ্রাম লেখা যায় এবং তা সিমুলেশনের মাধ্যমে হার্ডওয়্যারে লোড করে কার্যকারীতা পর্যবেক্ষণ করা যায়।
কিভাবে একটা বেসিক বেসিক প্রোগ্রাম লেখা যায়
গতপর্বে আমরা দেখেছিলাম কিভাবে একটা নতুন প্রোজেক্ট ওপেন করতে হয়। গতপর্বের দিক নির্দেশনা অনুসরণ করে একটা নতুন প্রোজেক্ট ওপেন করুন। ওপেন করার সময় Device হিসেবে atmega8 নির্বাচন করুন।
তাহলে নিচের ছবির মতো একটা কোড উইন্ডো পাবেন।
নিচের কোডটুকু লিখুন
1234567891011121314151617#include <avr/io.h>#include <util/delay.h> // for _delay_ms()intmain(void){DDRB = 255;// initialize port Bwhile(1){PORTB = 0b11111111;//Al the pins of PORTB will be high_delay_ms(3000);// wait 3000 millisecondsPORTB = 0b00000000;//Al the pins of PORTB will be low_delay_ms(3000);// wait 3000 milliseconds}}
Build মেনু থেকে Build Solution এ ক্লিক করুন। তাহলে কম্পাইল হয়ে .hex ফাইল তৈরি হবে।
.hex ফাইলটি পাওয়া যাবে C:\Users\my\Documents\AVRStudio 5.1\avrtutorial2\avrtutorial2\Debug এর অনুরূপ লোকেশনে
কিভাবে PROTEUS এ সিমুলেশন হার্ডওয়্যার ডিজাইন করবেন, দেখে নিন
PROTEUS ISIS ওপেন করে নিচের ছবির মতো Pick from Libraries এ ক্লিক করুন।
নিচের ছবির নির্দেশনা অনুসরণ করুন। keywords এ atmega8 লিখে সার্চ করুন, এরপর নির্বাচন করুন, সবশেষে ok বাটনে ক্লিক করুন।
মাউস পয়েন্টারটি পেনসিলের আকার ধারণ করবে। একটা ক্লিক করে atmega8 ডিজাইন উইন্ডোতে নিয়ে আসুন।
এখন মাইক্রোকন্ট্রোলারটির উপর ডাবল ক্লিক করে .hex ফাইলটির লোকেশন দেখিয়ে দিন।
Play বাটনে ক্লিক করুন। নিচের ছবি অনুসরণ করুন।
তাহলে আমাদের লেখা কোডটি রান হবে।
উপরের এনিমেশনটিতে আমরা দেখতে পাচ্ছি বামদিকের PB0 থেকে PB7 পর্যন্ত যে পিন সমূহ রয়েছে একবার লজিক হাই হচ্ছে এরপর তিন সেকেন্ড অপেক্ষা করছে , তারপর লজিক লো হয়ে তিন সেকেন্ড অপেক্ষা করছে।
প্রোগ্রাম পর্যালোচনা
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <avr/io.h>#include <util/delay.h> // for _delay_ms()int main(void){DDRB = 255; // initialize port Bwhile(1){PORTB = 0b11111111; //Al the pins of PORTB will be high_delay_ms(3000); // wait 3000 millisecondsPORTB = 0b00000000; //Al the pins of PORTB will be low_delay_ms(3000); // wait 3000 milliseconds}} |
#include <avr/io.h> এর মাধ্যমে একটা লাইব্রেরী ফাইলকে কল করা হয়েছে,যা মাইক্রোকন্ট্রোলারের ইনপুট আউটপুট পোর্ট ব্যবহার করে কাজ করার জন্য প্রোগ্রামে ব্যবহৃত হয়।
#include <util/delay.h> এর মাধ্যমে একটা লাইব্রেরী ফাইলকে কল করা হয়েছে,যা _delay_ms() ফাংশনের মাধ্যমে সময় বিরতি তৈরি করতে প্রোগ্রামে ব্যবহৃত হয়।
int main(void){} আমরা যেহেতু প্রোগ্রামিং সি ব্যবহার করে প্রোগ্রাম লিখেছি, তাই গতানুগতিকভাবে সি ব্যবহার করে প্রোগ্রাম লেখার ক্ষেত্রে সকল কোডকে main() ফাংশনের অন্তর্ভূক্ত করে রাখতে হয়। আমরাও তাই করেছি।
#include <util/delay.h> এর মাধ্যমে একটা লাইব্রেরী ফাইলকে কল করা হয়েছে,যা _delay_ms() ফাংশনের মাধ্যমে সময় বিরতি তৈরি করতে প্রোগ্রামে ব্যবহৃত হয়।
int main(void){} আমরা যেহেতু প্রোগ্রামিং সি ব্যবহার করে প্রোগ্রাম লিখেছি, তাই গতানুগতিকভাবে সি ব্যবহার করে প্রোগ্রাম লেখার ক্ষেত্রে সকল কোডকে main() ফাংশনের অন্তর্ভূক্ত করে রাখতে হয়। আমরাও তাই করেছি।
DDRB = 255; এখানে DDRB হচ্ছে B পোর্টের জন্য ডাটা ডাইরেকশন রেজিস্টার। DDRB একটা ৮ বিট রেজিস্টার । DDRB রেজিস্টারের ভ্যালু হিসেবে 255 দেয়া হয়েছে অর্থাৎ বাইনারীতে 1111 1111 এই অবস্থায় পোর্ট B এর সবগুলো পিন আউটপুট হিসেবে কাজ করবে। যদি পোর্ট B এর কিছু কিছু পিন ইনপুট হিসেবে ব্যবহার করতে হয় তাহলে ঐ সকল স্থানে 0 লেখতে হবে, যেমন 1111 0000 এ ক্ষেত্রে PA0 থেকে PA3 পর্যন্ত পিন সমূহ ইনপুট হিসেবে কাজ করবে আর PA4 থেকে PA7 পর্যন্ত পিন সমূহ আউটপুট হিসেবে কাজ করবে।
while(1){} এর মাধ্যমে একটা অসীম লুপ তৈরি করা হয়েছে, যার কন্ডিশনে 1 দেয়া আছে অর্থাৎ এই লুপের কন্ডিশন যতক্ষণ আমাদের মাইক্রোকন্ট্রোলার কাজ করবে ততক্ষণ সত্য থাকবে এবং এই লুপের মধ্যে যা লেখা থাকবে তা বারবার রি-সাইকেল হবে।
while(1){} এর মাধ্যমে একটা অসীম লুপ তৈরি করা হয়েছে, যার কন্ডিশনে 1 দেয়া আছে অর্থাৎ এই লুপের কন্ডিশন যতক্ষণ আমাদের মাইক্রোকন্ট্রোলার কাজ করবে ততক্ষণ সত্য থাকবে এবং এই লুপের মধ্যে যা লেখা থাকবে তা বারবার রি-সাইকেল হবে।
PORTB = 0b11111111; PORTB, B পোর্টের জন্য ব্যবহৃত একটা রেজিস্টার যা ঐ পোর্টের আউটপুট অবস্থা নির্দেশ করে। PORTB = 0b11111111 দিলে PORTB এর সবগুলো পিন লজিক হাই হবে, এবং পিন সমূহে LED যুক্ত করলে জ্বলতে থাকবে।
PORTB = 0b00000000; এর মাধ্যমে PORTB এর সবগুলো পিন লজিক লো হবে _delay_ms(3000); এর মাধ্যমে ৩ সেকেন্ড টাইম ডিলে তৈরি করা হয়েছে।