DS3231 - бодит цагийн цагны холболт. DS3231 болон AVR микроконтроллерийн SDA ба SCL зүү дээрх цаг, өөр өөр Arduino самбар дээрх цаг

31.01.2023 Хөтөчүүд

DS3231 чип нь өндөр нарийвчлалтай RTC бодит цагийн цаг бөгөөд температурыг нөхөх кварцын осциллятортой бөгөөд жилд ердөө ±2 минутаар цагийн зөрүүтэй байдаг. Нэмж дурдахад дохиоллын функцийг хэрэгжүүлсэн бөгөөд тасалдлын гаралт бас бий. Цагийг бэхэлгээний элемент, батерейны тасалгаа бүхий бэлэн Arduino модулийн хэлбэрээр худалдан авч болно.

Би модулийг энд захиалсан. Диаграммыг доорх зурагт үзүүлэв.


Микро схемд өргөн хэрэглэгддэг. Стандарт (100 кГц) ба өндөр (400 кГц) өгөгдлийн хурдыг дэмждэг. I2C автобус дээрх микро схемийн хаяг (7 бит) нь 1101000. Үүнээс гадна модуль нь диаграммд харагдахгүй I2C санах ойтой (24C32).

Эрчим хүчний горимууд

Микро схемийн тэжээлийн хүчдэл нь 2.3...5.5V-ийн хүрээнд байж болно, хоёр цахилгаан шугам байдаг, гадаад эх үүсвэр (Vcc шугам), түүнчлэн зай (Vbat). Гадаад эх үүсвэрийн хүчдэлийг байнга хянаж байх ба Vpf=2.5V босгоос доош унах үед зайны шугам руу шилждэг. Дараах хүснэгтэд цахилгааны шугам хооронд шилжих нөхцөлийг харуулав.

Цагны нарийвчлал нь орчны температурыг хянах замаар хадгалагдана. Микро схем нь цагийн генераторын давтамжийг тохируулах дотоод процедурыг эхлүүлдэг бөгөөд тохируулгын хэмжээг температур ба давтамжийн тусгай график ашиглан тодорхойлно. Процедур нь тэжээл өгсний дараа эхэлж, 64 секунд тутамд ажиллана.

Цэнэг хэмнэхийн тулд зайг холбосон үед (Vbat шугамд хүчдэл өгдөг) Vcc шугам дээрх хүчдэл Vpf босго хэмжээнээс хэтрэх хүртэл эсвэл микро схемийн зөв хаягийг дамжуулах хүртэл цаг үүсгэгч ажиллахгүй. I2C интерфейс. Цагийн генераторыг эхлүүлэх хугацаа нэг секундээс бага байна. Цахилгааныг асаасан (Vcc) эсвэл хаягийг I2C интерфейсээр хүлээн авснаас хойш ойролцоогоор 2 секундын дараа давтамжийг засах процедур эхэлнэ. Цаг үүсгэгч ажиллаж эхэлмэгц Vcc эсвэл Vbat байгаа цагт үргэлжлүүлэн ажиллана. Анх удаа асаахад огноо, цагийн бүртгэл шинэчлэгдэж, дараах утгатай байна: 01/01/00 – 01 – 00/00/00 (өдөр/сар/жил/ – долоо хоногийн өдөр – цаг/минут /секунд).

3.63V батерейгаар тэжээгддэг одоогийн хэрэглээ нь I2C интерфейсээр өгөгдөл дамжуулахгүй тохиолдолд 3 мкА байна. Гадны 5.5V тэжээлийн хангамж, өндөр I2C өгөгдөл дамжуулах хурдыг ашиглах үед гүйдлийн хамгийн их зарцуулалт 300 мкА хүрч болно.

Гадаад дахин тохируулах функц

RST шугамыг гаднаас дахин тохируулахад ашиглаж болохоос гадна бага хүчдэлийн дохиоллын функцтэй. Шугамыг дотоод резистороор өндөрт татдаг тул гаднаас татах шаардлагагүй. Гадны дахин тохируулах функцийг ашиглахын тулд RST шугам болон нийтлэг утас хооронд товчлуурыг холбож болно; микро схем нь контактын үсрэх хамгаалалттай. Vcc тэжээлийн хүчдэл Vpf босго утгаас доош унах үед дохиоллын функц идэвхждэг бол RST шугамыг логик бага түвшинд тохируулна.

DS3231 бүртгэлийн тодорхойлолт

Доорх хүснэгтэд бодит цагийн цагийн бүртгэлүүдийн жагсаалтыг харуулав.

ХаягD7D6D5D4D3D2D1D0Чиг үүрэгХязгаарлалт
0x000 10 секундСекундСекунд00-59
0x010 10 минутминутминут00-59
0x020 12/24 ҮДЭЭС ӨМНӨ ҮДЭЭС ХОЙШ10 цагЦагүзэх1-12 + AM/PM эсвэл 00-23
10 цаг
0x030 0 0 0 0 ӨдөрДолоо хоногийн өдөр1-7
0x040 0 10 дахьТооогноо01-31
0x05Зуун0 0 10 сарСарСар/зуун01-12 + зуун
0x0610 жилЖилОн жилүүд00-99
0x07A1M110 секундСекундСекунд, 1 дэх дохиолол00-59
0x08A1M210 минутминутМинут, 1 дэх дохиолол00-59
0x09A1M312/24 ҮДЭЭС ӨМНӨ ҮДЭЭС ХОЙШ10 цагЦагЦаг, 1-р сэрүүлэг1-12 + AM/PM эсвэл 00-23
10 цаг
0х0АA1M4DY/DT10 дахьӨдөрДолоо хоногийн өдөр, 1 дэх дохиолол1-7
ТооОгноо, 1 дэх дохиолол01-31
0x0BA2M210 минутминутМинут, 2 дахь дохиолол00-59
0х0СA2M312/24 ҮДЭЭС ӨМНӨ ҮДЭЭС ХОЙШ10 цагЦагЦаг, 2 дахь сэрүүлэг1-12 + AM/PM эсвэл 00-23
10 цаг
0x0DA2M4DY/DT10 дахьӨдөрДолоо хоногийн өдөр, 2 дахь дохиолол1-7
ТооОгноо, 2 дахь дохиолол01-31
0x0EEOSCBBSQWХӨВRS2RS1INTCNA2IEA1IEТохиргооны бүртгэл (Хяналт)
0x0FO.S.F.0 0 0 EN32 кГцBSYA2FA1FСтатусын бүртгэл
0х10ТЭМДЭГЛЭХӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛХөгшрөлтийн офсет бүртгэл
0x11ТЭМДЭГЛЭХӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛӨГӨГДӨЛТемпературын бүртгэл, өндөр байт
0х12ӨГӨГДӨЛӨГӨГДӨЛ0 0 0 0 0 0 Температурын бүртгэл, бага байт

Цагийн мэдээллийг хоёртын аравтын бутархай хэлбэрээр хадгалдаг, өөрөөр хэлбэл аравтын тооны цифр бүрийг (0-ээс 9 хүртэл) 4 битийн бүлэг хэлбэрээр илэрхийлдэг. Нэг байтын хувьд бага хазах нь нэгийг, өндөр хазах нь арав, гэх мэт. 0x00-0x06 хаягтай регистрүүдэд цагийг тоолох бөгөөд цаг тоолохын тулд та 12 эсвэл 24 цагийн горимыг сонгож болно. Цагийн бүртгэлийн 6-р битийг (хаяг 0x02) тохируулах нь 12 цагийн горимыг тохируулах бөгөөд 5-р бит нь өдрийн цаг, 1 утга нь үдээс хойш (PM), 0 нь үдээс хойш (AM) тохирч байна. 6-р битийн тэг утга нь 24 цагийн горимтой тохирч байгаа бөгөөд энд 5-р бит нь цагийг тоолоход оролцдог (утга 20-23).

Долоо хоногийн өдрийн бүртгэлийг шөнө дунд, 1-ээс 7 хүртэл, сарын бүртгэл (хаяг 0x05) нь Зууны битийг (7-р бит) агуулдаг бөгөөд жил тоолох регистр (хаяг 0x06) халихад 99-өөс 00 хүртэл шилждэг. .

DS3231 чип нь хоёр сэрүүлэгтэй цагийг хэрэгжүүлдэг бөгөөд 1-р сэрүүлгийг 0x07-0x0A хаягтай регистр ашиглан тохируулсан, 2-р сэрүүлгийн цагийг 0x0B-0x0D регистр ашиглан тохируулсан. A1Mx болон A2Mx битүүдийг дохиоллын янз бүрийн горимыг тохируулахад ашиглаж болно; битийг тохируулах нь харгалзах бүртгэлийг харьцуулах үйлдлээс хасдаг. Доорх хүснэгтэд янз бүрийн дохиоллын горимуудын битийн хослолыг харуулав.

Хүснэгтэд заагаагүй битийн хослолууд нь дохиоллын буруу ажиллахад хүргэдэг. Хэрэв DY/DT бит арилсан бол огнооны таарч (сарын өдөр) сэрүүлгийн цагийг хянаж, DY/DT битийг тохируулах үед долоо хоногийн өдрийн таарч байгаа эсэхийг шалгана.

Ихэнх функцууд нь хяналтын бүртгэлд тохируулагдсан байдаг. EOSC бит нь цаг үүсгэгчийн эхлэлийг хянадаг бөгөөд битийг дахин тохируулах нь цаг үүсгэгчийг ажиллуулдаг. Битийг тохируулах нь генераторыг зогсооно, зөвхөн зайны горимд (Vbat). Гадны эх үүсвэрээс (Vcc) тэжээгддэг бол осциллятор нь EOSC битийн төлөвөөс үл хамааран үргэлж ажилладаг. Идэвхжүүлсэн үед анхдагч битийн утга нь 0 байна.

BBSQW битийг тохируулснаар INT/SQW гаралт (3-р зүү) нь батерейны тэжээлийн горимд ажиллах боломжтой бөгөөд гаднах тэжээл байхгүй үед. Битийг тэг болгох үед Vcc гадаад эх үүсвэрийн хүчдэл Vpf босго утгаас доогуур байвал INT/SQW гаралт 3-р төлөвт (идэвхгүй) орно. Эрчим хүч хэрэглэсний дараа анхдагч битийн утга нь 0 байна.

CONV бит нь албадан температурыг хэмжих үүрэгтэй; битийг тохируулах нь хувиргах процессыг эхлүүлдэг бөгөөд энэ үед цагны генераторын давтамжийг тохируулдаг; хэмжилтийн үр дүн нь 0x11, 0x12 хаягтай регистрүүдэд байрладаг. Өмнөх хөрвүүлэлт дууссан тохиолдолд л эхлүүлэх боломжтой бөгөөд эхлэхээсээ өмнө BSY-ийн завгүй тугийг шалгах хэрэгтэй. Температурыг албадан хувиргах нь дотоод 64 секундын давтамжийн тохируулгын мөчлөгт нөлөөлөхгүй. CONV битийг тохируулах нь BSY туг дээр 2 мс-д нөлөөлөхгүй. Хөрвүүлэлт дууссаны дараа CONV болон BSY битүүд автоматаар арилдаг.

RS2, RS1 битүүд нь INT/SQW гаралт дээр тэгш өнцөгт импульсийн давтамжийг (дөрвөлжин долгион) тохируулдаг. Анхдагчаар, идэвхжүүлсэн үед битүүдийг 1 гэж тохируулсан байна. Доорх хүснэгтэд битүүдийн боломжит хослолуудыг харуулав.

INTCN бит нь INT/SQW гаралтыг хянадаг. Хэрэв бит дахин тохируулагдсан бол гаралт дээр тэгш өнцөгт импульс (дөрвөлжин долгион) гарч ирэх бөгөөд давтамжийг RS2, RS1 битээр тохируулна. INTCN битийг тохируулах үед гаралт нь дохиоллын тасалдлыг үүсгэхэд ашиглагддаг. Анхдагч байдлаар, битийн утга нь 1. Гаралтын төрөл нь INT/SQW - нээлттэй ус зайлуулах хоолой, тиймээс үүнийг резистороор дамжуулан өндөр логик түвшинд татах шаардлагатай, идэвхтэй түвшин бага байна.

A1IE, A2IE битүүдийг тохируулах нь 1 ба 2 дахь дохиоллын дохионы тасалдлыг идэвхжүүлдэг. Битүүдийг дахин тохируулах, тасалдлыг идэвхгүй болгох. Өгөгдмөл утга нь 0 байна.

Статус бүртгэл нь үйл явдлын тугуудыг агуулдаг бөгөөд 32 кГц гаралтыг хянадаг. OSF туг нь цаг үүсгэгчийн төлөвийг илэрхийлдэг бөгөөд 1-ийн утга нь цаг үүсгэгч зогссон гэсэн үг бөгөөд энэ үйл явдал дараах тохиолдолд тохиолдож болно.

  • Эрчим хүч хэрэглэсний дараа анх удаа
  • Батерей эсвэл гадаад хүчдэл нь цаг үүсгэгчийг ажиллуулахад хангалтгүй
  • EOSC битийг зайны горимд тохируулснаар генератор унтардаг
  • Кристал осцилляторт нөлөөлөх гадны хүчин зүйлс (дуу чимээ, гоожих гэх мэт)

Нэгэнт тохируулсны дараа битийн утга өөрчлөгдөхгүй бөгөөд битийг гараар дахин тохируулах шаардлагатай.

EN32kHz битийг тохируулах нь 32 кГц гаралт (1-р зүү) дээр тэгш өнцөгт импульс (дөрвөлжин долгион) үүсгэх боломжийг олгодог бөгөөд импульсийн давтамж нь тогтмол бөгөөд 32.768 кГц-тэй тэнцүү байна. Битийг дахин тохируулах нь энэ функцийг идэвхгүй болгож, гаралтыг 3 дахь төлөвт шилжүүлнэ (оролтын өндөр эсэргүүцэл). Анхдагчаар, битийн утга нь 1; тэжээлийг хэрэглэсний дараа гаралт дээр импульс гарч ирнэ. Гаралтын төрөл нь 32 кГц нээлттэй ус зайлуулах суваг тул өндөр логик түвшинд татах шаардлагатай.

BSY-ийн завгүй туг нь температурыг хувиргах, цагийг тохируулах явцад тохируулагддаг. Хөрвүүлэлт дууссаны дараа туг дахин тохируулагдана.

Цаг тоолох регистр ба сэрүүлгийн бүртгэлийн утгууд таарч байвал A1F, A2F сэрүүлгийн тугуудыг тавьдаг. Хэрэв дохиоллын тасалдал A1IE, A2IE идэвхжсэн бол тасалдлын гаралт өгөгдсөн (INTCN бит тохируулагдсан) бол INT/SQW гаралт дээр тасалдлын дохио гарч ирнэ (логикийн өндөр түвшингээс доод түвшинд шилжих). 0 утгыг бичиж тугуудыг гараар дахин тохируулах ёстой.

Aging Offset бүртгэл нь цаг үүсгэгчийн давтамжийг тохируулах зориулалттай. Температурын өөрчлөлт илэрсэн, мөн CONV битээр температурын хувиргалтыг идэвхжүүлсэн тохиолдолд дотоод тохируулгын процедурын үед регистрийн утгыг осцилляторын давтамжид нэмнэ. Офсет утгад гарын үсэг зурсан, өөрөөр хэлбэл эерэг утга (1-127) давтамжийг бууруулж, сөрөг утга (128-255) нэмэгдүүлнэ. Ижил офсетийн хувьд давтамжийн өөрчлөлт нь температураас хамаарч өөр өөр байх болно. +25 ° C-д давтамжийн өөрчлөлт нь 0.1 ppm / LSB байх болно.

Одоогийн температурын утгыг 0x11 ба 0x12 хаягтай регистрүүдэд хадгалдаг, дээд ба бага байт тус тус хадгалагдаж, регистр дэх температурын утгыг үе үе шинэчилдэг. Зүүн зэрэгцүүлэлтийг тохируулсан, нягтрал нь 10 бит буюу 0.25°C/LSB, өөрөөр хэлбэл, өндөр байт нь температурын бүхэл хэсгийг агуулж, бага регистрүүдийн 6, 7-р битүүд нь бутархай хэсгийг бүрдүүлдэг. Өндөр байт дээр 7-р бит нь температурын тэмдгийг заана, жишээлбэл, 00011011 01 утга нь +27.25 ° C температуртай, 11111110 10 утга нь -2.5 ° C температуртай тохирч байна.

Цагийн бүртгэлийг уншихдаа нэмэлт буфер ашиглахыг зөвлөж байна, өөрөөр хэлбэл хэд хэдэн регистрийг тусад нь биш, нэг дор уншихыг зөвлөж байна, учир нь бие даасан унших үйлдлүүдийн хооронд цагийн бүртгэлүүд утгыг нь өөрчилж болно. Бүртгэлийн бүртгэлд шинэ мэдээлэл бичихдээ энэ дүрмийг дагаж мөрдөхийг зөвлөж байна. Секундын бүртгэлд шинэ утга бичих нь цагийг 1 секундын турш түр зогсоодог бөгөөд энэ хугацаанд үлдсэн регистрүүдийг дахин бичих шаардлагатай.

DS3231-ийг микроконтроллерт холбож байна

Би цагийг PIC16F628A микроконтроллерт холбож, ашигласан. Холболтын диаграммыг доор харуулав.


Эрчим хүч асгасны дараа индикаторууд дээр зураас (– – – – – –) гарч ирэх бөгөөд дараа нь цагийг эхлүүлж, цагийн утга нь индикаторууд дээр 1 секундын сааталтайгаар гарч ирэх бөгөөд энэ нь цаг үүсгэгчийг эхлүүлэхэд шаардлагатай болно. Шалгуур үзүүлэлтүүд нь цаг, минут, секундийг аравтын бутархайгаар тусгаарлаж харуулдаг бөгөөд цагийн формат нь 24 цаг байна. SB1 "Заалт" товчийг ашиглан дэлгэцийн форматыг өөрчлөх боломжтой бөгөөд индикаторууд нь температур, мөн 2 Гц давтамжтайгаар анивчдаг аравтын бутархайгаар тусгаарлагдсан цаг, минутын утгыг харуулах болно. Температурыг бутархай хэсэггүйгээр харуулдаг бөгөөд програм нь зөвхөн 0x11 хаяг дахь температурын хадгалалтын өндөр байтыг уншдаг.

Цагийн утгыг 1-р дохиоллын дохиогоор удирддаг SQW/INT шугам дээрх тасалдлаар дамжуулан цагнаас уншдаг бөгөөд цагийг эхлүүлэх үед сэрүүлгийн цагийг хоёр дахь дохио болгон тохируулдаг. HL1 LED нь индикатор болж, тасалдлын дохиогоор секунд тутамд анивчдаг. I2C интерфэйсээр өгөгдөл дамжуулахад алдаа гарсан тохиолдолд HL2 LED асдаг.

Нэмж дурдахад би SB2 "Тохиргоо", SB3 "Суулгах" товчлууруудыг ашиглан цагийг тохируулах боломжийг хөтөлбөрт нэмсэн. Тохируулах горимд SB2 товчлуурыг дарж орно; үзүүлэлтүүд минут, секундын оронд 00 цаг, зураасаар харагдана (00 – – – –). SB3 товчлуурыг ашигласнаар та цагийн утгыг тохируулж (товших бүрт нэмэгдэнэ), дараа нь SB2 товчийг дарснаар минутыг засварлана; зураасны оронд 00 минут гарч ирнэ. SB3 товчлуур нь шаардлагатай утгыг тохируулах гэх мэт. Секундыг засварлаж, SB2 товчийг дарсны дараа цагны цагийг дахин бичиж, шинэчлэгдсэн цагийг индикаторууд дээр харуулна.

Хөтөлбөрийн хэсэгчилсэн кодыг доор өгөв (бүтэн хувилбарыг нийтлэлийн төгсгөлд татаж авах боломжтой):

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #оруулна LIST p=16F628A __CONFIG H"3F10" ;микроконтроллерийн тохиргооны алдааны түвшин -302 ;жагсаалтад 302 алдаатай мессежүүдийг Sec equ 0020h харуулахгүй ;туслах дансны бүртгэл Sec1 equ 0021h ; Sec2 equ 0022h; scetbit equ 0024h;битийн тоог тоолох туслах регистр perem equ 0025h;spi-ээр дамжуулан байт хүлээн авах/дамжуулах туслах регистр, i2c temp equ 0026h;температурын бүртгэл perem_1 equ 0027h;хоёртын аравтын тоон хөрвүүлэгчийн туслах регистр. үр дүн equ 0028h ;хоёртын-аравтын хөрвүүлэгчийн туслах регистр dat_ind equ 0029h ;spi протоколоор дамжуулах өгөгдлийн бүртгэл adr_ind equ 002Ah ;spi протоколоор дамжуулах хаягийн бүртгэл second equ 002Bh ;цагийг тохируулах секундын хадгалах бүртгэл minut equ 002Ch ;цагийг тохируулах минут хадгалах бүртгэл equ 002Ch ;002. цагийн тохиргоонд зориулсан цаг хадгалах бүртгэл adr_i2c equ 002Eh ;i2c интерфэйсийн өгөгдөл дамжуулах дэд программын бүртгэлүүд tmp_i2c equ 002Fh slave_adr equ 0030h data_i2c equ 0031h flag equ 007Fh ;flagt register #DEFI3NE;inrupt #DEFINTSW; sda PORTB-г тодорхойл ,1 ;холболтод зориулсан SDA шугам DS3231 #DEFINE scl PORTB,2 ;DS3231-г холбох SCL шугам #DEFINE sda_io TRISB,1 ;SDA шугамын чиглэл #DEFINE scl_io TRISB,2 ;SCL шугамын чиглэл #DEFINE datai ;MAX7219 драйверын өгөгдөл оруулах шугам #DEFINE cs PORTB ,6 ;драйвер сонгох мөр MAX7219 #DEFINE clk PORTB,7 ;driver time line MAX7219 #DEFINE led PORTB,4 ;i2c error LED #DEFINE led_sec PORTB цагийн явц заагч,3; LED 1Hz #DEFINE regim PORTA,2 ;Заагч товчлуур - дэлгэцийн горимыг өөрчлөх #DEFINE nast PORTA,3 ;Setting товчлуур - цаг тохируулах горимд орох #DEFINE ust PORTA,4 ;Setting товч - цагийн утгыг тохируулах;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ;програмын гүйцэтгэлийг 0000h хаягаас эхлүүлнэ үү. Эхлэх ;Эхлэх шошго руу очно уу ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Үндсэн програм Start movlw b"00000000" ;A movwf PORTA портын гаралтын түгжээний утгыг тохируулах; movlw b"01000000" ;B movwf PORTB портын гаралтын түгжээний утгыг тохируулах; movlw b"00000111" ;харьцуулагчийг унтраах movwf CMCON ; bsf БАЙДАЛ,RP0 ;1-р банкийг сонгох movlw b"00000111" ;B портын оролт/гаралтын шугамыг тохируулах movwf TRISB ;RB0-RB2 - оролтод, үлдсэн хэсэг нь гаралтад movlw b"11111111" ;оролтыг тохируулах/ A портын гаралтын шугамууд movwf TRISA ;бүх мөрүүдийг оруулах bcf БАЙДАЛ,RP0 ;банк 0 clrf туг сонгох ;бүртгэлийг дахин тохируулах init_lcd дуудлага ;дуудлагын драйвер эхлүүлэх дэд программ (MAX7219) дуудна viv_not ;гаралтын зураас тэмдэг " ------ " ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;; movlw b"11010000" ;төхөөрөмжийн хаяг (DS3231) movwf slave_adr ;i2c-ээр дамжуулан хүлээн авах/дамжуулах регистрүүд рүү 4 байт бичнэ; энд 1-р дохиолол тохируулагдсан бөгөөд секунд тутамд movlw data_i2c дуугарна; эхний хүлээн авах/дамжуулах регистрийг movw FSR-ээр тохируулна. ; movlw b"10000000" ;1-р дохиоллын секундын бүртгэлийн өгөгдөл movwf INDF ; incf FSR,F ; movlw b"10000000" ;1-р дохиоллын минутын бүртгэлийн өгөгдөл movwf INDF ; incf FSR,F ; movlw b"10000000" ;1-р сэрүүлэгний цагийн бүртгэлийн өгөгдөл movwf INDF ; incf FSR,F ; movlw b"10000000" ;1 дэх дохиоллын бүртгэлийн долоо хоногийн огноо/өдрийн өгөгдөл movwf INDF ; movlw. 4 ;i2c movwf tmp_i2c-ээр дамжуулан 4 байт дамжуулах; movlw 0x07 ;1-р сэрүүлэгний секундын бүртгэлийн хаягийг тохируулах movwf adr_i2c ; write_i2c дуудах ;i2c интерфэйсээр дамжуулан бичих дэд программ руу залгах err_prov дуудах ;I2C бичих/унших алдааг шалгах movlw .1 ;1-р байтыг i2c movwf tmp_i2c-ээр дамжуулах; movlw 0x0E ;хяналтын бүртгэлийн хаягийг тохируулах movwf adr_i2c ; movlw data_i2c ;i2c movwf FSR-ээр дамжуулан эхний дамжуулах/хүлээн авах бүртгэлийг тохируулах; movlw b"00000101" ;цаг үүсгэгчийг эхлүүлэх, movwf INDF-д зориулсан INT/SQW зүүг ажиллуулахыг хориглох ;батарейн тэжээлийн горим, INT/SQW гаралт дээрх импульсийн давтамж 1Гц, ;INT/SQW гаралтыг дохиолол үүсгэхэд ашигладаг. цаг тасалддаг, ;сэрүүлгийн цагийг идэвхжүүлэх 1-р дохиоллын дуудлагыг тасалдуулах write_i2c ;i2c интерфэйсээр дамжуулан бичлэг хийх дэд программ руу залгах err_prov ;I2C бичих/унших алдааг шалгах met_2 movlw .1 ;1-р байтыг i2c movi2c-ээр дамжуулах;_mp; movlw 0x0F ;төлөв бүртгэлийн хаягийг тохируулах movwf adr_i2c ; movlw data_i2c ;i2c movwf FSR-ээр дамжуулан эхний дамжуулах/хүлээн авах бүртгэлийг тохируулах; movlw b"00000000" ;OSF битийг дахин тохируулах, EN32kHz гаралт дээр импульс үүсгэхийг хориглох, movwf INDF ;сэрүүлгийн тасалдлын туг A2F, A1F дуудлагыг дахин тохируулах write_i2c ;i2crov интерфэйсээр дамжуулан бичлэгийн дэд программ руу залгах I2c дуудлагын err; writeche_ /read errors met_1 btfsc int ; дохиолол тасалдлын шугамыг санал болгох goto met_3; bsf led_sec ;цагны явцын заагч LED-г асаана goto met_4 ; met_3 bcf led_sec ;цагийн явцын заагч LED-ийг унтраана btfsc nast ;санал асуулгад цаг тохируулах товчлуур goto met_5 ; call nast_time ;цаг тохируулах дэд програм руу залгах goto met_2 ; met_5 btfsc regim ;заалтын горимын товчлуурын санал асуулга met_1 ; met_6 дуудлага paus_knp ; btfss горим; goto met_6 ; btfss flag,2 ;заалтын горимын тугны утгыг өөрчлөх goto met_7 ; bcf туг,2 ;заагч туг дахин тохируулах, цаг харуулах горим goto met_1 ; met_7 bsf flag,2 ;заалтын туг, температур, цагийг харуулах горимыг тохируулах met_1 ; met_4 movlw .1 ;1-р байтыг i2c movwf tmp_i2c-ээр дамжуулах; movlw 0x11 ;өндөр температурын бүртгэлийн хаягийг тохируулах movwf adr_i2c ; read_i2c дуудах ;I2C-ээр дамжуулан унших дэд программ руу залгах err_prov дуудлага ;I2C бичих/унших алдааг шалгах movf INDF,W ;температурын утгыг temp регистрт хуулах movwf temp rd_time movlw .3 ;i2c-ээр 3 байт дамжуулах movw2t;mp_mp; movlw 0x00 ;секундын бүртгэлийн хаягийг тохируулах movwf adr_i2c ; read_i2c дуудах ;I2C-ээр дамжуулан унших дэд программ руу залгах err_prov дуудлага ;I2C бичих/унших алдааг шалгах btfsc flag,2 ;заалтын горимын тугны санал асуулга goto met_8 ; call vivod ;тоон дэлгэц дээр цагийн утгыг харуулах дэд программ руу залгах goto met_2 ; met_8 дуудах vivod_temp ;тоон дэлгэц дээр температур, цагийг харуулах дэд програм руу залгах goto met_2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#оруулна

CONFIG H"3F10" ;Микроконтроллерийн тохиргоо

errorlevel -302 ;жагсаалтад 302 алдааны мэдэгдлийг бүү харуул

Sec equ 0020h ;туслах дансны бүртгэл

Sec1 equ 0021h ;

Sec2 equ 0022h;

scetbit equ 0024h ;битийн туслах бүртгэлийн тоог тоолох

perem equ 0025h ;spi, i2c-ээр дамжуулан туслах байт хүлээн авах/дамжуулах бүртгэл

temp equ 0026h ;температурын бүртгэл

perem_1 equ 0027h ;BCD туслах бүртгэл

үр дүн equ 0028h ;хоёртын-аравтын хөрвүүлэгчийн туслах регистр

dat_ind equ 0029h ; spi протоколоор дамжуулах өгөгдлийн бүртгэл

adr_ind equ 002Ah ;spi протоколоор дамжуулах хаягийн бүртгэл

second equ 002Bh ;цагийг тохируулах секундын хадгалах бүртгэл

minut equ 002Ch ;цагийг тохируулах минут хадгалах бүртгэл

hour equ 002Dh ;цагийг тохируулах цаг хадгалах бүртгэл

adr_i2c equ 002Eh ;i2c интерфейсийн өгөгдөл дамжуулах дэд программын бүртгэлүүд

tmp_i2c equ 002Fh

slave_adr equ 0030h

data_i2c equ 0031h

flag equ 007Fh ;туг бүртгэл

#DEFINE int PORTB,0 ; тасалдлын шугам INT/SQW DS3231

#DEFINE sda PORTB,1 ;DS3231-ийг холбох SDA шугам

#DEFINE scl PORTB,2 ;DS3231-ийг холбох SCL шугам

#DEFINE datai PORTB,5 ;MAX7219 драйверын өгөгдөл оруулах шугам

#DEFINE cs PORTB,6 ;драйвер сонгох мөр MAX7219

#DEFINE clk PORTB,7 ;MAX7219 драйверын цагийн шугам

#DEFINE led PORTB,4 ;i2c алдааны LED

#DEFINE led_sec PORTB,3 ;LED цагийн явцын заагч 1Hz

#DEFINE regim PORTA,2 ;Заагч товч - дэлгэцийн горимыг өөрчилнө

#DEFINE nast PORTA,3 ;Тохиргоо товч - цаг тохируулах горимд орно

#DEFINE ust PORTA,4 ;Set товч - цагийн утгыг тохируулна

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0000h ;програмын гүйцэтгэлийг 0000h хаягаас эхлүүлнэ

Эхлэх рүү оч; Эхлэх шошго руу оч

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Үндсэн програм

Start movlw b"00000000" ;А портын гаралтын түгжээний утгыг тохируулна уу

movlw b"01000000" ;B портын гаралтын түгжээний утгыг тохируулна уу

movlw b"00000111" ;харьцуулагчийг унтраа

bsf БАЙДАЛ,RP0 ;1-р банкийг сонгоно уу

movlw b"00000111" ;Б портын оролт/гаралтын шугамыг тохируулах

movwf TRISB ;RB0-RB2 - оролт руу, үлдсэн хэсэг нь гаралт руу

movlw b"11111111" ;А портын оролт/гаралтын шугамыг тохируулах

movwf TRISA ;оролтын бүх мөр

bcf БАЙДАЛ,RP0 ;банк 0-г сонгоно уу

clrf туг; тугны бүртгэлийг дахин тохируулах

init_lcd руу залга; драйвер эхлүүлэх горимыг дуудах (MAX7219)

viv_not ;гаралтын зураас тэмдэг " ------ " заагч руу залгана

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

movlw b"11010000" ;төхөөрөмжийн хаяг (DS3231)

;i2c-ээр дамжуулан хүлээн авах/дамжуулах регистрүүдэд 4 байт бичнэ

movlw data_i2c ;i2c-ээр дамжуулан анхны хүлээн авах/дамжуулах регистрийг тохируулах

movlw b"10000000" ;1-р дохиоллын секундын бүртгэлийн өгөгдөл

movlw b"10000000" ;1-р дохиоллын минутын бүртгэлийн өгөгдөл

movlw b"10000000" ;1-р сэрүүлгийн бүртгэлийн өгөгдөл

movlw b"10000000" ;долоо хоногийн огноо/өдрийн өгөгдөл 1 дэх дохиоллын бүртгэл

movlw .4 ;4 байтыг i2c-ээр дамжуулна

movlw 0x07 ;1-р сэрүүлгийн секундын бүртгэлийн хаягийг тохируулах

Онцлог шинж чанарууд:

  • Нарийвчлал ±2 ppm температурын хязгаарт 0 ° C-аас + 40 ° C хүртэл
  • Нарийвчлал -40 ° C-аас + 85 ° C хүртэл температурын хязгаарт ± 3.5 ppm
  • Тасралтгүй ажиллагааг хангахын тулд бие даасан тэжээлийн эх үүсвэрийг холбох оролт
  • Ашиглалтын температурын хүрээ арилжааны: 0 ° C-аас + 70 ° C хүртэл үйлдвэрийн: -40 ° C-аас + 85 ° C хүртэл
  • Бага хэрэглээ
  • Секунд, минут, цаг, долоо хоногийн өдөр, сар, сар, жилийг тоолох бодит цагийн цаг нь үсрэлтийн жилийг 2100 хүртэл засах боломжтой.
  • Өдөр бүр хоёр дохиолол
  • Програмчлагдах давтамжтай квадрат долгионы гаралт
  • Хурдан (400 кГц) I 2 C интерфейс
  • 3.3V хүч
  • ±3°C хэмжилтийн нарийвчлал бүхий дижитал температур мэдрэгч
  • Шаардлагатай тохируулгын талаарх мэдээллийг агуулсан бүртгэл
  • RST дахин тохируулаагүй оролт/гаралт

Хэрэглээ:

  • Серверүүд
  • Цахим цахилгаан тоолуур
  • Телематик төхөөрөмж
  • GPS системүүд

DS3231-ийн ердийн холболтын диаграм:

Ерөнхий тайлбар:

DS3231 нь өндөр нарийвчлалтай бодит цагийн цаг (RTC) бөгөөд суурилуулсан I 2 C интерфэйс, температурыг нөхдөг болор осциллятор (TCXO) ба кварцын резонатортой. Төхөөрөмж нь нөөцийн бие даасан тэжээлийн эх үүсвэрийг холбох оролттой бөгөөд энэ нь үндсэн тэжээлийн хүчдэл унтарсан ч цаг хэмжигч, температурыг хэмжих боломжийг олгодог. Баригдсан кварцын резонатор нь төхөөрөмжийн ашиглалтын хугацааг нэмэгдүүлж, шаардлагатай тооны гаднах элементүүдийг багасгадаг. DS3231 нь арилжааны болон үйлдвэрлэлийн температурын хувилбаруудад байдаг бөгөөд 300 миль 16 зүү SO багцад савлагдсан.

RTC нь секунд, минут, цаг, долоо хоногийн өдрүүд, сар, жилийн өдрүүдийг тоолох боломжийг олгодог. Сарын дуусах огноог өндөр жилүүдийг харгалзан автоматаар тодорхойлно. Бодит цагийн цаг нь 24 эсвэл 12 цагийн форматаар ажилладаг бөгөөд өдрийн хагасыг (AM/PM) заана. Төхөөрөмж нь өдөр тутмын хоёр дохиололтой, програмчлагдсан давтамжтай дөрвөлжин долгионы гаралттай. Төхөөрөмжтэй өгөгдөл солилцох нь суурилуулсан цуваа I 2 C-тэй нийцтэй интерфейсээр явагддаг.

". DS3231 бодит цагийн цагийн модультай танилцацгаая. Энэхүү нийтлэлд DS гэр бүлийн модулиудыг Arduino руу холбох видео заавар, програмын жагсаалт, зорилго, аргуудыг багтаасан болно.

DS3231 бодит цагийн цагийн модуль

DS3231 бодит цагийн цагийн модуль гэж юу вэ?

Бодит цагийн цагийн модуль- энэ нь хронометрийн өгөгдлийг (одоогийн цаг, огноо, долоо хоногийн өдөр гэх мэт) бүртгэх зориулалттай цахим хэлхээ бөгөөд бие даасан тэжээлийн эх үүсвэр, бичлэг хийх төхөөрөмжөөс бүрдсэн систем юм.

DS3231 модульЭнэ нь үндсэндээ энгийн цаг юм. Arduino самбарууд нь цаг хугацааны мэдрэгчтэй байдаг Миллис, гэхдээ энэ нь зөвхөн самбарт тэжээл өгөх үед л ажилладаг. Хэрэв та Arduino-г унтрааж, дараа нь асаавал Миллисын цаг тэг болно. Мөн DS3231 нь самбар дээр батерейтай бөгөөд Arduino самбарыг салгасан ч гэсэн модулийг "цаах" болгож, цагийг хэмжих боломжийг олгодог.

Энэ модулийг Arduino самбар дээр суурилсан цаг эсвэл сэрүүлэг болгон ашиглаж болно. Эсвэл янз бүрийн системүүдийн сэрэмжлүүлэг болгон, жишээлбэл, Ухаалаг гэрт.

DS3231 техникийн үзүүлэлтүүд:

  • модуль нь цаг, минут, секунд, огноо, сар, жилийг тооцдог (өндөр жилүүдийг 2100 он хүртэл тооцдог);
  • Төрөл бүрийн төхөөрөмжтэй холбогдохын тулд цагийг I2C интерфейсээр холбодог.

32К— Гаднах эрчим хүчийг >12V-оос хангах зориулалттай гаралт.

S.Q.W.— Програмчлагдах квадрат долгионы дохионы гаралт.

SCL– Энэ зүүгээр дамжуулан I2C интерфейсээр дамжуулан цагтай өгөгдөл солилцдог.

S.D.A.– Цагны өгөгдлийг энэ зүүгээр дамжуулдаг.

VCC– Бодит цагийн цахилгаан хангамж, 5 вольт шаардлагатай. Хэрэв энэ зүү дээр хүчдэл байхгүй бол цаг унтах горимд шилждэг.

GND- Дэлхий.

DS3231 бодит цагийн цаг болон энгийн программын холболтын диаграм

Өөр өөр Arduino самбар дээрх SDA болон SCL зүү:

S.D.A. SCL
НҮБ А4 А5
Мини А4 А5
Нано А4 А5
Mega2560 20 21
Леонардо 2 3

Бодит цагийн цагийн модулийг Arduino UNO-д холбоно. SDA - зүү A4, SCL - зүү A5.

Дараах програм нь загварт ажиллахад тохиромжтой (та програмыг Arduino IDE руу хуулж болно):

#оруулна

хүчингүй тохиргоо() (
саатал(300);
Serial.begin(9600);
time.begin();
}
хүчингүй давталт()



}
}

Энэ ноорог дээр цаг хугацаа зүгээр л тоолж байна.

Юуны өмнө sktech дээр номын сангаа холбоно iarduino_RTC.h.

Тэнд модультайгаа зөв ажиллахын тулд яг нэрийг нь зааж өгнө үү.

Үүний үр дүнд бид DS3231 модулиас портын монитор хүртэлх хугацааны гаралтыг авдаг. Цаг, минут, секунд харагдана.

Дараагийн ноорог дээр бид функц нэмэх болно Цаг тааруулах, энэ нь танд анхны цаг тоолох хугацааг тохируулах боломжийг олгоно.

#оруулна
iarduino_RTC цаг(RTC_DS3231);
хүчингүй тохиргоо() (
саатал(300);
Serial.begin(9600);
time.begin();
time.settime(0,0,18,24,04,17,1); // 0 сек, 0 мин, 18 цаг, 2017 оны 4-р сарын 24, Даваа гараг
}
хүчингүй давталт()
if(millis()%1000==0)( // хэрэв 1 секунд өнгөрсөн бол
Serial.println(цаг хугацаа.gettime("d-m-Y, H:i:s, D")); // харуулах цаг
саатал(1); // цагийг 1 мс-д хэд хэдэн удаа харуулахгүйн тулд 1 мс түр зогсооно
}
}

Жишээлбэл, 2017 оны 4-р сарын 24, Даваа гарагийн 0 секунд, 0 минут, 18 цагаас цагийг тоолж эхэлдэг.

Хичээлийн бичлэгүүд:

  1. Эхний хичээл: .
  2. Хоёр дахь хичээл: .
  3. Гурав дахь хичээл: .
  4. Дөрөв дэх хичээл: .
  5. Тав дахь хичээл: .
  6. Зургаадугаар хичээл: .
  7. Долоо дахь хичээл: .
  8. Найм дахь хичээл: .
  9. Ес дэх хичээл:

Өнөөдөр бид төгс бодит цагийн цаг (RTC) чипийг хайж олох болно. дээр тулгуурлан цаг хийх болно. Дэлгэц нь хөгжүүлэхэд илүү тохиромжтой байх болно - LCD дэлгэц нь тохиргооноос бусад бүх мэдээллийг нэг дор харуулах болно. Энэ хэлбэрээр цагийг ширээний сонголт болгон ашиглахад тохиромжтой.

Тиймээс DS3231 чипийг өөрөө харцгаая. DS3231 нь температурын нөхөн олговор бүхий суурилуулсан кварцын резонаторын ачаар маш нарийн хөдөлгөөнтэй (үйлдвэрлэгчид энэ үгийг сонгосон) бодит цагийн цаг юм. Мэдээлэл дамжуулах интерфэйс нь I 2 C. Энэхүү микро схем нь нөөц батерейны хүчдэлийн оролттой бөгөөд үндсэн тэжээл унтарсан үед микро схем автоматаар нөөц батерейгаас ажиллах горимд шилждэг бөгөөд нөөц батарейгаас ажиллах нарийвчлал нь тийм биш юм. өртсөн. Энэ нь маш тааламжтай, тийм үү? DS3231 нь секунд, минут, цаг, сарын өдрүүд (огноо), долоо хоногийн өдрүүд, сар, жил (үсрэлтийн жилийг сараар оруулаад) тоолохыг дэмждэг. 12 ба 24 цагийн форматтай ажиллахыг дэмждэг. Тэдгээрийг тохируулах, статусыг хянах чадвартай 2 сэрүүлэгтэй цаг байдаг. Температурын нөхөн олговрын нарийвчлалыг тохируулах. Мөн хоёр гаралт - 32 кГц (гаралт нь 32.768 кГц) ба 1 Гц-ээс 8.192 кГц хүртэл програмчлагдсан гаралт. Мөн дахин тохируулах зүү байдаг - RST. Бодит цагийн цагийн чипийг SO-16 багцаар авах боломжтой. Хэмжээ нь нэлээд том, гэхдээ хэрэв та дотор нь кварц байгаа бөгөөд энэ нь температурыг нөхдөг гэж үзвэл бүх зүйл хэмжээстэй байх шиг байна. DS3231 нь DS3232 хэлбэртэй ихэр загвартай боловч илүү 2 хөлтэй. Энэ бүхэн нь NXP-ийн бүтээгдэхүүн болох PCA2129 ба PCF2129 цагны чипүүдийг санагдуулдаг. Температурыг нөхөх ижил төстэй суурилуулсан кварц резонатор нь хоёулаа ижил ихрүүд бөгөөд зөвхөн өөр өөр тооны n.c. цаг хөтлөхөөс гадна DS3231-тэй харьцуулахад зүү болон ижил төстэй функцууд.

RTC DS3231 нь шаардлагатай утас бүхий модулиуд, мөн EEPROM чипээр иж бүрэн зарагдах боломжтой бөгөөд энэ нь ихэвчлэн шаардлагагүй бөгөөд зөвхөн жин нэмдэг.

Шаардлагатай хэсгүүдээс гадна модулийн самбар дээр LED байдаг бөгөөд түүний үүрэг нь терминалуудын тэжээлийн холболтыг зааж өгөх явдал юм. Гоо сайхны төлөө л хүргэж өгсөн байх.

Ийм бодит цагийн цагийн чиптэй ажиллахдаа мэдэх нь чухал зүйл бол түүнээс хэрхэн өгөгдөл гаргаж авах эсвэл тэнд бичих явдал юм. Цаг нь I 2 C интерфэйстэй. Өгөгдөл бичихийн тулд (мөн өгөгдлийг уншихын тулд энэ нь бас шаардлагатай) эхлэх нөхцөлийг давах шаардлагатай (эдгээр командуудыг техник хангамж эсвэл I 2 C програм хангамж ашиглан гүйцэтгэдэг. микроконтроллер), дараа нь чипийн хаягийг битийн бичлэгээр дамжуулж, дараа нь бидний хандах регистрийн хаягийг дамжуулж, дараа нь энэ регистр рүү нэг байт өгөгдлийг шилжүүлнэ, хэрэв та өөр байт өгөгдөл дамжуулах юм бол энэ нь дараах болно. дараагийн бүртгэл рүү бичих гэх мэт. Дууссаны дараа та зогсоох нөхцөлийг давах хэрэгтэй. Зураг дээрх дээрх график дүрслэл:

Өгөгдлийн бичлэг нь анхны тохиргоо болон одоогийн цагийг тохируулахад шаардлагатай. Дараа нь бид одоогийн цаг, огнооны талаархи мэдээллийг байнга хүлээн авах хэрэгтэй. Үүнийг хийхийн тулд энэ мэдээллийг хадгалж буй бүртгэлээс унших шаардлагатай. Унших нь хоёр процедураас бүрдэнэ - хүссэн регистр рүү заагч тавьж, унших. Хүссэн регистр рүү заагчийг тохируулахын тулд та эхлэх нөхцөлийг дамжуулж, дараа нь бичилтийн бит бүхий чипийн хаяг, бүртгэлийн хаягтай байтыг дамжуулах хэрэгтэй. Дараа нь зогсоох нөхцөл, дараа нь эхлэх нөхцөл, эсвэл зүгээр л дахин эхлүүлэх нөхцөл юм. Одоо хоёр дахь процедур нь бүртгэлээс шууд уншиж байна. Эхлэлийг дамжуулж, дараа нь та микро схемийн хаягийг унших битээр илгээж, шаардлагатай тооны бүртгэлийг уншиж, дууссаны дараа зогсоох нөхцөлийг дамжуулах хэрэгтэй. Хэрэв регистрийн мэдээллийг уншсан бол микроконтроллер (төхөөрөмжийн мастер) дээр шаардлагагүй үйлдэл хийхгүйгээр заагч автоматаар дараагийн бүртгэл рүү шилждэг. Зураг дээр I 2 C интерфейсийг ашиглан регистрүүдийг уншихтай холбоотой дээр дурдсан бүх зүйлийг харуулав.

Чип хаяг:

  • бичлэг хийх - 0b11010000
  • уншихад - 0b11010001

C код нь дараах байдлаар харагдах болно.

// цагтай функцууд ============================================ ================================================== ================= ======== // анхны тохиргоог эхлүүлж байна RTC_init(void)( i2c_start_cond(); // i2c i2c_send_byte(RTC_adr_write) эхлүүлж байна; // төхөөрөмжийн хаягийг шилжүүлэх, бичлэг хийх горим i2c_send_byte(0x0E); // санах ойн хаягийг шилжүүлэх i2c_send_byte(0b00100000); // температурын хувиргалт болон гаралтыг 1 Гц i2c_send_byte(0b00001000); //_i2kHz (32 kHzs) дээр идэвхжүүлнэ); // i2c-г зогсоох ) // цаг, огноог хүчингүй болгох RTC_read_time(void)( i2c_start_cond() ; // i2c i2c_send_byte(RTC_adr_write) эхлүүлэх); // төхөөрөмжийн хаягийг шилжүүлэх, бичих горим i2c_send_byte(0x00); // санах ойн хаягийг шилжүүлэх i2c_stop_cond(); // i2c i2c_start_cond(); зогсоох i2c i2c_send_byte(RTC_adr_read); / / төхөөрөмжийн хаягийг дамжуулах, унших горим sec = bcd(i2c_get_byte(0)); // секунд унших, ACK min = b_d (0)); // унших минут, ACK цаг = bcd(i2c_get_byte(0)); / / унших цаг, ACK wday = bcd(i2c_get_byte(0)); // долоо хоногийн өдрийг унших, ACK өдөр = bcd(i2c_get_byte(0)); // тоог унших, ACK сар = bcd(i2c_get_byte(0)); // унших сар, ACK жил = bcd(i2c_get_byte(1)); // унших жил, NACK i2c_stop_cond(); // i2c-ийг зогсоох ) // хүчин төгөлдөр бус цагийг тохируулах RTC_write_time(unsigned char hour1, unsigned char min1, unsigned char sec1)( i2c_start_cond(); // start i2c i2c_send_byte(RTC_adr_write); //төхөөрөмжийн хаягийг шилжүүлэх, бичлэг хийх горим (_ic). 0x00) ; // санах ойн хаягийг шилжүүлэх i2c_send_byte(bin(sec1)); // 0x00 секунд (мөн секундийг зааж өгөхийг зөвлөж байна уу?) i2c_send_byte(bin(min1)); // 0x01 минут i2c_send_byte(bin(hour1)) ; // 0x02 цаг i2c_stop_cond(); // i2c-г зогсоох ) // огноог тохируулах хүчингүй RTC_write_date(unsigned char wday, unsigned char day, unsigned char сар, unsigned char year)( i2c_start_cond(); // start i2c_stop_cond();//_RT i2c-г эхлүүлэх ); // төхөөрөмжийн хаягийг дамжуулах, бичлэг хийх горим i2c_send_byte(0x03); // санах ойн хаягийг шилжүүлэх i2c_send_byte(bin(wday)); // 0x03 долоо хоногийн өдөр (Ням - 1, Даваа 2, Мягмар 3, Лхагва 4, 5 сарын 6, Бямба, 7 Бямба ) i2c_send_byte(bin(өдөр)); // 0x04 өдрийн сар i2c_send_byte(бин(сар)); // 0x05 сар i2c_send_byte(bin(жил)); // 0x06 жил i2c_stop_d(); // i2c-г зогсоох ) // температурыг хүчингүй болгох RTC_read_temper(void)( i2c_start_cond(); // i2c i2c_send_byte(RTC_adr_write) эхлүүлэх; // төхөөрөмжийн хаягийг шилжүүлэх, бичих горим i2c_send_byte(0x11); //c санах ойн хаягийг шилжүүлэх i_con (); // зогсоох i2c i2c_start_cond(); // i2c i2c_send_byte(RTC_adr_read); // төхөөрөмжийн хаягийг дамжуулах, унших горим t1 = i2c_get_byte(0); // MSB температурыг унших t2 = i2c_get_byte(1); // унших LSB температур i2c_stop_cond (); // зогсоох i2c t2=(t2/128); // 6-аар солих - нарийвчлал 0.25 (2 бит) // 7-оор солих - нарийвчлал 0.5 (1 бит) t2=t2*5; )

Энэ бол микро схемтэй ажиллахад хэрэглэгддэг бүх эх код бөгөөд цагийн хурдыг тохируулахад нөлөөлсөнгүй, учир нь цаг хэдэн өдрийн турш секундийг алдаагүй.

Тиймээ - гайхалтай онцлог DS3231 нь ижил чип нь термометрийн функцийг гүйцэтгэдэг (өөрөөр хэлбэл температурын нөхөн олговрыг яаж хийх вэ), одоогийн температурыг унших чадвартай. Температурын хамгийн дээд нарийвчлал нь 0.25 хэм байна. Түүнчлэн, температурыг шинэчлэх хугацаа нэлээд урт байдаг - ойролцоогоор 1 минут. Тийм ээ, бид үүнийг хурдан шинэчлэх шаардлагагүй.

Бүх цагны бүтцийн диаграмм дараах байдалтай байна.

Микроконтроллерийг өргөн тархсан, хямд үнээр нь Atmega8 сонгосон. Энэхүү микроконтроллерийг DIP-28 багц болон TQFP-32 багцын SMD хувилбарт хоёуланг нь ашиглаж болно. R3 резистор нь PC6 зүү дээр санамсаргүй дуу чимээ гарсан тохиолдолд микроконтроллерыг аяндаа дахин эхлүүлэхээс урьдчилан сэргийлэхэд шаардлагатай. Эсэргүүцэл R3 нэмэлт хүчийг энэ зүү рүү татаж, түүн дээр найдвартай потенциал үүсгэдэг. Дэлгэцийн хувьд шингэн болор дэлгэц (LCD) ашиглагддаг. Би 2004A дэлгэцийг ашигласан - 20 тэмдэгтээс бүрдсэн 4 мөр нь гоо сайхны хувьд илүү байдаг тул та илүү сайн мэддэг дэлгэцийг ашиглаж болно - 16 тэмдэгтийн 2 мөр. LCD дэлгэц нь дөрвөн битийн системийг ашиглан микроконтроллерт холбогдсон. Хувьсах резистор R2 нь дэлгэц дээрх тэмдэгтүүдийн тодосгогчийг тохируулах шаардлагатай. Энэ резисторын гулсагчийг эргүүлснээр бид дэлгэцэн дээрх хамгийн тодорхой заалтуудыг олж авдаг. LCD дэлгэцийн арын гэрэлтүүлэг нь дэлгэцийн самбар дээрх "A" болон "K" зүүгээр зохион байгуулагддаг. Арын гэрэлтүүлэг нь гүйдэл хязгаарлах резистор - R1-ээр асдаг. Утга өндөр байх тусам дэлгэцийн арын гэрэлтүүлэг багасах болно. Гэсэн хэдий ч арын гэрлийг гэмтээхгүйн тулд энэ эсэргүүцлийг үл тоомсорлож болохгүй. S1 - S4 товчлуурууд нь цагийн тохиргоог удирддаг. LED нь дохиолол унтарсныг илтгэнэ. LED-ийг зарим төрлийн дууны хэлхээгээр сольж болно. R5 - R8 резисторууд нь татдаг бөгөөд цагны чипний терминалууд дээр тэгш өнцөгт импульс үүсэхэд шаардлагатай байдаг. Энэ нь I2C протоколыг зөв ажиллуулахад шаардлагатай. Хэлхээг тэжээхийн тулд L7805 шугаман тогтворжуулагч чипийг ашигладаг бөгөөд үүнийг таван вольтын шугаман тогтворжуулагч KR142EN5A-ийн дотоодын аналогоор сольж болно, эсвэл хэлхээнд байгаа холболтын дагуу өөр хүчдэл тогтворжуулагч чип ашиглаж болно (жишээлбэл, LM317 эсвэл шилжүүлэгч тогтворжуулагч LM2576, LM2596, MC34063 гэх мэт). Дараа нь 5 вольтыг өөр микро схемээр тогтворжуулна - 3.3 вольтын гаралтыг өгдөг хувилбарт AMS1117. Мэдээллийн хуудасны дагуу цагны чип нь 3.3 вольтын хүчдэлээр тэжээгддэг. Гэхдээ хамгийн их хүчдэл нь 5.5 вольт. Тиймээс, энэ тогтворжуулагчийг өөрийн үзэмжээр ашиглаж болно. AMS1117 хүчдэлийн тогтворжуулагчийг ADJ хувилбараар (AMS1117ADJ) сольж болно - өөрөөр хэлбэл тохируулж болох хувилбар бол та энэ сонголтоор шаардлагатай хүчдэлийг тохируулах шаардлагатай болно.өгөгдлийн хуудасны дагуу микро схемд холбогдсон хоёр резисторыг ашиглан.

ATmega8 микроконтроллерийн хөгжүүлэлтийн самбар ашиглан уг хэлхээг угсарч, дибаг хийсэн.

Товчлуурын зорилго:

  • S1 - дохиоллын дохиог унтраах эсвэл дурын тохиргооны цэснээс үндсэн цэс рүү гарах
  • S2- микроконтроллерыг дахин тохируулах
  • S3 - тохиргооны цэс дэх цаг эсвэл огноог өөрчилдөг
  • S4 - тохиргооны цэс рүү орж, цэсээр гүйлгэх

32 кГц зүү нь болор давтамжийг удирдахад ашиглаж болно. Бид давтамж хэмжигч эсвэл осциллографыг энэ зүү рүү холбож, давтамжийг хянадаг.

Осциллограммын дэлгэцийн зургаас харахад давтамж нь ойролцоогоор 32.768 кГц-тэй тохирч байна (ойролцоогоор давтамжийн хэмжилтийн нарийвчлалын хязгаарлалтаас шалтгаалан "нүдээр" нарийн тодорхойлоход хэцүү байдаг).

Үүний үр дүнд дараах шинж чанаруудтай цаг гарч ирэв.

  • цаг хугацааны заалт
  • огнооны дэлгэц
  • долоо хоногийн өдрийн заалт
  • сэрүүлгийн цагийн үйл ажиллагааны үзүүлэлт
  • Микроконтроллерийн дохионы гаралттай 1 сэрүүлэгтэй цаг
  • орчны температурын үзүүлэлт (зөвхөн эерэг температур програм хангамжид хэрэгждэг; сөрөг температур нь бидэнд ашиггүй гэж бодож байна)
  • дохиоллын тохиргоо
  • цагийн тохиргоо
  • огнооны тохиргоо
  • Арын гэрэлтүүлэг бүхий LCD дэлгэц
  • тохиргоог хадгалах, үндсэн тэжээл унтарсан үед цагийг үргэлжлүүлэх

Дүгнэж хэлье. DS3231 бодит цагийн цагийн чип нь маш сайн шийдэл юм. Нарийвчлалыг зарим DS1307 буюу түүнээс дээш хувилбартай харьцуулах боломжтой боловч PCA/PCF2129 нь үүнтэй өрсөлдөх боломжтой хэвээр байна. Миний хянаж үзсэн бодит цагийн чипүүдийн дотроос энэ жишээ нь функциональ байдал, нарийвчлалын хувьд эхний байрыг эзэлдэг.

Atmega8 микроконтроллерийг програмчлахын тулд та гал хамгаалагчийн битүүдийн тохиргоог мэдэх хэрэгтэй (хөтөлбөрт авсан дэлгэцийн агшин):

Нийтлэлийг Atmega8 микроконтроллерийн програм хангамж, програмын хэлхээний загвар, мөн цаг ажиллаж байгаа видеог (эхэндээ дохиолол унтарна - LED асна).

Радио элементүүдийн жагсаалт

Зориулалт Төрөл Номлол Тоо хэмжээ Анхаарна ууДэлгүүрМиний дэвтэр
IC1 MK AVR 8 бит

ATmega8

1 Тэмдэглэлийн дэвтэр рүү
IC2 Бодит цагийн цаг (RTC)

DS3231

1 Тэмдэглэлийн дэвтэр рүү
VR1 Шугаман зохицуулагч

L7805AB

1 Тэмдэглэлийн дэвтэр рүү
VR2 Шугаман зохицуулагч

AMS1117-3.3

1 Тэмдэглэлийн дэвтэр рүү
VD1 Шулуутгагч диод

1N4148

1 Тэмдэглэлийн дэвтэр рүү
C1 470 мкФ1 Тэмдэглэлийн дэвтэр рүү
C2, C3, C5, C7 Конденсатор100 нФ4 Тэмдэглэлийн дэвтэр рүү
C4 Электролитийн конденсатор220 мкФ1 Тэмдэглэлийн дэвтэр рүү
C6, C8 Электролитийн конденсатор10 мкФ2 Тэмдэглэлийн дэвтэр рүү
R1 Эсэргүүцэл

22 Ом

1 Тэмдэглэлийн дэвтэр рүү
R2 Trimmer резистор10 кОм1 3296W-1-103LF

Олон төхөөрөмжүүд нь хронометрийн өгөгдлийг (огноо, цаг) тогтмол бүртгэхийг шаарддаг бөгөөд энэ функцийг бодит цагийн цаг гэж нэрлэгддэг тусгай электрон хэлхээнүүд гүйцэтгэдэг. Одоогийн байдлаар бодит цагийн цаг нь тусдаа микро схем хэлбэрээр хэрэгжиж байгаа бөгөөд үүнд та кварцын резонатор, бие даасан цахилгаан хангамжийг нэмэх хэрэгтэй. Зарим микро схемд кварцын резонаторыг дотор нь барьсан байдаг. Чип дээрх эдгээр цагуудын нэг DS3231SN Би үүнийг өөртөө худалдаж авсантөслүүд . Жишээн дээр би бодит цагийн цагийг хятад аналогт холбох болно Arduino UNO.

Эдгээр нь зөвхөн Arduino платформд төдийгүй янз бүрийн төхөөрөмжид холбогдох боломжтой иж бүрэн ZS-042 модуль юм.


Модуль нь микро схем дээр суурилагдсан DS3231SN Энэ нь үндсэндээ бодит цагийн цаг юм. Жишээлбэл, DS1307 чип дээрх хуучин цагны загвараас ялгаатай нь энэ цаг нь дотоод кварцын резонаторыг агуулдаг тул цаг нь цагийг зөв зааж өгдөг.

Та Arduino дээр цагийг DS3231SN-гүйгээр хийж болно, гэхдээ цахилгаан тасарсан тохиолдолд таймерын утгыг дахин тохируулна.Эдгээр цагнууд нөөц хүчин чадалтай тул цахилгаан тасарсан тохиолдолд үргэлжлүүлэн ажиллана.

Цаг нь цаг, минут, секунд, огноо, сар, жилийг тоолж чаддаг (өндөр жилүүдийг 2100 он хүртэл тооцдог). Эдгээр нь 12 эсвэл 24 цагийн горимд ажилладаг, хоёр сэрүүлэгтэй, мөн -40 ° C-аас + 85 ° C хүртэлх дотоод термометртэй байдаг. Төрөл бүрийн төхөөрөмжтэй холбогдохын тулд цагийг дамжуулан холбодог. I2C интерфейс.


ZS-042 модуль дээрх тээглүүрүүдийн байршил, зорилго:

S.Q.W.- Програмчлагдсан дөрвөлжин долгионы дохионы гаралт.

SCLЭнэ зүүгээр дамжуулан I2C интерфейсээр дамжуулан цагтай өгөгдөл солилцдог.

S.D.A.Цагны өгөгдлийг энэ зүүгээр дамжуулдаг.

VCCБодит цагийн цахилгаан хангамж, 5 вольт шаардлагатай. Хэрэв энэ зүү дээр хүчдэл байхгүй бол цаг унтах горимд шилждэг.

GND- Дэлхий.

Холбохын тулд Arduino UNO, Бид цагны SDA зүүг A4 зүү, SCL зүүг A5 руу холбодог. GND(-) ба VCC(+5v) зүүг цахилгаан хангамжид ашигладаг.

Өөр өөр Arduino самбар дээрх SDA болон SCL зүү:

S.D.A. SCL
НҮБ А4 А5
Мини А4 А5
Нано А4 А5
Mega2560 20 21
Леонардо 2 3

CR2032 батерейг цагандаа суулгацгаая, ийм элементүүд нь компьютерийн BIOS-ийг тэжээхэд ашиглагддаг.

USB кабелийг Arduino-д холбоход цагны LED гэрэл асах ёстой ХҮЧ"(улаан LED).

Arduino IDE-ээр цагийг програмчлахын тулд та номын санг суулгах хэрэгтэй.

Номын сан татаж авах Цаг хугацаа ба DS1307RTC.

Сүүлийн номын сан нь DS1307 чип дээрх цаг дээр бичигдсэн боловч түүний харилцан үйлчлэлийн протоколууд нь DS3231-тэй нийцдэг тул номын сан нь бидний цагтай таарах болно.

Номын сангуудыг татан авч, задалж, хавтсанд байрлуулах хэрэгтэй "номын сангууд" Arduino IDE-г эхлүүлэх үед, Тэд жишээн дээр гарч ирэх ёстой " Дээж».

Огноо, цагийг тохируулна уу.

Үүнийг хийхийн тулд энэ кодыг Arduino IDE руу хуулна уу.

Зөв тохиргоог хийхийн тулд та мөрөнд байгаа өгөгдлийг өөрчлөх хэрэгтэй

setTime(13,35,0,22,12,2016);



Хаалтанд таслалаар тусгаарлан зөвийг нь тавь: цаг, минут, секунд, өдөр, сар, жил. Миний жишээнд 2016 оны 12-р сарын 22-нд 13 цаг 35 минут 0 секунд гэж тохируулсан. Ноорог Arduino руу байршуулна уу.

Одоо цагны заалтыг уншихын тулд та жишээг ашиглаж болно: " Файл» - « Дээж» - « DS1307RTC» - « Унших тест"Басард Arduino руу байршуулна уу.

Нээгдсэн цонх нь одоогийн огноо, цагийг харуулах болно. Хэрэв та Arduino-аас цагийн модулийн хүчийг унтраавал Arduino утгыг хянах боломжгүй бөгөөд хэсэг хугацааны дараа мессеж гарч ирнэ. ... уншсан алдаа!"(улаан өнгөөр ​​тодруулсан). Цахилгааныг сэргээсний дараа огноо, цагийг үргэлжлүүлэн тоолох болно. Цаг нь CR2032 батерейгаар ажилладаг тул огноо, цагийг тохируулаагүй.