ہمارے پچھلے سبق میں ، ہم نے پی آئی سی مائکروکانٹرولر کا استعمال کرتے ہوئے ایل ای ڈی پلکنے کے بارے میں سیکھا اور پرف بورڈ پر وہی سرکٹ بنایا۔ پھر ہم نے پروگرام کو اپنے پرفیکٹ بورڈ میں پھینکنے کیلئے PICkit 3 ، ICSP اور MPLAB IPE استعمال کیا ۔ اب ، اس ٹیوٹوریل میں ہم خود کو PIC مائکروکنٹرولر پر مزید پن استعمال کرنے کی طرف بڑھیں گے۔ ہم 7 آؤٹ پٹس (ایل ای ڈی) اور ایک ان پٹ استعمال کریں گے۔ اس ٹیوٹوریل کے ل we ہم پرانے پرفیک بورڈ کا استعمال کریں گے (ذیل میں دکھایا گیا ہے) اور دوسرے ایل ای ڈی بورڈ پر مطلوبہ پنوں کو نکالنے کے لئے برگ کی لاٹھی شامل کریں گے۔ اس ٹیوٹوریل کے آخر میں ہم پی آئی سی مائکروکنٹرولر PIC16F877A کا استعمال کرتے ہوئے ٹمٹمانے والی ایل ای ڈی کا ایک سلسلہ تیار کریں گے اور سیکھیں گے کہ لوپ اور فنکشن کالنگ کے لئے 'بنیادی' پر کچھ بنیادی باتیں ، کچھ بنیادی باتیں اور ان پٹ استعمال کریں۔
ایل ای ڈی بورڈ ایک اور پرف بورڈ کے سوا کچھ نہیں ہے ، جس پر ہم ایل ای ڈی کو سولیٹ کریں گے ایک موجودہ محدود ریزٹر (نیچے دکھایا گیا)۔ ہم تسلسل ایل ای ڈی ٹمٹمانے شروع کرنے کے لئے ایک پش بٹن بھی شامل کریں گے۔
سرکٹ ڈایاگرام:
PIC مائکروکانٹرولر PIC16F877A ایل ای ڈی ٹمٹمانے والی ترتیب کوڈ اور ورکنگ وضاحت:
مکمل کوڈ ذیل میں دیا گیا ہے (آخر میں چیک کریں) ، یہاں ہم اسے لائن لائن کے ذریعہ حاصل کریں گے۔ جب اس پش بٹن کو دبایا جائے تو یہ کوڈ ترتیب وار انداز میں ایل ای ڈی کو چمکانا شروع کردے گا ۔ ترتیب کو سمجھنے کے ل please براہ کرم ٹیوٹوریل کے آخر میں ویڈیو دیکھیں۔ میں آپ کو مشورہ دوں گا کہ ویڈیو میں دکھائے گئے آؤٹ پٹ کو ذیل کے کوڈ سے موازنہ کریں اور پروگرام کو سمجھنے کی کوشش کریں۔
آئیے ایک لائن کے ذریعہ کوڈ لائن کو دیکھیں۔ پہلی چند سطریں کنفیگریشن بٹس لگانے کے لئے ہیں جن کی وضاحت گزشتہ ٹیوٹوریل میں کی گئی تھی لہذا میں ان کو چھوڑ رہا ہوں کسی بھی پروگرام کو سمجھنے کا بہترین طریقہ یہ ہے کہ مین ( باطل مین () ) فنکشن سے آغاز کیا جائے ، تو آئیے یہ کرتے ہیں
TRISB0 = 1؛ // ایم سی یو کو ہدایت دیں کہ بٹن کے لئے ان پٹ کے طور پر پورٹ بی پن 0 استعمال ہوتا ہے۔ TRISD = 0x00؛ // ایم سی یو کو ہدایت دیں کہ تمام پنوں کی پیداوار PORTD = 0x00 ہے۔ // تمام پنوں کو 0 پر شروع کریں
لفظ TRIS پن ان پٹ / آؤٹ پٹ کے طور پر استعمال کیا اور لفظ کی جا رہی ہے تو اس کی وضاحت کے لئے استعمال کیا جاتا ہے PORT ایک پن کم / ہائی بنانے کے لئے استعمال کیا جاتا ہے. TRISB0 = 1 لائن PORT B کا 0 واں پن ان پٹ کے بطور بنائے گی۔ یہ ہمارا پش بٹن ہوگا۔ لائنیں TRISD = 0x00؛ پورٹ = 0 x00؛ پورٹ D کے تمام پنوں کو آؤٹ پٹ کی طرح بنائے گا اور ان پنوں کو LOW کی ابتدائی قیمت تفویض کرے گی۔
چونکہ ہم نے کہا ہے کہ B0 ان پٹ کے بطور استعمال ہوتا ہے ، لہذا ہم پش بٹن کے ایک سرے کو پن بی 0 اور دوسرے سرے کو زمین سے جوڑیں گے۔ تب ہم جب بھی بٹن دبائیں گے تو پن کو زمین پر رکھا جائے گا جیسا کہ اوپر کنکشن آریگرام میں دکھایا گیا ہے۔ لیکن ایسا کرنے کے ل we ہمیں پل اپ ریزسٹر استعمال کرنا ہوگا تاکہ بٹن دبا نہ ہونے پر پن اونچی ہو گی۔ پل اپ ریزسٹر کچھ اس طرح ہے۔
لیکن ہمارے PIC MCU میں ایک اندرونی کمزور پل اپ ریزٹر ہے جو سافٹ وئیر کے ذریعہ چالو کیا جاسکتا ہے جس میں اس طرح سے بہت سی پریشانی کی بچت ہوتی ہے (جب مزید بٹنوں کو جوڑنا ہوتا ہے)۔
کمزور پل اپ ریزسٹر کیا ہے؟
پل اپ ریزٹر کی دو اقسام ہیں ، ایک کمزور پل اپ ہے اور دوسری مضبوط پل اپ ہے ۔ ضعیف پل اپ ریزٹرز بڑی قیمت کے ہیں اور اس طرح ایک کمزور موجودہ کو بہنے کی اجازت دیتا ہے اور مضبوط پل اپ ریزٹرز کم قیمت کے ہوتے ہیں اس طرح ایک مضبوط موجودہ کو بہنے دیتے ہیں۔ تمام ایم سی یو زیادہ تر کمزور پل اپ ریزسٹرس کا استعمال کرتا ہے۔ ہمارے پی آئی سی ایم سی یو میں اس کو چالو کرنے کے ل we ، ہمیں ذیل میں اسنیپ شاٹ میں دکھائے جانے والے OPTION_REG (آپشن رجسٹر) کیلئے اپنے ڈیٹا شیٹ کو دیکھنا ہوگا۔
جیسا کہ کمزور پل اپ ریزسٹر کے ساتھ بٹ 7 ڈیلز دکھایا گیا ہے۔ اسے چالو کرنے کے لئے اسے صفر کرنا چاہئے۔ یہ اوپٹیشن جی <7> = 0 کے ذریعہ کیا گیا ہے ۔ یہ خاص طور پر تھوڑا سا 7 کے ساتھ نمٹتا ہے جو دوسرے بٹس کو اس کی طے شدہ اقدار پر چھوڑ دیتا ہے۔ اس کی مدد سے ہم اپنی دیر کی لوپ میں داخل ہوجاتے ہیں ، جہاں یہ جانچ پڑتال کرتا ہے کہ اگر (RB0 == 0) کا استعمال کرکے بٹن دب گیا ہے یا نہیں ۔ اگر حالت مطمئن ہے تو ہم اپنے فنکشن کو 1 ، 3 ، 7 اور 15 پیرامیٹرز کے ساتھ کال کرتے ہیں۔
sblink (1)؛ // فنکشن 1 1 پیرامیٹر 1 sblink (3) کے ساتھ کال کریں؛ // فنکشن 3 3 پیرامیٹر کے ساتھ کال 3 (7)؛ // فنکشن 7 پیرامیٹر 7 sblink (15) کے ساتھ کال کریں؛ / پیرامیٹر 15 کے ساتھ فنکشن 4 کال کریں
ہم افعال کیوں استعمال کرتے ہیں؟
افعال ہمارے کوڈ میں لائنوں کی تعداد کو کم کرنے کے لئے استعمال ہوتے ہیں۔ یہی بات ہم میں سے بیشتر کو معلوم ہوتی۔ لیکن ہمیں لائنوں کی تعداد کو کم کرنے کی ضرورت کیوں ہے ، خاص طور پر جب بات ایم سی یو پروگرامنگ کی ہو۔ اس کی وجہ ہماری پروگرام میموری میں محدود جگہ ہے ۔ اگر ہم کوڈ کو بہتر طریقے سے نہیں بناتے ہیں تو شاید ہماری میموری کی جگہ ختم ہوجائے۔ جب ہم کوڈز کے لمبے صفحات لکھیں گے تو یہ کام آئے گا۔
کسی بھی فنکشن میں ایک فنکشن ڈیفینیشن ( sblink (int get) ہمارے معاملے میں) اور ایک فنکشن کال ( sblink (1) ہمارے معاملے میں) ہوگی۔ فنکشن اعلامیہ رکھنا یہ اختیاری ہے ، اس سے بچنے کے لئے میں نے اپنے مرکزی تقریب میں تقریب کو بلانے سے پہلے اپنی تقریب کی تعریف رکھی ہے۔
فنکشن پیرامیٹرز وہ قدر ہیں جو فنکشن کال سے فنکشن ڈیفینیشن میں منتقل ہوجائیں گی۔ ہمارے معاملے میں انٹیجر ویلیوز (1 ، 3 ، 7 ، 15) وہ پیرامیٹرز ہیں جو فنکشن کال سے گزر چکے ہیں اور متغیر "get" پیرامیٹرز کی قدر کو ان پر عملدرآمد کرنے کے لئے فنکشن ڈیفینیشن میں مل جاتا ہے۔ ایک فنکشن میں ایک سے زیادہ پیرامیٹر ہوسکتے ہیں۔
ایک بار جب فنکشن کہا جاتا ہے تو ، فنکشن تعریف میں درج ذیل لائنوں پر عمل درآمد کیا جائے گا۔
(INT = i؛ 0؛ i <= 7 &&BB == 0؛ i ++) OR پورٹ = حاصل کریں << i؛ // ایل ای ڈی اقدام بائیں ترتیب __ ڈیلا_ ایم ایس (50)؛ } کے لئے (INT i = 7؛ i> = 0 && RB0 == 0؛ i--) OR پورٹ = حاصل کریں << i؛ // ایل ای ڈی اقدام بائیں ترتیب __ ڈیلا_ ایم ایس (50)؛ }
اب یہ لائن عجیب لگ رہی ہے: PORTD = get << i . میں وضاحت کروں گا کہ اصل میں یہاں کیا ہو رہا ہے۔
"<<" ایک بائیں شفٹ آپریٹر ہے جو تمام بٹس کو اس کی بائیں پوزیشن پر منتقل کرتا ہے۔ اب جب ہم پیرامیٹر '1' کے ساتھ sblink (int get) فنکشن کو بطور Sblink (1) کہتے ہیں تو ، اس سے 'get' کی قدر 1 ہوجائے گی ، جو بائنری میں 0b00000001 ہے۔ لہذا یہ لائن PORTD = 0b00000001 << i کی طرح ہوگی ۔
"i" کی قدر 0 سے 7 تک مختلف ہوگی کیونکہ ہم نے (INT = =؛ i <= 7 &&BB = = 0؛ i ++) کے لئے 'for for loop' استعمال کیا ہے ۔ 'i' کی قدر 0 سے 7 تک ہونے کی وجہ سے نتیجہ میں تبدیلی ہوگی:
جیسا کہ آپ دیکھ سکتے ہیں کہ ہم باقی رکھے ہوئے ایک بار (بائیں سے دائیں) ایک یلئڈی آن کر چکے ہیں۔ اگلا 'for for loop' for (int i = 7؛ i> = 0 && RB0 == 0؛ i--) ، بھی ایسا ہی کرے گا لیکن اس بار ایل ای ڈی کو تسلسل میں دائیں سے بائیں موڑ دیا جائے گا ، جب ہم 7 سے شروع ہوئے اور 0 پر جا رہے ہیں۔ ہم نے 200 ملی میٹر کی تاخیر کا استعمال کیا ہے تاکہ ہم ایل ای ڈی کو آن اور آف ہونے کا تصور کرسکیں۔
اب جب ہم sblink (int get) فنکشن میں ویلیو 3 پاس کرتے ہیں ، تو اس فنکشن sblink (3) کو پھانسی دے دی جائے گی جس سے 'get' کی ویلیو 0b00000011 ہوجاتی ہے ، لہذا PORTD پر نتیجہ ہوگا:
لہذا اب اس وقت sblink (3) کے ذریعہ کسی بھی وقت دو ایل ای ڈی کو آن کیا جائے گا ۔ اسی طرح sblink (7) اور sblink (15) کے لئے ، تین اور چار ایل ای ڈی ایک ترتیب میں رہیں گے۔ ایک بار جب یہ مکمل ہوجائے تو ہم PORTD = 0xFF لائن استعمال کرنے کیلئے تمام ایل ای ڈی بنائیں گے۔ چیک کریں ویڈیو مکمل کارکردگی کے لئے ذیل میں.
امید ہے کہ آپ کوڈ کو سمجھ گئے ہوں گے اور اس طرح اپنی مطلوبہ آؤٹ پٹس حاصل کرنے کے ل functions ، 'کے لئے' اور 'جبکہ' لوپ کو کس طرح استعمال کرنا سیکھیں گے۔ اب آپ ایل ای ڈی ٹمٹمانے کے اپنے مختلف تسلسل کو حاصل کرنے کے لئے کوڈ کے ارد گرد موافقت کرسکتے ہیں۔ آگے بڑھ کر اپنا کوڈ مرتب کریں اور اسے اپنے ایم سی یو پر پھینک دیں اور آؤٹ پٹ سے لطف اٹھائیں۔ اگر آپ کہیں پھنس جاتے ہیں تو آپ کمنٹ سیکشن کا استعمال کرسکتے ہیں۔ میں نے یہاں نقلی اور پروگرام فائلوں کو بھی منسلک کیا ہے۔
بس یہی بات ہمارے اگلے سبق میں ہم تاخیر کے افعال کو استعمال کرنے کے بجائے PIC16F877A ٹائمر استعمال کرنے کا طریقہ سیکھیں گے ۔ آپ یہاں تمام PIC مائکرو قابو پانے والے سبق حاصل کرسکتے ہیں۔