একই সময়ে একই কী সারি টিপছে


9

আমি ভিএইচডিএলে একটি কীপ্যাড ডিজাইন করছি। যখন কেবল একটি একক কী চাপানো হয় তখন সবকিছু ঠিকঠাক কাজ করে। আমি একটি স্টেট মেশিনে একটি কী প্রেসের জন্য প্রতিটি কলাম স্ক্যান করছি এবং যখন কোনও কী চাপানো হয় না, যা pin4pin6pin7pin2 = "0000"পরবর্তী কলামটি স্ক্যান করার জন্য আমি পরের অবস্থানে স্যুইচ করি। সুতরাং আমি কলাম সেট pin3pin1pin5ক্রমানুসারে করতে "001", "010"এবং "100"

যদিও স্ক্যান pin3pin1pin5যেমন "001"যদি pin4pin6pin7pin2হয় "0100"তারপর শুধু "9" টেপা হলে। আমি ভিএইচডিএলে pin4pin6pin7pin2ইনপুট এবং pin3pin1pin5আউটপুট পোর্ট হিসাবে ঘোষণা করি । আমি যখন একই সময়ে 6 ও 9 চাপুন pin6এবং pin7হয় high। প্রথম চাপা কীটি পড়া হয়, দ্বিতীয়টি উপেক্ষা করা হয়। আমি একই সাথে 3 এবং 7 টি চাপলে, প্রথমটি জয়ের আগে কয়েকটি এমএস দিয়ে টিপিত হয় এবং প্রথম কীটি পড়ার পরে, দ্বিতীয় কীটি উপেক্ষা করা হয়, pin2এবং pin4হয় high

এখানে জটিল অংশ। আমি যখন একই সময়ে 4 এবং 6 চাপুন, আমি আশা pin7করা highকিন্তু এটা হয়ে lowএবং pin4pin6pin7pin2 = "0000"কীভাবে এবং কেন যা আমি বুঝতে পারছি না। কারণ "0000"হিসাবে একটি কোনো কি টেপা সনাক্ত করা হয়, রাষ্ট্র মেশিন থেকে রাষ্ট্র রাষ্ট্র থেকে জাম্প। 4 এবং 6 ধরে রাখার সময় যদি কেউ একাধিকবার 4 চাপ দেয় এবং ছেড়ে যায় তবে এটি 6 টি বেশ কয়েকবার চাপা হিসাবে ধরা পড়ে, এটি একটি বড় বাগ । আপনি যদি আমাকে এই ডিবাগ করতে সহায়তা করতে পারেন তবে আমি খুশি হব!

"1" এবং "2" এর সাথে একই জিনিস ঘটে, কেবল একই সারির কীগুলির জন্য "7" এবং "8" এর সাথে। যেহেতু এটি একটি চলমান প্রকল্প, আমি আমার ভিএইচডিএল কোডটি অনলাইনে রাখতে পারি না :( আপনি যদি এগুলি কাটিয়ে উঠতে আমাকে টিপস দিতে পারেন তবে আমি খুশি হব!

এখানে চিত্র বর্ণনা লিখুন

নীচে, আমি বোর্ডে আমার কোড আপলোড করছি না, কোনও কোড চলছে না। Pin5স্থলভাগে সংযোগ স্থাপন করে, 1,2,4,5,7,8, *, 0-তে একটি একক প্রেস Pin3এলইডি চালু করে না তবে যদি আমি 6 এবং তারপরে 4 টি একই সাথে Pin3LED টি চালু থাকে এবং Pin7LED এখনও চালু থাকে, তবে যখন আমার কোডটি চলছে তখন এটি হয় না। হয়তো আমি কিছু ভুল সংযুক্ত করেছি এবং ভাগ্যক্রমে Pin7চালু আছে, আমি জানি না ...

এখানে চিত্র বর্ণনা লিখুন

নীচে কীপ্যাড বোর্ডের স্কিমেটিক্স দেওয়া হল:

schematics


আপনি কীভাবে নিশ্চিত করছেন যে একই সাথে 4 এবং 6 টিপুন শর্ট পিন 3 এবং 5 একসাথে নয়?
fru1tbat

@ fru1tbat আপনি কি আরও কিছুটা আরও বিশদ বর্ণনা করতে পারেন? বোর্ডের কিছুই নেই, তখন আমার কোডটি আপলোড না করেই আমি পিন 5 কে মাটিতে সংযুক্ত করি, তারপরে পিন 5 এলইডি চালু থাকে আমি "6" টিপুন টিপুন এলইডি চালু হয় পরে আমি একই সময়ে "4" এবং "6" টিপব পিন 3 LED চালু আছে এবং পিন 7 এলইডি এখনও চালু রয়েছে।
আনারকি

@ তবে আপনার অর্থ কি আমার সারিগুলির জন্য টান আপ ব্যবহার করা উচিত এবং কলামগুলির জন্য টান আপ করা উচিত? আমি সার্কিটটি পরিবর্তন করতে পারি না। আপনার মন্তব্য থেকে খুব বেশি বোঝা যায় নি :(
আনারকি

আরও সম্পূর্ণ হওয়ার জন্য, আমি একটি উত্তর সরবরাহ করব। এটি কার্যকর হবে যদি আপনি স্কিমেটিক প্রদর্শন প্রতিরোধক, এলইডি, কলাম ড্রাইভার এবং সার্কিটের মধ্যে থাকা কোনও ইনভার্টার বা ট্রানজিস্টর সরবরাহ করতে পারেন। 4 টি সারি এবং 3 টি কলাম সরাসরি সিপিএলডি বা এফপিজিএর সাথে সংযুক্ত রয়েছে?
টুট

@ টুট কীপ্যাড এফপিজিএর সাথে সরাসরি সংযুক্ত নেই, এর মধ্যে আরও একটি বোর্ড রয়েছে, এফপিজিএতে বিভিন্ন বোর্ড সংযোগ করার জন্য এবং আমি স্কিম্যাটিক্স যুক্ত করেছি।
আনারকি

উত্তর:


4

সংক্ষিপ্ত উত্তর:

আপনার যুক্তি বিপরীত। ওপেন-ড্রেন (বা ওপেন-কালেক্টর) যুক্তি দিয়ে কলামটি নির্বাচন করুন লাইনগুলি ড্রাইভ করুন যেখানে নির্বাচিত কলামটি কম টানছে এবং আন-নির্বাচিত কলামগুলি ভাসমান। আপনি যখন একটি সারি দেখুন, একটি কী-প্রেস একটি '0' দ্বারা সনাক্ত করা হবে। চাপবিহীন কীগুলি '1' দ্বারা সনাক্ত করা হবে।

এখন বিস্তারিত:

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

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

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

আপনি সম্পূর্ণ স্কিমেটিক বা আপনার ভিএইচডিএল কোড সরবরাহ করেন নি বলে আপনার সার্কিট সম্পর্কে আমাকে কিছু অনুমান করতে হয়েছিল। তুমি বলো

যখন কোনও কী টিপে না দেওয়া হয়, তখন এটি পিন 4pin6pin7pin2 = "0000"

তবুও আপনার সরবরাহ করা ফটো থেকে, পুল-আপ প্রতিরোধকগুলি দেখানো হয়েছে। এটি বোঝায় যে আপনার ইতিমধ্যে আপনার ভিএইচডিএল কোডে (সম্ভবত কম) আপনার সারি এবং আপনার লজিক ডিভাইস (সিপিএলডি বা এফপিজিএ) এর মধ্যে ইনভার্টার রয়েছে in

সম্পাদনা:

আপনার মন্তব্য অনুসারে, আপনি আপনার বর্ণনায় নেতিবাচক যুক্তি ব্যবহার করছেন: "0000" নির্দেশ করে যে চারটি পিনই বেশি, ইত্যাদি। এটি হ'ল ধরে নেওয়া হচ্ছে যে কলামটি নির্বাচন করে এবং সারি সংকেতগুলি সরাসরি আপনার স্কিমেটিকের সংযোগকারী 2 থেকে এফপিজিএতে চলে গেছে, কেবল আপনার এফপিজিএতে আউটপুট কলামটির জন্য ওপেন-ড্রেন যুক্তি ব্যবহার করে উপরের আমার দিকনির্দেশগুলি অনুসরণ করুন।

আমি কোনও ভিএইচডিএল বিশেষজ্ঞ নই, তবে আমি এটি শিলিনেক্স থেকে পেয়েছি :

নিম্নলিখিত কোড ব্যবহার করে ওপেন ড্রেন বাফারটি প্রবেশ করুন:

VHDL:

ডাউট <= 'জেড' যখন দিন = '1' অন্য '0';

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


আমি স্ক্যানার ড্রাইভার ইনস্টল করে
স্কিমেটিক্স

আপনি ঠিক যে pin4pin6pin7pin2 = "0000"কোনও কী প্রেস আসলে সম্পর্কে নয় 1111। আমার প্রশ্নে 1 গুলি 0, 0 সে 1 হওয়া উচিত, আমি প্রশ্নটি কিছুটা ক্রিপ্ট করার চেষ্টা করেছি, এর জন্য দুঃখিত যদি এটির ভুল বোঝাবুঝির কারণ ঘটে ...
আনারকি

আমি স্কিমেটিকস যুক্ত করেছি।
আনারকি

আপনার ব্যাখ্যার জন্য অনেক ধন্যবাদ, আপনার উত্তরটি পড়ার পরে আমার কিছু ধারণা আছে তবে প্রথমে আপনি "কলামগুলি ভাসমান", "আউটপুটগুলি ভাসা লাগানো" বলতে কী বোঝাতে চান, আপনার কি বোঝানো হচ্ছে: 110, 101, 011? এটি আমি ইতিমধ্যে করছি, আসলে আমার কোডে যখন একটি কী টিপে দেওয়া হয় তখন সমস্ত অন্যান্য কী উপেক্ষা করা উচিত আমি কীভাবে LED চালু হয় এবং পিন 7 উচ্চ (1) হয়ে যায় তা বুঝতে পারি না, যখন কোড চলছে। যাইহোক আমি যদি বুঝতে পারি যে সঠিক সমাধানটি হ'ল আমি আপনাকে পিন 5 স্ক্যান করাকালীন আউটপুট পোর্টগুলি "110", আমার থাকা উচিত out <= 'pin3' when din='1' else '0';
আনারকি

1
আমি সরবরাহিত লিঙ্কটি দেখুন: ওপেন-ড্রেন (বা ওপেন-সংগ্রাহক) । সক্রিয় কলামটি সেই কলাম লাইনে 0 ভি ড্রাইভিং করে নির্বাচিত হয়। নিষ্ক্রিয় কলামগুলি সেই লাইনে 3.3V দিয়ে চালিত হওয়া উচিত নয়, তবে এটি ভাসমান করা উচিত (একটি উচ্চ প্রতিবন্ধী অবস্থায় রেখে দেওয়া) যা কার্যকরভাবে সার্কিট থেকে এই লাইনগুলি সংযোগ বিচ্ছিন্ন করে। আপনি যদি তাদের 3.3V-এ চালানোর চেষ্টা করেন, একই সময়ে একই সারিতে 2 টি বোতাম টিপে তৈরি করা শর্ট সার্কিটের কারণে, কেউ গাড়ি চালানোর চেষ্টা করছেন এবং অন্যরা হাই ড্রাইভ করার চেষ্টা করছেন এমন ব্যক্তির মধ্যে বিরোধ সৃষ্টি করবে।
টুট

2

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

কিছুক্ষণ আগে জিজ্ঞাসা করা একটি প্রশ্ন দেখুন: ভিএইচডিএল: বিট গণনা করার সময় মডিউলটি এলোমেলোভাবে ব্যর্থ হয়

এখন, আপনি যে বলেছেন:

যেহেতু "0000" কোনও কী টিপে না হিসাবে সনাক্ত করা হয়েছে, রাষ্ট্রের মেশিন একটি রাজ্য থেকে অন্য রাজ্যে ঝাঁপিয়ে পড়ে। 4 এবং 6 ধরে রাখার সময় যদি কেউ একাধিকবার 4 চাপ দেয় এবং ছেড়ে যায় তবে এটি 6 টি বেশ কয়েকবার চাপা হিসাবে ধরা পড়ে, এটি একটি বড় বাগ।

যা আমার মুখোমুখি হয়েছিল তার কিছুটা মিল similar আমার একটি সমস্যা ছিল যেখানে আমার রাজ্য মেশিনের রাজ্যগুলি এড়িয়ে যাবে, যা অসম্ভব বলে মনে হয়েছিল।

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

এখানে চিত্র বর্ণনা লিখুন

আপনার এইচডব্লিউয়ের সাথে আপনার বোতামের ইনপুট সিঙ্ক না করা খুব উদ্ভট সমস্যাগুলির কারণ, যা আমি আমার এন 64 প্রকল্পের সাথে অভিজ্ঞতা করেছি। এই এইচডাব্লু এর সামান্য বিট যোগ করা প্রায় যাদু মত ছিল।

সুতরাং দয়া করে প্রথমে আপনার ইনপুটগুলি সিঙ্ক হচ্ছে কিনা তা পরীক্ষা করুন।


উত্তরে সিঙ্ক্রোনাইজারটি প্রয়োগ করা কঠিন বলে মনে হয় না তবে আমি যখন প্রক্রিয়াটি পড়ি তখন আমি কী বুঝতে পারি যে async_inএটি 3 ঘড়ির চক্রের সাথে বিলম্বিত তবে এর মান এবং সব একই?
আনারকি

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

আমি চেষ্টা করেছিলাম, চেষ্টা করেছিলাম কিন্তু সাহায্য করতে পারেনি :(
আনারকি

1

এটা মজার একটা প্রশ্ন! আপনি কী 4 এবং কী 6 টিপলে আপনি পিন 7 এ কম দেখছেন তার কারণ হল পিন 3 এবং পিন 5।

আরও ব্যাখ্যা করতে, পিন 3 এবং পিন 5 একই সময়ে কখনই বেশি হবে না - এর মধ্যে একটি সর্বদা অবতরণ করার পথ হবে (আপনার নকশা অনুসারে)। সুতরাং, যখন আপনি কী 4 এবং কী 6 টিপুন, আপনি পিন 7 এর জন্য স্থলভাগের পথ তৈরি করছেন।

চিত্র দেখুন:

পিন 7 মাটিতে যাওয়ার পথ দেখছে।  আপনার শর্ট সার্কিট রয়েছে।


আমি আমার প্রশ্নে একটি ছবি যুক্ত করেছি এবং উভয় কী টিপলে পিন 7 এখনও উচ্চ দেখায়।
আনারকি

ওপি ব্যাখ্যা করেছেন যে তিনি কোনও মুহুর্তে একই সময়ে 3, 1 বা 5 উচ্চ পিন উত্থাপন করেন না। তিনি সঙ্গে কলাম ক্রম: "২001" "২010", এবং "100 পিনের 3 ও 5 দিয়ে শুরু করতে না হয় উচ্চ একযোগে।
নিক উইলিয়ামস

1
@EEIngenuity এটি হ'ল পয়েন্টটি চেষ্টা করার চেষ্টা করছে - পিন 3 এবং 5 এর মধ্যে একটি আপাত পথ রয়েছে, যার কখনও একই মান হবে না, "এইভাবে, আপনি কী 4 এবং কী 6 টিপলে আপনি পিন 7 এর জন্য স্থলভাগের পথ তৈরি করছেন। "
fru1tbat

1
@ আনারকি ছবিতে পিন 3 জিএনডি বা ভিডিডির সাথে সংযুক্ত নয়। এটি একটি ভাসমান নোড। এটি আপনার আসল পরীক্ষায় আপনার শর্ট সার্কিটের দৃশ্যপট তৈরি করে না। পিন 3 ভিডিডি এবং পিন 5 কে জিএনডি সংযোগ করার চেষ্টা করুন এবং এই পরীক্ষার পুনরাবৃত্তি করুন।
মিরন ভি

1
@EEIngenuity আপনি একদম ঠিক বলেছেন !!! হ্যাঁ, হ্যাঁ আমি যখন পিন 3 কে ভিডিডির সাথে সংযুক্ত করি তখন পিন 7 কম হয়ে যায় !!! সুতরাং দয়া করে আমাকে সহায়তা করুন আমি কীভাবে এই সমস্যাটি কাটিয়ে উঠতে পারি এবং এটি কার্যকর করে তুলতে পারি :( আমি ভিএইচডিএল এবং অন্য এক সহকর্মী, যারা একই প্রকল্পে ভিন্ন দলে রয়েছেন, এই সমস্যার মুখোমুখি হন না তাই কোনওভাবে তিনি এটিকে সমাধান করেছেন তবে আমি ডন করি না কীভাবে, একই কীপ্যাড, একই বোর্ড জানি না!
আনারকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.