இந்த திட்டத்தில், 8051 மைக்ரோகண்ட்ரோலரைப் பயன்படுத்தி ஆர்டிசி கடிகாரத்தை உருவாக்குவதை நாங்கள் நிரூபிக்கப் போகிறோம். Arduino உடன் இந்த திட்டத்தை நீங்கள் செய்ய விரும்பினால், Arduino ஐப் பயன்படுத்தி இந்த டிஜிட்டல் கடிகாரத்தை சரிபார்க்கவும். இந்த திட்டத்தின் முக்கிய கூறு DS1307 ஆகும், இது நிகழ்நேர டிஜிட்டல் கடிகாரம் ஐ.சி. இந்த ஐ.சி பற்றி விரிவாக அறியலாம்.
RTC DS1307:
DS1307 சீரியல் ரியல்-டைம் கடிகாரம் (RTC) என்பது குறைந்த சக்தி, முழு பைனரி-குறியிடப்பட்ட தசம (BCD) கடிகாரம் / காலண்டர் மற்றும் NV SRAM இன் 56 பைட்டுகள் ஆகும். இந்த சிப் I²C நெறிமுறையில் வேலை செய்கிறது. கடிகாரம் / காலண்டர் விநாடிகள், நிமிடங்கள், மணிநேரம், நாள், தேதி, மாதம் மற்றும் ஆண்டு தகவல்களை வழங்குகிறது. மாத தேதியின் முடிவு 31 நாட்களுக்கு குறைவான மாதங்களுக்கு தானாகவே சரிசெய்யப்படுகிறது, இதில் லீப் ஆண்டிற்கான திருத்தங்கள் அடங்கும். கடிகாரம் 24 மணி நேரம் அல்லது 12 மணி நேர வடிவத்தில் AM / PM காட்டி மூலம் இயங்குகிறது. DS1307 ஆனது ஒரு உள்ளமைக்கப்பட்ட பவர்-சென்ஸ் சர்க்யூட்டைக் கொண்டுள்ளது, இது மின் தோல்விகளைக் கண்டறிந்து தானாகவே காப்பு விநியோகத்திற்கு மாறுகிறது. காப்புப்பிரதி விநியோகத்திலிருந்து பகுதி இயங்கும்போது நேரக்கட்டுப்பாடு செயல்பாடு தொடர்கிறது. DS1307 சிப் தொடர்ந்து 10 ஆண்டு வரை இயக்க முடியும்.

8051 அடிப்படையிலான ரியல் டைம் கடிகாரம் ஒரு டிஜிட்டல் கடிகாரம் , இது RTC DS1307 ஐப் பயன்படுத்தி நிகழ் நேரத்தைக் காண்பிக்கும் , இது I2C நெறிமுறையில் வேலை செய்கிறது. நிகழ்நேர கடிகாரம் என்பது மின்சாரம் செயலிழந்த பின்னரும் இயங்குகிறது. சக்தி மீண்டும் இணைக்கப்படும்போது, அது நிகழ்நேரத்தில் இருந்த நேரத்தையும் கால அளவையும் பொருட்படுத்தாமல் உண்மையான நேரத்தைக் காட்டுகிறது. இந்த திட்டத்தில் நேரத்தை (மணிநேரம், நிமிடம், விநாடிகள், தேதி, மாதம் மற்றும் ஆண்டு) வடிவத்தில் காட்ட 16x2 எல்சிடி தொகுதியைப் பயன்படுத்தியுள்ளோம். நிகழ்நேர கடிகாரங்கள் பொதுவாக எங்கள் கணினிகள், வீடுகள், அலுவலகங்கள் மற்றும் மின்னணு சாதனங்களில் உண்மையான நேரத்துடன் புதுப்பிக்கப்படுவதற்குப் பயன்படுத்தப்படுகின்றன.
I2C நெறிமுறை என்பது இரண்டு கம்பிகளைப் பயன்படுத்தி இரண்டு அல்லது அதற்கு மேற்பட்ட சாதனங்களை ஒரே அமைப்புடன் இணைப்பதற்கான ஒரு முறையாகும், எனவே இந்த நெறிமுறை இரண்டு கம்பி நெறிமுறை என்றும் அழைக்கப்படுகிறது. 127 சாதனங்களை ஒரு சாதனம் அல்லது செயலியுடன் தொடர்பு கொள்ள இதைப் பயன்படுத்தலாம். பெரும்பாலான I2C சாதனங்கள் 100Khz அதிர்வெண்ணில் இயங்குகின்றன.
தரவு எழுதுவதற்கான படிகள் அடிமைக்கு அடிமை (அடிமை பெறும் முறை)
- START நிபந்தனையை அடிமைக்கு அனுப்புகிறது.
- அடிமை முகவரியை அடிமைக்கு அனுப்புகிறது.
- எழுது பிட் (0) ஐ அடிமைக்கு அனுப்புங்கள்.
- அடிமையிலிருந்து ACK பிட் பெறப்பட்டது
- சொற்களை முகவரிக்கு அடிமைக்கு அனுப்புகிறது.
- அடிமையிலிருந்து ACK பிட் பெறப்பட்டது
- தரவை அடிமைக்கு அனுப்புகிறது.
- அடிமையிலிருந்து ACK பிட் பெறப்பட்டது.
- கடைசியாக STOP நிபந்தனையை அடிமைக்கு அனுப்புகிறது.
அடிமை முதல் மாஸ்டர் வரை தரவு வாசிப்புக்கான படிகள் (அடிமை கடத்தும் முறை)
- START நிபந்தனையை அடிமைக்கு அனுப்புகிறது.
- அடிமை முகவரியை அடிமைக்கு அனுப்புகிறது.
- அடிமைக்கு பிட் (1) ஐ அனுப்பவும்.
- அடிமையிலிருந்து ACK பிட் பெறப்பட்டது
- அடிமையிலிருந்து தரவு பெறப்பட்டது
- அடிமையிலிருந்து ACK பிட் பெறப்பட்டது.
- STOP நிபந்தனையை அடிமைக்கு அனுப்புகிறது.
சுற்று வரைபடம் மற்றும் விளக்கம்
சுற்றுவட்டத்தில் DS1307, AT89S52 மற்றும் LCD ஆகிய 3 பெரும்பாலான கூறுகளைப் பயன்படுத்தினோம். இங்கே AT89S52 DS1307 இலிருந்து படிக்க நேரம் பயன்படுத்தப்படுகிறது மற்றும் அதை 16x2 LCD திரையில் காண்பிக்கும். DS1307 மைக்ரோகண்ட்ரோலருக்கு 2 வரிகளைப் பயன்படுத்தி நேரம் / தேதியை அனுப்புகிறது.

சுற்று இணைப்புகள் புரிந்து கொள்ள எளிதானவை மற்றும் மேலே உள்ள வரைபடத்தில் காட்டப்பட்டுள்ளன. DS1307 சிப் முள் எஸ்.டி.ஏ மற்றும் எஸ்சிஎல் ஆகியவை 89 எஸ் 52 மைக்ரோகண்ட்ரோலரின் பி 2.1 மற்றும் பி 2.0 ஊசிகளுடன் இணைக்கப்பட்டுள்ளன. சரியான 1 வினாடி தாமதத்தை உருவாக்க 32.768KHz படிக ஆஸிலேட்டர் DS1307chip உடன் இணைக்கப்பட்டுள்ளது. 3 வோல்ட் பேட்டரி DS1307 இன் பின் 3 rd (BAT) உடன் இணைக்கப்பட்டுள்ளது, இது மின்சார செயலிழப்புக்குப் பிறகு நேரத்தை இயக்கும். 16x2 எல்சிடி 4 பிட் பயன்முறையில் 8051 உடன் இணைக்கப்பட்டுள்ளது. கட்டுப்பாட்டு முள் RS, RW மற்றும் En ஆகியவை நேரடியாக 89S52 முள் P1.0, GND மற்றும் P1.1 உடன் இணைக்கப்பட்டுள்ளன. தரவு முள் D0-D7 89S52 இன் P1.4-P1.7 உடன் இணைக்கப்பட்டுள்ளது.
89S52 இன் P2.4, P2.3 மற்றும் P2.2 ஐ (செயலில் குறைந்த) பின்செய்ய கடிகார நேரத்தை அமைப்பதற்கு SET, INC / CHANGE மற்றும் Next ஆகிய மூன்று பொத்தான்கள் பயன்படுத்தப்படுகின்றன. நாம் SET ஐ அழுத்தும்போது, நேர தொகுப்பு முறை செயல்படுத்துகிறது, இப்போது INC / CHANGE பொத்தானைப் பயன்படுத்தி நேரத்தை அமைக்க வேண்டும், அடுத்த பொத்தானை இலக்கத்திற்கு நகர்த்த பயன்படுத்தப்படுகிறது. நேர கடிகாரத்தை அமைத்த பிறகு தொடர்ந்து இயங்கும்.
நிரல் விளக்கம்
குறியீட்டில் 8051 குடும்ப நூலகம் மற்றும் ஒரு நிலையான உள்ளீட்டு வெளியீட்டு நூலகத்தை சேர்த்துள்ளோம். நாங்கள் பயன்படுத்திய ஊசிகளை வரையறுத்து, கணக்கீடுகளுக்கு சில மாறிகளை எடுத்துள்ளோம்.
#சேர்க்கிறது
கொடுக்கப்பட்ட செயல்பாடு எல்சிடி ஓட்டுவதற்கு பயன்படுத்தப்படுகிறது.
void daten () {rs = 1; en = 1; தாமதம் (1); en = 0; l வெற்றிட lcddata (கையொப்பமிடாத கரி ch) {lcdport = ch & 0xf0; daten (); lcdport = (ch << 4) & 0xf0; daten (); } வெற்றிட செ.மீ. en = 1; தாமதம் (1); en = 0; l வெற்றிட lcdcmd (கையொப்பமிடாத கரி ch)
இந்த செயல்பாடு RTC ஐ துவக்க பயன்படுத்தப்படுகிறது மற்றும் RTC IC படிவத்திலிருந்து நேரம் மற்றும் தேதியைப் படிக்கவும்.
I2CStart (); I2CSend (0xD0); I2CSend (0x00); I2CStart (); I2CSend (0xD1); sec = BCDToDecimal (I2CRead (1%); min = BCDToDecimal (I2CRead (1)); மணிநேரம் = BCDToDecimal (I2CRead (1%); day1 = BCDToDecimal (I2CRead (1%); தேதி = BCDToDecimal (I2CRead (1)); mon = BCDToDecimal (I2CRead (1)); ஆண்டு = BCDToDecimal (I2CRead (1)); I2CStop (); காட்சி நேரம்(); // காட்சி நேரம் / தேதி / நாள் தாமதம் (1);
இந்த செயல்பாடுகள் தசமத்தை BCD ஆகவும் BCD ஐ தசமமாகவும் மாற்ற பயன்படுகிறது.
int BCDToDecimal (char bcdByte) {char a, b, dec; a = (((bcdByte & 0xF0) >> 4) * 10); b = (bcdByte & 0x0F); dec = a + b; திரும்ப dec; } char DecimalToBCD (int decimalByte) {char a, b, bcd; a = ((தசம பைட் / 10) << 4); b = (தசம பைட்% 10); bcd = ab; திரும்ப பிசிடி; }
கீழே கொடுக்கப்பட்டுள்ள செயல்பாடுகள் I2C தொடர்புக்கு பயன்படுத்தப்படுகின்றன.
வெற்றிட I2CStart () {SDA = 1; SCL = 1, SDA = 0, SCL = 0;} // ds1307 RTC வெற்றிட I2CStop () உடன் தொடர்புகொள்வதற்கான "தொடக்க" செயல்பாடு {SDA = 0, SCL = 1, SDA = 1; wit // தகவல்தொடர்புக்கான "நிறுத்து" செயல்பாடு ds1307 RTC கையொப்பமிடாத கரி I2CSend (கையொப்பமிடாத கரி தரவு) // தரவை ds1307 க்கு அனுப்பு {char i; கரி அக்_பிட்; (i = 0; i <8; i ++) {if (தரவு & 0x80) SDA = 1; வேறு SDA = 0; எஸ்சிஎல் = 1; தரவு << = 1; எஸ்சிஎல் = 0; } எஸ்.டி.ஏ = 1, எஸ்சிஎல் = 1; ack_bit = SDA; எஸ்சிஎல் = 0; திரும்ப ack_bit; } கையொப்பமிடாத கரி I2CRead (char ack) // ds1307 இலிருந்து தரவைப் பெறுக {கையொப்பமிடாத கரி i, தரவு = 0; எஸ்.டி.ஏ = 1; for (i = 0; i <8; i ++) {தரவு << = 1; {SCL = 1;} போது (SCL == 0); if (SDA) தரவு- = 1; எஸ்சிஎல் = 0; } if (அக்) எஸ்.டி.ஏ = 0; வேறு எஸ்.டி.ஏ = 1; எஸ்சிஎல் = 1; எஸ்சிஎல் = 0; எஸ்.டி.ஏ = 1; தரவு திரும்ப; }
நேரத்தை கடிகாரத்தில் அமைக்க set_time செயல்பாடு பயன்படுத்தப்படுகிறது மற்றும் கீழே உள்ள show_time செயல்பாடு எல்சிடியில் நேரத்தைக் காட்ட பயன்படுகிறது.
எல்சிடி {char var இல் நேரம் / தேதி / நாள் காண்பிக்க void show_time () // செயல்பாடு; lcdcmd (0x80); lcdprint ("தேதி:"); sprintf (var, "% d", தேதி); lcdprint (var); sprintf (var, "/% d", mon); lcdprint (var); sprintf (var, "/% d", ஆண்டு + 2000); lcdprint (var); lcdprint (""); lcdcmd (0xc0); lcdprint ("நேரம்:"); sprintf (var, "% d", மணிநேரம்); lcdprint (var); sprintf (var, ":% d", நிமிடம்); lcdprint (var); sprintf (var, ":% d", நொடி); lcdprint (var); lcdprint (""); // நாள் (நாள் 1); lcdprint (""); }
