পিআইসিতে একাধিক বাহ্যিক বাধা ব্যবহার করা


9

আমি বেশ কয়েকটি প্রকল্পের জন্য PIC16F877( ডেটাশিট ) ব্যবহার করেছি । একক বহিরাগত পিন পরিবর্তন বাধাদানের জন্য, আপনি PORTB0বাধা ব্যবহার করতে পারেন । তবে এখন আমার একক সার্কিটে 8 টি স্বতন্ত্র বহিরাগত পিন পরিবর্তন বাধা সমর্থন করতে হবে।

ডেটাসিটে এটি বলেছে যে এখানে 15 টি বাধা রয়েছে PIC16F877, তবে আমি অনুমান করি যেগুলি টাইমার ওভারফ্লো বাধা ইত্যাদি সহ গণনা করা হয় ... যা এই ক্ষেত্রে অকেজো।

এটিই ডাটাশিট INTCONরেজিস্টার সম্পর্কে বলে ।

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

বিট0 ব্যবহার করে আমার 4 টি বাধা থাকতে পারে RBIF? এটি পরিবর্তনের প্রতিনিধিত্ব করে PB7:PB4। কোন পিনটি পরিবর্তিত হয়েছে তা আমি কীভাবে সনাক্ত করতে পারি, এটি বাধাপ্রাপ্ত রুটিনে বন্দরের মানটি পড়ে?

এমনকি আমি উপরেও ইতিবাচক উত্তর পেয়েছি, আমার আটটি বাধা দরকার? অবশ্যই আমি এখনও ব্যবহার করতে পারি INTE, PORTB0পরিবর্তনের জন্য । তারপরে 4 + 1 = 5, তবে অন্যান্য 3 সম্পর্কে কী হবে? (তবে 8 টি বিঘ্নিত ইভেন্টগুলি একই ধরণের, 4 + 1 + 3 = 8জিনিসটি কুৎসিত বলে মনে হচ্ছে, তাই না?)

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

কোন পরামর্শ স্বাগত। এমনকি যদি এটি আরও উপযুক্ত একটির জন্য মাইক্রো-কন্ট্রোলার পরিবর্তন করার বিষয়ে (তবে আহ .. আমাকে PICএস থেকে দূরে যেতে বলবেন না )।


2
বাধা ব্যবহার না করে, আপনি মূল প্রোগ্রামের পিনগুলি পর্যবেক্ষণ করতে পারেন। তবে এটি নিখুঁত নয়। বিকল্প হিসাবে, আপনি আরডিনো যেতে পারেন। এটি পিক না হলেও এটি বেশ সহজ, আপনি পিকের সাথে ইতিমধ্যে পরিচিত হিসাবে সহজেই বুঝতে পারবেন।
আনুবিস

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

@ পিটারজে আমি এটি বেশ বুঝতে পারি নি। বাফার কোন মান?
এসসি

@ পিটারজে দুর্দান্ত! প্রতীক্ষা ...
এসসি

1
একটি উপায় হ'ল বহিরাগত 8 ইনপুট গেট (যেমন পুরানো দিনগুলিতে 74LS30) ব্যবহার করে একটি বিযুক্ত পিনের মধ্যে বাহ্যিক সংকেতগুলি একত্রিত করতে। যেহেতু (৪ (এইচসি) 30 একটি নন্দ গেট আপনার নিরিবিলি রাজ্যে উচ্চতর ইনপুটগুলির প্রয়োজন হবে - সেগুলি বন্দর পিনের সাথেও সংযুক্ত করা দরকার যাতে আপনি সনাক্ত করতে পারেন কোনটি বাধাটি পোর্টটি পড়ে সক্রিয় ছিল।
ব্রায়ান ড্রামমন্ড

উত্তর:


3

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

int old_port_b;

void isr_handler()
{
    int new_port_b, changed_pins;
    new_port_b = read_port_b();
    changed_pins = new_port_b ^ old_port_b;
    if (changed_pins | 1)
        rb0_hander();
    if (changed_pins | 2)
        rb1_hander();
        // ... etc
    old_port_b = new_port_b;
}

int main()
{
    old_port_b = read_port_b();
    enable_interrupt();
}

আমি পেয়েছি, ধন্যবাদ! তবে এটি আমি সঠিক উত্তরটি খুঁজছি না। এইভাবে, আপনি RB7:RB4কেবল 4 টি পিন নিরীক্ষণ করতে পারেন । তবে আমি 8 টি পিন নিরীক্ষণের উপায় চাইছি asking যেকোনো পরামর্শ?
এসসি

আমি অনুমান করি যে কোনও কারণ আপনি আরবি0 ব্যবহার করতে পারবেন না - উপরের RB7 এর জন্য কাজ করা উচিত? অন্যথায় আমি সত্যিই কোনও উপায় ভাবতে পারি না, যদি কোডটি দ্রুত ট্রিগার করা গুরুত্বপূর্ণ না হয় আপনি একটি টাইমার বিঘ্নিত (বা কেবল মূল লুপ) উপরের স্টাইলের কোডটি ব্যবহার করতে পারেন।
পিটারজে

সেই পিআইসি-র জন্য, যদি এটি করতে আপনাকে বিঘ্ন ব্যবহার করতে হয় তবে আরবি 4: আরবি 7-এর XOR ট্রিক এবং আরবি 0: আরবি 3-এর জন্য চারটি বাধা রয়েছে the আপনার যদি বাধা প্রয়োজন না হয়, কেবল আপনার কোডটিতে পুরো পোর্টটি পোল করুন, বা আপনার যদি শক্ত নমুনা হারের প্রয়োজন হয় তবে পোলিং পরিচালনা করতে একটি টাইমার ইন্টারপেন ব্যবহার করুন
স্কট সিডম্যান

and four interrupts for the RB0:RB3? PIC16F877 হ্যাঁ RB1:RB3, কোনও বাধা সমর্থন করে না?
এসসি

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

1

এই অংশটিতে কেবল 4 টি পিন-চেঞ্জ ইন্টারপ্রেট রয়েছে এবং আপনি নির্বাচিত প্রান্তগুলিতে সেট আপ করতে পারেন এমন কয়েকটি অন্যান্য। একটি কৌশল হ'ল বাহ্যিকভাবে 8 বিটের মান পরিবর্তন করতে হবে এবং তারপরেও অমিলের উপর বাধা দেওয়া। এটি হার্ডওয়্যারে অগোছালো হয়ে যায় তবে আপনি যা চান ঠিক তেমনটি ঘটবে।

আপনি যে গুরুত্বপূর্ণ প্যারামিটারগুলি উল্লেখ করেননি সেগুলি হ'ল পিন পরিবর্তনের জন্য আপনাকে কতটা দ্রুত প্রতিক্রিয়া জানাতে হবে এবং পিন পরিবর্তনের জন্য সর্বনিম্ন সময়টি কীভাবে তা বৈধ থাকবে। উত্তরের উপর নির্ভর করে, আপনি ফার্মওয়্যারটিতে নিয়মিত বিরতির উপর ভিত্তি করে পোল করতে পারেন। 16F877 5 মেগাহার্টজ নির্দেশের হারে চলতে পারে এবং পরিবর্তনের জন্য পরীক্ষা করা কেবলমাত্র কয়েকটি নির্দেশের প্রয়োজন। ধরা যাক আপনি প্রতি 50 টি নির্দেশে বাধা সেট আপ করেছেন। এটি প্রসেসরের সময়ের একটি ভাল অংশ অগ্রভাগের কোডটিতে ছেড়ে দেয়। বিঘ্নিত হার হবে 100 কেজি হার্জ এবং সময়কাল 10। অবশ্যই অগ্রভাগের কোডটির পরে এখনও পরিবর্তন পতাকাটি দেখতে হবে এবং এটি সম্পর্কে কিছু করা দরকার, সুতরাং প্রতিক্রিয়ার সময়টি 10 ​​than এর বেশি হবে তবে কোনও পরিবর্তন সনাক্ত হওয়ার পরে আপনার কী করা উচিত সে সম্পর্কে আপনি কিছু বলেননি। এটি যদি মানুষের সময়ে কেবল প্রতিক্রিয়া জানাতে প্রয়োজন,


অনুপস্থিত বিশদ সম্পর্কে দুঃখিত। প্রত্যাশিত প্রতিক্রিয়া হার once per secondহিসাবে যথেষ্ট হবে। যখন একটি পিন পরিবর্তন হয় (কেবলমাত্র একটি প্রান্ত, বলুন উত্থাপন) সনাক্ত করা হয়, তখন একটি পাল্টা (পরিবর্তনশীল) বৃদ্ধি করতে হয়। মূল লুপে এটি কাউন্টার মানগুলি পর্যবেক্ষণ করতে হয় এবং যখন একটি নির্দিষ্ট মানের চেয়ে বেশি হয়, চার বাইট USARTপিসির মাধ্যমে প্রেরণ করতে হয়। তারপরে প্রাসঙ্গিক কাউন্টার মানটি শূন্যে পুনরায় সেট করুন। যে হিসাবে সহজ। আমার ধারণা পোলিংয়ের বিকল্পটি ঠিকঠাক হয়ে যাবে?
এসসি

2
প্রতি সেকেন্ডে একবার ! তাহলে বিঘ্ন ঘটানোর জন্য সমস্ত যন্ত্রণাদায়ক কী? পর্যায়ক্রমে ভোটদানের মাধ্যমে এটি সহজেই করা হয়। তাহলে সমস্যা কি?
অলিন Lathrop

হুম ... আমি যদিও এটির মধ্যে 8 থাকি এবং এটিও সর্বোত্তম, প্রতিক্রিয়াটি পূর্বাভাস দেওয়া যায় না (তবে সেই মানটি সর্বনিম্ন বলে ধরে নেওয়া যেতে পারে)। Hey! লোকেরা ভুল করতে পারে, ঠিক আছে .. :(
এসসি

1

আপনি আইএনটি পিনের উপরে একটি বাধা বাড়াতে এবং আপনার বিঘ্নিত উত্সগুলিকে 8-বিট প্যারালাল-ইন / সিরিয়াল-আউট শিফ্ট রেজিস্টারের সাথে "74HC165N" এর সাথে সংযুক্ত করতে 8 ব্রতী ড্রামমন্ড দ্বারা উল্লিখিত 8-ইনপুট গেট ন্যান্ড ব্যবহার করতে পারেন, সুতরাং আপনার প্রয়োজন হবে বাধা রাইজ করার পরে সেই শিফট রেজিস্টার থেকে কেবলমাত্র ডেটা পড়তে হবে এবং এটি আপনাকে আপনার আসল বিঘ্নিত উত্স সম্পর্কে তথ্য দেবে ... এটি দ্রুততম উপায় নয়, তবে প্রসারিত করা সহজ হতে পারে এবং এরপরে 5 পিন ব্যবহার না করে এবং যদি আপনি অ্যাড্রেস কন্ট্রোলিং সিস্টেম (MUX, LATCH, ...) যোগ করেন তবে আপনার বাধা বিজ্ঞপ্তির জন্য কেবল একটি পাইন প্রয়োজন হবে এবং অন্য পিনের বিভিন্ন সময়ে বিভিন্ন সংস্থার জন্য পুনরায় ব্যবহার করা যেতে পারে;)

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