Orodha ya maudhui:

Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino: Hatua 3
Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino: Hatua 3

Video: Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino: Hatua 3

Video: Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino: Hatua 3
Video: Урок 99. Создание цифровых часов Arduino с использованием ЖК-дисплея DS3231 и семисегментного дисплея. 2024, Julai
Anonim
Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino
Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino
Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino
Kutumia Moduli za Saa za wakati wa DS1307 na DS3231 Na Arduino

Tunaendelea kupata maombi ya jinsi ya kutumia moduli za saa halisi za DS1307 na DS3231 na Arduino kutoka vyanzo anuwai - kwa hivyo hii ni ya kwanza ya mafunzo ya sehemu mbili juu ya jinsi ya kuzitumia. Kwa mafunzo haya ya Arduino tuna moduli mbili za saa za kutumia, moja kulingana na Maxim DS1307 (moduli ya mraba) na DS3231 (moduli ya mstatili).

Kuna tofauti mbili kuu kati ya IC kwenye moduli za saa halisi, ambayo ni usahihi wa utunzaji wa wakati. DS1307 iliyotumiwa katika moduli ya kwanza inafanya kazi vizuri sana, hata hivyo joto la nje linaweza kuathiri mzunguko wa mzunguko wa oscillator ambao huendesha kaunta ya ndani ya DS1307.

Hii inaweza kuonekana kama shida, hata hivyo kawaida itasababisha saa kuzimwa kwa karibu dakika tano au hivyo kwa mwezi. DS3231 ni sahihi zaidi, kwani ina oscillator ya ndani ambayo haiathiriwi na mambo ya nje - na kwa hivyo ni sahihi hadi dakika chache kwa mwaka kabisa. Ikiwa una moduli ya DS1307- usijisikie vibaya, bado ni bodi kubwa ya thamani na itakutumikia vizuri. Na moduli zote mbili, betri ya kuhifadhi inahitajika.

Ni wazo nzuri kununua betri mpya ya CR2032 na kuitoshea kwa moduli. Pamoja na kuweka wimbo wa wakati na tarehe, moduli hizi pia zina EEPROM ndogo, kazi ya kengele (DS3231 tu) na uwezo wa kutengeneza wimbi-mraba la masafa anuwai - yote ambayo yatakuwa mada ya mafunzo ya pili.

Hatua ya 1: Kuunganisha Moduli yako kwa Arduino

Moduli zote mbili hutumia basi ya I2C, ambayo inafanya unganisho kuwa rahisi sana.

Kwanza utahitaji kutambua ni pini zipi kwenye Arduino yako au bodi zinazoendana zinatumika kwa basi ya I2C - hizi zitajulikana kama SDA (au data) na SCL (au saa). Kwenye Arduino Uno au bodi zinazoendana, pini hizi ni A4 na A5 kwa data na saa; Kwenye Mega ya Arduino pini ni D20 na D21 kwa data na saa; Na ikiwa unatumia Pro Mini-inayofaa pini ni A4 na A5 kwa data na saa, ambayo ni sawa na pini kuu.

Moduli ya DS1307

Ikiwa una moduli ya DS1307 utahitaji kuziunganisha waya kwa bodi, au kuuzia kwenye pini za vichwa vya kichwa ili uweze kutumia waya za kuruka. Kisha unganisha pini za SCL na SDA kwenye Arduino yako, na pini ya Vcc kwenye pini ya 5V na GND hadi GND.

Moduli ya DS3231

Kuunganisha moduli hii ni rahisi kwani pini za kichwa zimewekwa kwenye ubao kwenye kiwanda. Unaweza tu kukimbia waya za kuruka tena kutoka SCL na SDA hadi Arduino na tena kutoka kwa pini za moduli ya Vcc na GND hadi 5V au 3.3. V na GND ya bodi yako. Walakini hizi zimerudiwa kwa upande mwingine kwa kuuzia waya zako mwenyewe. Moduli hizi zote mbili zina vipinga-nguvu vinavyohitajika vya kuvuta, kwa hivyo hauitaji kuongeza yako mwenyewe. Kama vifaa vyote vilivyounganishwa na basi ya I2C, jaribu kuweka urefu wa waya za SDA na SCL kwa kiwango cha chini.

Hatua ya 2: Kusoma na Kuandika Wakati Kutoka kwa Moduli yako ya RTC

Mara tu ukiunganisha moduli yako ya RTC. ingiza na upakie mchoro ufuatao. Ingawa maelezo na kazi kwenye mchoro hurejelea DS3231 tu, nambari pia inafanya kazi na DS1307.

# pamoja na "Wire.h" #fafanua DS3231_I2C_ADDRESS 0x68 // Badilisha nambari za kawaida za desimali kuwa nambari ya nambari iliyosimbwa kwa nambari decToBcd (byte val) {kurudi ((val / 10 * 16) + (val% 10)); } // Kubadilisha nambari iliyodhibitiwa ya binary kuwa nambari za kawaida za decimal byte bcdToDec (byte val) {kurudi ((val / 16 * 10) + (val% 16)); } usanidi batili () {Wire.begin (); Kuanzia Serial (9600); // weka wakati wa kwanza hapa: // sekunde DS3231, dakika, masaa, siku, tarehe, mwezi, mwaka // setDS3231 wakati (30, 42, 21, 4, 26, 11, 14); } batili setDS3231muda (baiti ya pili, dakika ya ka, saa ya ka, siku ya ByteWeek, siku ya byteOfMonth, mwezi wa byte, mwaka wa byte) {// huweka data ya wakati na tarehe kwa DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Andika waya (0); // weka pembejeo inayofuata kuanza sajili ya sekunde Wire.write (decToBcd (pili)); // seti sekunde Wire.write (decToBcd (dakika)); // seti dakika Wire.write (decToBcd (saa)); // masaa yaliyowekwa Wire.write (decToBcd (dayOfWeek)); // siku iliyowekwa ya wiki (1 = Jumapili, 7 = Jumamosi) Wire.write (decToBcd (dayOfMonth)); // tarehe iliyowekwa (1 hadi 31) Wire.write (decToBcd (mwezi)); // kuweka mwezi Wire.write (decToBcd (mwaka)); // mwaka uliowekwa (0 hadi 99) Wire.endUsambazaji (); } batili kusomaDS3231 wakati (baiti * sekunde, baiti * dakika, saa * saa, siku * sikuOfWeek, ka * sikuOfMonth, byte * mwezi, mwaka * mwaka) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Andika waya (0); // weka pointer ya kujiandikisha DS3231 kwa 00h Wire. Ombi la Wire. Toka (DS3231_I2C_ADDRESS, 7); // omba ka saba za data kutoka DS3231 kuanzia daftari 00h * pili = bcdToDec (Wire.read () & 0x7f); * dakika = bcdToDec (Wire.read ()); * saa = bcdToDec (Wire.read () & 0x3f); * sikuOfWeek = bcdToDec (Wire.read ()); * sikuOfMonth = bcdToDec (Wire.read ()); * mwezi = bcdToDec (Wire.read ()); * mwaka = bcdToDec (Wire.read ()); } batili ya kuonyeshaTime () {byte sekunde, dakika, saa, sikuOfWeek, sikuOfMonth, mwezi, mwaka; // pata data kutoka kwa DS3231 kusomaDS3231 wakati (na pili, & dakika, & saa, & dayOfWeek, & dayOfMonth, & month, & year); // tuma kwa mfuatiliaji wa serial Serial.print (saa, DEC); // badilisha ubadilishaji wa baiti kuwa nambari ya decimal wakati inavyoonyeshwa Serial.print (":"); ikiwa (dakika <10) {Serial.print ("0"); } Serial.print (dakika, DEC); Serial.print (":"); ikiwa (pili <10) {Serial.print ("0"); } Serial.print (pili, DEC); Serial.print (""); Serial.print (sikuOfMonth, DEC); Serial.print ("/"); Serial.print (mwezi, DEC); Serial.print ("/"); Serial.print (mwaka, DEC); Serial.print ("Siku ya wiki:"); kubadili (dayOfWeek) {kesi 1: Serial.println ("Jumapili"); kuvunja; kesi ya 2: Serial.println ("Jumatatu"); kuvunja; kesi ya 3: Serial.println ("Jumanne"); kuvunja; kesi ya 4: Serial.println ("Jumatano"); kuvunja; kesi ya 5: Serial.println ("Alhamisi"); kuvunja; kesi ya 6: Serial.println ("Ijumaa"); kuvunja; kesi ya 7: Serial.println ("Jumamosi"); kuvunja; }} kitanzi batili () {displayTime (); // onyesha data ya saa halisi kwenye Monitor Serial, kuchelewesha (1000); // kila sekunde }

Kunaweza kuwa na nambari nyingi, hata hivyo hugawanyika vizuri kuwa sehemu zinazodhibitiwa.

Kwanza inajumuisha maktaba ya Waya, ambayo hutumiwa kwa mawasiliano ya basi ya I2C, ikifuatiwa na kufafanua anwani ya basi ya RTC kama 0x68. Hizi zinafuatwa na kazi mbili ambazo hubadilisha nambari za desimali kuwa BCD (decimal-coded decimal) na kinyume chake. Hizi ni muhimu kwani RTC IC hufanya kazi katika BCD sio decimal.

Seti ya kaziDS3231time () hutumiwa kuweka saa. Kutumia ni rahisi sana, rahisi kuingiza maadili kutoka mwaka hadi pili, na RTC itaanza kutoka wakati huo. Kwa mfano ikiwa unataka kuweka tarehe na wakati ufuatao - Jumatano Novemba 26, 2014 na 9:42 jioni na sekunde 30 - utatumia:

setDS3231 wakati (30, 42, 21, 4, 26, 11, 14);

Hatua ya 3:

Kumbuka kuwa wakati umewekwa kwa kutumia saa ya masaa 24, na paramter ya nne ni "siku ya wiki". Hii iko kati ya 1 na 7 ambayo ni Jumapili hadi Jumamosi mtawaliwa. Vigezo hivi ni maadili ya kaiti ikiwa unapeana anuwai zako mwenyewe.

Mara tu utakapoendesha kazi mara moja ni busara kuipachika na // na kupakia nambari yako tena, kwa hivyo haitaweka tena wakati mara tu umeme umepigwa baiskeli au uwekaji wa mdhibiti mdogo. Kusoma wakati unaounda RTC yako ni rahisi tu, kwa kweli mchakato unaweza kufuatwa vizuri ndani ya kipindi cha kuonyeshaTime (). Utahitaji kufafanua vigeuzi saba vya ka ili kuhifadhi data kutoka kwa RTC, na hizi zinaingizwa kwenye kazi readDS3231time (). Kwa mfano ikiwa anuwai yako ni:

ka pili, dakika, saa, sikuOfWeek, sikuOfMonth, mwezi, mwaka;

… Ungewaburudisha na data ya sasa kutoka RTC kwa kutumia:

somaDS3232time (na ya pili, & dakika, & saa, & sikuOfWeek, & dayOfMonth, & month, & year);

Halafu unaweza kutumia vigeugeu kwa kadiri uonavyo inafaa, kutoka kwa kutuma wakati na tarehe kwa mfuatiliaji wa serial kama vile mchoro wa mfano - kubadilisha data kuwa fomu inayofaa kwa kila aina ya vifaa vya pato.

Ili tu kuangalia kila kitu kinafanya kazi, ingiza wakati na tarehe inayofaa kwenye mchoro wa maandamano, pakia, toa maoni juu ya kazi ya setDS3231time () na uipakie tena. Kisha fungua mfuatiliaji wa serial, na unapaswa kupewa onyesho la wakati na tarehe ya sasa.

Kutoka wakati huu sasa una vifaa vya programu ya kuweka data na kuipata kutoka kwa moduli yako ya saa halisi, na tunatumahi una uelewa wa jinsi ya kutumia moduli hizi zisizo na gharama kubwa.

Unaweza kujifunza zaidi juu ya saa za wakati halisi kutoka kwa wavuti ya mtengenezaji - DS1307 na DS3231.

Chapisho hili limeletwa kwako na pmdway.com - kila kitu kwa watengenezaji na wapenda umeme, na uwasilishaji wa bure ulimwenguni.

Ilipendekeza: