اس پروجیکٹ میں ، ہم 8051 مائکروکنٹرولر کا استعمال کرتے ہوئے آر ٹی سی گھڑی بنانے کا مظاہرہ کرنے جارہے ہیں ۔ اگر آپ اس پروجیکٹ کو ارڈینو کے ساتھ کرنا چاہتے ہیں تو ، آرڈوینو کا استعمال کرتے ہوئے اس ڈیجیٹل گھڑی کو چیک کریں۔ اس پروجیکٹ کا سب سے بڑا جزو DS1307 ہے جو ایک حقیقی وقت کا ڈیجیٹل کلاک IC ہے۔ اس آئی سی کے بارے میں تفصیل سے جانتے ہیں۔
آر ٹی سی DS1307:
DS1307 سیریل ریئل ٹائم کلاک (آر ٹی سی) ایک کم طاقت ، مکمل بائنری کوڈڈ اعشاریہ (بی سی ڈی) گھڑی / کیلنڈر کے علاوہ این وی ایس آر اے ایم کے 56 بائٹس ہے۔ یہ چپ I²C پروٹوکول پر کام کرتی ہے۔ گھڑی / کیلنڈر سیکنڈ ، منٹ ، گھنٹے ، دن ، تاریخ ، مہینہ اور سال کی معلومات فراہم کرتا ہے۔ مہینے کی تاریخ کا اختتام مہینوں کے لئے خود بخود 31 دن سے بھی کم وقت کے ساتھ ایڈجسٹ ہوجاتا ہے ، جس میں لیپ سال کیلئے اصلاحات بھی شامل ہیں۔ گھڑی AM / PM اشارے کے ساتھ 24 گھنٹے یا 12 گھنٹے کی شکل میں چلتی ہے۔ DS1307 میں ایک بلٹ میں پاور سینس سرکٹ ہے جو بجلی کی ناکامیوں کا پتہ لگاتا ہے اور خود بخود بیک اپ کی فراہمی میں بدل جاتا ہے۔ ٹائم کیپنگ آپریشن جاری ہے جبکہ حصہ بیک اپ سپلائی سے کام کرتا ہے۔ DS1307 چپ مسلسل 10 سال تک چل سکتی ہے۔
8051 پر مبنی ریئل ٹائم گھڑی ایک RTC DS1307 کا استعمال کرتے ہوئے حقیقی وقت کو ظاہر کرنے کے لئے ایک ڈیجیٹل گھڑی ہے ، جو I2C پروٹوکول پر کام کرتی ہے۔ ریئل ٹائم گھڑی کا مطلب ہے کہ یہ بجلی کی ناکامی کے بعد بھی چلتا ہے۔ جب بجلی کا دوبارہ منسلک ہوتا ہے ، تو یہ قطع نظر اس وقت اور مدت سے قطع نظر اصل وقت کو ظاہر کرتا ہے جو اس کی حالت میں تھا۔ اس پروجیکٹ میں ہم نے وقت (گھنٹہ ، منٹ ، سیکنڈ ، تاریخ ، مہینہ اور سال) کی شکل ظاہر کرنے کے لئے 16x2 LCD ماڈیول استعمال کیا ہے۔ اصلی وقت کی گھڑیاں عام طور پر ہمارے کمپیوٹر ، گھروں ، دفاتر اور الیکٹرانکس ڈیوائس میں حقیقی وقت کے ساتھ تازہ کاری رکھنے کے لئے استعمال ہوتی ہیں۔
I2C پروٹوکول ایک ہی سسٹم میں دو تاروں کا استعمال کرتے ہوئے دو یا زیادہ سے زیادہ آلات کو جوڑنے کا ایک طریقہ ہے ، اور اس طرح اس پروٹوکول کو دو تار پروٹوکول بھی کہا جاتا ہے ۔ اس کا استعمال کسی ایک آلہ یا پروسیسر سے 127 ڈیوائسز تک پہنچانے کے لئے کیا جاسکتا ہے۔ I2C کے زیادہ تر آلات 100Khz تعدد پر چلتے ہیں۔
ڈیٹا لکھنے ماسٹر ٹو غلام (غلام وصول کرنے کا طریقہ) کیلئے اقدامات
- غلام کو START کی شرط بھیجتا ہے۔
- غلام کو غلام کا پتہ بھیجتا ہے۔
- غلام کو لکھنے بٹ (0) بھیجیں۔
- غلام سے ACK بٹ وصول کیا
- غلام کو الفاظ کا پتہ بھیجتا ہے۔
- غلام سے ACK بٹ وصول کیا
- غلام کو ڈیٹا بھیجتا ہے۔
- غلام سے ACK بٹ وصول کیا۔
- اور آخری بار STOP کی حالت غلام کو بھیجتا ہے۔
غلام سے ماسٹر تک ڈیٹا پڑھنے کے اقدامات (غلام منتقل کرنے کا طریقہ)
- غلام کو START کی شرط بھیجتا ہے۔
- غلام کو غلام کا پتہ بھیجتا ہے۔
- غلام کو پڑھنے بٹ (1) بھیجیں۔
- غلام سے ACK بٹ وصول کیا
- غلام سے ڈیٹا موصول ہوا
- غلام سے ACK بٹ وصول کیا۔
- غلام کو STOP کی حالت بھیجتا ہے۔
سرکٹ ڈایاگرام اور تفصیل
سرکٹ میں ہم نے 3 زیادہ تر اجزاء DS1307 ، AT89S52 اور LCD استعمال کیے ہیں۔ یہاں AT89S52 DS1307 سے وقت پڑھنے اور اسے 16x2 LCD اسکرین پر ڈسپلے کرنے کے لئے استعمال کیا جاتا ہے۔ DS1307 مائکروکانٹرولر کو 2 لائنوں کا استعمال کرتے ہوئے وقت / تاریخ بھیجتا ہے۔
سرکٹ کنکشن سمجھنے کے لئے آسان ہیں اور مذکورہ آریھ میں دکھایا گیا ہے۔ DS1307 چپ پن ایس ڈی اے اور ایس سی ایل 89355 مائکروقابو کنٹرولر کے P2.1 اور P2.0 پنوں سے جڑے ہوئے ہیں جس میں پل اپ ریزسٹر ہے جو ڈیٹا اور گھڑی کی لائنوں پر ڈیفالٹ ویلیو HIGH رکھتا ہے۔ اور ایک 32.768KHz کا کرسٹل oscillator DS1307chip سے عین مطابق 1 سیکنڈ کی تاخیر پیدا کرنے کے لئے منسلک ہے۔ اور 3 وولٹ کی بیٹری DS1307 کے پن 3 آر ڈی (بی اے ٹی) سے بھی منسلک ہے جو بجلی کی ناکامی کے بعد چلتا وقت برقرار رکھتا ہے۔ 16x2 LCD 8051 کے ساتھ 4 بٹ موڈ میں منسلک ہے۔ کنٹرول پن RS ، RW اور En 89S52 پن P1.0 ، GND اور P1.1 سے براہ راست جڑے ہوئے ہیں۔ اور ڈیٹا پن D0-D7 89S52 کے P1.4-P1.7 سے منسلک ہے۔
سیٹ ، INC / CHANGE اور اگلے تین بٹن P2.4 ، P2.3 اور 89S52 کے P2.2 (ایکٹو لو) کو پن کرنے کے لئے گھڑی کا وقت مقرر کرنے کے لئے استعمال ہوتے ہیں۔ جب ہم SET دبائیں تو ، ٹائم سیٹ موڈ ایکٹیویٹ ہوجاتا ہے اور اب ہمیں INC / CHANGE بٹن کا استعمال کرکے وقت مقرر کرنے کی ضرورت ہے اور اگلے بٹن کو ہندسے میں منتقل کرنے کے لئے استعمال ہوتا ہے۔ وقت مقرر کرنے کے بعد گھڑی مسلسل چلتی ہے۔
پروگرام کی تفصیل
کوڈ میں ہم نے 8051 فیملی لائبریری اور ایک معیاری ان پٹ آؤٹ پٹ لائبریری شامل کیا ہے۔ اور بیان کردہ پنوں جو ہم استعمال کرتے ہیں ، اور حساب کے ل for کچھ متغیر لے گئے ہیں۔
# شامل کریں
اور دی گئی فنکشن LCD چلانے کے لئے استعمال ہوتی ہے۔
باطل تاریخ () = RSS = 1؛ en = 1؛ تاخیر (1)؛ en = 0؛ l باطل lcddata (دستخط شدہ چار CH) {lcdport = ch & 0xf0؛ تاریخ ()؛ lcdport = (ch << 4) & 0xf0؛ تاریخ ()؛ cm باطل سنٹیڈین (باطل) {RSS = 0؛ en = 1؛ تاخیر (1)؛ en = 0؛ l باطل lcdcmd (دستخط شدہ چار CH)
اس فنکشن کا آغاز آر ٹی سی کو شروع کرنے کے لئے کیا جاتا ہے اور آر ٹی سی آئی سی فارم سے وقت اور تاریخ پڑھتا ہے۔
I2CStart ()؛ I2CSend (0xD0)؛ I2CSend (0x00)؛ I2CStart ()؛ I2CSend (0xD1)؛ سیکنڈ = BCDToDecimal (I2CRead (1))؛ منٹ = BCDToDecimal (I2CRead (1))؛ گھنٹہ = BCDToDecimal (I2CRead (1))؛ دن 1 = BCDToDecimal (I2CRead (1))؛ تاریخ = BCDToDecimal (I2CRead (1))؛ mon = BCDToDecimal (I2CRead (1))؛ سال = BCDToDecimal (I2CRead (1))؛ I2CStop ()؛ شو_ٹائم ()؛ // ڈسپلے کا وقت / تاریخ / دن تاخیر (1)؛
یہ افعال اعشاریے کو بی سی ڈی اور بی سی ڈی کو اعشاریہ میں تبدیل کرنے کے لئے استعمال ہوتا ہے۔
# BCDToDecimal (چار bcdByte) {چار a، b، dec؛ a = (((bcdByte & 0xF0) >> 4) * 10)؛ b = (bcdByte & 0x0F)؛ dec = a + b؛ واپسی دسمبر؛ Dec چار اعشاریہ بی سی ڈی (int اعشاریہ بائٹ) {چار اے ، بی ، بی سی ڈی؛ a = ((اعشاریہ بائٹ / 10) << 4)؛ b = (اعشاریہ بائٹ٪ 10)؛ بی سی ڈی = اب؛ واپسی بی سی ڈی؛ }
ذیل میں دیئے گئے افعال I2C مواصلات کے لئے استعمال ہوتے ہیں۔
باطل آئی 2 سی ایس اسٹارٹ () {ایس ڈی اے = 1 CL ایس سی ایل = 1 ، ایس ڈی اے = 0 ، ایس سی ایل = 0} start // "اسٹارٹ" فنکشن کے ساتھ ds1307 آر ٹی سی باطل I2CStop () {ایس ڈی اے = 0 ، ایس سی ایل = 1 ، ایس ڈی اے = 1؛ communicate // مواصلت کے لئے "اسٹاپ" فنکشن ds1307 RTC دستخط شدہ چار I2CSend (دستخط شدہ چار ڈیٹا) // ڈی ایس 1307 data چار پر ڈیٹا بھیجیں؛ چار ack_bit؛ (i = 0؛ i <8؛ i ++) {اگر (ڈیٹا & 0x80) ایس ڈی اے = 1؛ اور ایس ڈی اے = 0؛ ایس سی ایل = 1؛ ڈیٹا << = 1؛ ایس سی ایل = 0؛ } ایس ڈی اے = 1 ، ایس سی ایل = 1؛ ack_bit = SDA؛ ایس سی ایل = 0؛ واپسی ack_bit؛ } دستخط شدہ چار I2CRead (char ack) // ds1307 سے ڈیٹا وصول کریں {دستخط شدہ چار i ، ڈیٹا = 0؛ ایس ڈی اے = 1؛ (i = 0؛ i <8؛ i ++) {ڈیٹا << = 1؛ do {SCL = 1؛} جبکہ (SCL == 0)؛ اگر (ایس ڈی اے) ڈیٹا- = 1؛ ایس سی ایل = 0؛ } اگر (اکک) ایس ڈی اے = 0؛ ورنہ ایس ڈی اے = 1؛ ایس سی ایل = 1؛ ایس سی ایل = 0؛ ایس ڈی اے = 1؛ ڈیٹا واپس؛ }
سیٹ_ ٹائم فنکشن کو گھڑی میں وقت مقرر کرنے کے لئے استعمال کیا جاتا ہے اور ایل سی ڈی پر وقت ظاہر کرنے کے لئے نیچے شو_ ٹائم فنکشن استعمال ہوتا ہے۔
باطل شو_ٹائم () // LCD پر وقت / تاریخ / دن کی نمائش کے لئے فنکشن {چار var؛ lcdcmd (0x80)؛ ایل سی ڈی پرنٹ ("تاریخ:")؛ سپرنٹف (متغیر ، "٪ d" ، تاریخ)؛ lcdprint (var)؛ سپرنٹف (متغیر ، "/٪ d" ، سوم)؛ lcdprint (var)؛ سپرنٹف (ور ، "/٪ d" ، سال + 2000)؛ lcdprint (var)؛ lcdprint ("")؛ lcdcmd (0xc0)؛ lcdprint ("وقت:")؛ سپرنٹف (متغیر ، "٪ d" ، گھنٹہ)؛ lcdprint (var)؛ سپرنٹف (var، ":٪ d"، منٹ)؛ lcdprint (var)؛ سپرنٹف (var، ":٪ d"، سیکنڈ)؛ lcdprint (var)؛ lcdprint ("")؛ // دن (دن 1)؛ lcdprint ("")؛ }