পুশ-টান / খোলা ড্রেন; টান-আপ / পুল ডাউন


49

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

সমস্ত জিপিআইও রেজিস্টার উপলব্ধগুলির মধ্যে, আমি দুটি বুঝতে পারি না: GPIO_PUPDRএবং GPIO_OTYPEযা যথাক্রমে "টান-আপ / টান-ডাউন রেজিস্ট্রার" এবং "আউটপুট টাইপ নিবন্ধক"।

জন্য GPIO_PUPDRআমি তিনটি বিকল্প উপস্থিত রয়েছে:

  • কোন টান আপ বা টান ডাউন
  • টানুন-আপ
  • চূর্ণ করা

জন্য GPIO_0TYPEআমি দুটি বিকল্প আছে:

  • আউটপুট পুশ-টান
  • খোলার ড্রেন আউটপুট

সমস্ত বিভিন্ন কনফিগারেশনের মধ্যে পার্থক্য কী, এবং যা এসআরএএম যোগাযোগের জন্য সবচেয়ে উপযুক্ত হবে?

আমি যে বোর্ডে কাজ করছি তার জন্য ডকুমেন্টেশনটি এখানে উপলব্ধ (এসআরএএম স্কিমেটিক্সের 24 পৃষ্ঠা দেখুন)। এআরএম চিপের রেফারেন্স ম্যানুয়ালটি এখানে উপলভ্য (জিপিআইও নিবন্ধকদের 145 এবং 146 পৃষ্ঠা দেখুন)।


আপনি কী ব্যবহার করছেন এসআরএএম এবং এআরএম সিপিইউর ডেটাশিটে মডেল নম্বর / লিঙ্ক সরবরাহ করতে পারেন।
ডিন

@ ডিয়ান: অবশ্যই আমি দুটি লিঙ্ক দিয়ে আমার প্রশ্ন আপডেট করেছি।
র্যান্ডমব্লিউ 10

উত্তর:


54

এই উত্তরটি প্রসেসর এবং পেরিফেরিয়ালগুলির কাছে সাধারণ এবং এর শেষে একটি এসআরএএম নির্দিষ্ট মন্তব্য রয়েছে যা সম্ভবত আপনার নির্দিষ্ট র‌্যাম এবং সিপিইউ সম্পর্কিত।

আউটপুট পিনগুলি তিনটি পৃথক পদ্ধতিতে চালিত হতে পারে:

  • ওপেন ড্রেন - একটি ট্রানজিস্টর কম এবং অন্য কিছুতে সংযুক্ত হয়
  • খোলা ড্রেন, টান-আপ সহ - একটি ট্রানজিস্টর নিম্নের সাথে সংযুক্ত হয়, এবং একটি প্রতিরোধক উঁচুতে সংযুক্ত হয়
  • পুশ-টান - একটি ট্রানজিস্টর উচ্চের সাথে সংযুক্ত হয় এবং একটি ট্রানজিস্টর নিম্নের সাথে সংযুক্ত হয় (কেবলমাত্র একবারে চালিত হয়)

ইনপুট পিনগুলি একটি সহ গেট ইনপুট হতে পারে:

  • টান আপ - একটি প্রতিরোধক উচ্চ সংযুক্ত
  • টান ডাউন - একটি প্রতিরোধকের কম সংযুক্ত
  • টান আপ এবং টান ডাউন - উভয় উচ্চ সংযুক্ত একটি প্রতিরোধক এবং একটি প্রতিরোধকের কম সংযুক্ত (শুধুমাত্র বিরল ক্ষেত্রে কার্যকর)।

এখানে স্কিমিট ট্রিগারযুক্ত ইনপুট মোডও রয়েছে যেখানে ইনপুট পিনটি প্রাথমিক অবস্থায় দুর্বল টানতে টান হয়। যখন একা ফেলে রাখা হয় তখন এটি তার রাজ্যে থেকে যায়, তবে সর্বনিম্ন প্রচেষ্টা সহ একটি নতুন রাজ্যে টানা হতে পারে।

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

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

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


কেবল স্পষ্ট করে বলতে গেলে, "একটি ট্রানজিস্টর নিম্ন এবং অন্য কিছুতে সংযুক্ত হচ্ছে" এর অর্থ কী? একটি ট্রানজিস্টরে 3 টি পিন রয়েছে। প্রতিটি পিন কিভাবে সংযুক্ত?
র্যান্ডমব্লু

@ র‌্যান্ডম্বলিউ - দুঃখিত - আউটপুট হিসাবে অভিনয় করার সময় ট্রানজিস্টর সংগ্রাহক বা নিকাশী
রাসেল ম্যাকমাহন

আপনার উত্তরটি "টান ডাউন" তে পরিষ্কার করার জন্য, "স্থল", "নিম্ন" এবং "-তে" এর মধ্যে পার্থক্য কী?
র্যান্ডমব্লু

আমি আপনার প্রশ্নে অনেকগুলি সম্পাদনা করেছি, আপনি কি দয়া করে পরীক্ষা করতে পারেন যে আমি কোনও ভুল করি নি?
র্যান্ডমব্লু

@ র্যান্ডমব্লু - সম্পাদনাগুলি ভাল বলে মনে হচ্ছে। এটা আমাকে অবাক করে দেয় আমি প্রথমদিকে কী লিখেছিলাম? আমার মনে হয় আপনি যা বলেছিলেন বলে মনে হয়েছে :-)।
রাসেল ম্যাকমাহন

17

আমি এই উত্তরটি এসটিএম 32 জিপিআইও সেটিংস বোঝার থেকে পেয়েছি

  • জিপিআইওপুপিডি (পুল-আপ / পুল-ডাউন)

ডিজিটাল সার্কিটগুলিতে, গুরুত্বপূর্ণ যে সিগন্যাল লাইনগুলি কখনই "ভাসমান" হতে দেয় না। অর্থাৎ, তাদের সর্বদা উচ্চতর বা নিম্ন রাজ্যে থাকা দরকার। ভাসমান অবস্থায়, রাজ্যটি নির্ধারিত হয় এবং কয়েকটি বিভিন্ন ধরণের সমস্যা সৃষ্টি করে।

এটি সংশোধন করার উপায় হ'ল সিগন্যাল লাইন থেকে ভিসি বা জিএনডিতে একটি প্রতিরোধক যুক্ত করা। এইভাবে, যদি লাইনটি সক্রিয়ভাবে উচ্চ বা নিম্নটি ​​চালিত না হয়, তবে প্রতিরোধক একটি পরিচিত স্তরে যাওয়ার সম্ভাবনা তৈরি করবে।

এআরএম (এবং অন্যান্য মাইক্রোকন্ট্রোলার) এটি করার জন্য অন্তর্নির্মিত সার্কিট্রি করেছে। এইভাবে, আপনার সার্কিটে আপনাকে আর একটি অংশ যুক্ত করার দরকার নেই। উদাহরণস্বরূপ, আপনি যদি "GPIO_PuPd_UP" চয়ন করেন তবে এটি সংকেত লাইন এবং ভিসি-র মধ্যে একটি প্রতিরোধক যুক্ত করা সমান।

  • GPIO_OType (আউটপুট ধরণ):

পুশ-পুল: এটি আউটপুট টাইপ যা বেশিরভাগ লোকেরা "স্ট্যান্ডার্ড" হিসাবে ভাবেন। যখন আউটপুট কম যায়, সক্রিয়ভাবে মাটিতে "টানা" হয়। বিপরীতে, যখন আউটপুট উচ্চে সেট করা হয়, তখন সক্রিয়ভাবে ভিসিটির দিকে "ধাক্কা" দেওয়া হয়। সরলীকৃত, এটি দেখতে এরকম দেখাচ্ছে: এখানে চিত্র বর্ণনা লিখুন

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

এই ধরণের আউটপুটটির জন্য, সার্কিটের সাথে একটি পুল-আপ রেজিস্টার যুক্ত হওয়া দরকার, যা কম চালিত না হলে লাইনটি উচ্চতর হয়। আপনি এটি বাহ্যিক অংশের সাথে বা GPIO_PuPd মানটি GPIO_PuPd_UP এ সেট করে করতে পারেন।

নামটি এসেছে যে মোসফেটের ড্রেন অভ্যন্তরীণভাবে কোনও কিছুর সাথে সংযুক্ত নেই connected মোসফেটের পরিবর্তে বিজেটি ব্যবহার করার সময় এই ধরণের আউটপুটটিকে "ওপেন-কালেক্টর "ও বলা হয়।

  • GPIO_Speed

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


3

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

এছাড়াও, উপরের সাথে সংযুক্ত এসটিএম 32 রেফারেন্স ম্যানুয়ালের পি 146 নীচের কথা বলেছে [আমার সংযোজনগুলি বর্গাকার বন্ধনীতে রয়েছে] :

- ওপেন ড্রেন মোড: আউটপুট রেজিস্টারে একটি "0" এন-এমওএসকে সক্রিয় করে [এর মাধ্যমে পিনটি জিএনডিতে সংযুক্ত করে সক্রিয়ভাবে LOW ড্রাইভ করছে] যেখানে আউটপুট রেজিস্টারটিতে একটি "1" হাই-জেড (পি- এমওএস কখনও সক্রিয় হয় না) [উচ্চ প্রতিবন্ধকতা মোড - কোনও পুল-আপ বা টান-ডাউন প্রতিরোধক ছাড়া ভাসমান ইনপুট হিসাবে একই]

- পুশ-টান মোড: আউটপুট রেজিস্টারে একটি "0" এন-এমওএসকে সক্রিয় করে [জিএনএডের সাথে পিনটি সংযোগ করে সক্রিয়ভাবে LOW ড্রাইভ করে] তবে আউটপুট রেজিস্টারটিতে একটি "1" পি-এমওএসকে সক্রিয় করে [সংযোগের মাধ্যমে সক্রিয়ভাবে এইচটি হাই ড্রাইভ করে ভিসিসিতে পিন]


আরডুইনো কোডে "র‌্যাপার ফাংশন" এইভাবে প্রয়োগ করা যেতে পারে:

digitalWriteOpenDrain(byte pin, bool state)
{
    // Actively drive LOW
    if (state==LOW)
    {
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW);
    }
    // High impedance mode 
    // (note that an internal or external pull-up resistor can optionally be added if you like, according to your requirements)
    else //state==HIGH
    {
        pinMode(pin, INPUT);
        digitalWrite(pin, LOW);
    }
}

বা সরলীকৃত:

digitalWriteOpenDrain(byte pin, bool state)
{
    digitalWrite(pin, LOW);

    // Actively drive LOW
    if (state==LOW)
    {
        pinMode(pin, OUTPUT);
    }
    // High impedance mode
    // (note that an internal or external pull-up resistor can optionally be added if you like, according to your requirements)
    else //state==HIGH
    {
        pinMode(pin, INPUT);
    }
}

নোট করুন যে কোনও আরডুইনোতে অভ্যন্তরীণ পুলআপ প্রতিরোধক চালু করতে আপনি করতে পারেন:

pinMode(pin, INPUT_PULLUP);

বা (একই জিনিস):

pinMode(pin, INPUT);
digitalWrite(pin, HIGH);

অতিরিক্ত পড়া:

  • (ফিলিপ জনস্টনের সত্যিই ভাল এবং সংক্ষিপ্ত নিবন্ধ): https ://e এমবেডডার্টस्ट्री.com/blog/2018/6/4/demystifying-microcontroller-gpio-settings
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.