সুচিপত্র:

AVR Assembler টিউটোরিয়াল 7:12 ধাপ
AVR Assembler টিউটোরিয়াল 7:12 ধাপ

ভিডিও: AVR Assembler টিউটোরিয়াল 7:12 ধাপ

ভিডিও: AVR Assembler টিউটোরিয়াল 7:12 ধাপ
ভিডিও: To Design a Up/Down Counter using Atmega32 Microcontroller 2024, নভেম্বর
Anonim
AVR Assembler টিউটোরিয়াল 7
AVR Assembler টিউটোরিয়াল 7

টিউটোরিয়াল 7 এ স্বাগতম!

আজ আমরা প্রথমে দেখাবো কিভাবে একটি কীপ্যাড স্ক্যাঞ্জ করা যায়, এবং তারপর কীপ্যাডের সাথে যোগাযোগের জন্য এনালগ ইনপুট পোর্টগুলি কীভাবে ব্যবহার করতে হয় তা দেখান আমরা ইনপুট হিসাবে বাধা এবং একটি একক তার ব্যবহার করে এটি করব। আমরা কীপ্যাডটি ওয়্যার করব যাতে প্রতিটি কীপ্রেস এনালগ ইনপুটে একটি অনন্য ভোল্টেজ পাঠায় যা আমাদের কী চাপানো ভোল্টেজের দ্বারা আলাদা করতে দেয়। তারপরে আমরা আমাদের রেজিস্টার বিশ্লেষকের কাছে চাপানো নম্বরটি আউটপুট করব যাতে দেখানো যায় যে সবকিছু ঠিক মতো হচ্ছে। ATmega328p এ এনালগ টু ডিজিটাল কনভার্টার (ADC) ব্যবহার করার সময় আপনি অনেকগুলি বিপদ যা চালাতে পারেন এবং তাই আমরা করব কীভাবে সেগুলি এড়ানো যায় তা খুঁজে বের করার চেষ্টা করার পথে কয়েকটি পর্যায়ে জিনিসগুলি নিন। আমরা এটাও দেখব কেন ডিজিটাল কনভার্টারে এনালগ ব্যবহার করা কীপ্যাড নিয়ন্ত্রণ করার সেরা উপায় নয় যদিও এটি আপনার মাইক্রোকন্ট্রোলারে কম পোর্ট ব্যবহার করে। এই টিউটোরিয়ালে আপনার প্রয়োজন হবে:

  1. একটি কীপ্যাড। আপনি একটি কিনতে পারেন অথবা আপনি যা করতে পারেন তা করতে পারেন এবং একটি স্ক্যাঞ্জ করতে পারেন।
  2. কীপ্যাডের জন্য 2 টি মহিলা হেডার (যদি আপনি একটি পরিষ্কার করেন)
  3. তারের সংযোগ
  4. একটি রুটিবোর্ড
  5. 4 1 কোহম প্রতিরোধক
  6. 1 15 কোহম প্রতিরোধক
  7. 1 3.3 কোহম প্রতিরোধক
  8. 1 180 ওহম প্রতিরোধক
  9. 1 680 ওহম প্রতিরোধক
  10. একটি ডিজিটাল মাল্টিমিটার
  11. টিউটোরিয়াল 5 থেকে আপনার বিশ্লেষক

যদি আপনার কাছে ইতিমধ্যেই একটি কীপ্যাড থাকে এবং সেগুলি ছিঁড়ে ফেলার প্রয়োজন না হয় তবে আপনি প্রথম কয়েকটি ধাপ এড়িয়ে যেতে চাইতে পারেন।

এখানে আমার AVR অ্যাসেম্বলার টিউটোরিয়ালগুলির সম্পূর্ণ সংগ্রহের একটি লিঙ্ক:

ধাপ 1: একটি কীপ্যাড স্ক্যাঞ্জ 1

একটি কীপ্যাড স্ক্যাঞ্জ 1
একটি কীপ্যাড স্ক্যাঞ্জ 1
একটি কীপ্যাড স্ক্যাঞ্জ 1
একটি কীপ্যাড স্ক্যাঞ্জ 1
একটি কীপ্যাড স্ক্যাঞ্জ 1
একটি কীপ্যাড স্ক্যাঞ্জ 1
একটি কীপ্যাড স্ক্যাঞ্জ 1
একটি কীপ্যাড স্ক্যাঞ্জ 1

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

পদক্ষেপ 2: একটি কীপ্যাড স্ক্যাঞ্জ 2

একটি কীপ্যাড স্ক্যাঞ্জ 2
একটি কীপ্যাড স্ক্যাঞ্জ 2
একটি কীপ্যাড স্ক্যাঞ্জ 2
একটি কীপ্যাড স্ক্যাঞ্জ 2
একটি কীপ্যাড স্ক্যাঞ্জ 2
একটি কীপ্যাড স্ক্যাঞ্জ 2

এখন একটি পিভিসি করাত নিন এবং কীহোলের চারপাশ থেকে প্লাস্টিক কেটে নিন এবং তারপর একটি পাতলা কীপ্যাড রেখে গভীরতা পেতে প্রান্তের চারপাশে কেটে নিন।

তারপরে কিপ্যাডটি ছোট্ট পেগগুলি ব্যবহার করার জন্য রেখে দিন যা শেষ ধাপে আপনি তাদের উপরের অংশগুলি কেটে ফেলেন এবং একটি সোল্ডারিং লোহা ব্যবহার করুন যাতে প্রতিটি লোহা গর্তে গরম লোহা keুকতে পারে যা প্লাস্টিক গলে যায় এবং এটি ছড়িয়ে দেয় কীপ্যাডের নীচে নতুন "knobs" তৈরি করে যা আগের মতই কীপ্যাড ধরে রাখবে।

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

যাইহোক একবার আপনি ফোনটি ধ্বংস করা এবং যন্ত্রাংশ পরিষ্কার করা শেষ করে আমরা আমাদের কীপ্যাড তৈরি শেষ করব।

ধাপ 3: একটি কীপ্যাড স্ক্যাঞ্জ 3

একটি কীপ্যাড স্ক্যাঞ্জ 3
একটি কীপ্যাড স্ক্যাঞ্জ 3
একটি কীপ্যাড স্ক্যাঞ্জ 3
একটি কীপ্যাড স্ক্যাঞ্জ 3
একটি কীপ্যাড স্ক্যাঞ্জ 3
একটি কীপ্যাড স্ক্যাঞ্জ 3

একটি desoldering বেত ব্যবহার করুন এবং সার্কিট বোর্ডের ছিদ্রগুলি পরিষ্কার আছে কিনা তা নিশ্চিত করে কীপ্যাডের নীচে থেকে ফিতা তারগুলি সরান এবং তারপর বোর্ডে দুটি মহিলা হেডার সংযুক্ত করুন যেখানে ছিদ্র রয়েছে। আপনাকে সম্ভবত আপনার হেডারগুলি ক্লিপ করতে হবে যাতে সেগুলি 4-পিন হেডার হয়।

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

এইভাবে আউটপুট পিনের সমস্ত কী ম্যাপ করুন।

ধাপ 4: কীপ্যাড ওয়্যার করুন

কিপ্যাড তারে
কিপ্যাড তারে
কিপ্যাড তারে
কিপ্যাড তারে

এখন তারের চিত্রটি অনুসরণ করুন এবং আপনার রুটিবোর্ডে কীপ্যাডটি সংযুক্ত করুন।

এটি কীভাবে কাজ করবে তা হল আমরা বাম দিকে 5V লাগাব এবং ডান দিকটি GND এ যাবে। চিত্রের ডানদিকে প্রথম পিনটি Atmega328p মাইক্রোকন্ট্রোলারে আমাদের এনালগ পিনের প্রথমটিতে যায়। যখন কোন বোতাম চাপানো হয় না তখন সংকেতটি 0V হবে, এবং যখন প্রতিটি বোতাম টিপবে তখন এনালগ পোর্টে ইনপুটটি 0V এবং 5V এর মধ্যে থাকবে যার উপর নির্ভর করে কোন কী চাপানো হয়েছিল তার উপর নির্ভর করে। আমরা প্রতিরোধক মানগুলি বেছে নিয়েছি যাতে প্রতিটি পথের একটি প্রতিরোধ ক্ষমতা থাকে যা বাকিদের থেকে আলাদা। মাইক্রোকন্ট্রোলারের এনালগ পোর্ট একটি এনালগ সিগন্যাল নেয় এবং এটি 024 এবং 5V এর মধ্যে 1024 টি ভিন্ন চ্যানেলে বিভক্ত করে। এর মানে হল যে প্রতিটি চ্যানেলের প্রস্থ 5V/1024 = 0.005 V/channel = 5 mV/channel। সুতরাং এনালগ পোর্ট ইনপুট ভোল্টেজগুলিকে আলাদা করতে পারে যতক্ষণ তারা 5 এমভি এর বেশি পার্থক্য করে। আমাদের ক্ষেত্রে আমরা প্রতিরোধক মানগুলি বেছে নিয়েছি যাতে যেকোন দুটি কীপ্রেস একটি ভোল্টেজ সংকেত পাঠাবে যা এর চেয়ে বেশি পার্থক্য করে যাতে মাইক্রোকন্ট্রোলার সহজেই সিদ্ধান্ত নিতে সক্ষম হয় যে কোন কীটি চাপানো হয়েছিল। বড় সমস্যা হল যে পুরো সিস্টেমটি খুব শোরগোল তাই আমাদের প্রতিটি বোতাম টিপে ম্যাপ করার জন্য ভোল্টেজের একটি পরিসীমা বেছে নিতে হবে - কিন্তু আমরা একটু পরে এটিতে প্রবেশ করব।

লক্ষ্য করুন যে আমরা নিয়ন্ত্রককে শুধুমাত্র একটি ইনপুট লাইন ব্যবহার করে 14 টি বোতাম কীপ্যাড নিয়ন্ত্রণ করতে সক্ষম। এটি এনালগ ইনপুটগুলির একটি দরকারী দিক।

এখন কীপ্যাড নিয়ন্ত্রণ করার জন্য আমাদের প্রথম প্রচেষ্টা হবে একটি কীপ্রেস একটি বাধা সৃষ্টি করবে, ইন্টারাপ্ট সাবরুটিন এনালগ ইনপুট পোর্টটি পড়বে এবং কোন কীটি চাপানো হয়েছিল তা নির্ধারণ করবে, এবং তারপর এটি আমাদের রেজিস্টার বিশ্লেষক সাবরুটিনে সেই সংখ্যাটি আউটপুট করবে যা প্রদর্শন করবে আমাদের 8 টি LEDs এর বাইনারিতে মূল মান যা আমরা টিউটোরিয়াল 5 এ সেট করেছি।

পদক্ষেপ 5: আপনার বিশ্লেষকের কাছে কীপ্যাডটি সংযুক্ত করুন

আপনার বিশ্লেষকের কাছে কীপ্যাডটি সংযুক্ত করুন
আপনার বিশ্লেষকের কাছে কীপ্যাডটি সংযুক্ত করুন
আপনার বিশ্লেষকের কাছে কীপ্যাডটি সংযুক্ত করুন
আপনার বিশ্লেষকের কাছে কীপ্যাডটি সংযুক্ত করুন

ছবিগুলি দেখায় যে কিভাবে আমরা মাইক্রোকন্ট্রোলারে কীপ্যাডটি ওয়্যার করতে চাই যাতে আমরা আমাদের বিশ্লেষক প্রদর্শনীর আউটপুট দেখতে পারি। মূলত আমরা কেবল কীপ্যাড থেকে পোর্টসি পিন 0 তে আউটপুটটি ওয়্যার করি, যা ATmega328P এ ADC0 নামেও পরিচিত।

যাইহোক, কিছু অতিরিক্ত জিনিস আছে। আমরা PD2 তে একটি বোতাম যুক্ত করতে যাচ্ছি। I.e. আপনার 5V রেল থেকে একটি বোতাম এবং বোতামের অপর পাশ থেকে PD2 এ একটি তার নিন, এবং পরিশেষে, আমরা আমাদের 5V রেল থেকে AREF পিন সংযোগ বিচ্ছিন্ন করতে চাই এবং পরিবর্তে এটি সংযোগ বিচ্ছিন্ন করে দিতে চাই। আমরা চাইলে 0.1 microfarad decoupling capacitor couldুকিয়ে দিতে পারতাম। এটি একটি সিরামিক ক্যাপাসিটর যার উপর 104 লেখা আছে। প্রথম দুটি সংখ্যা হল সংখ্যা এবং শেষ সংখ্যাটি 10 এর শক্তি যা আমরা পিকোফার্ডে উত্তর পাওয়ার জন্য এটিকে গুণ করি (পিকো মানে 10^-12), তাই 104 মানে 10 x 10^4 পিকোফার্ড, যা একই 100 ন্যানোফারাড (ন্যানো মানে 10^-9), যা 0.1 মাইক্রোফার্ডের মতো (মাইক্রো মানে 10^-6)। যাই হোক, এই সবই AREF পিনকে স্থিতিশীল করে যখন আমরা আমাদের রেফারেন্স পিন হিসাবে এটি ব্যবহার করতে পারি।

আমরা PD2 এবং স্থানের মধ্যে 1 মোহম প্রতিরোধক চাই। আমরা PDV কে 0V তে আউটপুট পিন হিসাবে সেট করতে যাচ্ছি এবং আমরা সেই পিনে একটি ইতিবাচক প্রান্তে ট্রিগার করব। আমরা বাটনটি ছেড়ে দিলে প্রান্তটি অবিলম্বে অদৃশ্য হয়ে যেতে চায় তাই আমরা এই "টান ডাউন" প্রতিরোধকটি সন্নিবেশ করাব।

যে কারণে আমরা বোতামটি চাই তা হল কারণ আমরা আমাদের এনালগ-টু-ডিজিটাল কনভার্টারকে পিন INT0 থেকে বন্ধ করতে চাই, যা PD2। অবশেষে আমরা চাই এডিসি দুটোকেই ট্রিগার করার জন্য কীপ্রেস চাই এবং আলাদা বাটন না থাকলেও ইনপুট রূপান্তরিত করতে পারি, কিন্তু এডিসিকে ট্রিগার করার জন্য আলাদা বোতাম থাকার মাধ্যমে আমরা টাইমিং কাজ শুরু করব এবং একবার আমরা সব লোহা বাগগুলি বের হয়ে গেছে এবং আত্মবিশ্বাসী যে সবকিছু ঠিকঠাকভাবে কাজ করছে, তারপর আমরা একই বোতাম প্রেস থেকে যে শব্দটি আমরা পড়তে চাই তা থেকে শুরু হওয়া গোলমাল এবং সময়ের সমস্যাগুলি মোকাবেলা করব।

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

সুতরাং আসুন কিছু কোড লিখি যা তা সম্পন্ন করবে।

ধাপ 6: কোন টগল সুইচগুলি আমাদের সেট করা উচিত?

কোন টগল সুইচগুলি আমাদের সেট করা উচিত?
কোন টগল সুইচগুলি আমাদের সেট করা উচিত?

আসুন প্রথমে চিন্তা করি কিভাবে আমরা এটি কোড করতে যাচ্ছি যাতে কন্ট্রোলার কীপ্যাড থেকে ইনপুটটি পড়তে পারে এবং এটি বোতামটির সাথে সম্পর্কিত একটি সংখ্যাসূচক মানে পরিণত হতে পারে যা আমরা চাপিয়েছিলাম। এটি Atmega328p- এ নির্মিত। আমরা আমাদের রেফারেন্স ভোল্টেজ হিসাবে AREF ব্যবহার করব এবং আমাদের কীপ্যাড আউটপুট পোর্টসি 0 বা পিসি 0 এর সাথে সংযুক্ত হবে। মনে রাখবেন যে এই পিনটিকে এনালগ-টু-ডিজিটাল কনভার্টার 0. এর জন্য ADC0 বলা হয়। এটি আপনার জন্য ATmega328P- এর বিরতিতে বিভাগ 12.4 এর মাধ্যমে পড়ার একটি ভাল ধারণা হতে পারে। শুরু হয়েছে বা কমপক্ষে সেই বিভাগগুলি রেফারেন্সের জন্য প্রস্তুত আছে। মাইক্রোকন্ট্রোলার সেট আপ করার জন্য যাতে এটি জানে যে এনালগ ইনপুট সিগন্যাল দিয়ে কি করতে হবে, এবং কিভাবে আমাদের প্রোগ্রামের সাথে ইন্টারঅ্যাক্ট করতে হবে, আমাদের প্রথমে বিভিন্ন ADC এর কয়েকটি সেট করতে হবে সম্পর্কিত নিবন্ধ বিট। এগুলি মূলত প্রথম কম্পিউটারে পুরানো টগল সুইচের সমতুল্য। আপনি হয় একটি সুইচ অন বা অফ ফ্লিপ করুন, অথবা আরও পিছনে আপনি একটি আউটলেট এবং অন্যের মধ্যে তারগুলি প্লাগ করুন যাতে রাস্তায় সেই কাঁটায় পৌঁছানো ইলেকট্রনগুলি একটি গেট বন্ধ করে দেয় এবং অন্যটি এটিকে একটি ভিন্ন পথে নামিয়ে দেয়। সার্কিট্রি এবং এইভাবে একটি ভিন্ন যৌক্তিক কাজ সম্পাদন। অ্যাসেম্বলি ভাষায় কোডিং করার সময় আমাদের মাইক্রোকন্ট্রোলারের এই ফাংশনগুলিতে ঘনিষ্ঠ অ্যাক্সেস থাকে যা এটি প্রথম স্থানে এটি করার একটি আকর্ষণীয় বিষয়। এটি আরো "হ্যান্ডস অন" এবং আগের তুলনায় "পর্দার আড়ালে" অনেক কম চলছে। সুতরাং এই রেজিস্টারগুলিকে একটি ক্লান্তিকর কাজ হিসাবে সেট করার কথা ভাববেন না। এই কি সমাবেশ ভাষা আকর্ষণীয় করে তোলে! আমরা চিপের অভ্যন্তরীণ কাজকর্ম এবং যুক্তির সাথে একটি খুব ব্যক্তিগত সম্পর্ক অর্জন করছি এবং এটিকে আমরা যা করতে চাই তা ঠিক করতে বাধ্য করছি - আর বেশি এবং কম নয়। কোন নষ্ট ঘড়ি চক্র তাই এখানে সুইচগুলির একটি তালিকা যা আমাদের সেট করতে হবে:

  1. পাওয়ার রেডাকশন ADC বিট, PRADC বন্ধ করুন, যা PRR রেজিস্টারের বিট 0, যেহেতু এই বিটটি থাকলে এটি ADC বন্ধ করে দেবে। বিদ্যুৎ হ্রাস রেজিস্টারটি মূলত এমন কিছু জিনিস বন্ধ করার একটি উপায় যা বিদ্যুৎ ব্যবহার করে যখন আপনার প্রয়োজন হয় না। যেহেতু আমরা ADC ব্যবহার করছি তাই আমরা নিশ্চিত করতে চাই যে এটি এইভাবে অক্ষম নয়। (পৃষ্ঠা 46 এ PRADC দেখুন)
  2. ADC মাল্টিপ্লেক্সার সিলেকশন (ADMUX) রেজিস্টারে MUX3… 0 বন্ধ করে এনালগ ইনপুট চ্যানেলটি নির্বাচন করুন (টেবিল 24-4 পৃষ্ঠা 249 দেখুন) এগুলি ডিফল্টভাবে ইতিমধ্যেই বন্ধ আছে তাই আমাদের সত্যিই এটি করার দরকার নেই। যাইহোক, আমি এটি অন্তর্ভুক্ত করছি যেহেতু আপনি যদি ADC0 ছাড়া অন্য কোন পোর্ট ব্যবহার করেন তবে আপনাকে সেই অনুযায়ী এই সুইচগুলি টগল করতে হবে। MUX3, MUX2, MUX1, MUX0 এর বিভিন্ন সংমিশ্রণ আপনাকে আপনার ইনপুট হিসাবে যেকোনো এনালগ পোর্ট ব্যবহার করতে দেয় এবং আপনি যদি একসাথে বিভিন্ন এনালগ সিগন্যাল দেখতে চান তবে আপনি এইগুলিকে ফ্লাইতেও পরিবর্তন করতে পারেন।
  3. ADMUX রেজিস্টারে REFS0 এবং REFS1 বিট বন্ধ করুন যাতে আমরা AREF কে অভ্যন্তরীণ রেফারেন্সের পরিবর্তে আমাদের রেফারেন্স ভোল্টেজ হিসাবে ব্যবহার করি (পৃষ্ঠা 248 দেখুন)।
  4. ADMUX এ ADLAR বিট চালু করুন যাতে ফলাফল "লেফট অ্যাডজাস্ট" হয় আমরা পরবর্তী ধাপে এই পছন্দটি নিয়ে আলোচনা করব।
  5. PC0 তে ডিজিটাল ইনপুট বন্ধ করতে ডিজিটাল ইনপুট অক্ষম নিবন্ধনে (DIDR0) ADC0D বিট সেট করুন। আমরা সেই পোর্টটি এনালগ ইনপুটের জন্য ব্যবহার করছি যাতে আমরা এর জন্য ডিজিটাল ইনপুট নিষ্ক্রিয় করতে পারি।
  6. ISC0 এবং ISC1 কে এক্সটারনাল ইন্টারাপ্ট কন্ট্রোল রেজিস্টার A (EICRA) এ সেট করুন যে আমরা একটি ভোল্টেজ সিগন্যালের ক্রমবর্ধমান প্রান্তে INT0 পিন (PD2) তে ট্রিগার করতে চাই, পৃষ্ঠা 71 দেখুন।
  7. এক্সটারনাল ইন্টারাপ্ট মাস্ক রেজিস্টারে (EIMSK) বিট INT0 এবং INT1 পরিষ্কার করুন যাতে বোঝা যায় যে আমরা এই পিনে বাধা ব্যবহার করছি না। যদি আমরা এই পিনে বাধা সক্ষম করতে চাই তাহলে আমাদের 0x0002 ঠিকানায় একটি ইন্টারাপ্ট হ্যান্ডলারের প্রয়োজন হবে কিন্তু এর পরিবর্তে আমরা এটি সেট আপ করছি যাতে এই পিনের একটি সিগন্যাল ADC রূপান্তরকে ট্রিগার করে, যার সম্পূর্ণতা ADC রূপান্তর দ্বারা পরিচালিত হয় ঠিকানা 0x002A। পৃষ্ঠা 72 দেখুন।
  8. ADC সক্রিয় করতে ADC নিয়ন্ত্রণ এবং অবস্থা রেজিস্টার A (ADCSRA) এ ADC Enable (ADEN) বিট (বিট 7) সেট করুন। পৃষ্ঠা 249 দেখুন।
  9. আমরা যখনই এনালগ সিগন্যাল পড়তে চাই তখন ADC স্টার্ট কনভার্সেশন বিট (ADSC) সেট করে আমরা একক রূপান্তর শুরু করতে পারতাম, যাইহোক, আপাতত আমরা এটি স্বয়ংক্রিয়ভাবে পড়তে চাই যখনই কেউ বাটন চাপবে, তাই পরিবর্তে আমরা ADC সক্ষম করব ADCSRA রেজিস্টারে Autotrigger Enable (ADATE) বিট যাতে ট্রিগারিং স্বয়ংক্রিয়ভাবে সম্পন্ন হয়।
  10. আমরা ADPS2..0 বিট (AD Prescalar bits) 111 তে সেট করেছি যাতে ADC ঘড়ি হল CPU ঘড়ি 128 এর একটি ফ্যাক্টর দ্বারা বিভক্ত।
  11. আমরা ADC- কে PD2 হতে ট্রিগার করার উৎস নির্বাচন করব যাকে INT0 (বহিরাগত বাধা অনুরোধ 0) বলা হয়। আমরা ADCSRB রেজিস্টারে বিভিন্ন বিট টগল করে এটি করি (251 পৃষ্ঠায় টেবিল 24-6 দেখুন)। আমরা টেবিলের মাধ্যমে দেখি যে আমরা ADTS0 বন্ধ, ADTS1 চালু এবং ADTS2 বন্ধ করতে চাই যাতে ADC সেই পিনটি বন্ধ করে দেয়। লক্ষ্য করুন যদি আমরা ক্রমাগত এনালগ পোর্টের নমুনা দিতে চাই যেমন আমরা যদি কিছু ক্রমাগত এনালগ সিগন্যাল পড়ি (যেমন শব্দ নমুনা বা কিছু) আমরা এটি ফ্রি রানিং মোডে সেট করব। আমরা PD2 তে ট্রিগার সেট করার যে পদ্ধতিটি ব্যবহার করছি তা ব্যত্যয় না করে এনালগ পোর্ট PC0 এর ADC রিডিং ট্রিগার করে। রূপান্তর সম্পূর্ণ হলে বাধা আসবে।
  12. ADCSRA রেজিস্টারে ADC Interrupt Enable (ADIE) বিট সক্ষম করুন যাতে যখন ডিজিটাল রূপান্তর থেকে এনালগ সম্পন্ন হয় তখন এটি একটি বাধা সৃষ্টি করবে যার জন্য আমরা একটি বাধা হ্যান্ডলার লিখতে পারি এবং.org 0x002A এ রাখতে পারি।
  13. বাধা সক্ষম করতে SREG এ I bit সেট করুন।

অনুশীলন 1: উপরের প্রতিটি সেটিংসের জন্য আপনি ডেটশীটে প্রাসঙ্গিক বিভাগগুলি পড়েছেন তা নিশ্চিত করুন যাতে আপনি বুঝতে পারেন যে কী চলছে এবং যদি আমরা সেগুলি বিকল্প সেটিংসে পরিবর্তন করি তবে কী হবে।

ধাপ 7: ইন্টারাপ্ট হ্যান্ডলার লিখুন

শেষ ধাপে আমরা দেখেছি যে আমরা এটি সেট আপ করেছি যাতে PD2 তে সনাক্ত হওয়া একটি ক্রমবর্ধমান প্রান্ত PC0 তে ডিজিটাল রূপান্তরের জন্য একটি এনালগ ট্রিগার করবে এবং যখন এই রূপান্তরটি সম্পন্ন হবে তখন এটি একটি ADC রূপান্তর সম্পূর্ণ বাধা দেবে। এখন আমরা এই বাধা দিয়ে কিছু করতে চাই। আপনি যদি পৃষ্ঠা 65 এ টেবিল 12-6 পরীক্ষা করেন তবে আপনি সম্ভাব্য বাধাগুলির একটি তালিকা দেখতে পাবেন। আমরা ইতিমধ্যে 0x0000 ঠিকানায় রিসেট বাধা এবং পূর্ববর্তী টিউটোরিয়ালে 0x0020 ঠিকানায় টাইমার/কাউন্টার 0 ওভারফ্লো বাধা দেখেছি। এখন আমরা ADC এর বাধাটি দেখতে চাই যা আমরা টেবিল দ্বারা দেখছি ঠিকানা 0x002A এ। সুতরাং আমাদের অ্যাসেম্বলি ল্যাঙ্গুয়েজ কোডের শুরুতে আমাদের একটি লাইন লাগবে যা পড়ে:

.org 0x002Arjmp ADC_int

যা ADC_int লেবেলযুক্ত আমাদের ইন্টারাপ্ট হ্যান্ডলারে ঝাঁপিয়ে পড়বে যখনই ADC একটি রূপান্তর সম্পন্ন করবে। তাহলে কিভাবে আমাদের ইন্টারাপ্ট হ্যান্ডলার লিখতে হবে? ADC যেভাবে কাজ করে তা হল নিম্নোক্ত হিসাব করে

ADC = Vin x 1024 / Vref

তাই আসুন দেখি কী কী প্যাডে "রেডিয়াল" বোতামটি চাপলে কি হয়। সেই ক্ষেত্রে PC0 এর ভোল্টেজ কিছু মান পরিবর্তন হবে, 1.52V বলুন, এবং যেহেতু Vref 5V এ আছে আমাদের হবে:

ADC = (1.52V) x 1024 / 5V = 311.296

এবং তাই এটি একটি 311 হিসাবে প্রদর্শিত হবে। আমাদের অবশ্য এটি করার প্রয়োজন হবে না কারণ আমরা প্রকৃত ভোল্টেজগুলিতে কেবল তাদের মধ্যে পার্থক্য করতে আগ্রহী নই। যখন রূপান্তর শেষ হয়, ফলাফলটি ADCH এবং ADCL রেজিস্টারে রাখা 10-বিট নম্বরে সংরক্ষিত হয় এবং আমরা এটিকে "লেফট অ্যাডজাস্টেড" করেছি যার অর্থ হল 10-বিট ADCH এর 7 তম বিট থেকে শুরু হয় এবং নিচে চলে যায় ADCL এর বিট 6 (এই দুটি রেজিস্টারে মোট 16 বিট আছে এবং আমরা তাদের মধ্যে 10 টি অর্থাৎ 1024 টি চ্যানেল ব্যবহার করি)। আমরা যদি ADMUX রেজিস্টারে ADLAR বিট সাফ করে চাইতাম তাহলে ফলাফল "ডান অ্যাডজাস্ট" করতে পারতাম। যে কারণে আমরা লেফট অ্যাডজাস্টেড নির্বাচন করি তার কারণ হল আমাদের সিগন্যালগুলি যথেষ্ট আলাদা যে চ্যানেল নম্বরের শেষ দুটি সংখ্যা প্রাসঙ্গিক নয় এবং সম্ভবত শুধু গোলমাল তাই আমরা কেবল উপরের dig টি সংখ্যা ব্যবহার করে কীপ্রেসগুলি আলাদা করব, অন্য কথায়, আমাদের কেবল ADCH দেখতে হবে কোন বোতামটি চাপানো হয়েছিল তা বের করার জন্য। নিবন্ধন করুন, সেই সংখ্যাটিকে একটি কীপ্যাড ভ্যালুতে রূপান্তর করুন, এবং তারপর সেই মানটি আমাদের রেজিস্টার বিশ্লেষক LED এর কাছে পাঠান যাতে আমরা যাচাই করতে পারি যে "9" বলার ফলে LED এর "00001001" এর সাথে আলো জ্বলে উঠবে। যদিও আমরা প্রথমে দেখতে চাই ADCH এ কি দেখায় যখন আমরা বিভিন্ন বোতাম ধাক্কা দিই। সুতরাং আসুন আমরা কেবল একটি সহজ ইন্টারাপ্ট হ্যান্ডলার লিখি যা ADCH- এর বিষয়বস্তু বিশ্লেষক প্রদর্শনে পাঠায় তাই আমাদের যা প্রয়োজন তা হল:

ADC_int: lds বিশ্লেষক, ADCH; ADCH এর মান আমাদের বিশ্লেষকদের EIFR, 0 এ লোড করুন; বাহ্যিক বাধা পতাকা সাফ করুন যাতে এটি আবার যেতে প্রস্তুত হয়

এখন পর্যন্ত, আপনি টিউটোরিয়াল 5 এ আমাদের বিশ্লেষক থেকে কোডটি অনুলিপি করতে সক্ষম হবেন এবং এই বাধা এবং টগল সেটিংস যোগ করুন এবং এটি চালান। অনুশীলন 2: কোড লিখুন এবং এটি চালান। দেখুন যে আপনি আপনার বিশ্লেষক প্রদর্শনে ADCH প্রদর্শন করছেন। একই কীপ্রেসটি একাধিকবার চাপানোর চেষ্টা করুন। আপনি কি সবসময় ADCH এ একই মান পান?

ধাপ 8: কীপ্রেস মানগুলি খুঁজে বের করুন

কীপ্রেস মানগুলি বের করুন
কীপ্রেস মানগুলি বের করুন

এখন আমাদের যা করতে হবে তা হল ADCH- এর মানগুলোকে কী -এর সাথে সংশ্লিষ্ট সংখ্যায় রূপান্তর করা। আমরা এটি প্রতিটি কীপ্রেস এর জন্য ADCH এর বিষয়বস্তু লিখে এবং তারপর এটিকে দশমিক সংখ্যায় রূপান্তর করে যা আমি ছবিতে করেছি। আমাদের ইন্টারাপ্ট হ্যান্ডলিং রুটিনে আমরা প্রতিটি কীপ্রেস -এর সাথে সামঞ্জস্যপূর্ণ মানগুলির একটি সম্পূর্ণ পরিসীমা বিবেচনা করব যাতে এডিসি সেই রেঞ্জের যে কোনও কিপ্রেসকে ম্যাপ করবে।

অনুশীলন 3: এই ম্যাপিংটি করুন এবং তারপরে আপনার এডিসির বাধা রুটিনটি পুনরায় লিখুন।

এখানে আমি আমার জন্য কি পেয়েছি (আপনার খুব সম্ভবত ভিন্ন হবে)। লক্ষ্য করুন যে আমি প্রতিটি কীপ্রেস এর জন্য বিভিন্ন মানের সাথে এটি সেট আপ করেছি।

ADC_int:; বাহ্যিক বাধা হ্যান্ডলারক্লার বিশ্লেষক; নতুন numberlds বাটন এইচ, ADCH জন্য প্রস্তুত; ADCH আপডেট করলে ADCH clccpi buttonH, 240brlo PC+3 পড়বে; যদি ADCH বড় হয় তবে এটি 1ldi বিশ্লেষক, 1; তাই 1rjmp রিটার্ন সহ বিশ্লেষক লোড করুন; এবং clccpi বাটন ফিরিয়ে দিন H, 230; যদি ADCH বড় হয় তাহলে 2brlo PC+3ldi বিশ্লেষক, 2rjmp রিটার্ন clccpi buttonH, 217brlo PC+3ldi analyzer, 3rjmp return clccpi buttonH, 203brlo PC+3ldi analyzer, 4rjmp return clccpi buttonH, 187brlo PC+3ldi বিশ্লেষক, 5rjp 155brlo PC+3ldi বিশ্লেষক, 6rjmp রিটার্ন clccpi buttonH, 127brlo PC+3ldi বিশ্লেষক, 255; আমরা সব onrjmp রিটার্ন clccpi বাটন ফ্ল্যাশ সেট করব 0b11110000; তারকাচিহ্ন উপরের অর্ধেক onrjmp রিটার্ন clccpi buttonH, 28brlo PC+3ldi analyzer, 0rjmp return clccpi buttonH, 17brlo PC+3ldi analyzer, 0b00001111; হ্যাশ সাইন নিচের অর্ধেক onrjmp রিটার্ন clccpi বাটন H, 5brlo PC+3ldi বিশ্লেষক, 0b11000011; redial হল উপরের 2 নীচে 2rjmp রিটার্ন ldi বিশ্লেষক, 0b11011011; অন্যথায় ত্রুটি ঘটেছে: reti

ধাপ 9: সংস্করণ 1 এর জন্য কোড এবং ভিডিও

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

ldi temp, (1 <> sts EICRA, তাপমাত্রা

উপরের কোডের প্রথম লাইনে "<<" কমান্ডটি একটি শিফট অপারেশন। এটি মূলত বাইনারি সংখ্যা 1 নেয়, যা 0b00000001 এবং এটি ISC01 নম্বর পরিমাণের দ্বারা বামে স্থানান্তরিত হয়। এটি EICRA রেজিস্টারে ISC01 নামের বিটের অবস্থান। যেহেতু ISC01 বিট 1, 1 নম্বরটি বাম 1 অবস্থানে স্থানান্তরিত হয়ে 0b00000010 হয়ে যায়। একইভাবে দ্বিতীয়, ISC00, EICRA এর বিট 0 এবং তাই 1 নম্বর স্থানান্তর বাম দিকে শূন্য অবস্থান। যদি দেখেন m328Pdef.inc ফাইলটি দেখুন যা আপনি প্রথম টিউটোরিয়ালে ডাউনলোড করেছেন এবং তখন থেকে evrr ব্যবহার করছেন, আপনি দেখতে পাবেন যে এটি ".equ" স্টেটমেন্টের একটি দীর্ঘ তালিকা মাত্র। আপনি দেখতে পাবেন যে ISC01 1 এর সমান। এগুলি কেবল নিবন্ধন বিটগুলির নাম যা আমাদের মানুষকে কোড পড়তে এবং লিখতে সহায়তা করে। এখন, উপরের দুটি শিফট ক্রিয়াকলাপের মধ্যে উল্লম্ব লাইন একটি যৌক্তিক "বা" অপারেশন। এখানে সমীকরণ:

0b00000010 | 0b00000001 = 0b00000011

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

ওরি টেম্প, (১

0b00000001 সহ এই "বা" এর তাপমাত্রা যা শূন্য বিটে 1 রাখে এবং বাকি সব অপরিবর্তিত রাখে। এছাড়াও যখন আমরা লিখেছিলাম

andi temp, 0b11111110

এটি টেম্পের জিরোথ বিটকে 0 এ পরিবর্তন করে এবং বাকি সব অপরিবর্তিত রাখে।

অনুশীলন 4: আপনাকে কোডটি পড়তে হবে এবং নিশ্চিত করতে হবে যে আপনি প্রতিটি লাইন বুঝতে পেরেছেন। আপনি জিনিসগুলি করার জন্য আরও ভাল পদ্ধতি খুঁজে পেতে এবং একটি ভাল প্রোগ্রাম লিখতে আগ্রহী হতে পারেন। জিনিষ কোড করার শত উপায় আছে এবং আমি বেশ আত্মবিশ্বাসী যে আপনি আমার চেয়ে অনেক ভাল উপায় খুঁজে পেতে পারেন। আপনি (স্বর্গ নিষিদ্ধ!) ত্রুটি এবং বাদও খুঁজে পেতে পারেন। সেক্ষেত্রে আমি নিশ্চিতভাবে তাদের সম্পর্কে শুনতে চাই যাতে সেগুলো ঠিক করা যায়।

ঠিক আছে, এখন দেখা যাক আমরা সেই অপ্রয়োজনীয় বোতাম থেকে মুক্তি পেতে পারি কিনা …

ধাপ 10: সংস্করণ 2 এর জন্য কোড

বোতামটি পরিত্রাণ পাওয়ার সহজ উপায় হল এটি সম্পূর্ণরূপে সরিয়ে ফেলা, PB2 এ ইনপুট ভুলে যাওয়া এবং ADC কে "ফ্রি রানিং মোডে" পরিবর্তন করা।

অন্য কথায় কেবল ADCSRB রেজিস্টার পরিবর্তন করুন যাতে ADTS2, ADTS1, এবং ADTS0 সবই শূন্য।

তারপর ADCSRA তে ADSC বিট 1 সেট করুন যা প্রথম রূপান্তর শুরু করবে।

এখন এটি আপনার মাইক্রোকন্ট্রোলারে আপলোড করুন এবং আপনি দেখতে পাবেন যে সঠিক নম্বরটি ডিসপ্লেতে আসে যখন আপনি বোতাম টিপছেন এবং শুধুমাত্র যখন আপনি বোতাম টিপছেন। এর কারণ হল ADC ক্রমাগত ADC0 পোর্টের নমুনা নিচ্ছে এবং মান প্রদর্শন করছে। যখন আপনি বোতাম থেকে আপনার আঙুলটি সরিয়ে ফেলবেন, "বোতাম বাউন্স" এর ফলে কিছু এলোমেলো মান খুব দ্রুত ঘটবে এবং তারপর এটি 0V ইনপুটে ফিরে আসবে। আমাদের কোডে আমাদের এই 0V 0b11011011 হিসাবে দেখা যাচ্ছে (কারণ কীপ্রেস `0 'ইতিমধ্যে 0b00000000 ডিসপ্লে ভ্যালু ব্যবহার করছে)

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

তাহলে চলুন আরেকটি সমাধান খুঁজে বের করি …

ধাপ 11: কিভাবে আমরা বোতাম পরিত্রাণ পেতে পারি? সংস্করণ 3

কিভাবে আমরা বোতাম পরিত্রাণ পেতে পারি? সংস্করণ 3
কিভাবে আমরা বোতাম পরিত্রাণ পেতে পারি? সংস্করণ 3

আমরা এগিয়ে যেতে পারে অনেক উপায় আছে। প্রথমে আমরা বোতামটি পরিত্রাণ পেতে হার্ডওয়্যার যুক্ত করতে পারি। উদাহরণস্বরূপ আমরা কীপ্রেস এর আউটপুট লাইনে সার্কিটে একটি ট্রানজিস্টর লাগানোর চেষ্টা করতে পারি যাতে এটি আউটপুট থেকে কারেন্টের একটি ছোট্ট ট্রিকল নেয় এবং একটি 5V পালস ইন্টারাপ্ট পিন PD2 তে পাঠায়।

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

তাই আমরা বরং একটি সফটওয়্যার সমাধান নিয়ে আসব। আমরা যা করতে চাই তা হল PD2 পিনে একটি ইন্টারাপ্ট যোগ করা এবং এর জন্য একটি ইন্টারাপ্ট হ্যান্ডলার লিখুন যা কিপ্যাড পিনের একক রিডিং বলে। অন্য কথায়, আমরা এডিসি থেকে অটোট্রিগার বাধা থেকে মুক্তি পাই এবং একটি বাহ্যিক বাধা যুক্ত করি যা এর ভিতরে এডিসিকে ডাকে। এইভাবে ADC পড়ার সংকেত PD2 সংকেত ইতিমধ্যে ঘটে যাওয়ার পরে আসে এবং এটি PC0 পিনটি পড়ার এবং রূপান্তরিত হওয়ার আগে একটি সঠিক ভোল্টেজকে স্থিতিশীল করার জন্য যথেষ্ট সময় দিতে পারে। আমাদের এখনও একটি এডিসি সমাপ্তির বাধা থাকবে যা ফলাফলটি শেষ পর্যন্ত বিশ্লেষক প্রদর্শন করে।

ধারণা তৈরী কর? আচ্ছা এটা করা যাক…

সংযুক্ত নতুন কোডটি দেখুন।

আপনি নিম্নলিখিত পরিবর্তনগুলি দেখতে পাবেন:

  1. আমরা INT0 বহিরাগত বাধা পরিচালনা করার জন্য.org 0x0002 ঠিকানায় একটি rjmp যোগ করেছি
  2. আমরা INT0 পিনে বাধা দিতে চাই তা নির্দেশ করার জন্য আমরা EIMSK রেজিস্টার পরিবর্তন করেছি
  3. আমরা অটোট্রিগারিং নিষ্ক্রিয় করতে ADCSRA রেজিস্টারে ADATE পিন পরিবর্তন করেছি
  4. আমরা ADCSRB সেটিংস থেকে পরিত্রাণ পেয়েছি যেহেতু ADATE বন্ধ থাকলে সেগুলি অপ্রাসঙ্গিক
  5. আমাদের আর বাহ্যিক ট্রিগার পতাকাটি পুনরায় সেট করতে হবে না কারণ INT0 বিঘ্ন রুটিন এটি স্বয়ংক্রিয়ভাবে সম্পন্ন করে যখন এটি সম্পন্ন হয় - পূর্বে আমাদের কোন বাধা রুটিন ছিল না, আমরা কেবল সেই পিনে একটি সংকেত বন্ধ করে ADC চালু করেছি, তাই আমাদের হাত দিয়ে সেই পতাকা সাফ করুন।

এখন ইন্টারাপ্ট হ্যান্ডলারে আমরা কেবল এডিসি থেকে একক রূপান্তরকে কল করি।

অনুশীলন 5: এই সংস্করণটি চালান এবং দেখুন কী হয়।

ধাপ 12: ওয়ার্কিং ভার্সনের জন্য কোড এবং ভিডিও

আমরা শেষ সংস্করণে দেখেছি, বাটন বিঘ্ন খুব ভাল কাজ করে না কারণ বিঘ্নটি PD2 পিন করার জন্য একটি ক্রমবর্ধমান প্রান্তে ট্রিগার করা হয় এবং তারপর বাধা হ্যান্ডলার ADC রূপান্তরকে কল করে। যাইহোক, এডিসি তারপর স্থিতিশীল হওয়ার আগে ভোল্টেজ রিডিং পায় এবং তাই এটি অর্থহীনতা পড়ে।

আমাদের যা দরকার তা হল PD2- তে বিরতি এবং PC0 তে ADC পড়ার মধ্যে বিলম্বের পরিচয় করিয়ে দেওয়া। আমরা একটি টাইমার/কাউন্টার, একটি কাউন্টার ওভারফ্লো বাধা এবং একটি বিলম্ব রুটিন যোগ করে এটি করব। ভাগ্যক্রমে আমরা টিউটোরিয়াল 3 থেকে এটি কীভাবে করতে হয় তা ইতিমধ্যে জানি! তাই আমরা সেখান থেকে শুধু প্রাসঙ্গিক কোড কপি এবং পেস্ট করব।

আমি ফলে কোড এবং একটি ভিডিও এটি অপারেশন দেখানো হয়েছে।

আপনি লক্ষ্য করবেন যে রিডিংগুলি যতোটা আশা করা যায় ততটা সঠিক নয়। এটি সম্ভবত বেশ কয়েকটি উত্সের কারণে:

  1. আমরা PD2 তে ট্রিগার করার জন্য কীপ্যাডের ভোল্টেজ আউটপুট থেকে ট্যাপ করছি যা PC0 তে পড়া প্রভাবিত করে।
  2. সেরা পড়া পেতে ট্রিগারের পরে কতক্ষণ বিলম্ব করতে হবে তা আমরা সত্যিই জানি না।
  3. এডিসি রূপান্তর সম্পন্ন হতে কয়েকটি চক্র লাগে যার অর্থ হল আমরা কীপ্যাডে দ্রুত আগুন দিতে পারি না।
  4. সম্ভবত কীপ্যাডে নিজেই গোলমাল আছে।
  5. ইত্যাদি…

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

প্রকৃতপক্ষে, আমরা এখানে যেভাবে যেভাবে একটি কীপ্যাড চালাতে চাইব তার দুটি কারণ রয়েছে:

  1. এটি 8 এর পরিবর্তে আমাদের মাইক্রোকন্ট্রোলারে 2 টি পিন ব্যবহার করে।
  2. মাইক্রোকন্ট্রোলারে ADC- এর বিভিন্ন দিক দেখানোর জন্য এটি একটি দুর্দান্ত প্রকল্প যা আপনি সেখানে যেসব স্ট্যান্ডার্ড জিনিস খুঁজে পেতে পারেন তার থেকে আলাদা, যেমন তাপমাত্রা রিডিং, পোটেন্টিওমিটার ঘুরানো ইত্যাদি। শুধু বিনামূল্যে চলমান CPU-gobbling মোডের পরিবর্তে।

যাইহোক, এখানে আপনার জন্য একটি চূড়ান্ত অনুশীলন রয়েছে:

ব্যায়াম 6: একটি লুক-আপ টেবিল ব্যবহার করার জন্য ADC রূপান্তর সম্পূর্ণ ইন্টারাপ্ট হ্যান্ডলার পুনরায় লিখুন। I.e. যাতে এটি টেবিলে প্রথম আইটেমের সাথে এনালগ মান পরীক্ষা করে এবং যদি এটি বড় হয় তবে এটি বাধা থেকে ফিরে আসে, যদি তা না হয় তবে এটি টেবিলের পরবর্তী আইটেমে Z বৃদ্ধি করে এবং আবার পরীক্ষায় ফিরে আসে। এটি কোডটি ছোট করবে এবং বাধা রুটিন পরিষ্কার করবে এবং এটি আরও সুন্দর দেখাবে। (পরবর্তী ধাপ হিসেবে আমি একটি সম্ভাব্য সমাধান দেব) ব্যায়াম 7: মাইক্রোকন্ট্রোলারে আপনার কীপ্যাড 8 পিনে সংযুক্ত করুন এবং এর জন্য সহজ ড্রাইভারটি লিখুন এবং এটি কতটা সুন্দর তা অনুভব করুন। আপনি কি আমাদের পদ্ধতির কাজকে আরও ভাল করার কয়েকটি উপায় সম্পর্কে চিন্তা করতে পারেন?

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

পরে আবার দেখা হবে!

প্রস্তাবিত: