Sisällysluettelo:
- Vaihe 1: Yhdistä moduuli Arduinoon
- Vaihe 2: Ajan lukeminen ja kirjoittaminen RTC -moduulista
- Vaihe 3:
Video: DS1307- ja DS3231-reaaliaikaisten kellomoduulien käyttäminen Arduinolla: 3 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Saamme jatkuvasti pyyntöjä DS1307- ja DS3231-reaaliaikaisten kellomoduulien käyttämisestä Arduinon kanssa eri lähteistä-joten tämä on ensimmäinen kahden osan opetusohjelma niiden käytöstä. Tätä Arduino-opetusohjelmaa varten meillä on kaksi reaaliaikaista kellomoduulia, joista toinen perustuu Maxim DS1307: een (neliömoduuli) ja DS3231 (suorakulmainen moduuli).
Reaaliaikaisten kellomoduulien IC: iden välillä on kaksi pääasiallista eroa, mikä on ajan pitämisen tarkkuus. Ensimmäisessä moduulissa käytetty DS1307 toimii erittäin hyvin, mutta ulkoinen lämpötila voi vaikuttaa DS1307: n sisäistä laskuria käyttävän oskillaattoripiirin taajuuteen.
Tämä saattaa kuulostaa ongelmalta, mutta yleensä se johtaa siihen, että kello on pois päältä noin viisi minuuttia kuukaudessa. DS3231 on paljon tarkempi, koska siinä on sisäinen oskillaattori, joka ei vaikuta ulkoisiin tekijöihin - ja siten se on tarkka enintään muutaman minuutin vuodessa. Jos sinulla on DS1307-moduuli- älä tunne pahaa, se on silti hyvä arvolevy ja palvelee sinua hyvin. Molemmissa moduuleissa tarvitaan vara -akku.
On hyvä idea ostaa uusi CR2032 -akku ja asentaa se moduuliin. Kellonajan ja päivämäärän seurannan lisäksi näissä moduuleissa on myös pieni EEPROM, hälytystoiminto (vain DS3231) ja kyky tuottaa eri taajuuksisia neliöaaltoja-joista kaikista tulee toinen opetusohjelma.
Vaihe 1: Yhdistä moduuli Arduinoon
Molemmat moduulit käyttävät I2C -väylää, mikä tekee liitännästä erittäin helppoa.
Ensin sinun on tunnistettava, mitä Arduino- tai yhteensopivien korttien nastoja käytetään I2C -väylään - nämä tunnetaan nimillä SDA (tai data) ja SCL (tai kello). Arduino Unossa tai yhteensopivilla levyillä nämä nastat ovat A4 ja A5 dataa ja kelloa varten; Arduino Megassa nastat ovat D20 ja D21 dataa ja kelloa varten; ja jos käytät Pro Mini -yhteensopivaa, nastat ovat A4 ja A5 tietoja ja kelloa varten, jotka ovat yhdensuuntaisia päätappien kanssa.
DS1307 -moduuli
Jos sinulla on DS1307 -moduuli, sinun on juotettava johdot levylle tai juotettava joihinkin sisäisiin otsikkotappeihin, jotta voit käyttää hyppyjohtimia. Liitä sitten SCL- ja SDA -nastat Arduinoosi ja Vcc -nasta 5 V: n napaan ja GND GND: hen.
DS3231 -moduuli
Tämän moduulin liittäminen on helppoa, koska otsikkotapit on asennettu levylle tehtaalla. Voit yksinkertaisesti käyttää hyppyjohtoja uudelleen SCL: stä ja SDA: sta Arduinoon ja uudelleen moduulin Vcc- ja GND -nastoista korttisi 5 V: n tai 3.3. V: n ja GND: n. Nämä ovat kuitenkin päällekkäisiä toisella puolella omien johtojen juottamiseksi. Molemmissa moduuleissa on vaaditut vetovastukset, joten sinun ei tarvitse lisätä omia. Kuten kaikki I2C -väylään kytketyt laitteet, yritä pitää SDA- ja SCL -johtimien pituus mahdollisimman pienenä.
Vaihe 2: Ajan lukeminen ja kirjoittaminen RTC -moduulista
Kun olet kytkenyt RTC -moduulin. kirjoita ja lähetä seuraava luonnos. Vaikka luonnoksen huomautukset ja toiminnot koskevat vain DS3231: tä, koodi toimii myös DS1307: n kanssa.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Muunna normaalit desimaaliluvut binäärikoodatuksi desimaalitavuiksi decToBcd (tavu val) {return ((val/10*16) + (val%10)); } // Muunna binäärikoodattu desimaali normaaliksi desimaaliluvuksi tavuksi bcdToDec (tavu val) {return ((val/16*10) + (val%16)); } void setup () {Wire.begin (); Sarja.alku (9600); // Aseta aloitusaika tähän: // DS3231 sekuntia, minuuttia, tuntia, päivä, päivämäärä, kuukausi, vuosi // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (tavu sekunti, tavu minuutti, tavu tunti, tavu dayOfWeek, tavu dayOfMonth, tavu kuukausi, tavuvuosi) {// asettaa aika- ja päivämäärätiedot DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // aseta seuraava tulo aloittamaan sekuntirekisteristä Wire.write (decToBcd (toinen)); // aseta sekunnit Wire.write (decToBcd (minuutti)); // aseta minuutit Wire.write (decToBcd (tunti)); // aseta tunnit Wire.write (decToBcd (dayOfWeek)); // aseta viikonpäivä (1 = sunnuntai, 7 = lauantai) Wire.write (decToBcd (dayOfMonth)); // aseta päivämäärä (1-31) Wire.write (decToBcd (kuukausi)); // aseta kuukausi Wire.write (decToBcd (vuosi)); // aseta vuosi (0-99) Wire.endTransmission (); } void readDS3231time (tavu *sekunti, tavu *minuutti, tavu *tunti, tavu *dayOfWeek, tavu *dayOfMonth, tavu *kuukausi, tavu *vuosi) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // aseta DS3231 -rekisteriosoittimen arvoksi 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // pyytää seitsemää tavua dataa DS3231: ltä alkaen rekisteristä 00h *second = bcdToDec (Wire.read () & 0x7f); *minuutti = bcdToDec (Wire.read ()); *tunti = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *kuukausi = bcdToDec (Wire.read ()); *vuosi = bcdToDec (Wire.read ()); } void displayTime () {tavu sekunti, minuutti, tunti, dayOfWeek, dayOfMonth, kuukausi, vuosi; // noutaa tietoja DS3231 -lukemasta DS3231time (& toinen, & minuutti, & tunti, & dayOfWeek, & dayOfMonth, & month, & year); // lähetä se sarjamonitorille Serial.print (tunti, DEC); // muuntaa tavumuuttujan desimaaliluvuksi Serial.print (":"); if (minuutti <10) {Sarjajälki ("0"); } Sarjajälki (minuutti, DEC); Serial.print (":"); jos (toinen <10) {Sarjajälki ("0"); } Sarjajälki (toinen, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Sarjanjälki (kuukausi, DEC); Serial.print ("/"); Sarjanjälki (vuosi, DEC); Serial.print ("Viikonpäivä:"); switch (dayOfWeek) {tapaus 1: Serial.println ("Sunday"); tauko; tapaus 2: Serial.println ("maanantai"); tauko; tapaus 3: Serial.println ("tiistai"); tauko; tapaus 4: Serial.println ("keskiviikko"); tauko; tapaus 5: Serial.println ("torstai"); tauko; tapaus 6: Serial.println ("perjantai"); tauko; tapaus 7: Serial.println ("lauantai"); tauko; }} void loop () {displayTime (); // näyttää reaaliaikaiset kellotiedot sarjamonitorissa, viive (1000); // joka sekunti }
Koodia voi olla paljon, mutta se hajoaa hyvin hallittaviin osiin.
Se sisältää ensin Wire -kirjaston, jota käytetään I2C -väylän viestintään, ja sen jälkeen RTC: n väyläosoite on 0x68. Näitä seuraa kaksi toimintoa, jotka muuntavat desimaaliluvut BCD: ksi (binäärikoodatut desimaalit) ja päinvastoin. Nämä ovat välttämättömiä, koska RTC -IC: t toimivat BCD: ssä eivätkä desimaalit.
Toimintoa setDS3231time () käytetään kellon asettamiseen. Sen käyttäminen on erittäin helppoa, yksinkertaista lisätä arvot vuodesta toiseen toiseen, ja RTC alkaa siitä lähtien. Jos haluat esimerkiksi asettaa seuraavan päivämäärän ja kellonajan - keskiviikko 26. marraskuuta 2014 ja kello 21.42 ja 30 sekuntia - käytä seuraavaa:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
Vaihe 3:
Huomaa, että aika asetetaan käyttämällä 24 tunnin aikaa ja neljäs parametri on”viikonpäivä”. Tämä on välillä 1 ja 7 eli sunnuntaista lauantaihin. Nämä parametrit ovat tavuarvoja, jos korvaat omat muuttujasi.
Kun olet suorittanut toiminnon kerran, on viisasta liittää se // -merkkiin ja ladata koodi uudelleen, joten se ei nollaa aikaa, kun virta on kytketty tai mikrolukija on nollattu. Ajan lukeminen RTC: stä on yhtä yksinkertaista, itse asiassa prosessia voidaan seurata siististi displayTime () -toiminnon sisällä. Sinun on määritettävä seitsemän tavun muuttujat RTC: n tietojen tallentamiseksi, ja ne lisätään sitten funktioon readDS3231time (). Jos muuttujasi ovat esimerkiksi:
tavu sekunti, minuutti, tunti, dayOfWeek, dayOfMonth, kuukausi, vuosi;
… Päivität ne RTC: n nykyisillä tiedoilla käyttämällä:
readDS3232time (& toinen, & minuutti, & tunti, & dayOfWeek, & dayOfMonth, & month, & year);
Sitten voit käyttää muuttujia parhaaksi katsomallasi tavalla kellonajan ja päivämäärän lähettämisestä sarjavalvontaan esimerkkiluonnoksessa - tietojen muuntamiseen sopivaan muotoon kaikenlaisille tulostuslaitteille.
Tarkista vain, että kaikki toimii, kirjoita sopiva aika ja päivämäärä esitysluonnokseen, lataa se, kommentoi setDS3231time () -toimintoa ja lataa se uudelleen. Avaa sitten sarjamonitori, ja sinulle tulee näyttää käynnissä oleva kellonaika ja päivämäärä.
Tästä lähtien sinulla on nyt ohjelmistotyökalut, joilla voit asettaa tietoja ja noutaa ne reaaliaikaisesta kellomoduulistasi, ja toivomme, että ymmärrät, miten näitä edullisia moduuleja käytetään.
Voit oppia lisää tietyistä reaaliaikaisista kello-IC: istä valmistajan verkkosivustolta-DS1307 ja DS3231.
Tämän viestin toi sinulle pmdway.com - kaikki valmistajille ja elektroniikan harrastajille, ilmainen toimitus maailmanlaajuisesti.
Suositeltava:
20x4 I2C -merkkisen LCD -näytön käyttäminen Arduinolla: 6 vaihetta
20x4 I2C -merkkisen LCD -näytön käyttäminen Arduinon kanssa: Tässä yksinkertaisessa opetusohjelmassa opimme käyttämään 20x4 I2C -merkkistä LCD -näyttöä Arduino Unon kanssa yksinkertaisen tekstin näyttämiseen " Hei maailma. Katso video
4 -numeroisen ja 7 -segmenttisen näytön käyttäminen Arduinolla: 7 vaihetta
4- ja 7 -segmenttinäytön käyttäminen Arduinon kanssa: Tässä opetusohjelmassa näytän sinulle, kuinka voit käyttää 7 -segmenttistä 4 -numeroista näyttöä arduinoa käyttämällä. Jotkut perusasiat, jotka haluaisin huomauttaa, on se, että tämä vie lähes kaikki digitaaliset nastat arduino uno, Leonardo, levyt, joissa on 13 digitaalista
IR -esteiden välttämisen anturin käyttäminen Arduinolla: 4 vaihetta
IR -esteen välttämisanturin käyttäminen Arduinolla: Hei kaikki, Tässä artikkelissa kirjoitan kuinka vältetään välttämättömyyden IR -anturia Arduinossa. Tarvittavat komponentit: IR -esteen välttämisanturi Arduino Nano V.3 Jumpe -johto USBmini Tarvittava ohjelmisto: Arduino IDE
PCF8574 -reppujen käyttäminen nestekidenäytöillä ja Arduinolla: 8 vaihetta
PCF8574 -reppujen käyttäminen nestekidenäytöillä ja Arduinolla: LCD -moduulien käyttäminen Arduino -laitteesi kanssa on suosittua, mutta johdotusten määrä vaatii aikaa ja kärsivällisyyttä liittääksesi ne oikein - ja käyttää myös paljon digitaalisia lähtötappeja. Siksi rakastamme näitä sarjareppumoduuleja - ne on asennettu
Kappaleiden toistaminen Arduinolla ADC: n ja PWM: n käyttäminen Flyback -muuntajassa tai kaiuttimessa: 4 vaihetta
Toista kappaleita Arduinolla käyttämällä ADC: tä PWM: ään Flyback -muuntajassa tai kaiuttimessa: Hei kaverit, Tämä on toinen osa toisesta ohjeistuksestani (se oli paljon vaikeaa). Pohjimmiltaan tässä projektissa olen käyttänyt Arduinon ADC: tä ja AJASTIMIA Muunna äänisignaali PWM -signaaliksi.Tämä on paljon helpompaa kuin edellinen Instructa