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 шугамыг логик бага түвшинд тохируулна.
Доорх хүснэгтэд бодит цагийн цагийн бүртгэлүүдийн жагсаалтыг харуулав.
Хаяг | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Чиг үүрэг | Хязгаарлалт |
0x00 | 0 | 10 секунд | Секунд | Секунд | 00-59 | |||||
0x01 | 0 | 10 минут | минут | минут | 00-59 | |||||
0x02 | 0 | 12/24 | ҮДЭЭС ӨМНӨ ҮДЭЭС ХОЙШ | 10 цаг | Цаг | үзэх | 1-12 + AM/PM эсвэл 00-23 | |||
10 цаг | ||||||||||
0x03 | 0 | 0 | 0 | 0 | 0 | Өдөр | Долоо хоногийн өдөр | 1-7 | ||
0x04 | 0 | 0 | 10 дахь | Тоо | огноо | 01-31 | ||||
0x05 | Зуун | 0 | 0 | 10 сар | Сар | Сар/зуун | 01-12 + зуун | |||
0x06 | 10 жил | Жил | Он жилүүд | 00-99 | ||||||
0x07 | A1M1 | 10 секунд | Секунд | Секунд, 1 дэх дохиолол | 00-59 | |||||
0x08 | A1M2 | 10 минут | минут | Минут, 1 дэх дохиолол | 00-59 | |||||
0x09 | A1M3 | 12/24 | ҮДЭЭС ӨМНӨ ҮДЭЭС ХОЙШ | 10 цаг | Цаг | Цаг, 1-р сэрүүлэг | 1-12 + AM/PM эсвэл 00-23 | |||
10 цаг | ||||||||||
0х0А | A1M4 | DY/DT | 10 дахь | Өдөр | Долоо хоногийн өдөр, 1 дэх дохиолол | 1-7 | ||||
Тоо | Огноо, 1 дэх дохиолол | 01-31 | ||||||||
0x0B | A2M2 | 10 минут | минут | Минут, 2 дахь дохиолол | 00-59 | |||||
0х0С | A2M3 | 12/24 | ҮДЭЭС ӨМНӨ ҮДЭЭС ХОЙШ | 10 цаг | Цаг | Цаг, 2 дахь сэрүүлэг | 1-12 + AM/PM эсвэл 00-23 | |||
10 цаг | ||||||||||
0x0D | A2M4 | DY/DT | 10 дахь | Өдөр | Долоо хоногийн өдөр, 2 дахь дохиолол | 1-7 | ||||
Тоо | Огноо, 2 дахь дохиолол | 01-31 | ||||||||
0x0E | EOSC | BBSQW | ХӨВ | RS2 | RS1 | INTCN | A2IE | A1IE | Тохиргооны бүртгэл (Хяналт) | |
0x0F | O.S.F. | 0 | 0 | 0 | EN32 кГц | BSY | A2F | A1F | Статусын бүртгэл | |
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-ийн утга нь цаг үүсгэгч зогссон гэсэн үг бөгөөд энэ үйл явдал дараах тохиолдолд тохиолдож болно.
Нэгэнт тохируулсны дараа битийн утга өөрчлөгдөхгүй бөгөөд битийг гараар дахин тохируулах шаардлагатай.
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 секундын турш түр зогсоодог бөгөөд энэ хугацаанд үлдсэн регистрүүдийг дахин бичих шаардлагатай.
Би цагийг PIC16F628A микроконтроллерт холбож, ашигласан. Холболтын диаграммыг доор харуулав.
Эрчим хүч асгасны дараа индикаторууд дээр зураас (– – – – – –) гарч ирэх бөгөөд дараа нь цагийг эхлүүлж, цагийн утга нь индикаторууд дээр 1 секундын сааталтайгаар гарч ирэх бөгөөд энэ нь цаг үүсгэгчийг эхлүүлэхэд шаардлагатай болно. Шалгуур үзүүлэлтүүд нь цаг, минут, секундийг аравтын бутархайгаар тусгаарлаж харуулдаг бөгөөд цагийн формат нь 24 цаг байна. SB1 "Заалт" товчийг ашиглан дэлгэцийн форматыг өөрчлөх боломжтой бөгөөд индикаторууд нь температур, мөн 2 Гц давтамжтайгаар анивчдаг аравтын бутархайгаар тусгаарлагдсан цаг, минутын утгыг харуулах болно. Температурыг бутархай хэсэггүйгээр харуулдаг бөгөөд програм нь зөвхөн 0x11 хаяг дахь температурын хадгалалтын өндөр байтыг уншдаг.
Цагийн утгыг 1-р дохиоллын дохиогоор удирддаг SQW/INT шугам дээрх тасалдлаар дамжуулан цагнаас уншдаг бөгөөд цагийг эхлүүлэх үед сэрүүлгийн цагийг хоёр дахь дохио болгон тохируулдаг. HL1 LED нь индикатор болж, тасалдлын дохиогоор секунд тутамд анивчдаг. I2C интерфэйсээр өгөгдөл дамжуулахад алдаа гарсан тохиолдолд HL2 LED асдаг.
Нэмж дурдахад би SB2 "Тохиргоо", SB3 "Суулгах" товчлууруудыг ашиглан цагийг тохируулах боломжийг хөтөлбөрт нэмсэн. Тохируулах горимд SB2 товчлуурыг дарж орно; үзүүлэлтүүд минут, секундын оронд 00 цаг, зураасаар харагдана (00 – – – –). SB3 товчлуурыг ашигласнаар та цагийн утгыг тохируулж (товших бүрт нэмэгдэнэ), дараа нь SB2 товчийг дарснаар минутыг засварлана; зураасны оронд 00 минут гарч ирнэ. SB3 товчлуур нь шаардлагатай утгыг тохируулах гэх мэт. Секундыг засварлаж, SB2 товчийг дарсны дараа цагны цагийг дахин бичиж, шинэчлэгдсэн цагийг индикаторууд дээр харуулна.
Хөтөлбөрийн хэсэгчилсэн кодыг доор өгөв (бүтэн хувилбарыг нийтлэлийн төгсгөлд татаж авах боломжтой):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #оруулна
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #оруулна 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-р сэрүүлгийн секундын бүртгэлийн хаягийг тохируулах |
Онцлог шинж чанарууд:
Хэрэглээ:
DS3231-ийн ердийн холболтын диаграм:
Ерөнхий тайлбар:
DS3231 нь өндөр нарийвчлалтай бодит цагийн цаг (RTC) бөгөөд суурилуулсан I 2 C интерфэйс, температурыг нөхдөг болор осциллятор (TCXO) ба кварцын резонатортой. Төхөөрөмж нь нөөцийн бие даасан тэжээлийн эх үүсвэрийг холбох оролттой бөгөөд энэ нь үндсэн тэжээлийн хүчдэл унтарсан ч цаг хэмжигч, температурыг хэмжих боломжийг олгодог. Баригдсан кварцын резонатор нь төхөөрөмжийн ашиглалтын хугацааг нэмэгдүүлж, шаардлагатай тооны гаднах элементүүдийг багасгадаг. DS3231 нь арилжааны болон үйлдвэрлэлийн температурын хувилбаруудад байдаг бөгөөд 300 миль 16 зүү SO багцад савлагдсан.
RTC нь секунд, минут, цаг, долоо хоногийн өдрүүд, сар, жилийн өдрүүдийг тоолох боломжийг олгодог. Сарын дуусах огноог өндөр жилүүдийг харгалзан автоматаар тодорхойлно. Бодит цагийн цаг нь 24 эсвэл 12 цагийн форматаар ажилладаг бөгөөд өдрийн хагасыг (AM/PM) заана. Төхөөрөмж нь өдөр тутмын хоёр дохиололтой, програмчлагдсан давтамжтай дөрвөлжин долгионы гаралттай. Төхөөрөмжтэй өгөгдөл солилцох нь суурилуулсан цуваа I 2 C-тэй нийцтэй интерфейсээр явагддаг.
". DS3231 бодит цагийн цагийн модультай танилцацгаая. Энэхүү нийтлэлд DS гэр бүлийн модулиудыг Arduino руу холбох видео заавар, програмын жагсаалт, зорилго, аргуудыг багтаасан болно.
DS3231 бодит цагийн цагийн модуль
Бодит цагийн цагийн модуль- энэ нь хронометрийн өгөгдлийг (одоогийн цаг, огноо, долоо хоногийн өдөр гэх мэт) бүртгэх зориулалттай цахим хэлхээ бөгөөд бие даасан тэжээлийн эх үүсвэр, бичлэг хийх төхөөрөмжөөс бүрдсэн систем юм.
DS3231 модульЭнэ нь үндсэндээ энгийн цаг юм. Arduino самбарууд нь цаг хугацааны мэдрэгчтэй байдаг Миллис, гэхдээ энэ нь зөвхөн самбарт тэжээл өгөх үед л ажилладаг. Хэрэв та Arduino-г унтрааж, дараа нь асаавал Миллисын цаг тэг болно. Мөн DS3231 нь самбар дээр батерейтай бөгөөд Arduino самбарыг салгасан ч гэсэн модулийг "цаах" болгож, цагийг хэмжих боломжийг олгодог.
Энэ модулийг Arduino самбар дээр суурилсан цаг эсвэл сэрүүлэг болгон ашиглаж болно. Эсвэл янз бүрийн системүүдийн сэрэмжлүүлэг болгон, жишээлбэл, Ухаалаг гэрт.
DS3231 техникийн үзүүлэлтүүд:
32К— Гаднах эрчим хүчийг >12V-оос хангах зориулалттай гаралт.
S.Q.W.— Програмчлагдах квадрат долгионы дохионы гаралт.
SCL– Энэ зүүгээр дамжуулан I2C интерфейсээр дамжуулан цагтай өгөгдөл солилцдог.
S.D.A.– Цагны өгөгдлийг энэ зүүгээр дамжуулдаг.
VCC– Бодит цагийн цахилгаан хангамж, 5 вольт шаардлагатай. Хэрэв энэ зүү дээр хүчдэл байхгүй бол цаг унтах горимд шилждэг.
GND- Дэлхий.
Өөр өөр 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 цагаас цагийг тоолж эхэлдэг.
Хичээлийн бичлэгүүд:
Өнөөдөр бид төгс бодит цагийн цаг (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 интерфейсийг ашиглан регистрүүдийг уншихтай холбоотой дээр дурдсан бүх зүйлийг харуулав.
Чип хаяг:
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 микроконтроллерийн хөгжүүлэлтийн самбар ашиглан уг хэлхээг угсарч, дибаг хийсэн.
Товчлуурын зорилго:
32 кГц зүү нь болор давтамжийг удирдахад ашиглаж болно. Бид давтамж хэмжигч эсвэл осциллографыг энэ зүү рүү холбож, давтамжийг хянадаг.
Осциллограммын дэлгэцийн зургаас харахад давтамж нь ойролцоогоор 32.768 кГц-тэй тохирч байна (ойролцоогоор давтамжийн хэмжилтийн нарийвчлалын хязгаарлалтаас шалтгаалан "нүдээр" нарийн тодорхойлоход хэцүү байдаг).
Үүний үр дүнд дараах шинж чанаруудтай цаг гарч ирэв.
Дүгнэж хэлье. 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 батерейгаар ажилладаг тул огноо, цагийг тохируулаагүй.