একটি ইউনো কতগুলি বাধা পিন পরিচালনা করতে পারে?


16

আমি আরডুইনো ইউনো আর 3 এর সাথে 7 টি চ্যানেলের আরসি রিসিভারটি ব্যবহার করতে চাইছি। ডকুমেন্টেশনে সর্বাধিক 2 বিঘ্নিত পিনের উল্লেখ রয়েছে, অন্য কয়েকটি ব্লগে আমি পিন চেঞ্জইন্ট লাইব্রেরি সহ 20 টি পিন অবধি বাধা হিসাবে ব্যবহারের উল্লেখ দেখেছি। সুতরাং, আরডুইনো স্থানীয়ভাবে কতগুলি বাধাকে পরিচালনা করতে পারে? এবং পিন চ্যাঞ্জেইন্টের মতো কতগুলি সফ্টওয়্যার সমর্থন দিয়ে পরিচালনা করা যায় তার থেকে এটি কি আলাদা?

উত্তর:


13

দুটি ধরণের "পিন চেঞ্জ" টাইপ বাধা রয়েছে। বাহ্যিক বাধা, যার মধ্যে ইউনোতে দুটি রয়েছে। তাদের 0 এবং 1 বলা হয়, তবে তারা বোর্ডের 2 এবং 3 ডিজিটাল পিনগুলি উল্লেখ করে। এগুলি ক্রমবর্ধমান, পতন, পরিবর্তন (উত্থিত বা পতন) বা নিম্নগঠন সনাক্ত করতে কনফিগার করা যেতে পারে ।

এগুলি ছাড়াও "পিন পরিবর্তন" বাধা রয়েছে যা 20 টি পিনের (A0 থেকে A5, এবং D0 থেকে D13) যে কোনওটিতে পিনের অবস্থানে পরিবর্তন সনাক্ত করে। এই পিন পরিবর্তন বিঘ্নগুলিও হার্ডওয়্যার ভিত্তিক, সুতরাং এগুলি নিজের মধ্যে বাহ্যিক বাধা হিসাবে তত দ্রুত হবে।

উভয় প্রকারের রেজিস্ট্রার স্তরে ব্যবহার করার জন্য কিছুটা বেআইনীভাবে স্ট্যান্ডার্ড, তবে স্ট্যান্ডার্ড আইডিইতে সংযুক্তি অন্তর্ভুক্ত করা হয় (এন) এবং ডিটাচ ইনটারপ্রেট (এন) যা ইন্টারফেসটিকে বহিরাগত বাধাতে সহজতর করে। আপনি পিন পরিবর্তন বিঘ্ন সরল করতে পিন পরিবর্তন লাইব্রেরি ব্যবহার করতে পারেন ।

তবে, এক মিনিটের জন্য লাইব্রেরির স্টিয়ারিং ক্লিয়ার করে, আমরা প্রতিষ্ঠিত করতে পারি যে পিন পরিবর্তন বিঘ্নগুলি বাহ্যিক বাধাগুলির চেয়ে দ্রুত বা দ্রুততর হতে পারে। একটি জিনিসের জন্য, যদিও পিন পরিবর্তনগুলি পিনের ব্যাচে কাজ করে বাধা দেয়, আপনাকে পুরো ব্যাচ সক্ষম করতে হবে না। উদাহরণস্বরূপ, আপনি যদি পিন ডি 4-তে পরিবর্তনগুলি সনাক্ত করতে চান তবে এটি যথেষ্ট হবে:

উদাহরণস্বরূপ স্কেচ:

ISR (PCINT2_vect)
 {
 // handle pin change interrupt for D0 to D7 here
 if (PIND & bit (4))  // if it was high
   PORTD |= bit (5);  // turn on D5
 else
   PORTD &= ~bit (5); // turn off D5
 }  // end of PCINT2_vect

void setup ()
  { 
  // pin change interrupt (example for D4)
  PCMSK2 |= bit (PCINT20);  // want pin 4
  PCIFR  |= bit (PCIF2);    // clear any outstanding interrupts
  PCICR  |= bit (PCIE2);    // enable pin change interrupts for D0 to D7
  pinMode (4, INPUT_PULLUP);
  pinMode (5, OUTPUT);
  }  // end of setup

void loop ()
  {
  }

আমার পরীক্ষাটি ইঙ্গিত দেয় যে বিঘ্নিত পিন (পিন 4) এর পরিবর্তনে "টেস্ট" পিন (পিন 5) এর প্রতিক্রিয়া দেখাতে 1.6 took সময় লেগেছে।


এখন আপনি যদি সহজ (অলস?) পদ্ধতির অবলম্বন করেন এবং সংযুক্তি ইন্টারপ্রেট () ব্যবহার করেন তবে ফলাফলগুলি ধীর হয়ে যাবে, দ্রুত নয়।

উদাহরণ কোড:

void myInterrupt ()
 {
 if (PIND & bit (2))  // if it was high
   PORTD |= bit (5);  // turn on D5
 else
   PORTD &= ~bit (5); // turn off D5
 }  // end of myInterrupt

void setup ()
  { 
  attachInterrupt (0, myInterrupt, CHANGE);
  pinMode (2, INPUT_PULLUP);
  pinMode (5, OUTPUT);
  }  // end of setup

void loop ()
  {
  }

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


এখন আমরা সংযুক্তি আন্তঃবিঘ্ন () এড়ানো এবং এটি নিজে করে এটিকে ঘিরে কাজ করতে পারি:

ISR (INT0_vect)
 {
 if (PIND & bit (2))  // if it was high
   PORTD |= bit (5);  // turn on D5
 else
   PORTD &= ~bit (5); // turn off D5
 }  // end of INT0_vect

void setup ()
  { 
  // activate external interrupt 0

  EICRA &= ~(bit(ISC00) | bit (ISC01));  // clear existing flags
  EICRA |=  bit (ISC00);    // set wanted flags (any change interrupt)
  EIFR   =  bit (INTF0);    // clear flag for interrupt 0
  EIMSK |=  bit (INT0);     // enable it

  pinMode (2, INPUT_PULLUP);
  pinMode (5, OUTPUT);
  }  // end of setup

void loop ()
  {
  }

এটি তাদের মধ্যে 1.52 at দ্রুততম - এটি দেখে মনে হচ্ছে একটি ঘড়ির চক্র কোথাও সংরক্ষণ করা হয়েছে।


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

ব্যাচগুলি হ'ল:

  • এ 0 থেকে এ 5
  • ডি 0 থেকে ডি 7
  • ডি 8 থেকে ডি 13

আপনি যদি আরও কিছু বিঘ্নিত পিন চান তবে আপনি বিভিন্ন ব্যাচ (যেমন, ডি 4 এবং ডি 8) থেকে পিন ব্যবহার করে কোনও পরীক্ষা এড়াতে পারবেন।


Http://www.gammon.com.au/interrupts এ আরও বিশদ


9

দুটি ধরণের বাধা রয়েছে। কি যাও Arduino খেলার মাঠ বলেছেন:

যে কোনও আরডুইনোর কেন্দ্রস্থলে প্রসেসরের দুটি ভিন্ন ধরণের বাধা থাকে: "বাহ্যিক" এবং "পিন পরিবর্তন"। এটিমেগাআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআ। সংকেত প্রান্তগুলিতে পড়ে বা নিম্ন স্তরে AL ট্রিগারগুলি হার্ডওয়্যার দ্বারা ব্যাখ্যা করা হয় এবং ইন্টারপট খুব দ্রুত। আরডুইনো মেগায় আরও কয়েকটি বহিরাগত বিঘ্নিত পিন উপলব্ধ।

অন্যদিকে পিন পরিবর্তন বিঘ্নিত আরও অনেক পিন সক্ষম করা যেতে পারে। এটিমেগা 168/328 ভিত্তিক আরডুইনোগুলির জন্য, তারা আরডুইনোর সিগন্যাল পিনের যে কোনও বা সমস্ত 20 এ সক্ষম হতে পারে; এটিমেগা-ভিত্তিক আরডুইনোগুলিতে তারা 24 পিনে সক্ষম হতে পারে। এগুলি রিসিং বা ফললিং সিগন্যাল প্রান্তগুলিতে সমানভাবে ট্রিগার করা হয়েছে, তাই বাধা প্রাপ্তির জন্য সঠিক পিনগুলি সেট করা, কী ঘটেছে তা নির্ধারণ করার জন্য (কোন পিন? ... সংকেত উঠেছে বা পড়েছে?), এবং এটি সঠিকভাবে পরিচালনা করতে। তদ্ব্যতীত, পিন পরিবর্তনের বিঘ্নগুলি এমসইউতে 3 "পোর্ট" এর মধ্যে বিভক্ত করা হয়, সুতরাং পিনের পুরো শরীরের জন্য কেবল 3 টি বিঘ্নিত ভেক্টর (সাব্রোটাইনস) রয়েছে। এটি একক বিরতিতে ক্রিয়া সমাধানের কাজটিকে আরও জটিল করে তোলে।

মূলত, বাহ্যিক বাধাগুলি অত্যন্ত দ্রুত কারণ সেগুলি সমস্ত হার্ডওয়্যার ভিত্তিক। যাইহোক, পিন পরিবর্তন বাধা রয়েছে, তবে এগুলি বেশ ধীর বলে মনে হচ্ছে কারণ তারা বেশিরভাগ সফটওয়্যার ভিত্তিক।

tl; dr: 20 টি বাধা পিন একসাথে অনেক ধীর। 2 টি বাধা পিনগুলি দ্রুত এবং সবচেয়ে দক্ষ are


সম্পাদনা করুন: আমি শুধু উপাত্তপত্র দিকে তাকিয়ে এটা বলছেন যে একটি পিন পরিবর্তন বিঘ্ন জন্য সূত্রপাত হয় কোনো কোনো লক্ষণ যার পিন পরিবর্তিত হয়েছে সঙ্গে নির্বাচিত পিনের (যদিও তিন বিঘ্ন ভেক্টর বিভক্ত করা)।

  • বাহ্যিক বাধাগুলির জন্য, এটি আপনাকে পিন 3 সবেমাত্র পরিবর্তিত হবে বলে জানাবে
  • পিন পরিবর্তনের জন্য এটি আপনাকে বলবে যে একটি পিন পরিবর্তিত হয়েছে যা আপনি পর্যবেক্ষণ করছেন!

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.