সুচিপত্র:

কিভাবে একটি PIC দিয়ে একটি ডিজিটাল রোটারি সুইচ থেকে ঘূর্ণনের দিক ব্যাখ্যা করবেন: 5 টি ধাপ
কিভাবে একটি PIC দিয়ে একটি ডিজিটাল রোটারি সুইচ থেকে ঘূর্ণনের দিক ব্যাখ্যা করবেন: 5 টি ধাপ

ভিডিও: কিভাবে একটি PIC দিয়ে একটি ডিজিটাল রোটারি সুইচ থেকে ঘূর্ণনের দিক ব্যাখ্যা করবেন: 5 টি ধাপ

ভিডিও: কিভাবে একটি PIC দিয়ে একটি ডিজিটাল রোটারি সুইচ থেকে ঘূর্ণনের দিক ব্যাখ্যা করবেন: 5 টি ধাপ
ভিডিও: LDmicro 19: Rotary Encoder Menu Navigation (Microcontroller PLC Ladder Programming with LDmicro) 2024, জুলাই
Anonim
কিভাবে একটি PIC দিয়ে ডিজিটাল রোটারি সুইচ থেকে ঘূর্ণনের দিকনির্দেশনা ব্যাখ্যা করবেন
কিভাবে একটি PIC দিয়ে ডিজিটাল রোটারি সুইচ থেকে ঘূর্ণনের দিকনির্দেশনা ব্যাখ্যা করবেন

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

ধাপ 1: অংশ

যন্ত্রাংশ
যন্ত্রাংশ

এটি বাস্তবায়নের জন্য, আপনার প্রয়োজন হবে: একটি ঘূর্ণমান সুইচ (চতুর্ভুজ কোডেড) প্রতিরোধক টানুন উপযুক্ত মাইক্রোকন্ট্রোলার প্ল্যাটফর্ম আমার প্রকল্পের জন্য, আমি একটি গ্রেহিল 61C22-01-04-02 অপটিক্যাল এনকোডার ব্যবহার করেছি। ঘূর্ণমান সুইচের জন্য ডাটা শীট 8.2k ওহম সুইচ থেকে আসা দুটি ডেটা লাইনে প্রতিরোধক টানতে বলে। আপনি যে এনকোডারটি ব্যবহার করতে চান তার জন্য আপনি ডেটা শীটটি পরীক্ষা করতে চান। আমার ব্যবহৃত ঘূর্ণমান সুইচটি অক্ষীয় পুশ বোতাম সুইচ দিয়েও অর্ডার করা যেতে পারে। এটি ডায়াল করা হয়েছে ইত্যাদি নির্বাচন করার জন্য এটি একটি দরকারী বৈশিষ্ট্য, কিন্তু আমি এখানে তার ইন্টারফেস নিয়ে আলোচনা করব না। আমার একটি "উপযুক্ত মাইক্রোকন্ট্রোলার প্ল্যাটফর্ম" তালিকাভুক্ত আছে কারণ (আমি মনে করি) এটি একাধিক প্ল্যাটফর্মে প্রয়োগ করা যেতে পারে। আমি অনেক লোককে অন্যান্য মাইক্রোকন্ট্রোলারকে নির্দেশাবলীর জন্য ব্যবহার করতে দেখেছি তাই আমি সাধারণ পদ্ধতিও দেখাতে চাই। আমি মাইক্রোচিপ PIC16F877A এর সাথে ব্যবহারের জন্য PIC বেসিক প্রো -তে সমস্ত কোড লিখেছি। সত্যিই, মাইক্রোকন্ট্রোলারে আপনার যে মূল জিনিসটি প্রয়োজন তা হ'ল দুটি পিনের মধ্যে যুক্তি পরিবর্তন হলে বাধা দেওয়ার ক্ষমতা। PIC16F877A তে, একে PORTB পরিবর্তন বিরতি বলা হয়। অন্যান্য নিয়ামকগুলিতে এর জন্য অন্যান্য নাম থাকতে পারে। এই মাইক্রোকন্ট্রোলার ইন্টারাপ্ট ফিচারটি এই বাস্তবায়নকে এত মার্জিত করে তোলে তারই একটি অংশ।

পদক্ষেপ 2: হার্ডওয়্যার ইন্টারফেস

হার্ডওয়্যার ইন্টারফেস
হার্ডওয়্যার ইন্টারফেস

মাইক্রোকন্ট্রোলারের সাথে 16 টি সংযোগ সহ একটি "সহজ" সমাধান হবে "একক মেরু -16 নিক্ষেপ" সুইচ। প্রতিটি সুইচ আউটপুট মাইক্রোকন্ট্রোলারে একটি পিনের সাথে আবদ্ধ থাকবে যাতে প্রতিটি ডায়ালের অবস্থান মাইক্রোকন্ট্রোলার দ্বারা পরীক্ষা করা যায়। এটি I/O পিনের অত্যধিক ব্যবহার। জিনিসগুলি আরও খারাপ হয়ে যায় যদি আমরা সুইচে আমাদের 16 টিরও বেশি অবস্থান (আটক) পেতে চাই। সুইচের প্রতিটি অতিরিক্ত অবস্থানের জন্য মাইক্রোকন্ট্রোলারে অতিরিক্ত ইনপুট লাগবে। এটি দ্রুত একটি মাইক্রোকন্ট্রোলারে ইনপুটগুলির একটি খুব অকার্যকর ব্যবহারে পরিণত হয়। এই লাইনগুলি গ্রহণ করতে পারে এমন মাত্র চারটি সম্ভাব্য লজিক লেভেল আছে: AB = 00, 01, 10 এবং 11. এটি মাইক্রোকন্ট্রোলারের সাথে সুইচ সংযোগ করার জন্য আপনাকে অবশ্যই যে ইনপুট লাইনের ব্যবহার করতে হবে তা হ্রাস করে। সুতরাং, আমরা ইনপুট লাইনের সংখ্যা কমিয়ে মাত্র দুটি করেছি। এখন কি? মনে হচ্ছে আমাদের সত্যিই 16 টি ভিন্ন রাজ্যের প্রয়োজন কিন্তু এই নতুন সুইচটিতে মাত্র চারটি আছে। আমরা কি আমাদের পায়ে গুলি করেছি? না। পড়তে. আমরা ব্যাখ্যা করার জন্য ঘূর্ণমান সুইচ অপারেশন পিছনে তত্ত্ব একটি সামান্য বিট আবরণ করব।

ধাপ 3: অপারেশনের হার্ডওয়্যার তত্ত্ব

অপারেশনের হার্ডওয়্যার থিওরি
অপারেশনের হার্ডওয়্যার থিওরি
অপারেশনের হার্ডওয়্যার থিওরি
অপারেশনের হার্ডওয়্যার থিওরি
হার্ডওয়্যার অপারেশনের তত্ত্ব
হার্ডওয়্যার অপারেশনের তত্ত্ব

উল্লিখিত "একক মেরু -16 নিক্ষেপ" সুইচ ব্যবহার করে ঘূর্ণন দিক সেন্সিং সম্ভব কিন্তু এটি মাইক্রোকন্ট্রোলারে প্রচুর ইনপুট ব্যবহার করে। রোটারি সুইচ ব্যবহার করলে মাইক্রোকন্ট্রোলারে ইনপুটের সংখ্যা কমে যায় কিন্তু এখন আমাদের সুইচ থেকে আসা সংকেতগুলোকে ব্যাখ্যা করতে হবে এবং সেগুলোকে ঘূর্ণনের দিকে অনুবাদ করতে হবে। এটিও এই সমাধানের অন্যতম মৌলিক বৈশিষ্ট্য। এর মানে হল যে একটি 2-বিট কোড আছে যা সুইচ দেয় যা সুইচের অবস্থানের সাথে মিলে যায়। আপনি হয়তো ভাবছেন: "মাইক্রোকন্ট্রোলারে যদি দুই বিট ইনপুট থাকে, তাহলে আমরা কিভাবে 16 টি পজিশনকে প্রতিনিধিত্ব করব?" এটা একটা ভালো প্রশ্ন. আমরা তাদের সবার প্রতিনিধিত্ব করি না। আমাদের কেবল গাঁটের আপেক্ষিক অবস্থানগুলি জানতে হবে যাতে আমরা ঘূর্ণনের দিক নির্ধারণ করতে পারি। গাঁটের পরম অবস্থান অপ্রাসঙ্গিক। ঘড়ির কাঁটার ঘূর্ণনের জন্য, যে কোডটি সুইচ দেয় তা প্রতি চারটি ডিটেন্ট পুনরাবৃত্তি করে এবং ধূসর কোডেড হয়। গ্রে কোডেড মানে প্রতিটি পজিশন পরিবর্তনের জন্য শুধুমাত্র একটি বিট পরিবর্তন আছে। বাইনারিতে ঘড়ির কাঁটার ঘূর্ণনের জন্য এবি ইনপুট গণনা করার পরিবর্তে: 00, 01, 10, 11, এটি এইরকম পরিবর্তিত হয়: 00, 10, 11, 01 সেট মাইক্রোকন্ট্রোলারে AB ইনপুটের জন্য ঘড়ির কাঁটার বিপরীতে মানগুলি এইরকম দেখাবে: 00, 01, 11, 10। ।

ধাপ 4: অপারেশনের সফটওয়্যার তত্ত্ব

অপারেশনের সফটওয়্যার তত্ত্ব
অপারেশনের সফটওয়্যার তত্ত্ব

যে রুটিনটি ঘূর্ণন দিকটি হ্রাস করে তা হ'ল বাধা চালিত। আপনি যে মাইক্রোকন্ট্রোলারটি বেছে নিয়েছেন তা যে কোনো সময় বাধা দিতে সক্ষম হতে হবে (অন্তত) দুটি পিনের মধ্যে একটি পরিবর্তন যখন বাধা সক্ষম হয়। এটাকে PIC16F877A এ PORTB চেঞ্জ ইন্টারাপ্ট বলা হয়। যে কোন সময় সুইচটি ঘোরানো হলে, মাইক্রোকন্ট্রোলার বাধাগ্রস্ত হবে এবং প্রোগ্রাম এক্সিকিউশন ইন্টারাপ্ট সার্ভিস রুটিনে (ISR) পাঠানো হবে। ISR দ্রুত বের করবে কোন পথে সুইচটি ঘোরানো হয়েছে, যথাযথভাবে একটি পতাকা সেট করুন এবং দ্রুত মূল প্রোগ্রামে ফিরে আসুন। ব্যবহারকারী সুইচটি খুব দ্রুত ঘোরানোর ক্ষেত্রে আমাদের এটি দ্রুত ঘটতে হবে আমরা জানি ধূসর কোডেড এবি প্যাটার্ন প্রতি চারটি পজিশন পুনরাবৃত্তি করে তাই আমরা যদি সেই চারটি পদের মধ্যে ট্রানজিশনের জন্য রুটিন কাজ করি তাহলে এটি অন্য সবার জন্য কাজ করবে। লক্ষ্য করুন যে একটি চারটি অবস্থান চক্রের চারটি প্রান্ত রয়েছে। A ইনপুট এবং B ইনপুটের জন্য একটি ক্রমবর্ধমান প্রান্ত এবং একটি পতনের প্রান্ত। মাইক্রোপ্রসেসর প্রতিবার একটি প্রান্ত থাকলে বাধাগ্রস্ত হবে যার মানে মাইক্রোকন্ট্রোলার যে কোন সময় গাঁট ঘুরানোর সময় বাধাগ্রস্ত হবে। ফলস্বরূপ, আইএসআরকে খুঁজে বের করতে হবে যে কোন দিকে নকটি ঘুরানো হয়েছিল। কিভাবে এটি করতে হয় তা বের করতে আমাদের সাহায্য করার জন্য, আমরা ঘড়ির কাঁটার ঘূর্ণনের জন্য তরঙ্গাকৃতির দিকে ফিরে যাই। লক্ষ্য করুন যে যে কোন সময় A- এর একটি প্রান্ত থাকে, তার নতুন মান সবসময় B এর থেকে আলাদা হয়। এই রূপান্তরের জন্য B এখনও 0 এবং এটি A এর নতুন মানের সাথে মেলে না। আবার লক্ষ্য করুন, যে B এবং A এর নতুন মান ভিন্ন। এই মুহূর্তে, আমরা দেখতে পাচ্ছি যে A যখন ঘড়ির কাঁটার ঘূর্ণনের সময় বাধা সৃষ্টি করে, তখন তার নতুন মান B এর থেকে আলাদা। B- এর ক্রমবর্ধমান প্রান্ত যখন 2 থেকে 3 অবস্থানে সুইচ স্থানান্তরিত হয়। এখানে, B- এর নতুন মান A. এর মতোই। (অবস্থান 5 অবস্থান 1 হিসাবে একই।) B- এর নতুন মান এখানে A এর মতোই! আমরা এখন কিছু কাটাতে পারি! যদি A বাধা সৃষ্টি করে এবং A- এর নতুন মান B এর থেকে ভিন্ন হয়, তাহলে ঘূর্ণন ঘড়ির কাঁটার দিকে ছিল। উপরন্তু, যদি B বিঘ্ন ঘটায় এবং B- এর নতুন মান A এর সমান হয়, তাহলে ঘূর্ণন ঘড়ির কাঁটার দিকে চলুক। ঘড়ির কাঁটার ঘূর্ণনের মতো, ঘড়ির কাঁটার বিপরীতে ঘূর্ণন একটি চক্রের মধ্যে চারটি বাধা সৃষ্টি করবে: ইনপুট A এর জন্য দুটি এবং ইনপুট B- এর জন্য দুটি ইনপুট A- এর ক্রমবর্ধমান প্রান্ত থাকে যখন গাঁট 4 থেকে 3 অবস্থানে চলে যায় এবং পতনের প্রান্ত 2 থেকে 1 অবস্থানে চলে যায় যখন গাঁটটি 4 থেকে 3 অবস্থানে চলে যায়, তখন A- এর নতুন মান B- এর মান সমান হয়। লক্ষ্য করুন A যখন অবস্থান 2 থেকে 1 এ চলে যায় তখন তার নতুন মান B- এর সমান হয়। এখন, আমরা দেখতে পাচ্ছি যে যখন A বিঘ্ন ঘটায় এবং এর নতুন মান B এর সাথে মেলে তখন ঘূর্ণন উল্টো দিকে ছিল। দ্রুত, আমরা সবকিছু যাচাই করতে ইনপুট B দেখব। B একটি বাধা সৃষ্টি করবে যখন গাঁটটি অবস্থান 5 (যা 1 এর সমান) থেকে 4 তে চলে যায় এবং যখন গাঁট 3 থেকে 2 অবস্থানে চলে যায় এই উভয় ক্ষেত্রেই, B- এর নতুন মান বিদ্যমান মানের সাথে মেলে না A এর ক্ষেত্রে যা B এর বিপরীত যখন ঘড়ির কাঁটার ঘূর্ণনের জন্য বিঘ্ন ঘটায়। এটা ভাল খবর. সবকিছু যেমন চেক করা উচিত তেমনি সংক্ষিপ্ত করার জন্য, যদি A বাধা সৃষ্টি করে এবং তার নতুন মান B এর মানের সাথে মেলে না বা যদি B বিঘ্ন ঘটায় এবং B এর নতুন মান A এর মানের সাথে মেলে আমরা জানি ঘড়ির কাঁটার ঘূর্ণন ছিল। আমরা সফ্টওয়্যারের ঘড়ির কাঁটার বিপরীত ঘূর্ণনের জন্য অন্যান্য ক্ষেত্রে পরীক্ষা করতে পারি অথবা আমরা ধরে নিতে পারি যে এটি ঘড়ির কাঁটার ঘূর্ণন ছিল না বরং এটি ছিল ঘড়ির কাঁটার বিপরীতে। আমার রুটিন কেবল অনুমান করেছে।

ধাপ 5: সফটওয়্যার

সফটওয়্যার
সফটওয়্যার
সফটওয়্যার
সফটওয়্যার

আমি PIC বেসিক প্রো -এ অন্তর্নির্মিত অন্তর্বর্তী ব্যবহার করি নি। আমি রুটিন চালানোর জন্য ড্যারেল টেলর থেকে আমার কোডে অন্তর্ভুক্ত কয়েকটি ফাইল ব্যবহার করেছি। এখানেই ড্যারেলের একটি বিশাল কৃতিত্ব রয়েছে! ফাইলগুলি বিনামূল্যে। আরো তথ্য, অন্যান্য অ্যাপ্লিকেশন এবং ফাইল ডাউনলোড করার জন্য শুধু তার ওয়েবসাইটে যান। আপনি যদি ড্যারেল টেলর ইন্টারাপ্টের সাথে PIC ব্যবহার না করেন তাহলে আপনি এই অংশটি এড়িয়ে যেতে পারেন। আপনি যে প্ল্যাটফর্মটি ব্যবহার করছেন সেখানে প্রয়োজনীয় হিসাবে শুধু ইন্টারাপ্ট সেট আপ করুন। কোড ২।) এটি আপনার কোডে কপি এবং পেস্ট করুন। ASMINT_LIST ম্যাক্রো; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _ISR, PBP, yes endm INT_CREATEENDASMI নির্দেশাবলীর শেষে গ্রাফিকের মতো ট্যাব এবং স্পেস ertোকান যাতে আপনি আপনার কোডে কিছু সহজ দেখতে পারেন। আপনার প্রয়োজন অনুসারে আপনাকে এটি সামান্য পরিবর্তন করতে হবে। লেবেলের অধীনে, আইএসআরকে সাবরুটিনের নাম দিয়ে প্রতিস্থাপন করুন যা আপনার আইএসআর। আন্ডারস্কোর ভুলবেন না! আপনার এটি প্রয়োজন! বাধাগুলি কাজ করার জন্য, আরও দুটি কাজ করতে হবে: 1।) ISR লিখুন। আপনি এটি এমনভাবে লিখবেন যেমন আপনি একটি PBP সাবরুটিন লিখতে যাচ্ছেন, তা ছাড়া আপনাকে RETURN এর পরিবর্তে সাবরুটিনের শেষে @ INT_RETURN সন্নিবেশ করতে হবে। এটি বিঘ্ন স্বীকার করবে এবং মূল লুপে যেখানে প্রোগ্রামটি চলে গিয়েছিল সেখানে ফিরে আসবে আইএসআর এর অভ্যন্তরে, আপনাকে বাধা পতাকাটি পরিষ্কার করতে হবে যাতে আপনার প্রোগ্রামটি পুনরাবৃত্তিমূলক বাধায় ধরা না পড়ে। PIC16F877A এ বিঘ্নিত পতাকা মুছে ফেলার জন্য শুধু PORTB পড়া দরকার। প্রতিটি ভিন্ন মাইক্রোকন্ট্রোলারের বাধা পতাকা সাফ করার একটি ভিন্ন উপায় রয়েছে। আপনার মাইক্রোকন্ট্রোলারের জন্য ডাটা শীট চেক করুন। 2) যখন আপনি আপনার কোডের সেই বিন্দুতে পৌঁছান যেখানে আপনি বাধা সক্ষম করতে চান, তখন কোডের এই লাইনটি ব্যবহার করুন:@ INT_ENABLE RBC_INT যখন আপনি বাধা নিষ্ক্রিয় করতে চান তখন কেবল এটি ব্যবহার করুন: আমি যা আচ্ছাদিত করেছি তাতে বস্তাবন্দী তাই আমি দ্রুত সংক্ষিপ্তসার করব। এখন পর্যন্ত, আপনার প্রোগ্রামটি এরকম কিছু হওয়া উচিত:; কোন প্রয়োজন সেট আপ বা কোড INT_Handler RBC_INT, _myISR, PBP, হ্যাঁ endm INT_CREATEENDASM; অন্য কোন প্রয়োজনীয় সেট -আপ বা কোড@ INT_ENABLE RBC_INT; কোন কোডটি জানতে হবে যে কোন দিকটি ঘুরছে@ INT_DISABLE RBC_INT; অন্যান্য কোড END; প্রোগ্রামের সমাপ্তিআইএসআর:; এখানে আইএসআর কোড@ INT_RETURN (ইন্টারাপ্ট হ্যান্ডলার সেট আপ টেবিল) আমি মনে করি এখানেই যে কেউ পিআইসি বা ডিটি বাধা ব্যবহার করছে না সে আবার যোগ দিতে পারে। এখন, আমাদের প্রকৃতপক্ষে ISR লিখতে হবে যাতে মাইক্রোকন্ট্রোলার জানে যে কোন দিকটি ঘুরছে। সফ্টওয়্যার তত্ত্ব বিভাগ থেকে স্মরণ করুন যে আমরা ঘূর্ণনের দিকটি নির্ণয় করতে পারি যদি আমরা ইনপুট যা বাধা সৃষ্টি করে, তার নতুন মান এবং অন্যান্য ইনপুটের মান জানতে পারি। এখানে সিউডোকোড আছে: PORTB কে একটি স্ক্র্যাচ ভেরিয়েবলে পড়ুন যাতে ইন্টারাপ্ট ফ্ল্যাগটি পরিষ্কার করা যায় যদি A বাধা সৃষ্টি করে তাহলে পরীক্ষা করুন। যদি সত্য হয়, A এবং B. তুলনা করুন যদি ভিন্ন হয়, যদি ভিন্ন হয়, এটি অন্য ঘড়ির কাঁটার ঘূর্ণন ছিল, এটি ছিল ঘড়ির কাঁটার বিপরীতে EndifCheck যদি B বিঘ্ন ঘটায়। যদি সত্য হয়, A এবং B এর তুলনা করুন যদি ভিন্ন হয়, যদি একই হয়, এটি ঘড়ির কাঁটার দিকে ঘোরানো হয় অন্যথায়, এটি ছিল ঘড়ির কাঁটার বিপরীতে Endif প্রতিবন্ধকতা থেকে ফিরে আসুন A বা B- এর পরিবর্তনের কারণে বাধাপ্রাপ্ত হলে আমরা কিভাবে জানি? পরিবর্তিত ইনপুট এবং অন্যান্য (অপরিবর্তিত) ইনপুটের নতুন মান আবিষ্কার করা সহজ কারণ আমরা তাদের ISR এর ভিতরে পড়তে পারি। আইএসআর -এ মৃত্যুদণ্ড প্রেরণের আগে প্রত্যেকের অবস্থা কেমন ছিল তা আমাদের জানতে হবে। এটি প্রধান রুটিনে ঘটে। প্রধান রুটিন বসে এবং একটি বাইট ভেরিয়েবলের জন্য অপেক্ষা করে যাকে আমরা CWflag বলেছিলাম যা 1 এ সেট করা হবে অথবা ISR দ্বারা 0 তে সাফ করা হবে। গাঁটের প্রতিটি স্বীকৃত পরিবর্তনের পরে বা যদি কোন গাঁট কার্যকলাপ না থাকে, তাহলে একটি নিষ্ক্রিয় অবস্থা নির্দেশ করার জন্য পরিবর্তনশীলটি 5 এ সেট করা হয়। যদি পতাকা সেট হয়ে যায় বা সাফ হয়ে যায়, প্রধান রুটিন অবিলম্বে ঘূর্ণনের উপর ভিত্তি করে সেট পয়েন্ট চাপকে বৃদ্ধি বা হ্রাস করে এবং তারপর CWflag ভেরিয়েবলকে 5 এ সেট করে কারণ গাঁটটি এখন আবার নিষ্ক্রিয়। যেহেতু প্রধান রুটিন CWflag চেক করছে, এটি A এবং B ঘূর্ণমান সুইচ মানগুলির অবস্থাও নথিভুক্ত করছে। এটি সত্যিই সহজ এবং এইরকম দেখাচ্ছে: oldA = AoldB = B এখানে সত্যিই অসাধারণ কিছু নেই। লুপের শুরুতে সেই দুটি লাইন অন্তর্ভুক্ত করুন যা ঘূর্ণনের জন্য CWflag পরীক্ষা করে। আমরা প্রধান রুটিনে ইনক্রিমেন্ট/ডিক্রমেন্ট লুপের ভিতরে রোটারি নোব থেকে ইনপুটগুলির লজিক মান আপডেট করছি যাতে আমরা দেখতে পারি যে ISR চালানোর সময় কোন ইনপুটটি বাধা সৃষ্টি করেছে। এই হল ISR কোড: ABchange: scratch = PORTB 'PORTB পড়ুন বিঘ্ন পতাকা মুছে ফেলার জন্য' A! = B তারপর GOTO CW 'অন্যথায়, এটি ছিল ঘড়ির কাঁটার বিপরীতে ঘূর্ণন ঘড়ির কাঁটার ঘূর্ণন ছিল যদি A == B তারপর GOTO CW 'অন্যথায়, এটি ছিল ঘড়ির কাঁটার বিপরীত ঘূর্ণন ELSE GOTO CCW ENDIF ENDIFCW: CWflag = 1@ INT_RETURNCCW: CWflag = 0@ INT_RETURN কোডের ট্যাবগুলি তাদের যেভাবে দেখানো উচিত তা দেখায় না এখন, কারণ ISR- এর ইনপুট A এবং B- এর পুরনো মান রয়েছে, এটি নির্ধারণ করতে পারে কোন ইনপুটটি বাধা সৃষ্টি করেছে, এটি অন্য (অপরিবর্তিত) ইনপুটের সাথে তুলনা করুন এবং দিক নির্ধারণ করুন ঘূর্ণনের। সমস্ত প্রধান রুটিন যা করতে হবে তা হল CWflag চেক করা কোন দিকটি ঘুরিয়ে দেওয়া হয়েছে (যদি এটি থাকে) এবং একটি কাউন্টার বৃদ্ধি বা হ্রাস, সেট পয়েন্ট বা আপনার যা পছন্দ বা প্রয়োজন। আমি আশা করি এটি সাহায্য করবে এবং খুব বেশি হয়নি বিভ্রান্তিকর এই ধরনের ইন্টারফেসটি বিশেষভাবে দরকারী যদি আপনার সিস্টেম ইতিমধ্যেই ইন্টারাপ্ট ব্যবহার করে থাকে কারণ এটি যোগ করার জন্য আরও একটি বাধা। উপভোগ করুন!

প্রস্তাবিত: