ভাগ করা বাসটিকে ওআর হিসাবে তৈরি করা


10

অধৈর্য জন্য, আপনি পটভূমি এড়িয়ে যেতে পারেন।

পটভূমি

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

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

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

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

যদিও একটি সমস্যা আছে। সম্মিলিত প্রতিক্রিয়াটি সমস্ত প্রতিক্রিয়ার যৌক্তিক OR (বা লজিক্যাল এ্যান্ড) হওয়া দরকার। আমাকে বলা হয়েছে যে লাইনটি এমনভাবে কনফিগার করা যেতে পারে যাতে এমআইএসও বাসটি যৌক্তিক ওআর হিসাবে কাজ করতে পারে। আমাকে যা বলা হয়েছে তা হ'ল:

  • মাইসকে পুল-আপ হিসাবে সেট করুন এবং
  • প্রতিটি গোলামের উপর এমআইএসও ওপেন-ড্রেন হিসাবে সেট করুন।

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

দ্রষ্টব্য: এমআইএসও-কে উচ্চ-প্রতিবন্ধক হিসাবে এবং ম্যাসাভকে প্রত্যেককে পুশ-পুল হিসাবে কনফিগার করা, আমি একই বাসে তাদের বেশিরভাগ লোক থাকলেও আমি তাদের প্রত্যেকের সাথে স্বতন্ত্রভাবে কথা বলতে পারি। মানে আমি সন্দেহ করি এটি লাইন নিজেই সমস্যা itself

প্রশ্ন

আমার প্রশ্ন হ'ল এটি যদি সম্ভব হয় এবং যদি হয় তবে আমি কীভাবে মাস্টার এবং দাসদের ইনপুট এবং আউটপুট পিনগুলি কনফিগার করব যাতে ভাগ করা এমআইএসও লাইনটি লজিক্যাল ওআর (বা লজিক্যাল এ্যান্ড) হিসাবে কাজ করবে?


সম্পাদন করা

  1. পরিণত হয়েছে এটি নেতিবাচক-সত্য যুক্তিযুক্ত (মূলত একটি এ্যান্ড) এর সাথে ওআর হয়ে যায়।

  2. একক ক্রীতদাসের সমস্যাটি মাস্টারের উপরে টান-আপ পিনটিতে 1 লিখে সমাধান করা হয়েছিল। পূর্বে এর প্রাথমিক অবস্থা 0 ছিল।

সম্পাদনা 2

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


আমি জিজ্ঞাসা করতে ঘৃণা করব, কারণ আমি নিশ্চিত যে আপনি এটি সম্পর্কে ভেবেছিলেন তবে আপনি কি আই 2 সি বা ক্যান ব্যবহারের বিষয়টি বিবেচনা করেছেন? এগুলি এন ডিভাইসের জন্য ডিজাইন করা হয়েছে, যেখানে এসপিআই সত্যই প্রতিটি ডিভাইসের জন্য একটি চিপ সিলেক্ট ব্যবহার করার জন্য ডিজাইন করা হয়েছে।
বব

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

1
এটি অত্যন্ত দুঃখের বিষয় যে আপনি 32 বিটকে ঠিকানা হিসাবে ব্যবহার করছেন কারণ আপনি যদি 24 বিট (16,772,216 প্রকরণ) ব্যবহার করেন তবে আপনি "আবিষ্কার" কমান্ডটি পাঠাতে এবং 16,772,216 ঘড়ি অপেক্ষা করতে পারতেন এবং আপনার সমস্ত দাস সম্পর্কিত তথ্য থাকতে পারে। 10 এমবিপিএসে যা 2 সেকেন্ডেরও কম সময় নেয় এবং কোনও সংঘর্ষ বের করতে পারে না। আরে হো - আপনি আমাকে এটির জন্য +1 ভাবছেন।
অ্যান্ডি ওরফে

অ্যান্ড্যাকা, 24 বিটগুলিও খারাপ নাও হতে পারে (তবে 32 বিট অবশ্যই ভাল। যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি বোঝাতে চেয়েছেন যে প্রতিটি গোলাম তার 'ঘড়ির সাথে' 1 দিয়ে সাড়া দেয় এবং কর্তা দেখেন কোনটি ঘড়ি একটি তৈরি করেছে? এটি খারাপ নয়, গোলামরা বাইটে প্রতিক্রিয়া বাদ দিয়ে except সুতরাং প্রতিটি গোলাম 8 টি বিট দিয়ে প্রতিক্রিয়া জানায়, এবং যদি না আমি বাসটিকে ওআর হিসাবে কাজ করতে না পারি, তবুও এক গোলামের প্রতিক্রিয়া অন্য দাসের প্রতিক্রিয়াগুলির মধ্যে "হারিয়ে" যায় (এক গোলামের 1 টি সমস্ত থেকে 0 টি দ্বারা টেনে নামায় অবশিষ্ট).
শাহবাজ

@ শাহবাজ যদি আপনার দাসের কোডের নিয়ন্ত্রণ রাখেন তবে আপনি এটিকে একটি "বিশেষ" বানাতে পারেন যেখানে দাস কেবল তাদের বরাদ্দকৃত সময়ে 1 বিট দিয়ে সাড়া দেয়। হ্যাঁ, আপনি আমার সংগীতের সূচনা পেয়েছেন।
অ্যান্ডি ওরফে

উত্তর:


5

আপনার এসপিআই-বিহীন নির্বাচন মাইক্রোচিপ তাদের এমসিপি 23017 চিপগুলিতে (এবং অন্যদের) ব্যবহার করে। এই পদ্ধতির সাথে কোনও ভুল নেই।

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

আপনার গণনার পদ্ধতিটি ডালাস ওয়ান-ওয়্যার বাস দ্বারা গণনার জন্য এবং সালিশির জন্য ক্যান বাস দ্বারা ব্যবহৃত হিসাবে একই।

তবে আপনার পদ্ধতির একটি গুরুতর অসুবিধা হ'ল টান আপ প্রতিরোধকের দ্বারা চালিত গতি এখন বৃদ্ধির সময় দ্বারা সীমাবদ্ধ। এটি পুশ-পুল আউটপুট দ্বারা চালিত হওয়ার চেয়ে ধীর হবে এবং আপনি যে গতিতে বাস চালাতে পারবেন তা সীমাবদ্ধ করবে।

আপনার যদি প্রতিটি গোলামকে বাঁচানোর জন্য দুটি পিন থাকে তবে আপনি সেগুলি ডেইজি-চেইন করতে পারেন এবং ডেইজি চেইনে তাদের স্থানের ভিত্তিতে একটি গণনার পরিকল্পনা রেখেছেন।


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

প্রশ্নে ফিরে আসুন, আমি ইতিমধ্যে দাসদের ওপেন ড্রেন হিসাবে কনফিগার করেছি। আমি কীভাবে মাস্টারকে কনফিগার করব?
শাহবাজ

1
মাস্টার্সের MISO পিনে বিশেষ কিছুই নেই, পুলআপ ব্যতীত। আমি সন্দেহ করি আপনি একটি পুল-আপ ডিজাইন দিয়ে 128 কেবিপিএস পৌঁছে যাবেন, তবে ওয়াইএমএমভি। কিছু গভীরতার আই 2 সি ডকুমেন্টগুলি পড়তে সাহায্য করতে পারে, এটি একটি ওয়্যার-বা পুল-আপ বাস, সুতরাং সেখানে প্রয়োগ প্রতিটি কৌশল আপনাকে সাহায্য করতে পারে।
ওয়াউটার ভ্যান ওইজেন

অনেক ধন্যবাদ. আমি কী ঘটছে তা আরও বেশি করে বাসকে ধীর করে দেওয়ার চেষ্টা করব। আমি অনুমান করি যে আমাকে শেষ পর্যন্ত অধ্যয়ন করতে হবে এবং বুঝতে হবে যে এই টানা-আপ, ওপেন-ড্রেন এবং অন্যরা আসলে কী বোঝায়। (এখানে সফটওয়্যার ইঞ্জিনিয়ার!)
শাহবাজ

1
বাসে একটি অসিলোস্কোপ রাখুন এবং যা ঘটে তা পরীক্ষা করুন। উত্থানের সময়টি খুব ধীর হতে পারে তবে বাজতেও পারে।
ওয়াউটার ভ্যান ওইজেন

4
  • মাইসকে পুল-আপ হিসাবে সেট করুন এবং
  • প্রতিটি গোলামের উপর এমআইএসও ওপেন-ড্রেন হিসাবে সেট করুন।

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

আপনাকে পুল-আপ মোডে মাস্টার i / o পিনের সমতুল্য প্রতিরোধ ক্ষমতা কী তা পরীক্ষা করতে হবে।

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

যেমন ওয়াউটার ইঙ্গিত করেছেন, একটি খোলা-ড্রেন বাসে গতিটি পুল-আপ রেজিস্টার দ্বারা সীমাবদ্ধ করা হয়। উচ্চতর প্রতিরোধকের মানগুলি বাসকে ধীর করে তোলে। আই 2 সি-তে আদর্শ মানগুলি (যা 100 বা 400 কেজি হার্জ পায়) 1 থেকে 5 কেওএইচএস হয়। অনুরূপ গতি অর্জনের জন্য আপনি একই ধরণের পুল-আপ প্রতিরোধ চাইবেন।

আমি মনে করি আপনার এই স্কিমটি কাজ করতে মাস্টার এর আই / ও পিন পুল-আপ না করে আপনাকে বাহ্যিক পুল-আপ রেজিস্টার (1 থেকে 5 কোহামস বা তার বেশি) ব্যবহার করতে হবে।


ইঙ্গিতগুলির জন্য ধন্যবাদ। আমি কোনও ইলেকট্রনিক্স লোক নই, তবে আমাকে আমার পরামর্শটি আপনার পরামর্শটি একবার দেখে নিতে হবে have আমার ওয়্যার্ড-বা প্রয়োজন কেবলমাত্র প্রোগ্রামের প্রাথমিক পর্যায়ে এবং সাধারণ পর্যায়ে পিনটি পুল-আপ হিসাবে কনফিগার করা হয় না। সুতরাং সম্ভবত বাহ্যিক প্রতিরোধক কোনও বিকল্প নয়।
শাহবাজ

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

1

তারযুক্ত ও বাসে কাজ করার জন্য, বাসের নোডগুলি ওপেন-ড্রেন হওয়া দরকার, তাদের অবশ্যই প্রেরণ করতে হবে

  • দৃ strongly়ভাবে নীচে টেনে যুক্তি কম, এবং
  • বাস থেকে সংযোগ বিচ্ছিন্ন করে লজিক উচ্চ।

তদুপরি, বাসটি দুর্বলভাবে টানতে হবে।

আপনি একক অ-প্রেরণকারী মাস্টার এবং একক সংক্রমণকারী দাসের সাথে যে অদ্ভুত আচরণটি দেখেন তা মাস্টার দৃ strongly়ভাবে টানতে বা দাসকে দুর্বলভাবে নীচে টেনে তোলার মাধ্যমে ব্যাখ্যা করা যেতে পারে।

উপরের কোনটি ঘটছে তা আপনাকে নির্ধারণ করতে হবে।

স্লেভকে হাই-ইম্পিডেন্স মোডে রাখুন এবং 10 কে প্রতিরোধকের মাধ্যমে বাসটিকে গ্রাউন্ডে সংযুক্ত করুন। যদি লাইন ভোল্টেজ উল্লেখযোগ্যভাবে পরিবর্তন না হয়, তবে মাস্টার দৃ strongly়ভাবে টানছেন এবং আপনার এটি ঠিক করা দরকার। অন্যথায়, ক্রীতদাসের সাথে একই পদ্ধতিটি করুন (এবার প্রতিরোধকের ভিসিসির সাথে সংযোগ করুন); যদি লাইন ভোল্টেজ উল্লেখযোগ্যভাবে বৃদ্ধি পায়, স্লেভ দুর্বলভাবে নীচে টানছে (এটি ঠিক করুন)। অন্যথায়, আপনার চারপাশের অঞ্চলে সময়-স্থানের বিকৃতিগুলি সন্ধান করুন।


ইলেক্ট্রনিক্সে আমার অজ্ঞতাটি ক্ষমা করুন, তবে যদি দাসটি দৃ strongly়ভাবে নীচে নেমে যায়, তবে এটি কি বাসকে আরএএন হিসাবে কাজ করে না? আমি বলছি যেহেতু যে দাসরা বেশি চায় তারা সংযোগ বিচ্ছিন্ন হয়ে যাচ্ছে এবং যেগুলি কম চায় তারা নীচে টানছে, সুতরাং সামগ্রিক ফলাফলটি নীচে নেমেছে, না?
শাহবাজ

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

উইকিপিডিয়ায় পড়া, আমি বুঝতে পারি যে তারা এটিকে তারযুক্ত এবং বা তারযুক্ত বা নেতিবাচক-সত্য যুক্তিযুক্ত হিসাবে উল্লেখ করে।
শাহবাজ

1

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


যদি দুটি ক্রীতদাস সক্রিয়ভাবে উচ্চ এবং নিম্ন ড্রাইভ করে তবে আমি বাস থেকে কী পড়ব?
শাহবাজ

একজনের দাস যখন গাড়ি চালাবার চেষ্টা করছে তখন অন্যকে কম চালানো এড়ানো উচিত। কোন দাসকে কেবল তখনই গাড়ি চালানো উচিত যখন (১) এটি জানে যে এটিই কেবল একমাত্র কাজ হবে, বা (২) এটি জানে যে এটি এবং অন্য যে ব্যক্তি বাস চালাচ্ছেন তারা এটি তার নিষ্ক্রিয় নিষ্ক্রিয়তার বিপরীতে চালিত করবেন অবস্থা.
সুপারক্যাট

এর মানে কি তখন? ... প্রতিটি নির্বাচিত ক্রীতদাস সক্রিয়ভাবে উভয় উচ্চ ড্রাইভ এবং নিম্ন মাত্রার অনুমতি দেবে না থাকার বাসে ...
শাহবাজ

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

@ শাহবাজ: সুপারক্যাট যা বলার চেষ্টা করছে তা হল, গণনার অবস্থায় একটি প্রতিরোধকের লাইনটি টানতে হবে, এবং দাসদের কেবল "0" বা কিছুই না (খোলা ড্রেন আউটপুট) প্রেরণ করা উচিত, তবে পরে সাধারণ যোগাযোগের ক্ষেত্রে কেবল একটি একক ক্রীতদাস একবারে সক্রিয় থাকতে হবে এবং সক্রিয় দাসকে "0" বা "1" (স্বাভাবিক আউটপুট) প্রেরণ করা উচিত। সুতরাং টান আপ প্রতিরোধক এবং লাইন ক্যাপাসিটেন্স কেবল গণনার সময় বিট হার সীমাবদ্ধ করে। পরে, সাধারণ যোগাযোগের ক্ষেত্রে, সক্রিয় ড্রাইভিংয়ের ফলে বিট রেট বেশি হতে পারে allows
লাস্লোলো ভালকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.