Arduino library upang suriin ang petsa at temperatura ng pinagsamang DS3231 sa pamamagitan ng I2C

Arduino library upang suriin ang petsa at temperatura ng pinagsamang DS3231 sa pamamagitan ng I2C

Arduino library upang suriin ang petsa at temperatura ng pinagsamang DS3231 sa pamamagitan ng I2C

UPDATED: Bisitahin din ang bago library upang pamahalaan ang petsa at oras gamit ang DS3231 RTC module at Arduino na may mga pagpapabuti tulad ng pana-panahong oras.

Ang pagpapatakbo ng IC de mga real time na orasan (RTC) pinakasikat na kinokontrol gamit ang bus I2C Kadalasan ito ay halos magkatulad. Bukod sa Wire library de Arduino lubos na pinapasimple ang mga komunikasyon sa mga device Dalawang-wire na Serial Interface (TWI), I2C, tiyak.

Talaan ng Nilalaman

    Sa malawak na pagsasalita, ang proseso ay binubuo ng

    1. Magsimula ng mga komunikasyon bilang alipin o master (itinakda bilang default) gamit ang function Wire.begin(address). Kung ang "address" ay tinanggal, ang mga komunikasyon ay magsisimula sa μC ang guro ng bus I2C.

    2. I-activate ang komunikasyon I2C gamit ang device sa pamamagitan ng memory address kung saan ito matatagpuan, gamit ang command Wire.beginTransmission(address).

    3. Sumulat ng isang order sa bus I2C upang sabihin sa device ang operasyon na gusto mong gawin nito, gamit Wire.write(command), kung saan ang "order" ay ang operation code.

    4. Huwag paganahin ang mga komunikasyon upang mailabas ang bus I2C may pagpapaandar Wire.endTransmission ().

    5. Hilingin sa device na magpadala ng isang tiyak na halaga ng data na tumutugma sa operasyon na hiniling (sa kasong ito, ang petsa at oras) kasama ang function Wire.requestFrom(address,halaga).

    6. Maghintay para sa data na hiniling na may function na magagamit para sa pagbabasa Magagamit ang wire (), na nagbabalik ng bilang ng data na natanggap na at maaaring basahin.

    7. Basahin ang data na ipinadala ng device (ang real time na orasan, sa kasong ito) gamit ang function Wire.read() kasing dami ng mga byte na ipinahiwatig Magagamit ang wire () magagamit na iyon

    8. Karaniwang ipinapadala ang data sa mga napaka-compact na format kaya malamang na kakailanganing bigyang-kahulugan ang data na natanggap sa paraang tumutugma sa representasyon ng data na ginawa sa program na gumagamit ng device.

    Tungkol sa DS3231 (at mga katugma sa parehong serye, tulad ng DS3232) at ang interpretasyon ng data, ayon sa mga pagtutukoy ng pinagsamang, halimbawa, ang mga halaga ng iba't ibang mga digit na kumakatawan sa oras ay kinakatawan sa binary coded decimal (BCD) na magiging mas maginhawang ipahayag bilang isang decimal na halaga (a byte) na gagamitin sa Arduino

    Sa parehong linya, ang temperatura ay ipinahayag bilang isang byte in pandagdag ng dalawa para sa bahaging integer at dalawang bit para sa hakbang, na may resolusyon na isang quarter ng isang degree, ng bahaging decimal. Ang mga ito at iba pang aspeto ng representasyon ng data sa orasan ay lubusang tinalakay sa code ng library sa ibaba. DS3231

    Upang suriin ang temperatura sa library na ito, gamitin lamang ang pamamaraan read_temperature() ng bagay DS3231 instantiated sa simula. Upang basahin ang petsa at oras, unang nilo-load ang mga ito at pagkatapos ay hinihiling sa isa sa mga format (compact, human...) na available para sa iba't ibang gamit, na nakadokumento sa header na dokumento ng code library sa ibaba.

    Ang sumusunod ay halimbawang code upang ipakita kung paano gamitin ang library. Tulad ng nabanggit sa itaas, ang temperatura ay binabasa lamang gamit ang function read_temperature() ng object ng klase DS3231 ngunit, upang huwag pansinin ang mga error sa pagbabasa, dalawang constants ang ginagamit na nag-iimbak, ayon sa pagkakabanggit, ang maximum at minimum na temperatura ng device ayon sa data sheet at kung saan ay binabasa na may kaukulang mga function.

    Ang pagbabasa ng temperatura ay isinasagawa sa dalawang yugto: una ang halaga ay na-load, upang ang iba't ibang paggamit ng petsa o oras ay magiging pare-pareho (hindi sila magpapakita ng mas mataas na halaga sa mga hindi kanais-nais na mga kaso) at pangalawa ito ay ginagamit ayon sa format na ay kailangan. Ang halimbawang programa (na hindi masyadong praktikal, bagama't ipinapaliwanag nito ang lahat ng mga posibilidad) ay nagpapakita ng lahat ng magagamit na mga format

    • Ang pag-andar date_time_value() na nagbabalik ng isang pointer sa isang array tangke (bytes) na naglalaman ng pitong numerical values ​​na kumakatawan sa petsa at oras sa isang orasan DS3231 na-convert sa decimal (sila ay nasa BCD sa device)

    • Gamit ang function weekday_number() Ang isang halaga ay nakuha na tumutugma sa bilang ng araw ng linggo simula sa Linggo. Upang ipakita ito bilang teksto, isang array ang ginagamit at ang isa ay ibabawas upang magsimula sa index zero, Linggo.

    • Upang kumonsulta sa petsa sa isang "lokal" (Spanish) na format, gamitin ang function human_date(), na nagbabalik ng pointer sa isang string kung saan ang petsa ay kinakatawan sa DD/MM/YYYY na format, kung saan ang DD ay ang araw na kinakatawan ng 2 digit, MM ang buwan na may 2 digit at YYYY ang taon na may 4 na digit.

    • Ang pag-andar human_hour() ibinabalik ang oras sa format na hh:mm:ss, na ang hh ay ang oras (sa 24 na format) na kinakatawan ng 2 digit, ang mm ay ang mga minuto na may 2 digit at ss ang mga segundo na may 2 digit.

    • Upang madaling gamitin ang petsa at oras sa log file ang function ay na-program compact_date_time(), na naghahatid ng halaga ng petsa at oras sa format na YYMMDDhhmmss na ang AA ay ang taon na kinakatawan ng huling 2 digit, MM ang buwan na may 2 digit, DD ang araw na may 2 digit, hh ang oras (sa 24 na format) na may 2 digit, mm ang minuto na may 2 digit at ss ang mga segundo na may 2 digit. Ang format na ito, kahit na ito ay teksto, ay tumatagal ng kaunting espasyo at nagbibigay-daan para sa napakasimpleng pagkakasunud-sunod ng alpabeto.

    • Ang pag-andar date_time_MySQL() nagsisilbing ipakita ang petsa at oras sa format na ginamit ng database manager MySQL (o ang bago at mas malaya MariaDB) YYYY-MM-DD hh:mm:ss, kung saan ang YYYY ay ang taon na kinakatawan ng 4 na digit, ang MM ay ang buwan na may 2 digit, ang DD ay ang araw na may 2 digit, ang hh ay ang oras (sa 24 na format) na may 2 digit , mm ay ang mga minuto na may 2 digit at segundo na may 2 digit.

    Bagama't maraming mga format kung saan kinakatawan ang petsa at oras, maaaring wala doon ang kailangan mo, ngunit tiyak na batay sa isa sa mga umiiral na at gamit ito bilang isang halimbawa, magiging madaling magdagdag ng bagong paraan ayon sa iba pang mga pagtutukoy. Mangyaring, kung magdadagdag ka ng mga bagong function, ibahagi ang code (ilabas ito!) at ipaliwanag sa amin kung paano ito gumagana, upang paunti-unti naming mapahusay ang library. Salamat!

    Ang output ng halimbawang programa sa itaas ay maaaring katulad ng ipinapakita sa sumusunod na larawan: isang listahan ng 7 halaga (segundo, minuto, oras, araw ng linggo, araw ng buwan, buwan at taon) ang petsa at ang oras na ipinahayag sa paraang "tao" (ayon sa istilong Espanyol) ang oras bilang isang buong numero sa apat na digit na format ng orasan, ang petsa at oras sa format ng database MySQL, petsa at oras sa compact na format (para sa mga tala) at ang panloob na temperatura ng DS3231.

    Arduino console output library real time clock (RTC) at temperatura DS3231 sa pamamagitan ng I2C bus

    Maaaring Na-miss Mo