DS3231 չիպը բարձր ճշգրտության RTC իրական ժամանակի ժամացույց է, որն ունի ներկառուցված ջերմաստիճանով փոխհատուցվող քվարց տատանվող, որի արդյունքում ժամանակի շեղում է կազմում տարեկան ընդամենը ±2 րոպե: Բացի այդ, իրականացվում է ազդանշանային ֆունկցիա, և կա նաև ընդհատման ելք: Ժամացույցը կարելի է ձեռք բերել որպես պատրաստի Arduino մոդուլ՝ ամրացնող տարրերով և մարտկոցի խցիկով։
Ես պատվիրեցի մոդուլը այստեղ: Դիագրամը ներկայացված է ստորև նկարում.
Միկրոշրջանն օգտագործում է լայնորեն կիրառվող . Աջակցում է ստանդարտ (100 կՀց) և բարձր (400 կՀց) տվյալների արագությանը: I2C ավտոբուսի միկրոսխեմայի հասցեն (7 բիթ) 1101000 է: Բացի այդ, մոդուլն ունի I2C հիշողություն (24C32), որը ցույց չի տրված դիագրամում:
Միկրոշրջանի սնուցման լարումը կարող է լինել 2,3...5,5 Վ-ի սահմաններում, կա երկու հոսանքի գիծ՝ արտաքին աղբյուրի (Vcc line), ինչպես նաև մարտկոցի (Vbat) համար։ Արտաքին աղբյուրի լարումը մշտապես վերահսկվում է, և երբ այն իջնում է Vpf=2.5V շեմից ցածր, այն անցնում է մարտկոցի գծին: Հետևյալ աղյուսակը ցույց է տալիս էլեկտրահաղորդման գծերի միջև անցման պայմանները.
Ժամացույցի ճշգրտությունը պահպանվում է շրջակա միջավայրի ջերմաստիճանի մոնիտորինգի միջոցով: Միկրոշրջանն սկսում է ժամացույցի գեներատորի հաճախականությունը կարգավորելու ներքին ընթացակարգը, ճշգրտման չափը որոշվում է հաճախականության և ջերմաստիճանի հատուկ գրաֆիկի միջոցով: Գործընթացը սկսվում է հոսանքի միացումից հետո, այնուհետև կատարվում է յուրաքանչյուր 64 վայրկյանը մեկ:
Լիցքավորումը պահպանելու համար, երբ մարտկոցը միացված է (լարումը կիրառվում է Vbat գծի վրա), ժամացույցի գեներատորը չի գործարկվում այնքան ժամանակ, քանի դեռ Vcc գծի լարումը չի գերազանցում Vpf շեմային արժեքը, կամ միկրոշրջանի ճիշտ հասցեն չի փոխանցվում միջոցով: I2C ինտերֆեյսը: Ժամացույցի գեներատորի գործարկման ժամանակը մեկ վայրկյանից պակաս է: Էլեկտրաէներգիայի կիրառումից (Vcc) կամ հասցեն I2C ինտերֆեյսի միջոցով ստացվելուց մոտավորապես 2 վայրկյան հետո սկսվում է հաճախականության ուղղման ընթացակարգը: Ժամացույցի գեներատորը սկսելուց հետո այն շարունակում է աշխատել այնքան ժամանակ, քանի դեռ առկա է Vcc կամ Vbat: Երբ առաջին անգամ միացված է, ամսաթվի և ժամի գրանցամատյանները վերակայվում են և ունեն հետևյալ արժեքները՝ 01/01/00 – 01 – 00/00/00 (օր/ամիս/տարի/ – շաբաթվա օր – ժամ/րոպե / վայրկյան):
Ընթացիկ սպառումը, երբ սնուցվում է 3,63 Վ մարտկոցով, կազմում է 3 µA, I2C ինտերֆեյսի միջոցով տվյալների փոխանցման բացակայության դեպքում: Առավելագույն հոսանքի սպառումը կարող է հասնել 300 µA-ի, երբ օգտագործում եք արտաքին 5,5 Վ սնուցման աղբյուր և տվյալների փոխանցման բարձր I2C արագություն:
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 | AM/PM | 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 | AM/PM | 10 ժամ | Ժամ | Ժամացույց, 1-ին զարթուցիչ | 1-12 + AM/PM կամ 00-23 | |||
10 ժամ | ||||||||||
0x0A | A1M4 | DY/DT | 10-րդ | Օր | Շաբաթվա օր, 1-ին ահազանգ | 1-7 | ||||
Թիվ | Ամսաթիվ, 1-ին ահազանգ | 01-31 | ||||||||
0x0B | A2M2 | 10 րոպե | րոպե | Րոպե, 2-րդ ահազանգ | 00-59 | |||||
0x0C | A2M3 | 12/24 | AM/PM | 10 ժամ | Ժամ | Ժամացույց, 2-րդ զարթուցիչ | 1-12 + AM/PM կամ 00-23 | |||
10 ժամ | ||||||||||
0x0D | A2M4 | DY/DT | 10-րդ | Օր | Շաբաթվա օր, 2-րդ ահազանգ | 1-7 | ||||
Թիվ | Ամսաթիվ, 2-րդ ահազանգ | 01-31 | ||||||||
0x0E | EOSC | BBSQW | CONV | RS2 | RS1 | INTCN | A2IE | A1IE | Կարգավորումների ռեգիստր (Control) | |
0x0F | Օ.Ս.Ֆ. | 0 | 0 | 0 | EN32 կՀց | BSY | A2F | A1F | Կարգավիճակի գրանցում | |
0x10 | ՆՇԱՆ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | Ծերացման օֆսեթ ռեգիստր | |
0x11 | ՆՇԱՆ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | Ջերմաստիճանի ռեգիստր, բարձր բայթ | |
0x12 | ՏՎՅԱԼՆԵՐ | ՏՎՅԱԼՆԵՐ | 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) պարունակում է Century bit (7-րդ բիթ), որը փոխվում է, երբ տարիների հաշվառման ռեգիստրը (հասցե 0x06) հորդում է 99-ից մինչև 00: .
DS3231 չիպն իրականացնում է երկու զարթուցիչ, 1-ին զարթուցիչը կազմաձևված է ռեգիստրների միջոցով՝ 0x07-0x0A հասցեներով, 2-րդ զարթուցիչը կազմաձևված է 0x0B-0x0D ռեգիստրների միջոցով: A1Mx և A2Mx բիթերը կարող են օգտագործվել ահազանգերի տարբեր ռեժիմներ կարգավորելու համար, բիթը սահմանելը բացառում է համապատասխան ռեգիստրը համեմատական գործողությունից: Ստորև բերված աղյուսակները ցույց են տալիս բիթերի համակցությունները տարբեր ազդանշանային ռեժիմների համար.
Աղյուսակներում չնշված բիթերի համակցությունները հանգեցնում են ահազանգերի սխալ աշխատանքի: Եթե DY/DT բիթը ջնջված է, ապա ամսաթվի համընկնումը (ամսվա օրը) վերահսկվում է զարթուցիչի համար, երբ DY/DT բիթը սահմանվում է, ստուգվում է շաբաթվա օրվա համապատասխանությունը:
Գործառույթների մեծ մասը կազմաձևված է Control ռեգիստրում: EOSC բիթը վերահսկում է ժամացույցի գեներատորի մեկնարկը, բիթը զրոյացնելով՝ գործարկում է ժամացույցի գեներատորը: Բիթի կարգավորումը դադարեցնում է գեներատորը միայն մարտկոցի ռեժիմի համար (Vbat): Երբ սնուցվում է արտաքին աղբյուրից (Vcc), տատանվողը միշտ աշխատում է անկախ EOSC-ի բիտի վիճակից: Երբ միացված է, բիթերի կանխադրված արժեքը 0 է:
BBSQW բիթի կարգավորումը թույլ է տալիս INT/SQW ելքին (3-րդ փին) աշխատել մարտկոցի էներգիայի ռեժիմում, արտաքին հոսանքի բացակայության դեպքում: Երբ բիթը սահմանվում է զրոյի, INT/SQW ելքը անցնում է 3-րդ վիճակին (անջատված), եթե արտաքին աղբյուրի Vcc լարումը ընկնում է Vpf շեմային արժեքից ցածր: Հոսանքի կիրառումից հետո բիթերի կանխադրված արժեքը 0 է:
CONV բիթը պատասխանատու է հարկադիր ջերմաստիճանի չափման համար, բիթը դնելով սկսվում է փոխակերպման գործընթացը, որի ընթացքում կարգավորվում է նաև ժամացույցի գեներատորի հաճախականությունը, չափման արդյունքը գտնվում է 0x11, 0x12 հասցեներով գրանցամատյաններում: Սկսելը հնարավոր է միայն այն դեպքում, եթե նախորդ փոխարկումն ավարտված է, նախքան սկսելը, դուք պետք է ստուգեք զբաղված դրոշը BSY: Ջերմաստիճանի հարկադիր փոխակերպումը չի ազդում ներքին 64 վայրկյան հաճախականության ճշգրտման ցիկլի վրա: CONV բիթը սահմանելը չի ազդում BSY դրոշի վրա 2 ms. 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 արժեքը:
Ծերացման օֆսեթ ռեգիստրը նախատեսված է ժամացույցի գեներատորի հաճախականությունը կարգավորելու համար: Ռեգիստրի արժեքը ավելացվում է տատանվող հաճախականությանը ներքին ճշգրտման ընթացակարգի ընթացքում, եթե հայտնաբերվում է ջերմաստիճանի փոփոխություն, ինչպես նաև, երբ ջերմաստիճանի փոխարկումը հրահրվում է 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 հասցեում:
Ժամանակի արժեքը կարդացվում է ժամացույցից SQW/INT գծի ընդհատման միջոցով, որը կառավարվում է 1-ին տագնապի ազդանշանով, ժամացույցի սկզբնավորման ժամանակ զարթուցիչը դրվում է յուրաքանչյուր երկրորդ ազդանշանի վրա: HL1 LED-ը ծառայում է որպես ցուցիչ և թարթում է ընդհատման ազդանշանի ժամանակ ամեն վայրկյան: HL2 LED-ը վառվում է, եթե I2C ինտերֆեյսի միջոցով տվյալների փոխանցման ժամանակ սխալ կա:
Բացի այդ, ես ծրագրին ավելացրի ժամացույցը կարգավորելու հնարավորությունը, օգտագործելով 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-ի միջոցով ջերմաստիճանի հավասարում 0026h;ջերմաստիճանի ռեգիստր perem_1 equ 0027h ;BCD օժանդակ ռեգիստր արդյունքը հավասար է 0028h ;երկու-տասնորդական փոխարկիչի օժանդակ ռեգիստր dat_ind equ 0029h ;տվյալների ռեգիստր spi արձանագրության միջոցով փոխանցման համար adr_ind equ 002Ah ;հասցեների գրանցում spi արձանագրության միջոցով փոխանցման համար երկրորդ հավասարումը 002Bh ;վայրկյանների պահպանման ռեգիստր՝ ժամանակը սահմանելու համար minut equ 002Ch ;րոպե պահման ռեգիստր՝ ժամանակը սահմանելու համար ժամ հավասարաչափ 002Dh ;ժամային պահեստային ռեգիստր՝ ժամանակը սահմանելու համար adr_i2c equ 002Eh ;i2c ինտերֆեյսի տվյալների փոխանցման ենթածրագրի գրանցումներ tmp_i2c equ 002Fh slave_adr equ 0030h data_i2c equ 0031h դրոշի հավասարում 007Fh; դրոշի ռեգիստր #ՍԱՀՄԱՆԵԼ int PORTB,0 ;ընդհատվող գիծ INT/SQW DS3231 #DEFINE sda PORTB,1 ;SDA գիծ DS3231-ը միացնելու համար #DEFINE scl PORTB,2 ;SCL գիծ DS3231-ը միացնելու համար #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 ;Սահմանել կոճակ - սահմանել ժամացույցի արժեքը ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ;սկսել ծրագրի կատարումը 0000h հասցեից goto Սկսել ;գնալ Սկսել պիտակին ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Հիմնական ծրագիր Սկսեք movlw b"00000000"; սահմանեք A նավահանգստի ելքային սողնակների արժեքները movlw b"01000000"; սահմանել B պորտի ելքային սողնակների արժեքները movlw b"00000111" ;անջատել համեմատիչները bsf STATUS,RP0 ;ընտրեք 1-ին բանկը movlw b"00000111" ;B պորտի մուտքային/ելքային գծերի կարգավորում movwf TRISB ;RB0-RB2 - մուտքին, մնացածը ելքին movlw b"11111111" ;Ա նավահանգստի մուտքային/ելքային գծերի կարգավորում movwf TRISA ;բոլոր տողերը մուտքագրելու համար bcf STATUS,RP0 ;ընտրեք բանկ 0 clrf flag ;վերականգնել դրոշի ռեգիստրը զանգահարել init_lcd ;զանգել վարորդի սկզբնավորման ռեժիմը (MAX7219) զանգահարեք viv_not ;արտադրեք « ------» գծանշանները ցուցիչներին ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; movlw b"11010000" ;սարքի հասցեն (DS3231) ;գրեք 4 բայթ ստացող/փոխանցող ռեգիստրներին i2c-ի միջոցով 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-ն, Millis-ի ժամանակը կզրոյացվի: Իսկ DS3231-ն ունի մարտկոց, որը նույնիսկ այն ժամանակ, երբ Arduino տախտակն անջատված է, շարունակում է «սնուցել» մոդուլը՝ թույլ տալով չափել ժամանակը:
Մոդուլը կարող է օգտագործվել որպես ժամացույց կամ զարթուցիչ՝ հիմնված Arduino տախտակների վրա: Կամ որպես ահազանգ տարբեր համակարգերի համար, օրինակ՝ Smart Home-ում:
DS3231 Տեխնիկական պայմաններ.
32K— Արտաքին էներգիա մատակարարելու համար նախատեսված ելք >12 Վ.
S.Q.W.— Ծրագրավորվող քառակուսի ալիքի ազդանշանի ելք:
SCL– Այս փին-ի միջոցով տվյալները փոխանակվում են ժամացույցի հետ I2C ինտերֆեյսի միջոցով:
Ս.Դ.Ա.– Ժամացույցի տվյալները փոխանցվում են այս փինով:
VCC– Էլեկտրաէներգիայի մատակարարում իրական ժամանակի ժամացույցի համար, պահանջվում է 5 վոլտ: Եթե այս քորոցին լարում չկա, ժամացույցը անցնում է քնի ռեժիմի:
GND- Երկիր:
SDA և SCL կապում տարբեր Arduino տախտակների վրա.
Ս.Դ.Ա. | SCL | |
ՄԱԿ | A4 | A5 |
Մինի | A4 | A5 |
Նանո | A4 | A5 |
Mega2560 | 20 | 21 |
Լեոնարդո | 2 | 3 |
Եկեք միացնենք իրական ժամանակի ժամացույցի մոդուլը Arduino UNO-ին: SDA - pin A4, SCL - pin A5:
Հետևյալ ծրագիրը հարմար է մոդելի աշխատանքի համար (կարող եք պարզապես պատճենել ծրագիրը Arduino IDE-ում).
#ներառում
void setup() (
ուշացում (300);
Serial.begin (9600);
time.begin();
}
void loop ()
}
}
Այս էսքիզում ժամանակը պարզապես հաշվում է։
Առաջին հերթին sktech-ում միացրեք գրադարանը iarduino_RTC.h.
Այնտեղ նշեք ձեր մոդուլի ճշգրիտ անվանումը՝ դրա հետ ճիշտ աշխատելու համար։
Արդյունքում մենք ստանում ենք ժամանակի ելք DS3231 մոդուլից դեպի պորտի մոնիտոր: Ցուցադրվում են ժամեր, րոպեներ, վայրկյաններ:
Հաջորդ էսքիզում մենք կավելացնենք ֆունկցիա սահմանված ժամանակ, որը թույլ է տալիս սահմանել նախնական հետհաշվարկի ժամանակը:
#ներառում
iarduino_RTC ժամանակ (RTC_DS3231);
void setup() (
ուշացում (300);
Serial.begin (9600);
time.begin();
time.settime(0,0,18,24,04,17,1); // 0 վրկ, 0 րոպե, 18 ժամ, 24 ապրիլի, 2017, երկուշաբթի
}
void loop ()
if(millis()%1000==0)( // եթե անցել է 1 վայրկյան
Serial.println (time.gettime ("d-m-Y, H:i:s, D")); // ցուցադրման ժամանակը
ուշացում (1); // դադար 1 ms-ով, որպեսզի ժամը 1 ms-ում մի քանի անգամ չցուցադրվի
}
}
Օրինակում ժամանակը սկսում է հաշվել 0 վրկ, 0 րոպե, ժամը 18, 2017 թվականի ապրիլի 24, երկուշաբթի:
Դասի գրառումներ.
Այսօր մենք կշարունակենք իրական ժամանակի ժամացույցի (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 չիպով, որն ամենից հաճախ անհրաժեշտ չէ, այն միայն ավելացնում է քաշը.
Բացի անհրաժեշտ մասերից, մոդուլի տախտակի վրա կա նաև լուսադիոդ, որի ֆունկցիան տերմինալներին հոսանքի միացումը ցույց տալն է։ Հավանաբար հենց գեղեցկության համար են մատուցել:
Այն, ինչ կարևոր է իմանալ իրական ժամանակի նման ժամացույցի չիպի հետ աշխատելիս, այն է, թե ինչպես կարելի է դրանից տվյալներ հանել կամ գրել այնտեղ: Ժամացույցն ունի I 2 C ինտերֆեյս: Տվյալներ գրելու համար (և դա նաև անհրաժեշտ է տվյալները կարդալու համար), դուք պետք է անցնեք մեկնարկի պայմանը (այս հրամաններն իրականացվում են I 2 C ապարատային կամ ծրագրային ապահովման միջոցով: միկրոկոնտրոլեր), այնուհետև փոխանցեք չիպի հասցեն բիթային գրառումով, այնուհետև փոխանցեք ռեգիստրի հասցեն, որին մենք մուտք կգործենք, և այնուհետև փոխանցեք տվյալների մեկ բայթ այս ռեգիստրին, եթե այնուհետև փոխանցեք մեկ այլ բայթ տվյալ, դա կլինի գրված է հաջորդ գրանցամատյանում և այլն: Ավարտելուց հետո դուք պետք է անցնեք կանգառի պայման: Վերոհիշյալի գրաֆիկական ներկայացումը նկարում.
Տվյալների գրանցումը պահանջվում է սկզբնական տեղադրման, ինչպես նաև ընթացիկ ժամանակը սահմանելու համար: Հաջորդը, մենք պետք է անընդհատ տվյալներ ստանանք ընթացիկ ժամի և ամսաթվի մասին: Դա անելու համար անհրաժեշտ է կարդալ այս տեղեկատվությունը պահող ռեգիստրներից: Ընթերցանությունը բաղկացած է երկու ընթացակարգից՝ ցանկալի ռեգիստրի վրա ցուցիչ դնելը և այն կարդալը: Ցանկալի ռեգիստրին ցուցիչ դնելու համար անհրաժեշտ է անցնել մեկնարկի պայմանը, այնուհետև փոխանցել չիպի հասցեն գրման բիթով և բայթ ռեգիստրի հասցեով: Հաջորդը կա՛մ կանգառի պայման է, ապա՝ մեկնարկի պայման, կա՛մ պարզապես վերագործարկում: Այժմ երկրորդ ընթացակարգը ուղղակիորեն ընթերցվում է գրանցամատյաններից: Մեկնարկը փոխանցվում է, այնուհետև պետք է կարդալ միկրոսխեմայի հասցեն կարդալու բիթով և այնուհետև կարդալ ռեգիստրները անհրաժեշտ թվով, իսկ ավարտից հետո փոխանցել կանգառի վիճակը: Եթե ռեգիստրից տեղեկատվությունը կարդացվել է, ցուցիչը ինքնաբերաբար տեղափոխվում է հաջորդ ռեգիստր՝ առանց միկրոկառավարիչի (սարքի վարպետի) կողմից ավելորդ գործողությունների: Նկարը ցույց է տալիս այն ամենը, ինչ ասվել է վերևում I 2 C ինտերֆեյսի օգտագործմամբ ռեգիստրների ընթերցման վերաբերյալ.
Չիպի հասցե.
C ծածկագիրը կունենա հետևյալ տեսքը.
// ֆունկցիաներ ժամացույցով ============================================ ================================================== ================== ======== // սկզբնական կարգավորումները void RTC_init(void)( i2c_start_cond(); // starting i2c i2c_send_byte (RTC_adr_write); // սարքի հասցեի փոխանցում, ձայնագրման ռեժիմ i2c_send_byte (0x0E); // հիշողության հասցեի փոխանցում i2c_send_byte (0b00100000); // ջերմաստիճանի փոխակերպման մեկնարկ և ելք 1 Հց հաճախականությամբ i2c_send_byte (0b00001000); // միացնել 3-ի կոճակը // դադարեցնել i2c) // ստանալ ժամը և ամսաթիվը void 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); / / սարքի հասցեն փոխանցող, ընթերցման ռեժիմ վրկ = bcd (i2c_get_byte (0)); // կարդալ վայրկյան, ACK minte 2 c_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) // սահմանել ժամը void RTC_write_time(unsigned char hour1, unsigned char min1, unsigned char sec1)(i2c_start_cond(); // start i2c i2c_send_byte(RTC_adr_write); // փոխանցել սարքի հասցեն՝ i2tec_գրառումներով: 0x00); // հիշողության հասցեի փոխանցում i2c_send_byte(bin(sec1)); // 0x00 վայրկյան (նպատակահարմար է նաև նշել վայրկյանները): i2c_send_byte(bin(min1)); // 0x01 րոպե i2c_send_byte(bin(hour1)) ; // 0x02 ժամացույց i2c_stop_cond(); // դադարեցնել i2c) // սահմանել ամսաթիվը void RTC_write_date (չստորագրված նիշ wday, անստորագիր նիշերի օր, անստորագիր նիշերի ամիս, անստորագիր նիշերի տարի) ( i2c_start_cond (); //byte_write_2 // փոխանցել սարքի հասցեները, ձայնագրման ռեժիմ 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(bin(ամիս)); // 0x05 ամիս i2c_send_byte(bin(տարի)); // 0x06 տարի i2c_stop_cond(); // դադարեցնել i2c) // կարդալ ջերմաստիճանը void RTC_read_temper(void)( i2c_start_cond(); // սկսել i2c i2c_send_byte(RTC_adr_write); // փոխանցել սարքի հասցեն, գրելու ռեժիմ i2c_send_byte(0x11); // փոխանցել վերին հիշողության հասցեն i2c (); // դադարեցնել 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 փաթեթում, այնպես էլ SMD տարբերակում՝ TQFP-32 փաթեթում: Ռեզիստոր R3-ն անհրաժեշտ է միկրոկառավարիչի ինքնաբուխ վերագործարկումը կանխելու համար PC6 պտուտակի վրա պատահական աղմուկի դեպքում: Ռեզիստորը R3-ն ավելացնում է հզորությունը դեպի այս քորոցը՝ հուսալիորեն ստեղծելով ներուժ դրա վրա: Ցուցադրման համար օգտագործվում է հեղուկ բյուրեղյա էկրան (LCD): Ես օգտագործել եմ 2004A էկրանը՝ 20 նիշից բաղկացած 4 տողն ավելի շատ է գեղեցկության համար, այնպես որ կարող եք օգտագործել ավելի ծանոթ էկրան՝ 2 տող 16 նիշից: LCD էկրանը միացված է միկրոկոնտրոլերին՝ օգտագործելով չորս բիթանոց համակարգ: Փոփոխական ռեզիստոր R2 անհրաժեշտ է էկրանի նիշերի հակադրությունը կարգավորելու համար: Պտտելով այս ռեզիստորի սահիչը՝ մենք մեզ համար հասնում ենք էկրանի ամենապարզ ընթերցումները: LCD էկրանի հետևի լուսավորությունը կազմակերպվում է ցուցադրման տախտակի վրա գտնվող «A» և «K» պտուտակների միջոցով: Հետևի լույսը միացված է ընթացիկ սահմանափակող ռեզիստորի միջոցով՝ R1: Որքան բարձր է արժեքը, այնքան ավելի մթագնում է էկրանը լուսավորված: Այնուամենայնիվ, այս դիմադրությունը չպետք է անտեսվի, որպեսզի խուսափի հետևի լույսի վնասից: S1 - S4 կոճակները կառավարում են ժամացույցի կարգավորումները: LED-ը ցույց է տալիս, որ ահազանգը միացել է: LED-ը կարող է փոխարինվել ինչ-որ ձայնային սխեմայով: R5 - R8 ռեզիստորները ձգվող են և անհրաժեշտ են ժամացույցի չիպի տերմինալներում ուղղանկյուն իմպուլսների ձևավորման համար: Սա անհրաժեշտ է նաև I2C արձանագրության ճիշտ աշխատանքի համար։ Շղթան սնուցելու համար օգտագործվում է L7805 գծային կայունացուցիչ չիպ, այն կարող է փոխարինվել KR142EN5A հինգ վոլտ գծային կայունացուցիչի կենցաղային անալոգով, կամ կարող եք օգտագործել մեկ այլ լարման կայունացուցիչ չիպ՝ դրա միացմանը համապատասխան միացումում (օրինակ. LM317 կամ անջատիչ կայունացուցիչներ LM2576, LM2596, MC34063 և այլն): Հաջորդը, 5 վոլտը կայունացվում է մեկ այլ միկրոշրջանով՝ AMS1117 տարբերակով, որը տալիս է 3,3 վոլտ ելք: Ժամացույցի չիպը, ըստ տվյալների թերթիկի, սնուցվում է 3,3 վոլտ լարման միջոցով: Այնուամենայնիվ, առավելագույն լարումը 5,5 վոլտ է: Հետևաբար, այս կայունացուցիչը կարող է օգտագործվել, թե ոչ, ձեր հայեցողությամբ: AMS1117 լարման կայունացուցիչը կարող է փոխարինվել նաև ADJ տարբերակով (AMS1117ADJ), այսինքն՝ կարգավորվող տարբերակով, այս ընտրությամբ ձեզ հարկավոր է սահմանել անհրաժեշտ լարումը:օգտագործելով երկու ռեզիստորներ, որոնք միացված են միկրոսխեմային՝ համաձայն դրա տվյալների թերթիկի:
Շղթան հավաքվել և կարգաբերվել է ATmega8 միկրոկառավարիչի զարգացման տախտակի միջոցով.
Կոճակների նպատակը.
32 կՀց հաճախականությունը կարող է օգտագործվել բյուրեղային հաճախականությունը վերահսկելու համար: Մենք միացնում ենք հաճախականության հաշվիչ կամ օսցիլոսկոպ այս փինին և վերահսկում հաճախականությունը.
Ինչպես երևում է օքսիլոգրամի սքրինշոթից, հաճախականությունը մոտավորապես համապատասխանում է 32,768 կՀց-ին (մոտավորապես հաճախականության չափումների լուծման սահմանափակումների պատճառով, և դժվար է այդքան ճշգրիտ որոշել «աչքով»):
Արդյունքում ստացվեց ժամացույց հետևյալ բնութագրերով.
Եկեք ամփոփենք. DS3231 իրական ժամանակի ժամացույցի չիպը հիանալի լուծում է: Ճշգրտությունը համեմատելի է որոշ DS1307 կամ ավելի բարձր մոդելների հետ, սակայն PCA/PCF2129-ը դեռ կարող է մրցակցել դրա հետ: Իրական ժամանակի ժամացույցի չիպերի շարքում, որոնք ես վերանայել եմ, այս օրինակը ներկայումս զբաղեցնում է առաջին տեղը ֆունկցիոնալության և ճշգրտության առումով:
Atmega8 միկրոկառավարիչը ծրագրավորելու համար դուք պետք է իմանաք ապահովիչների բիթերի կազմաձևումը (ծրագրում արված սքրինշոթ).
Հոդվածն ուղեկցվում է Atmega8 միկրոկառավարիչի որոնվածով, ծրագրում սխեմայի ձևավորում, ինչպես նաև ժամացույցի աշխատանքի տեսանյութ (հենց սկզբում զարթուցիչը կմիանա. LED-ը կվառվի):
Նշանակում | Տիպ | Դոնոմինացիա | Քանակ | Նշում | Խանութ | Իմ նոթատետրը |
---|---|---|---|---|---|---|
IC1 | MK AVR 8-bit | ATmega8 | 1 | Նոթատետրում | ||
IC2 | Իրական ժամանակի ժամացույց (RTC) | DS3231 | 1 | Նոթատետրում | ||
VR1 | Գծային կարգավորիչ | L7805AB | 1 | Նոթատետրում | ||
VR2 | Գծային կարգավորիչ | AMS1117-3.3 | 1 | Նոթատետրում | ||
VD1 | Ուղղիչ դիոդ | 1N4148 | 1 | Նոթատետրում | ||
C1 | 470 μF | 1 | Նոթատետրում | |||
C2, C3, C5, C7 | Կոնդենսատոր | 100 nF | 4 | Նոթատետրում | ||
C4 | Էլեկտրոլիտիկ կոնդենսատոր | 220 μF | 1 | Նոթատետրում | ||
C6, C8 | Էլեկտրոլիտիկ կոնդենսատոր | 10 μF | 2 | Նոթատետրում | ||
R1 | Ռեզիստոր | 22 Օմ | 1 | Նոթատետրում | ||
R2 | Հարմարվողական ռեզիստոր | 10 կՕհմ | 1 | 3296W-1-103LF |
Շատ սարքեր պահանջում են ժամանակագրական տվյալների մշտական գրանցում (ամսաթիվ, ժամ), այս ֆունկցիան իրականացվում է հատուկ էլեկտրոնային սխեմաների միջոցով, որոնք կոչվում են իրական ժամանակի ժամացույցներ: Ներկայումս իրական ժամանակի ժամացույցն իրականացվում է առանձին միկրոսխեմայի տեսքով, որին անհրաժեշտ է ավելացնել քվարցային ռեզոնատոր և ինքնավար սնուցման աղբյուր: Որոշ միկրոսխեմաներում ներսում կառուցված է քվարցային ռեզոնատոր: Այս ժամացույցներից մեկը չիպի վրա DS3231SN Ես այն գնել եմ իմ համարնախագծերը . Օրինակում ես իրական ժամանակի ժամացույցը միացնելու եմ չինական անալոգային Arduino UNO.
Դրանք ամբողջական ZS-042 մոդուլ են, որը կարելի է միացնել տարբեր սարքերի, ոչ միայն Arduino հարթակին:
Մոդուլը կառուցված է միկրոսխեմայի վրա DS3231SN որն ըստ էության իրական ժամանակի ժամացույց է: Ի տարբերություն հին ժամացույցի մոդելի, օրինակ DS1307 չիպի վրա, այս ժամացույցը պարունակում է ներքին քվարցային ռեզոնատոր, որի շնորհիվ ժամացույցն ունի ճշգրիտ ժամանակը։
Դուք կարող եք ժամացույց իրականացնել Arduino-ում առանց DS3231SN-ի, բայց հետո, եթե հոսանքազրկվի, ժամանակաչափի արժեքները զրոյացվում են:Այս նույն ժամացույցներն ունեն պահեստային հզորություն, ուստի եթե հոսանքն անջատվի, նրանք շարունակում են աշխատել:
Ժամացույցը կարող է հաշվել ժամեր, րոպեներ, վայրկյաններ, ամսաթվեր, ամիսներ, տարիներ (նահանջ տարիները հաշվի են առնվում մինչև 2100 թվականը)։ Նրանք աշխատում են 12 կամ 24 ժամ ռեժիմով, պարունակում են երկու զարթուցիչ, ինչպես նաև ունեն ներքին ջերմաչափ՝ -40°C-ից +85°C միջակայքով: Տարբեր սարքերին միանալու համար ժամացույցը միացված է I2C ինտերֆեյս.
ZS-042 մոդուլի վրա քորոցների գտնվելու վայրը և նպատակը.
S.Q.W.- Ծրագրավորվող քառակուսի ալիքի ազդանշանի ելք:
SCL– Այս կապի միջոցով տվյալները փոխանակվում են ժամացույցի հետ I2C ինտերֆեյսի միջոցով:
Ս.Դ.Ա.– Ժամացույցի տվյալները փոխանցվում են այս փինով:
VCC– Էլեկտրաէներգիայի մատակարարում իրական ժամանակի ժամացույցի համար, պահանջվում է 5 վոլտ: Եթե այս քորոցին լարում չկա, ժամացույցը անցնում է քնի ռեժիմի:
GND- Երկիր:
Միանալու համար Arduino UNO, Մենք ժամացույցի SDA փին միացնում ենք A4-ին, իսկ SCL փինը՝ A5-ին: Էլեկտրաէներգիայի մատակարարման համար օգտագործվում են GND(-) և VCC(+5v) կապերը:
SDA և SCL կապում տարբեր Arduino տախտակների վրա.
Ս.Դ.Ա. | SCL | |
ՄԱԿ | A4 | A5 |
Մինի | A4 | A5 |
Նանո | A4 | A5 |
Mega2560 | 20 | 21 |
Լեոնարդո | 2 | 3 |
Եկեք ժամացույցի մեջ տեղադրենք CR2032 մարտկոց, այդպիսի տարրեր օգտագործվում են համակարգիչների BIOS-ը սնուցելու համար։
Երբ USB մալուխը միացնում եք Arduino-ին, ժամացույցի լուսադիոդը պետք է լուսավորվի ՈՒԺ«(կարմիր LED):
Arduino IDE-ի միջոցով ժամացույցը ծրագրավորելու համար անհրաժեշտ է տեղադրել գրադարաններ։
Ներբեռնեք գրադարանը Ժամանակը և DS1307RTC.
Վերջին գրադարանը գրվել է DS1307 չիպի վրա ժամացույցի համար, սակայն դրա փոխազդեցության արձանագրությունները համատեղելի են DS3231-ի հետ, ուստի գրադարանը կհամապատասխանի մեր ժամացույցին:
Գրադարանները պետք է ներբեռնվեն, ապափաթեթավորվեն և տեղադրվեն թղթապանակում:գրադարաններ« Arduino IDE-ն գործարկելիս, նրանք օրինակներով պետք է հայտնվեն « Նմուշներ».
Սահմանեք ամսաթիվը և ժամը:
Դա անելու համար պատճենեք այս կոդը Arduino IDE-ում:
Ճիշտ կարգավորումների համար անհրաժեշտ է փոխել տողի տվյալները
setTime (13,35,0,22,12,2016);
Փակագծերում՝ ստորակետերով բաժանված, սահմանի՛ր ճիշտը՝ ժամ, րոպե, վայրկյան, օր, ամիս, տարի: Իմ օրինակում այն սահմանված է 13 ժամ 35 րոպե 0 վայրկյան, դեկտեմբերի 22, 2016 թ. Վերբեռնեք էսքիզը Arduino-ում:
Այժմ, ժամացույցի ընթերցումները կարդալու համար կարող եք օգտագործել օրինակը. Ֆայլ» - « Նմուշներ» - « DS1307RTC» - « ReadTest«Եվհետևում վերբեռնեք այն Arduino-ում:
Բացվող պատուհանը կցուցադրի ընթացիկ ամսաթիվը և ժամը: Եթե անջատեք ժամացույցի մոդուլի հոսանքը Arduino-ից, Arduino-ն չի կարողանա հետևել արժեքներին և որոշ ժամանակ անց հաղորդագրությունը « ... կարդալու սխալ:«(ընդգծված է կարմիրով): Էլեկտրաէներգիայի վերականգնումից հետո ամսաթիվը և ժամը կշարունակեն հետհաշվարկել: Ամսաթիվը և ժամը չեն վերակայվել, քանի որ ժամացույցը սնվում էր իր CR2032 մարտկոցից: