সুচিপত্র:

ATtiny2313: 9 ধাপ সহ সুইচ পড়া
ATtiny2313: 9 ধাপ সহ সুইচ পড়া
Anonim
ATtiny2313 এর সাথে সুইচ পড়া
ATtiny2313 এর সাথে সুইচ পড়া

ATtiny2313 এবং অনুরূপ AVR ডিভাইস থেকে আউটপুট নিয়ে কাজ করার জন্য বেশ কয়েকটি নির্দেশিকা রয়েছে। উদাহরণস্বরূপ, https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- মোটর-সহ-একটি-এভিআর-মাইক্রোপ্রসেসর/। দ্য রিয়েল ইলিয়ট থেকে সর্বশেষটিতে কাজ করা, যা দেখিয়েছে কিভাবে স্টেপার মোটর নিয়ন্ত্রণ করতে হয়, আমি দেখেছি যে একই প্রোগ্রামে কোডের বিকল্প বিভাগগুলি চালাতে সক্ষম হওয়া সত্যিই সহায়ক হবে তাই আমাকে ATtiny2313 প্রতিটি পুনরায় প্রোগ্রাম করতে হবে না সময় আমি একটি সামান্য কোড প্রকরণ চেষ্টা করতে চেয়েছিলেন (যেমন অর্ধ-স্টেপিং বা বিপরীতভাবে স্টেপার চালানো)। বিকল্প বৈচিত্র নির্বাচন করার অনুমতি দেওয়ার জন্য সুইচ/কেস স্টেটমেন্ট ব্যবহার করে কোড লেখা সহজ হলেও, কেস নির্বাচন করার কিছু উপায় প্রয়োজন। তার মানে কেস নিয়ন্ত্রণের জন্য কিছু ধরণের ইনপুট ডিভাইস পড়তে হবে। সৌভাগ্যবশত, ATtiny2313- এ প্রচুর I/O পিন রয়েছে এবং সুইচ থেকে ইনপুট পড়ার জন্য ভালভাবে ডিজাইন করা হয়েছে। এই নির্দেশাবলী দেখাবে কিভাবে ইনপুট পড়তে হবে এবং তাদের রাষ্ট্রের উপর ভিত্তি করে সিদ্ধান্ত নিতে হবে। যেহেতু এটি একা একটি সুন্দর বিরক্তিকর নির্দেশযোগ্য করে তুলবে, আমি একটি ছোট্ট স্পিকারকে বীপার হিসাবে চালানোর জন্য ATtiny2313 এর টাইমার/কাউন্টার ক্ষমতা ব্যবহার করার একটি সহজ উপায় ব্যাখ্যা করব। সহজ ডিবাগিং কৌশলগুলির উপর একটি ছোট ক্ষয়ক্ষতিও থাকবে।

ধাপ 1: ইনপুট ডিভাইস

ইনপুট ডিভাইস
ইনপুট ডিভাইস
ইনপুট ডিভাইস
ইনপুট ডিভাইস

এই নির্দেশযোগ্য দ্য রিয়েল ইলিয়টের চমৎকার কাজের উপর ভিত্তি করে এবং ATtiny2313 Ghetto ডেভেলপমেন্ট সিস্টেম ব্যবহার করে যা তিনি বর্ণনা করেছেন। Atmel থেকে ATtiny2313 ডেটা শীট সব ফাংশন জন্য চূড়ান্ত রেফারেন্স, কিন্তু এটি অগত্যা পড়া সহজ নয়। https://www.atmel.com/dyn/products/datasheets.asp? এটি কেবল চারটি অন/অফ সুইচের একটি প্যাকেজ; একক মেরু, একক নিক্ষেপ সুইচ (SPST) নামেও পরিচিত। সাধারণত, প্রতিটি সুইচের একটি সংযোগ বা মেরু মাটিতে বাঁধা থাকে এবং অন্য সংযোগটি বর্তমান সীমাবদ্ধ প্রতিরোধকের (10K বা তার বেশি) মাধ্যমে উঁচু করা হয়। একটি মাইক্রোকন্ট্রোলার ইনপুট প্রতিরোধকের সাথে মেরুর সাথে সংযুক্ত। যদি সুইচটি খোলা থাকে, মাইক্রোকন্ট্রোলার ইনপুটটি HI হিসাবে পড়বে। যদি সুইচ বন্ধ থাকে, মাইক্রোকন্ট্রোলার ইনপুট LO পড়বে। বিস্তারিত জানার জন্য পরিকল্পিত পড়ুন ATTiny2313 ইনপুট হিসাবে কনফিগার করা হলে I/O পিনগুলিতে প্রোগ্রামযোগ্য পুল-আপ প্রতিরোধক সরবরাহ করে জিনিসগুলিকে সহজ করে। এর মানে হল যে সুইচগুলি কেবল একটি মেরু মাটিতে বাঁধা থাকতে পারে (LO) এবং অন্য মেরু একটি প্রসেসরের ইনপুটের সাথে সংযুক্ত থাকে। প্রথম উদাহরণ শুধুমাত্র দুটি সুইচ দেখায়। সুইচগুলি নিম্নলিখিত কোড দিয়ে পড়া এবং কনফিগার করা হয়। ইনপুট হিসাবে সুইচগুলি কনফিগার করুন: (কোন কোডের প্রয়োজন নেই; এটি ডিফল্ট।) পুল-আপ প্রতিরোধক চালু করুন: PORTB = _BV (PB0) | _BV (PB1); ইনপুট পড়ুন: but1 = ~ PINB & 0x03; সঠিক মূল্য পেতে উল্টানো এবং মাস্কিং ব্যবহার করুন।

ধাপ 2: একটি সংকেত জন্য Blinkenlights

আমরা এই দুটি সুইচ ব্যবহার করে একটি LED একটি প্রোগ্রামযোগ্য সংখ্যক বার জ্বলজ্বল করতে পারি। আমরা যে LED গুলি ব্যবহার করব তা হবে ঝলমলে আলো যা রিয়েল ইলিয়ট বিখ্যাত করেছে। সুইচ 1 এবং 2 কে দুটি বাইনারি ডিজিট হিসেবে গণ্য করা হবে, তাই সংমিশ্রণটি 0, 1, 2 এবং 3 সংখ্যাগুলিকে উপস্থাপন করতে পারে। সেটিংস পরিবর্তিত হয়েছে সুইচগুলি 500 মিলিসেকেন্ডের জন্য বাতিল করা হয়েছে (অপ্টিমাইজ করা হয়নি)। ডিবাউন্স অ্যালগরিদম বেশ সহজ। সুইচগুলি পড়া হয় এবং পড়াটি নোট করা হয়। যদি এটি oldBut মান (শেষ সংরক্ষিত মান) থেকে ভিন্ন হয়, তাহলে প্রোগ্রামটি 500 মিলিসেকেন্ডের জন্য বিলম্বিত হয় এবং সুইচগুলি আবার পড়া হয়। যদি মানটি পূর্বে পড়া হিসাবে একই হয়, পুরাতন কিন্তু মান আপডেট করা হবে এবং LED দুটি সুইচের বাইনারি ভ্যালু দ্বারা নিহিত বার সংখ্যাটি ঝলকাবে। "অন" পড়া একটি সুইচ LO পড়ার পর থেকে মানটির বিপরীতটি লক্ষ্য করুন। পরবর্তী পরিবর্তনগুলির জন্য সুইচগুলি ক্রমাগত স্ক্যান করা হবে। ডিবাউন্সিং সুইচ সম্পর্কে আরও জানতে এই https://www.ganssle.com/debouncing.pdf- এ দেখুন। এই উদাহরণের জন্য ATtiny2313 কোড এখানে। অপারেশন চলাকালীন, এই প্রোগ্রামটি পিবি 4 (ফিজিক্যাল পিন 8) তে LED কে দুইবার জ্বলজ্বল করবে এটি দেখানোর জন্য যে এটি শুরু হয়েছে। এটি তখন এক এবং দুইটি সুইচ পড়বে, এবং যখনই সেগুলি পরিবর্তন করা হবে তখন সুইচ সেটিংয়ের উপর নির্ভর করে এক থেকে তিনবার পলক দেবে। যখন সুইচগুলি পরিবর্তন হচ্ছে না, LED ধীরে ধীরে জ্বলজ্বল করবে। এই কোডটি চালানোর জন্য, একটি নতুন ডিরেক্টরি তৈরি করুন (যদি আপনি চান তবে এটিকে "বেসিক" বলুন) এবং নিম্নলিখিত সি কোড ফাইলটি ডাউনলোড করুন এবং এতে ফাইল তৈরি করুন। Makefile1.txt এর নাম পরিবর্তন করে শুধু Makefile করুন। WinAVR ব্যবহার করে, প্রোগ্রামটি কম্পাইল করুন এবং এটি আপনার ATtiny2313 এ লোড করুন।

ধাপ 3: ডিবাগিংয়ের একটি ক্ষুদ্র ক্ষয়।

আপনি যদি আমার মত (এবং বিশ্বের অন্যান্য প্রোগ্রামার) হয়ত আপনি সম্ভবত এমন সময় অনুভব করেছেন যখন "ত্রুটিমুক্ত" কোডটি আপনি সাবধানে টাইপ করেছেন এবং সংকলিত করেছেন যা আপনি আশা করেন তা করে না। হয়তো এটি কেবল কিছুই করে না! তো সমস্যাটা কী? আপনি কিভাবে খুঁজে বের করতে যাচ্ছেন? সৌভাগ্যবশত, কাজ করার জন্য বিভিন্ন পন্থা রয়েছে। (ডিবাগিং বিষয়ের একটি চমৎকার চিকিৎসার জন্য এই বইটি পান। আপনি কি জানেন. আপনি যদি একবার কাজ করার জন্য একটি ঝলকানি আলো পেয়ে থাকেন, তাহলে আপনি আপনার প্রোগ্রামে কোথায় আছেন তা দেখতে এটি আবার ব্যবহার করুন। আমি প্রোগ্রাম শুরুর সংকেত দিতে দুইবার LED ঝলকানো পছন্দ করি। আপনি আপনার প্রোগ্রামের শুরুতে প্রাথমিকভাবে এটি করার জন্য কোডটি রাখতে পারেন। একবার আপনি জানেন যে আপনার হার্ডওয়্যারে কিছুই ভুল নেই, ঝলকানি করার জন্য একটি ফাংশন তৈরি করুন। এখানে আমি যে ফাংশনটি ব্যবহার করি। ------------------------------ ** blinkEm-PD4 ব্যবহার করে LED ঝলকানোর কাজ ** PD4 আউটপুট হিসেবে কনফিগার করা আবশ্যক ** ------------------------------------------------ ---------------------*/অকার্যকর blinkEm (uint8_t count) {while (count> 0) {PORTD = _BV (PD4); _ বিলম্ব_এমএস (1000); PORTD = ~ _BV (PD4); _ বিলম্ব_এমএস (1000); গণনা-; }} আপনার কোডের বিভিন্ন পয়েন্টে এই ফাংশনটি একটি সংকেত হিসাবে ব্যবহার করা সম্ভব যে কোডটি এতদূর কার্যকর হয়েছে। কোডটি চলছে তা জানার অর্থ হল যে আপনি প্রতিটি বিভাগ যা সাবধানতার সাথে পরীক্ষা করে দেখতে পারেন, কিন্তু আপনি যা আশা করেছিলেন তা করেননি, ত্রুটিগুলি খুঁজে পেতে। এক সময়ে একটি জিনিস পরিবর্তন করা ডিবাগ করার জন্য একটি মূল কৌশল (উপরের রেফারেন্সে বর্ণিত)। এই ক্লাসিক পদ্ধতিটি "ভাগ করুন এবং জয় করুন" এর সাথে কাজ করে: ক্রমবর্ধমান কার্যকারিতা যোগ করার জন্য শিশুর পদক্ষেপ গ্রহণ। এটি একটি ধীর পন্থা বলে মনে হতে পারে, কিন্তু এটি প্রায় ততটা ধীর নয় যতটা অ-কাজ কোডের একটি বড় অংশকে একসাথে ডিবাগ করার চেষ্টা করছে।

ধাপ 4: আরো ডিবাগিং

এমন অনেক সময় আছে যখন আমরা কোডের একটি অংশ পরীক্ষা করতে চাই, যার মধ্যে বেশিরভাগ লাইন বাদ দিয়ে, তারপর সেগুলিকে একবারে সক্ষম করে আমরা যা যাচাই করি প্রত্যেকটি কাজ করে। সাধারণত, আমরা "মন্তব্য করে" লাইনগুলি আমরা এড়িয়ে যেতে চাই। এই কৌশলটির একটি এক্সটেনশন হল কোডের একটি ব্লক কেটে পেস্ট করা, মূল মন্তব্য করা (যাতে আমরা এটি হারাই না), এবং কপিটি হ্যাক করে। লাইনগুলি মন্তব্য করার চারটি সহজ উপায় আছে। একটি লাইনের সামনে "//" রাখলে সেই লাইনটি মন্তব্য করে। "/*" এবং "*/" -এ এক বা একাধিক লাইন বন্ধ করলে একটি সম্পূর্ণ বিভাগ মন্তব্য করবে। এই পদ্ধতিটি কার্যকরভাবে কাজ করার জন্য, কোড ব্লকে অন্য কোন "*/" থাকতে হবে না (শেষটি ছাড়া)। সুতরাং একটি কার্যকরী শৃঙ্খলা হল // কোডের ব্লকের মধ্যে মন্তব্যের জন্য ব্যবহার করা, এবং / * * / নির্মাণকে মন্তব্য ব্লকের জন্য এবং কোডের বিভাগগুলি মন্তব্য করার জন্য সংরক্ষণ করুন। মন্তব্য করার জন্য একটি ব্লকের শুরুতে "#if 0" স্থাপন এবং "#endif" দিয়ে বিভাগটি শেষ করা। একটি ব্লকের শুরুতে "#ifdef (শনাক্তকারী)" এবং শেষে "#endif" ব্যবহার করে আরো নির্বাচনী নিয়ন্ত্রণ সম্ভব। আপনি যদি ব্লকটি সংকলিত করতে চান, তাহলে প্রোগ্রামের আগে "#ডিফাইন (আইডেন্টিফায়ার)" ব্যবহার করুন। উল্লেখ্য উদ্ধৃতি চিহ্ন শুধুমাত্র জোর দেওয়া হয় এবং অন্তর্ভুক্ত করা হয় না। আমরা এই নির্দেশাবলীর মাধ্যমে এগিয়ে যাওয়ার সময় আপনি এই সরঞ্জামগুলি দরকারী খুঁজে পেতে পারেন।

ধাপ 5: বীপের জন্য টাইমার/কাউন্টার 0 ব্যবহার করা

বিপদের জন্য টাইমার/কাউন্টার 0 ব্যবহার করা
বিপদের জন্য টাইমার/কাউন্টার 0 ব্যবহার করা

ATtiny2313 এর দুটি শক্তিশালী টাইমার/কাউন্টার রিসোর্স রয়েছে: একটি 8-বিট এবং একটি 16-বিট। এগুলি ফ্রিকোয়েন্সি জেনারেটর, পরিবর্তনশীল পালস প্রস্থ মডুলেশন কন্ট্রোলার এবং আউটপুট তুলনা রেজিস্টার হিসাবে কনফিগার করা যেতে পারে। এগুলির সম্পূর্ণ কার্যকারিতা ডেটা শীটের 49 পৃষ্ঠায় বর্ণিত হয়েছে। যাইহোক, আমরা একটি সাধারণ কেস ব্যবহার করব। শুধুমাত্র টাইমার/কাউন্টার 0 (8-বিট এক) ব্যবহার করা হবে এবং এটি কেবল একটি ফ্রিকোয়েন্সি জেনারেটর হিসাবে ব্যবহার করা হবে। একটি বীপ উৎপাদনের জন্য ফ্রিকোয়েন্সি একটি ছোট স্পিকারে পাঠানো হবে। টাইমার/কাউন্টার 0 সম্পূর্ণরূপে ATtiny2313 ডেটা শীটের 66 থেকে 83 পৃষ্ঠায় বর্ণিত হয়েছে। এই উপাদানটির ঘনিষ্ঠভাবে পড়লে একজনকে সময়/কাউন্টার 0 সম্পর্কে সম্পূর্ণ উপলব্ধি পাওয়া যাবে। আনন্দের বিষয় হল, একটি মোটামুটি সহজ মোড, ক্লিয়ার টাইমার অন কম্পেয়ার (সিটিসি), যা আমরা চাই সেই বীপ টোন তৈরির জন্য প্রয়োজনীয়।

আমরা যে মোডটি ব্যবহার করব তার জন্য, টাইমার/কাউন্টারের অপারেশন সোজা-এগিয়ে। যখন একটি ঘড়ি সংকেত নির্বাচন করা হয়, কাউন্টার শূন্য থেকে শুরু হয় এবং প্রতিটি ঘড়ির পালস বৃদ্ধি করে। যখন কাউন্টার মান আউটপুট তুলনা রেজিস্টারে (TOP) মান পর্যন্ত পৌঁছায়, কাউন্টারটি শূন্যে রিসেট হয় এবং গণনা আবার শুরু হয়। টাইমার/কাউন্টারের সাথে যুক্ত আউটপুট বিটটি একটি বর্গাকার তরঙ্গ আউটপুট তৈরির জন্য টগল করা হয়। এটি একটি বীপ শব্দ করতে সরাসরি একটি অডিও ট্রান্সডুসার চালায়। একটি ছোট TDK অডিও ট্রান্সডুসার বীপ উৎপন্ন করে। একটি উপযুক্ত ইউনিট হল Digikey 445-2530-ND, TDK SD1209T3-A1 (আমি এর প্রাথমিক সংস্করণ ব্যবহার করেছি)। এটি একটি 3 ভোল্ট সংস্করণ; আমি আশা করি 5 ভোল্ট সংস্করণও কাজ করবে। আমি এটি সরাসরি Attiny2313 এর আউটপুট পোর্ট থেকে ড্রাইভ করি এবং এটি ঠিক কাজ করে বলে মনে হয়। স্পার্কফুনের অনুরূপ ডিভাইস রয়েছে।

ধাপ 6: টাইমার/কাউন্টার 0 কনফিগার করা

সিটিসি মোড পিন 2, পোর্ট বি (ফিজিক্যাল পিন 14) এ OC0A আউটপুট টগল করতে ব্যবহার করা যেতে পারে। এই পিনে আউটপুট সক্ষম করতে, DDRB কে যথাযথভাবে সেট করতে হবে। এর জন্য সি কোড ঠিক একটি ঝলকানি আলো জন্য একটি আউটপুট সেট আপ মত। DDRB = _BV (PB2); // পোর্ট B2 একটি আউটপুট পরবর্তী ধাপ হল একটি ঘড়ির সংকেত সরবরাহ করা এবং আউটপুট তুলনা রেজিস্টার লোড করে ফ্রিকোয়েন্সি হিসেবে তরঙ্গাকৃতি তৈরি করা। ফলে ফ্রিকোয়েন্সি জন্য সমীকরণ তথ্য শীট দেওয়া হয় (পৃষ্ঠা 72)। সমীকরণের শর্তাবলী নীচে বর্ণিত হবে। এখানে সমীকরণ: fOC0A = fclk_I/O/2*N*(1+OCR0A) যেখানে fOC0A: = আউটপুট ফ্রিকোয়েন্সি fclk_I/O: = ক্লক সোর্স ফ্রিকোয়েন্সি N: = ক্লক প্রিস্কেল ফ্যাক্টর OCR0A: = আউটপুটের মান টাইমার/ কাউন্টার 0A ক্লক সোর্স ফ্রিকোয়েন্সি, fclk_I/O এটি সিস্টেম ঘড়ির ফ্রিকোয়েন্সি। ডিফল্ট মান হল 1MHz। TCCR0B এর বিট CS00, CS01, এবং CS02 এই নির্বাচনকে নিয়ন্ত্রণ করে। যেহেতু এই বিটগুলি N এর মানও নির্বাচন করে, এটি পরবর্তী বর্ণিত হয় প্রেসকলার মান, NN হল সিস্টেম ঘড়িকে ভাগ করার জন্য বা প্রিস্কেল করার জন্য ব্যবহৃত মান। TCCR0B এর বিট CS00, CS01, এবং CS02 এই নির্বাচনকে নিয়ন্ত্রণ করে। ATtiny2313 ডেটা শীটের 81 পৃষ্ঠায় টেবিল 41 সংমিশ্রণ বর্ণনা করে। যেহেতু 1kHz এর কাছাকাছি একটি ফ্রিকোয়েন্সি পছন্দসই, তাই TCCR0B এর CS00 এবং CS01 বিট সেট করা হবে। লক্ষ্য করুন যে তিনটি বিটকে 0 এ সেট করা, এইভাবে কোন ঘড়ির উৎস নির্বাচন না করা, কার্যকরভাবে আউটপুট বন্ধ করে দেয়। এই পদ্ধতিটি বীপ শুরু এবং বন্ধ করার জন্য ব্যবহার করা হবে। যখন এই মানটি পৌঁছে যায়, কাউন্টারটি শূন্যে পুনরায় সেট করা হবে এবং TOP পৌঁছানো এবং চক্র পুনরাবৃত্তি না হওয়া পর্যন্ত গণনা আবার শুরু হবে। শীর্ষ সহজেই সংশোধন করা হয়, তাই বীপারের ফ্রিকোয়েন্সি পরিবর্তন করা সহজ। যেহেতু 1kHz এর কাছাকাছি একটি ফ্রিকোয়েন্সি পছন্দসই, তাই TOP 7 তে সেট করা আছে। (মনে রাখবেন prescaler 8 এ সেট করা যেতে পারে, এবং TOP 63 তে সেট করা যেতে পারে। একই ফলাফল - আপনার পছন্দ।) আউটপুট ফ্রিকোয়েন্সি, fOC0A আউটপুট ফ্রিকোয়েন্সি ফলাফল গণনা করতে সমীকরণ ব্যবহার করে মধ্যে: fOC0A = 1, 000, 000 /2 * 64 * (1+7) fOC0A = 977Hz যথেষ্ট বন্ধ করুন! আউটপুট তুলনা রেজিস্টার এবং টাইমার কাউন্টার কন্ট্রোল রেজিস্টার 0B লোড করার কোড এখানে। কিভাবে ব্যবহার করা হয় তা বুঝতে অনুগ্রহ করে প্রকৃত প্রোগ্রাম কোড দেখুন। OCR0A = 7; // সময় মান TCCR0B = _BV (CS01) | _BV (CS00); // অভ্যন্তরীণ ঘড়ি নির্বাচন করুন এবং prescale = 8 TCCR0B = 0; // কোন ঘড়ির উৎস টোন বন্ধ করে না সময়/কাউন্টার মোড সেট করা একটি শেষ বিবরণ হিসাবে, আমরা টাইমার/কাউন্টার কন্ট্রোল রেজিস্টার 0 এ উপযুক্ত বিট সেট করে আমরা চাই টাইমার/কাউন্টার মোড নির্দিষ্ট করব। ডেটা শীটের টেবিল 40, পৃষ্ঠা 79 এ বর্ণিত বিট WGM01 সেট করে CTC মোড নির্বাচন করা হয়। যেহেতু আমরা আউটপুট প্রতিটি চক্র টগল করতে চাই, বিট COM0A0 এছাড়াও 77 পৃষ্ঠার টেবিল 34 এ বর্ণিত হিসাবে সেট করা প্রয়োজন। এখানে কোড: TCCR0A = _BV (COM0A0) | _BV (WGM01); // সিটিসি টগল মোড

ধাপ 7: চারটি সুইচ ব্যবহার করা

আমরা যখন বীপার প্রয়োগ করি, আসুন চারটি সুইচ হ্যান্ডেল করার জন্য আমাদের হার্ডওয়্যার এবং সফ্টওয়্যার প্রসারিত করি। যেহেতু টাইমার কাউন্টার 0A এর আউটপুট পোর্ট বি, পিন 2 এ আছে, আমরা কেবল পোর্ট বি -তে ক্রমবর্ধমানভাবে আরো সুইচ আপ করতে পারি না, পোর্ট ডি ব্যবহার করা একটি সহজ সমাধান হবে, কিন্তু আসুন সেই পোর্টটি অন্যান্য ফাংশনের জন্য উপলব্ধ রাখা যাক (সম্ভবত একটি স্টেপার মোটর)। সুতরাং আসুন PB3 এবং PB4 এ অতিরিক্ত সুইচগুলিকে সংযুক্ত করি। সুইচগুলি পড়া বেশিরভাগই অপরিবর্তিত। মাস্কের মান 0x1B (00011011 বাইনারি) থেকে 5, 6 এবং 7 সহ মাস্ক বিট 2 এ পরিবর্তিত হয়। 4-বিট বাইনারি সংখ্যা তৈরি করতে আরও একটি কৌশল ব্যবহার করা হয়। বিট 3 এবং 4 ডান এক বিট এবং তাদের বিট 0 এবং 1 এর সাথে 4 বিট বাইনারি সংখ্যায় একত্রিত করুন। এটি বিট স্থানান্তর এবং সংমিশ্রণের জন্য স্ট্যান্ডার্ড সি সিনট্যাক্স, তবে নতুনদের কাছে ভালভাবে পরিচিত নাও হতে পারে। but1a = (but1 & 0x03) | ((কিন্তু 1 এবং 0x18) >> 1); // but1 এর সুইচ রিডিং অপারেশনে, প্রোগ্রামটি দুইবার জ্বলজ্বল করবে এবং শুরুতে সংকেত দেওয়ার জন্য দুইবার বীপ করবে। যখনই সুইচগুলি পরিবর্তন করা হয়, তারা যে নম্বরটি উপস্থাপন করে সেগুলি বীপ করা হবে। যখন সুইচগুলি পরিবর্তন হচ্ছে না, LED জ্বলজ্বল করবে। এই কোডটি চালানোর জন্য, একটি নতুন ডিরেক্টরি তৈরি করুন (যদি আপনি চান তবে এটিকে বীপ বলুন) এবং নিম্নলিখিত সি কোড ফাইলটি ডাউনলোড করুন এবং এতে ফাইল তৈরি করুন। Makefile2.txt এর নাম পরিবর্তন করে শুধু Makefile করুন। WinAVR ব্যবহার করে, প্রোগ্রামটি কম্পাইল করুন এবং আপনার Attiny2313 এ লোড করুন।

ধাপ 8: সুইচ/কেস কনস্ট্রাক্ট ব্যবহার করে

চূড়ান্ত ধাপ হল "শুধু সফটওয়্যার": প্রতিশ্রুতি অনুযায়ী, আমরা সুইচ/কেস নির্মাণ বাস্তবায়ন করব। যদিও এই উদাহরণটি শুধুমাত্র দুটি বিকল্প ক্রিয়া দেখায়, তবে বেশ কয়েকটি বিকল্প কোড বিভাগের মধ্যে একটি নির্বাচন করার জন্য এই নির্মাণটি কীভাবে ব্যবহার করা যায় তা খুব স্পষ্ট হওয়া উচিত। অপারেশন চলাকালীন, এই প্রোগ্রামটি সুইচগুলি পর্যবেক্ষণ করে এবং যদি কোনও পরিবর্তন হয় তবে এটি বিজোড় হলে উপযুক্ত সংখ্যাটি বীপ করবে; সংখ্যাটি সমান হলে এটি জ্বলজ্বল করবে। একটি সুইচ পরিবর্তন না হওয়া পর্যন্ত এটি কিছুই করে না।

এই কোডটি চালানোর জন্য, একটি নতুন ডিরেক্টরি তৈরি করুন (যদি আপনি চান তবে এটিকে সুইচ কল করুন) এবং নিম্নলিখিত সি কোড ফাইলটি ডাউনলোড করুন এবং এতে ফাইল তৈরি করুন। Makefile3.txt এর নাম পরিবর্তন করে শুধু Makefile করুন। WinAVR ব্যবহার করে, প্রোগ্রামটি কম্পাইল করুন এবং এটি আপনার Attiny2313 এ লোড করুন।

ধাপ 9: উপসংহার

উপসংহার
উপসংহার

সেজন্যই এটা! সুইচ সেটিং এর উপর ভিত্তি করে একটি অ্যাকশন নির্বাচন করে আপনার প্রোগ্রামের এক্সিকিউশন নিয়ন্ত্রণ করতে সুইচগুলি কীভাবে ব্যবহার করবেন তা এখন আপনি জানেন। আপনি কীভাবে বীপ টোন তৈরি করতে জানেন এবং কিছু ডিবাগ কৌশলও শিখেছেন।

যদি আপনি আপনার বোঝাপড়া পরীক্ষা করতে চান, একটি উচ্চ পিচে বীপ করার জন্য শেষ প্রোগ্রামটি পরিবর্তন করার চেষ্টা করুন, এমনকি যদি অদ্ভুত হয় তবে একটি কম নোট বীপ করুন, এবং সুইচগুলিতে কোন পরিবর্তন না হলে LED ক্রমাগত ঝলকান। আপনি দেখতে চাইতে পারেন সাহায্যের জন্য ডিবাগিং বিভাগে ফিরে যান।

প্রস্তাবিত: