ዝርዝር ሁኔታ:

DS1307 እና DS3231 ን በእውነተኛ ሰዓት የሰዓት ሞጁሎችን ከአርዱዲኖ ጋር መጠቀም-3 ደረጃዎች
DS1307 እና DS3231 ን በእውነተኛ ሰዓት የሰዓት ሞጁሎችን ከአርዱዲኖ ጋር መጠቀም-3 ደረጃዎች

ቪዲዮ: DS1307 እና DS3231 ን በእውነተኛ ሰዓት የሰዓት ሞጁሎችን ከአርዱዲኖ ጋር መጠቀም-3 ደረጃዎች

ቪዲዮ: DS1307 እና DS3231 ን በእውነተኛ ሰዓት የሰዓት ሞጁሎችን ከአርዱዲኖ ጋር መጠቀም-3 ደረጃዎች
ቪዲዮ: የዲቪዲ ማጫወቻ LED ማሳያ እንደገና ጥቅም ላይ ማዋል - የማይዛመዱ ተግባራት 2024, ታህሳስ
Anonim
DS1307 እና DS3231 ከአርዱዲኖ ጋር በእውነተኛ ሰዓት የሰዓት ሞጁሎችን መጠቀም
DS1307 እና DS3231 ከአርዱዲኖ ጋር በእውነተኛ ሰዓት የሰዓት ሞጁሎችን መጠቀም
DS1307 እና DS3231 ከአርዱዲኖ ጋር በእውነተኛ ሰዓት የሰዓት ሞጁሎችን መጠቀም
DS1307 እና DS3231 ከአርዱዲኖ ጋር በእውነተኛ ሰዓት የሰዓት ሞጁሎችን መጠቀም

እኛ ከተለያዩ ምንጮች DS1307 እና DS3231 የእውነተኛ ሰዓት ሰዓት ሞጁሎችን ከአርዱዲኖ ጋር እንዴት እንደምንጠቀም ጥያቄዎችን እንቀበላለን-ስለዚህ ይህ እንዴት እንደሚጠቀሙባቸው የሁለት ክፍል አጋዥ ስልጠና የመጀመሪያው ነው። ለዚህ የአርዱዲኖ ማጠናከሪያ ለመጠቀም ሁለት የእውነተኛ ሰዓት የሰዓት ሞጁሎች አሉን ፣ አንደኛው በ Maxim DS1307 (በካሬ ሞዱል) እና በ DS3231 (በአራት ማዕዘን ሞጁል) ላይ የተመሠረተ።

በእውነተኛ ሰዓት የሰዓት ሞጁሎች ላይ በአይሲዎች መካከል ሁለት ዋና ልዩነቶች አሉ ፣ ይህም የጊዜ አያያዝ ትክክለኛነት ነው። በመጀመሪያው ሞጁል ውስጥ ጥቅም ላይ የዋለው DS1307 በጣም በጥሩ ሁኔታ ይሠራል ፣ ሆኖም ግን የውጪው የሙቀት መጠን የ DS1307 ን የውስጥ ቆጣሪ በሚነዳው የ oscillator የወረዳ ድግግሞሽ ላይ ተጽዕኖ ሊያሳድር ይችላል።

ይህ እንደ ችግር ሊመስል ይችላል ፣ ግን አብዛኛውን ጊዜ ሰዓቱ በወር አምስት ወይም ከዚያ ደቂቃዎች ያህል በመጥፋቱ ምክንያት ይሆናል። DS3231 በውጫዊ ሁኔታዎች የማይጎዳ ውስጣዊ ማወዛወዝ ስላለው የበለጠ ትክክለኛ ነው - እና ስለሆነም በዓመት እስከ ጥቂት ደቂቃዎች ድረስ ትክክለኛ ነው። የ DS1307 ሞዱል ካለዎት- መጥፎ ስሜት አይሰማዎት ፣ አሁንም ትልቅ ዋጋ ያለው ቦርድ ነው እና በጥሩ ሁኔታ ያገለግልዎታል። በሁለቱም ሞጁሎች አማካኝነት የመጠባበቂያ ባትሪ ያስፈልጋል።

አዲስ CR2032 ባትሪ መግዛት እና ከሞጁሉ ጋር መግጠም ጥሩ ሀሳብ ነው። ጊዜውን እና ቀኑን ከመከታተል ጋር ፣ እነዚህ ሞጁሎች አነስተኛ EEPROM ፣ የማንቂያ ደወል ተግባር (DS3231 ብቻ) እና የተለያዩ ድግግሞሾችን ካሬ-ሞገድ የማመንጨት ችሎታ አላቸው-ሁሉም የሁለተኛ አጋዥ ርዕሰ ጉዳይ ይሆናል።

ደረጃ 1 ሞዱልዎን ከአርዲኖ ጋር ማገናኘት

ሁለቱም ሞጁሎች I2C አውቶቡስን ይጠቀማሉ ፣ ይህም ግንኙነቱን በጣም ቀላል ያደርገዋል።

በመጀመሪያ በ Arduino ወይም ተኳሃኝ ቦርዶች ላይ ለ I2C አውቶቡስ የትኞቹን ፒኖች መለየት ያስፈልግዎታል - እነዚህ እንደ ኤስዲኤ (ወይም መረጃ) እና ኤስ.ሲ.ኤል (ወይም ሰዓት) ይታወቃሉ። በአርዱዲኖ ኡኖ ወይም ተኳሃኝ ሰሌዳዎች ላይ እነዚህ ፒኖች ለመረጃ እና ለሰዓት A4 እና A5 ናቸው። በአርዱዲኖ ሜጋ ላይ ፒኖቹ ለመረጃ እና ለሰዓት D20 እና D21 ናቸው። እና Pro Mini ተኳሃኝ የሚጠቀሙ ከሆነ ፒኖቹ A4 እና A5 ናቸው ከዋናዎቹ ፒኖች ጋር ትይዩ ለሆኑ መረጃዎች እና ሰዓት።

DS1307 ሞዱል

የ DS1307 ሞጁል ካለዎት የሽቦ ሽቦዎችን መጠቀም እንዲችሉ ሽቦዎቹን ወደ ቦርዱ ወይም በአንዳንድ የመስመር ውስጥ ራስጌ ካስማዎች ላይ መሸጫ ያስፈልግዎታል። ከዚያ SCL እና SDA ፒኖችን ከእርስዎ አርዱዲኖ ፣ እና የ Vcc ፒን ከ 5 ቪ ፒን እና GND ከ GND ጋር ያገናኙ።

DS3231 ሞዱል

በፋብሪካው ላይ በቦርዱ ላይ የራስጌ ፒኖች ስለተጫኑ ይህንን ሞጁል ማገናኘት ቀላል ነው። በቀላሉ ከ “SCL” እና “SDA” ወደ “አርዱinoኖ” እና “እንደገና” ከ “ሞዱል” “Vcc” እና “GND” ካስማዎች ወደ የቦርድዎ 5V ወይም 3.3. V እና GND ድረስ የ “ዝላይ” ሽቦዎችን እንደገና ማካሄድ ይችላሉ። ሆኖም እነዚህ የራስዎን ሽቦዎች ለመሸጥ በሌላ በኩል የተባዙ ናቸው። ሁለቱም እነዚህ ሞጁሎች የሚፈለገው የመጎተት ተከላካዮች አሏቸው ፣ ስለዚህ የራስዎን ማከል አያስፈልግዎትም። ከ I2C አውቶቡስ ጋር እንደተገናኙ ሁሉም መሣሪያዎች ፣ የ SDA እና SCL ሽቦዎችን ርዝመት በትንሹ ይሞክሩ።

ደረጃ 2 - ጊዜዎን ከ RTC ሞዱልዎ ማንበብ እና መጻፍ

አንዴ የ RTC ሞዱልዎን ካጠናቀቁ በኋላ። የሚከተለውን ንድፍ ያስገቡ እና ይስቀሉ። በስዕሉ ውስጥ ያሉት ማስታወሻዎች እና ተግባራት የሚያመለክቱት DS3231 ብቻ ቢሆንም ፣ ኮዱ ከ DS1307 ጋርም ይሠራል።

#"Wire.h"#define DS3231_I2C_ADDRESS 0x68 // መደበኛውን የአስርዮሽ ቁጥሮች ወደ ሁለትዮሽ ኮድ አስርዮሽ ባይት decToBcd (ባይት ቫል) {መመለስ ((val/10*16) + (val%10)); } // የሁለትዮሽ ኮድ አስርዮሽ ወደ መደበኛ የአስርዮሽ ቁጥሮች ባይት bcdToDec (ባይት ቫል) {መመለስ ((val/16*10) + (val%16)); } ባዶነት ማዋቀር () {Wire.begin (); Serial.begin (9600); // የመጀመሪያውን ጊዜ እዚህ ያዘጋጁ - // DS3231 ሰከንዶች ፣ ደቂቃዎች ፣ ሰዓታት ፣ ቀን ፣ ቀን ፣ ወር ፣ ዓመት // setDS3231 ጊዜ (30 ፣ 42 ፣ 21 ፣ 4 ፣ 26 ፣ 11 ፣ 14) ፤ } ባዶነት setDS3231 ጊዜ (ባይት ሰከንድ ፣ ባይት ደቂቃ ፣ ባይት ሰዓት ፣ ባይት dayOfWeek ፣ ባይት dayOfMonth ፣ ባይት ወር ፣ ባይት ዓመት) {// የጊዜ እና የቀን ውሂብ ወደ DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS) ያዘጋጃል ፤ Wire.write (0); // በሰከንዶች ውስጥ ለመጀመር የሚቀጥለውን ግብዓት ያዘጋጁ Wire.write (decToBcd (ሁለተኛ)); // ሰከንዶች ያዘጋጁ Wire.write (decToBcd (ደቂቃ)); // አዘጋጅ ደቂቃዎች Wire.write (decToBcd (ሰዓት)); // ሰዓቶችን ያዘጋጁ Wire.write (decToBcd (dayOfWeek)); // የሳምንቱን ቀን ያዘጋጁ (1 = እሁድ ፣ 7 = ቅዳሜ) Wire.write (decToBcd (dayOfMonth)); // የተቀመጠ ቀን (ከ 1 እስከ 31) Wire.write (decToBcd (ወር)); // የተቀመጠ ወር Wire.write (decToBcd (ዓመት)); // የተቀመጠ ዓመት (ከ 0 እስከ 99) Wire.endTransmission (); } ባዶነት readDS3231time (ባይት *ሰከንድ ፣ ባይት *ደቂቃ ፣ ባይት *ሰዓት ፣ ባይት *dayOfWeek ፣ ባይት *dayOfMonth ፣ ባይት *ወር ፣ ባይት *ዓመት) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // አዘጋጅ DS3231 ጠቋሚውን ወደ 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS ፣ 7) ፤ // ከምዝገባ 00h *ሰከንድ = bcdToDec (Wire.read () & 0x7f) ጀምሮ ከ DS3231 ሰባት ባይት መረጃን ይጠይቁ ፤ *ደቂቃ = bcdToDec (Wire.read ()); *ሰዓት = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *ወር = bcdToDec (Wire.read ()); *ዓመት = bcdToDec (Wire.read ()); } ባዶነት ማሳያ ጊዜ () {ባይት ሰከንድ ፣ ደቂቃ ፣ ሰዓት ፣ ቀን ኦፍዌክ ፣ ቀን ወር ፣ ወር ፣ ዓመት ፤ // ውሂብን ከ DS3231 readDS3231time (እና ሁለተኛ ፣ እና ደቂቃ ፣ እና ሰዓት ፣ እና dayOfWeek ፣ እና dayOfMonth ፣ እና ወር ፣ እና ዓመት) ሰርስሮ ያውጡ። // ወደ ተከታታይ ማሳያ ይላኩ Serial.print (ሰዓት ፣ DEC) ፤ // Serial.print (":") ሲታይ የባይት ተለዋዋጭውን ወደ አስርዮሽ ቁጥር ይለውጡ ፤ ከሆነ (ደቂቃ <10) {Serial.print ("0"); } Serial.print (ደቂቃ ፣ DEC) ፤ Serial.print (":"); ከሆነ (ሁለተኛ <10) {Serial.print ("0"); } Serial.print (ሁለተኛ ፣ DEC) ፤ Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (ወር ፣ DEC); Serial.print ("/"); Serial.print (ዓመት ፣ DEC); Serial.print ("የሳምንቱ ቀን:"); ማብሪያ (dayOfWeek) {ጉዳይ 1: Serial.println ("እሁድ"); ሰበር; ጉዳይ 2: Serial.println ("ሰኞ"); ሰበር; ጉዳይ 3: Serial.println ("ማክሰኞ"); ሰበር; ጉዳይ 4: Serial.println ("ረቡዕ"); ሰበር; ጉዳይ 5: Serial.println ("ሐሙስ"); ሰበር; ጉዳይ 6: Serial.println ("ዓርብ"); ሰበር; ጉዳይ 7: Serial.println ("ቅዳሜ"); ሰበር; }} ባዶነት loop () {displayTime (); // በእውነተኛ ሰዓት የሰዓት መረጃን በ Serial Monitor ላይ ያሳዩ ፣ መዘግየት (1000) ፤ // በእያንዳንዱ ሰከንድ}

ብዙ ኮድ ሊኖር ይችላል ፣ ሆኖም በደንብ ወደሚተዳደሩ ክፍሎች ይከፋፈላል።

በመጀመሪያ ለ I2C አውቶቡስ ግንኙነት የሚያገለግል የሽቦ ቤተመፃሕፍትን ያጠቃልላል ፣ በመቀጠል ለ RTC የአውቶቡስ አድራሻውን እንደ 0x68 ይገልጻል። እነዚህ የአስርዮሽ ቁጥሮችን ወደ BCD (ሁለትዮሽ-ኮድ አስርዮሽ) እና በተቃራኒው የሚቀይሩ ሁለት ተግባራት ይከተላሉ። የ RTC አይሲዎች በቢሲሲሲ ውስጥ በአስርዮሽ ባለመሆኑ እነዚህ አስፈላጊ ናቸው።

የተግባር setDS3231time () ሰዓቱን ለማዘጋጀት ያገለግላል። እሱን መጠቀም በጣም ቀላል ነው ፣ እሴቶቹን ከዓመት ወደ ሰከንድ ያስገቡ ፣ እና RTC ከዚያ ጊዜ ጀምሮ ይጀምራል። ለምሳሌ ፣ የሚከተለውን ቀን እና ሰዓት - ረቡዕ ኖቬምበር 26 ፣ 2014 እና 9:42 ከሰዓት እና 30 ሰከንዶች ማዘጋጀት ከፈለጉ - ይጠቀሙ ነበር

setDS3231 ጊዜ (30 ፣ 42 ፣ 21 ፣ 4 ፣ 26 ፣ 11 ፣ 14) ፤

ደረጃ 3

ልብ ይበሉ ፣ ሰዓቱ የ 24 ሰዓት ጊዜን በመጠቀም የተቀናበረ መሆኑን ፣ እና አራተኛው መመዘኛ “የሳምንቱ ቀን” ነው። ይህ በቅደም ተከተል እሑድ እስከ ቅዳሜ ባለው በ 1 እና 7 መካከል ይወድቃል። የራስዎን ተለዋዋጮች ካስገቡ እነዚህ መለኪያዎች ባይት እሴቶች ናቸው።

አንዴ ተግባሩን አንዴ ካከናወኑ በ // ቅድመ ቅጥያ ማድረጉ እና ኮድዎን እንደገና መስቀሉ ብልህነት ነው ፣ ስለዚህ ኃይሉ ብስክሌት ከተደረገ ወይም ማይክሮ መቆጣጠሪያ ከተጀመረ በኋላ ጊዜውን ዳግም አያስጀምረውም። ጊዜዎን (RTC) ቅጽዎን ማንበብ እንዲሁ ቀላል ነው ፣ በእውነቱ ሂደቱ በተግባሩ ማሳያ ጊዜ () ውስጥ በጥሩ ሁኔታ ሊከተል ይችላል። ውሂቡን ከ RTC ለማከማቸት ሰባት ባይት ተለዋዋጮችን መግለፅ ያስፈልግዎታል ፣ እና እነዚህ በ ‹DSDS3231time ›(ተግባር) ውስጥ ገብተዋል። ለምሳሌ የእርስዎ ተለዋዋጮች ከሆኑ -

ባይት ሰከንድ ፣ ደቂቃ ፣ ሰዓት ፣ ቀን ኦፍወርክ ፣ ቀን ወር ፣ ወር ፣ ዓመት;

… በመጠቀም ከ RTC አሁን ባለው መረጃ ያድሷቸው ፦

readDS3232time (& ሁለተኛ ፣ እና ደቂቃ ፣ እና ሰዓት ፣ እና dayOfWeek ፣ እና dayOfMonth ፣ እና ወር ፣ እና ዓመት);

ከዚያ ምሳሌው ንድፍ እንደሚያደርገው ጊዜውን እና ቀኑን ወደ ተከታታይ ሞኒተር ከመላክ ጀምሮ - እርስዎ እንደፈለጉት ተለዋዋጮችን መጠቀም ይችላሉ - ለሁሉም የውጤት መሣሪያዎች ዓይነቶች ውሂቡን ወደ ተስማሚ ቅጽ ለመለወጥ።

ሁሉም ነገር እየሰራ መሆኑን ለመፈተሽ ፣ ተገቢውን ጊዜ እና ቀን ወደ ማሳያ ሥዕሉ ያስገቡ ፣ ይስቀሉት ፣ የ setDS3231time () ተግባርን አስተያየት ይስጡ እና እንደገና ይስቀሉት። ከዚያ ተከታታይ ማሳያውን ይክፈቱ ፣ እና የአሁኑን ሰዓት እና ቀን አሂድ ማሳያ ማቅረብ አለብዎት።

ከዚህ ጊዜ አሁን መረጃን ከእውነተኛ ሰዓት ሞዱልዎ ለማውጣት እና ለማምጣት የሶፍትዌር መሣሪያዎች አለዎት ፣ እና እነዚህን ርካሽ ሞጁሎች እንዴት እንደሚጠቀሙ ግንዛቤ እንዲኖርዎት ተስፋ እናደርጋለን።

ስለተለየ የእውነተኛ ሰዓት ሰዓት አይሲዎች ከአምራቹ ድር ጣቢያ-DS1307 እና DS3231 የበለጠ ማወቅ ይችላሉ።

ይህ ልጥፍ በ pmdway.com ወደ እርስዎ አምጥቷል - ሁሉም ነገር ለአዘጋጆች እና ለኤሌክትሮኒክስ አፍቃሪዎች ፣ በዓለም አቀፍ ነፃ መላኪያ።

የሚመከር: