- مطلوبہ مواد:
- رکاوٹیں کیا ہیں اور ان کا استعمال کہاں کرنا ہے:
- سرکٹ ڈایاگرام اور وضاحت:
- پی آئی سی مائکروکانٹرولر میں مداخلتوں کا تخروپن:
- کوڈ کی وضاحت:
- PIC16F877A مداخلتوں کا کام کرنا:
اس ٹیوٹوریل میں ہم سیکھیں گے کہ پی آئی سی مائکروکنٹرولر میں بیرونی مداخلت کا استعمال کیسے کریں اور ہمیں ان کی ضرورت کیوں / کہاں ہوگی۔ یہ PIC سبق کے تسلسل کا ایک حصہ ہے جس میں ہم نے شروع سے ہی PIC مائکروقابوتروں کو سیکھنا شروع کیا۔ لہذا اس ٹیوٹوریل کو یہ فرض کیا گیا ہے کہ آپ اس سے واقف ہوں گے کہ پی پی سی ایم سی یو کا استعمال کرتے ہوئے پی آئی سی ایم سی یو کس طرح پروگرام کرنا ہے اور ایل سی ڈی کو PIC کے ساتھ کس طرح انٹرفیس کرنا ہے۔ اگر نہیں تو ، براہ کرم ان کے متعلقہ روابط پر واپس جائیں اور انہیں گرت پڑھیں ، کیوں کہ میں وہاں موجود زیادہ تر معلومات کو چھوڑ دوں گا۔
مطلوبہ مواد:
- PIC16F877A پرفیکٹ بورڈ
- 16x2 LCD ڈسپلے
- دبانے والا بٹن
- مربوط تاروں
- روٹی بورڈ
- PicKit 3
رکاوٹیں کیا ہیں اور ان کا استعمال کہاں کرنا ہے:
پی آئی سی مائکروقانٹرولر مداخلتوں کو پروگرام کرنے سے پہلے ، آئیے ہم سمجھیں کہ ایک رکاوٹ اصل میں کیا ہے اور ہمیں ان کو استعمال کرنے کی ضرورت کہاں ہوگی۔ مزید یہ کہ مائکروکانٹرولر میں بہت ساری قسم کی مداخلتیں ہیں اور PIC16F877A میں ان میں سے 15 کے قریب ہیں۔ آئیے ہم ان سب کو ابھی تک اپنے سر میں نہیں ڈالیں گے۔
تو! مائکروکنٹرولرز میں رکاوٹ کیا ہے؟
جیسا کہ ہم سب جانتے ہیں کہ مائکروکنٹرولرز پہلے سے طے شدہ (پروگرامڈ) ایکٹیویٹس کا ایک سیٹ انجام دینے کے لئے استعمال ہوتے ہیں جو ان پٹ کی بنیاد پر ضروری آؤٹ پٹس کو متحرک کرتا ہے۔ لیکن ، جب کہ آپ کا مائکرو قابو رکھنے والا ایک کوڈ کے ایک ٹکڑے کو پھانسی دینے میں مصروف ہے ، وہاں ایسی ہنگامی صورتحال ہوسکتی ہے جہاں آپ کے کوڈ کے دوسرے ٹکڑے پر فوری توجہ کی ضرورت ہو۔ کوڈ کے اس دوسرے ٹکڑے کو جس پر فوری توجہ کی ضرورت ہے اس کے ساتھ ایک رکاوٹ سمجھا جانا چاہئے۔
مثال کے طور پر: آئیے اس بات پر غور کریں کہ آپ اپنے موبائل پر اپنا پسندیدہ گیم کھیل رہے ہیں اور آپ کے فون کے اندر کنٹرولر (مفروضہ) آپ کو گیم سے لطف اندوز ہونے کے لئے تمام گرافکس کو پھینکنے میں مصروف ہے۔ لیکن ، اچانک آپ کی گرل فرینڈ آپ کے نمبر پر کال کرتی ہے۔ اب ، سب سے خراب ہونے والی بات یہ ہے کہ آپ اپنے گرل فرینڈ کی کال کو نظرانداز کرنے کے لs آپ کے موبائل کنٹرولر ہیں کیونکہ آپ کسی گیم میں مصروف ہیں۔ اس ڈراؤنے خواب کو روکنے کے ل we ہم کچھ رکاوٹیں استعمال کرتے ہیں۔
یہ رکاوٹیں ہمیشہ مخصوص کارروائیوں کو ہونے کے ل active فعال لسٹنگ میں رہیں گی اور جب وہ واقع ہوں گی تو وہ کوڈ کے ایک ٹکڑے کو پھانسی دیتے ہیں اور پھر عام کام میں واپس آجاتے ہیں۔ اس کوڈ کے ٹکڑے کو انٹراپٹ سروس روٹین (ISR) کہا جاتا ہے ۔ ایک عملی منصوبہ جس میں مداخلت لازمی ہے وہ ہے "PIC مائکروقابو کنٹرولر کا استعمال کرتے ہوئے ڈیجیٹل اسپیڈومیٹر اور اوڈومیٹر سرکٹ"
مائکروکنٹرولرز میں دو اہم قسم کی مداخلتیں ہیں ۔ وہ بیرونی مداخلت اور اندرونی مداخلت ہیں۔ اندرونی مداخلت کسی کام کو انجام دینے کے ل the مائکرینٹرولر کے اندر ہوتی ہے ، مثال کے طور پر ٹائمر مداخلت ، اے ڈی سی مداخلت وغیرہ۔ یہ رکاوٹیں سافٹ ویئر کے ذریعہ ٹائمر آپریشن یا اے ڈی سی آپریشن کو بالترتیب مکمل کرنے کے لئے تیار کی جاتی ہیں۔
بیرونی مداخلت وہ ہے جو صارف کے ذریعہ متحرک ہوسکتی ہے۔ اس پروگرام میں ہم سیکھیں گے کہ کس طرح کسی رکاوٹ کو متحرک کرنے کیلئے پش بٹن کا استعمال کرکے بیرونی مداخلت کا استعمال کریں۔ ہم 0 سے 1000 تک اضافے والے نمبروں کو ظاہر کرنے کے لئے LCD کا استعمال کریں گے اور جب ایک رکاوٹ پیدا ہوجاتی ہے تو ہمیں انٹریپٹ سروس روٹین ISR سے اس کے بارے میں مطلع کرنا چاہئے اور پھر اعداد میں اضافہ کرتے رہیں۔
سرکٹ ڈایاگرام اور وضاحت:
مذکورہ تصویر میں PIC16F877 مداخلتوں کو استعمال کرنے کے لئے سرکٹ ڈایاگرام دیا گیا ہے۔ آپ کو LCD کو PIC سے منسلک کرنا ہوگا جیسا کہ ہم نے LCD ٹیوٹوریل میں مداخلت کی تھی۔
اب رکاوٹ پن کو جوڑنے کے ل we ، ہمیں ڈیٹاشیٹ کو دیکھنا چاہئے تاکہ معلوم کریں کہ PIC کا کون سا پن بیرونی مداخلت کے لئے استعمال ہوتا ہے ۔ ہمارے معاملے میں i n PIC16F877A 33 rd پن RBO / INT بیرونی مداخلت کے لئے استعمال کیا جاتا ہے۔ آپ اس پن کے علاوہ کوئی دوسرا پن استعمال نہیں کرسکتے ہیں۔ اس سرکٹ ڈایاگرام کے لئے پن کنکشن نیچے دیئے گئے جدول میں دکھایا گیا ہے۔
سیریل نمبر: |
پن نمبر |
پن کا نام |
سے جڑا ہوا |
1 |
21 |
آر ڈی 2 |
LCD کا RS |
2 |
22 |
آر ڈی 3 |
LCD کا ای |
3 |
27 |
آر ڈی 4 |
LCD کا D4 |
4 |
28 |
آر ڈی 5 |
LCD کا D5 |
5 |
29 |
آر ڈی 6 |
LCD کا D6 |
6 |
30 |
آرڈی 7 |
LCD کا D7 |
7 |
33 |
آر بی او / آئی این ٹی |
دبانے والا بٹن |
ہم نے پورٹ بی پر اندرونی پل اپ ریزٹرز کو چالو کیا ہے ، لہذا ہم پش بٹن کے ذریعہ RB0 پن کو براہ راست زمین سے جوڑ سکتے ہیں۔ لہذا جب بھی یہ پن کم ہوجاتا ہے ایک وقفے کو متحرک کردیا جائے گا۔
جیسا کہ ذیل میں دکھایا گیا ہے روٹی بورڈ پر رابطے کئے جاسکتے ہیں۔
اگر آپ ہمارے سبق آموز پیروی کر رہے ہیں تو آپ کو اس پرفٹ بورڈ سے واقف ہونا چاہئے تھا جو میں نے یہاں استعمال کیا ہے۔ اگر نہیں تو ، آپ کو اس کے بارے میں زیادہ سوچنے کی ضرورت نہیں ہے محض سرکٹ ڈایاگرام کی پیروی کریں اور آپ کو کام کرنے میں مدد ملے گی۔
پی آئی سی مائکروکانٹرولر میں مداخلتوں کا تخروپن:
اس پروجیکٹ کے لئے نقلی پروٹیوس کا استعمال کرتے ہوئے بنایا گیا ہے۔
جب آپ اس منصوبے کی نقالی کرتے ہیں تو آپ کو ایل سی ڈی ڈسپلے پر تعداد میں اضافے کی ترتیب دیکھنا چاہئے۔ یہ مرکزی لوپ کے اندر ہوتا ہے اور جب بھی پش بٹن دب جاتا ہے تو LCD کو ظاہر کرنا چاہئے کہ اس نے ISR میں داخل ہو گیا ہے۔ آپ کوڈ میں اپنی ترمیم کر سکتے ہیں اور اسے یہاں پر آزمانے کی کوشش کر سکتے ہیں۔
کوڈ کی وضاحت:
اس منصوبے کا مکمل کوڈ اس سبق کے آخر میں پایا جاسکتا ہے۔ تاہم پروگرام کو اہم حصوں میں تقسیم کیا گیا ہے اور آپ کی بہتر تفہیم کے لئے ذیل میں وضاحت کی گئی ہے۔
تمام پروگراموں کی طرح ہمیں اپنے پروگرام میں استعمال ہونے والی پنوں کی پن کی تشکیل کی وضاحت کرکے کوڈ کا آغاز کرنا ہے۔ نیز یہاں ہمیں یہ بیان کرنے کی ضرورت ہے کہ ہم RB0 / INT کو بیرونی مداخلت پن کے بطور استعمال کررہے ہیں نہ کہ ان پٹ یا آؤٹ پٹ پن کے طور پر۔ کوڈ کی لکیر سے نیچے 7 بنا کر portB پر اندرونی پل اپ resistor کے قابل بناتا ویں 0 طور کاٹا.
OPTION_REG = 0b00000000؛
تب ہم گلوبل / پیریفیریل رکاوٹوں کو اہل بناتے ہیں اور اعلان کرتے ہیں کہ ہم RB0 کو بیرونی مداخلت پن کے طور پر استعمال کر رہے ہیں۔
GIE = 1؛ // عالمی مداخلت PEIE = 1 کو فعال کریں؛ // پردیی مداخلت INTE = 1 کو قابل بنائیں؛ // بیرونی مداخلت پن کی حیثیت سے RB0 کو فعال کریں
ایک بار جب RB0 پن کو بیرونی مداخلت پن کی تعریف کی جائے تو ، جب بھی یہ کم ہوجائے گا بیرونی مداخلت والے جھنڈے INTF 1 ہو جائیں گے اور وقفے سے خلل ڈالنے والے فنکشن کے اندر موجود کوڈ پر عمل درآمد ہو جائے گا چونکہ انٹراپٹ سروس روٹین (ISR) کہا جائے گا۔
باطل مداخلت ISR_example () {if (INTF == 1) // بیرونی مداخلت کا پتہ چلا {Lcd_C Clear ()؛ ایل سی ڈی_سیٹ_کرسر (1،1)؛ ایل سی ڈی_پرینٹ_اسٹرنگ ("داخل کردہ آئی ایس آر")؛ INTF = 0؛ // مداخلت والے جھنڈے کو اس کے ساتھ کرنے کے بعد صاف کریں __delay_ms (2000)؛ ایل سی ڈی_کلیئر ()؛ }
جیسا کہ آپ دیکھ سکتے ہیں کہ میں نے اس رکاوٹ تقریب کا نام ISR_example رکھا ہے۔ آپ اپنی خواہش کے مطابق اس کا نام دے سکتے ہیں۔ خلل ڈالنے والے فنکشن کے اندر ہم معلوم کریں گے کہ آیا INTF کا جھنڈا بلند ہے اور ضروری کاروائیاں انجام دیں گے۔ ایک بار جب آپ معمول کے مطابق ہو جائیں تو مداخلت والے جھنڈے کو صاف کرنا بہت ضروری ہے ۔ اس کے بعد ہی یہ پروگرام دوبارہ ختم ہو جائے گا۔ یہ کلیئرنگ لائن کا استعمال کرتے ہوئے سافٹ ویئر کے ذریعہ کرنا ہے
INTF = 0؛ // مداخلت والے جھنڈے کو اس کے ساتھ کرنے کے بعد صاف کریں
مرکزی تقریب کے اندر ، ہم صرف ہر 500 ایم ایس کے ل a ایک تعداد میں اضافہ کرتے ہیں اور اسے LCD اسکرین پر ظاہر کرتے ہیں۔ ہمارے پاس RB0 پن کی حالت کی جانچ کرنے کے لئے کوئی خاص لائن موجود نہیں ہے۔ رکاوٹ ہمیشہ متحرک رہے گا اور جب بھی پش بٹن دب جائے گا تو وہ باطل مین سے باہر کود جائے گا اور آئی ایس آر میں موجود لائنوں کو عملی شکل دے گا۔
ایل سی ڈی_سیٹ_کرسر (2،1)؛ ایل سی ڈی_پرینٹ_اسٹرنگ ("مین لوپ کے اندر")؛ ایل سی ڈی_سیٹ_کرسر (1،1)؛ ایل سی ڈی_پرینٹ_اسٹرنگ ("نمبر:")؛ ایل سی ڈی_پرینٹ_چار (ch1 + '0')؛ ایل سی ڈی_پرینٹ_چار (CH2 + '0')؛ ایل سی ڈی_پرینٹ_چار (CH3 + '0')؛ ایل سی ڈی_پرینٹ_چار (ch4 + '0')؛ __Dlay_ms (500)؛ نمبر ++؛
PIC16F877A مداخلتوں کا کام کرنا:
ایک بار جب آپ یہ سمجھ چکے ہیں کہ کس طرح رکاوٹ کام کرتی ہے تو آپ اسے ہارڈ ویئر اور اس کے آس پاس کے ہارڈ ویئر پر آزما سکتے ہیں۔ یہاں دیا گیا یہ پروگرام بیرونی مداخلت کی ایک بہت ہی بنیادی مثال ہے جہاں جب مداخلت کا پتہ چلتا ہے تو یہ LCD اسکرین کے ڈسپلے کو تبدیل کرتا ہے۔
پروجیکٹ کا مکمل کام ذیل میں دی گئی ویڈیو میں پایا جاسکتا ہے۔ امید ہے کہ آپ کو مداخلتوں کے بارے میں اور جہاں / انہیں استعمال کرنے کے بارے میں سمجھا گیا تھا۔ اگر آپ کو کوئی شبہ ہے تو آپ فورمز کے ذریعے یا تبصرے کے سیکشن کے ذریعے مجھ تک پہنچ سکتے ہیں۔