Բովանդակություն:

Arduino 3-ը 1-ում Timeամանակի և եղանակի ցուցադրում. 11 քայլ
Arduino 3-ը 1-ում Timeամանակի և եղանակի ցուցադրում. 11 քայլ

Video: Arduino 3-ը 1-ում Timeամանակի և եղանակի ցուցադրում. 11 քայլ

Video: Arduino 3-ը 1-ում Timeամանակի և եղանակի ցուցադրում. 11 քայլ
Video: Ինչպես պատրաստել LDmicro Arduino PLC I2C LCD- ով 2024, Հուլիսի
Anonim

Հետևեք հեղինակի ավելին ՝

Օգտագործելով ATtiny85
Օգտագործելով ATtiny85
Օգտագործելով ATtiny85
Օգտագործելով ATtiny85
Pi Powered Pie Partitioning and Polygon Pruning Tool
Pi Powered Pie Partitioning and Polygon Pruning Tool
Pi Powered Pie Partitioning and Polygon Pruning Tool
Pi Powered Pie Partitioning and Polygon Pruning Tool
Ձայնային ուժեղացուցիչի թվային կառավարման սարքեր
Ձայնային ուժեղացուցիչի թվային կառավարման սարքեր
Ձայնային ուժեղացուցիչի թվային կառավարման սարքեր
Ձայնային ուժեղացուցիչի թվային կառավարման սարքեր

Ինձ դուր են գալիս PIC միկրոկառավարիչները և ինձ դուր է գալիս ծրագրավորումը հավաքման լեզվով: Փաստորեն, վերջին մի քանի տարիների ընթացքում ես այդ համադրության հիման վրա տեղադրել եմ մոտ 40 նախագիծ իմ կայքում: Վերջերս ես որոշ մասեր էի պատվիրում ԱՄՆ -ի իմ ամենասիրած վաճառողներից մեկից և նկատեցի Arduino Nano- ն ՝ ծրագրավորման մալուխով, ընդամենը 1,20 դոլարով ավելի, քան մերկ ATMEGA328 պրոցեսորային չիպը: Այսպիսով, ես գնեցի դրանցից մի քանիսը: Այնուհետև ես ներբեռնեցի Arduino IDE- ն և մաքրեցի «C ++» ծրագրավորման իմ հիշողությունը:

Այս նախագիծը ժամացույցի խառնուրդ է, որն օգտագործում է GPS- ը ժամանակի համար և ՌԴ ընդունիչ, որը վերծանում է եղանակային հաղորդագրությունները սովորական AcuRite սենսորից: Արդյունքը փոքր մասշտաբի ժամանակի և ջերմաստիճանի ցուցադրում է: GPS ժամացույցը և եղանակի ռեժիմը կարգավորվում են որպես առանձին ֆայլեր, այնպես որ հեշտ է մտնել հիմնական առօրյան և կարգավորել այն, որպեսզի կատարի միայն ժամացույցի գործառույթը կամ պարզապես եղանակի գործառույթը: Պարզապես մեկնաբանեք համապատասխան «#սահմանումը» հիմնական առօրյայի վերևում, եթե ցանկանում եք միայն գործառույթներից մեկը:

Եթե երկու գործառույթներն էլ օգտագործվում են, ապա LCD- ի վերին տողում ցուցադրվում է տեղական ժամանակը, իսկ LCD- ի ներքևի տողում `խոնավությունը և ջերմաստիճանը ինչպես elsելսիուսի, այնպես էլ Ֆարենհեյթի ջերմաստիճանում: Եթե օգտագործվում է միայն ժամացույցի գործառույթը, ապա վերին տողում ցուցադրվում է տեղական ժամանակը, իսկ ներքևում ՝ UTC: Եթե օգտագործվում է միայն եղանակի գործառույթը, ապա վերին տողում ցուցադրվում է առաջին ստացված սենսորը, իսկ ներքևում `ցանկացած այլ ստացված սենսոր: Ես ավելացրի այդ հնարավորությունը, քանի որ ունեմ եղանակի երկու տվիչ:

Քայլ 1: Եղանակի ցուցիչ

Եղանակի տվիչ
Եղանակի տվիչ
Եղանակի տվիչ
Եղանակի տվիչ
Եղանակի տվիչ
Եղանակի տվիչ

Այստեղ օգտագործվող եղանակային սենսորը AcuRite- ը ջերմաստիճանի և խոնավության մասին տեղեկատվություն է ուղարկում ամեն 16 վայրկյանը մեկ: Հետևի վրա այն ցույց է տալիս 000592TXR մոդելի համարը, բայց այն սովորաբար գովազդվում է որպես 06002M մոդել: Այս սենսորը օգտագործվում է եղանակային կայանների շատ տարբեր մոդելների կողմից, այնպես որ այն հեշտ է գտնել, և ես կարողացա դրանք ձեռք բերել eBay- ում 20 դոլարից ցածր գնով: AcuRite- ն վաճառում է նման տեսքի սենսորներ իրենց որոշ եղանակային կայանների համար, սակայն դրանք կարող են հավատարիմ լինել կամ չկատարել նույն հաղորդակցության արձանագրությանը: Համացանցում կա որոշակի նշում, որ 00606 ջերմաստիճանի միայն սենսորը օգտագործում է հաղորդագրության նույն ձևաչափը, բայց խոնավության անվավեր բայթով:

Ինչպես երևում է վերևում ցուցադրված առաջին ալիքի ձևում, եղանակային հաղորդագրություններն ուղարկվում են պոռթկումներով ՝ հաջորդական հաղորդագրությունների միջև 2 մմ բացթողումով: Երկրորդ ալիքի ձևը, որը ցույց է տրված վերևում, ընդլայնում է մեկ հաղորդագրության մի մասը, որպեսզի տեսնի բիտերի տևողությունը և օրինաչափությունները: Կան չորս համաժամացման բիթեր, որոնք մոտ 600us բարձր են, որին հաջորդում է 600us ցածր: Տվյալների բիթերը ներկայացված են 400us բարձր, որին հաջորդում է 200us ցածր (1) կամ 200us բարձր, որին հաջորդում է 400us ցածր (0):

Հաղորդագրության ձևաչափը բաղկացած է 7 բայթ տվյալներից: Առաջին երկու բայթերը սենսորի ID- ն են և դրանք չեն փոխվում (այսինքն. Այն չի օգտագործում շարժական ծածկագիր): Վերջին բայթը առաջին վեց բայթերի պարզ հավելիչ ստուգիչ գումարն է: Երրորդ բայթը մարտկոցի մակարդակի ցուցանիշ է և միշտ պետք է լինի 44 վեցանկ, եթե մարտկոցը լավ է: Չորրորդ բայթը խոնավությունն է և այն 0-ից 99-ի միջև չմշակված արժեք է: Կարևոր է հաշվի առնել, որ 4, 5 և 6 բայթերի ամենակարևոր բիթը պարիտետային բիթ է և չափման մաս չէ: արժեքները: 5-րդ և 6-րդ բայթերն են մասշտաբային ջերմաստիճանը (elsելսիուս), որի բայթ 5-ի ստորին 4 բիթերը համակցված են 6-ական ստորին 7 բիթերի հետ ՝ կազմելով 11-բիթանոց արժեք: Theերմաստիճանը միշտ ներկայացված է որպես դրական թիվ և բացասական է դառնում միայն այն դեպքում, երբ կիրառվում է մասշտաբավորումը: Մասշտացումը (C / 10) - 100 է: 10 -ի բաժանումը պահանջվում է, քանի որ ջերմաստիճանի լուծումը աստիճանի տասներորդն է: Հանումը պահանջվում է, քանի որ սենսորը 100 է ավելացնում փոխանցվող արժեքը դրական պահելու համար:

Քայլ 2: ՌԴ ընդունիչ

ՌԴ ընդունիչ
ՌԴ ընդունիչ
ՌԴ ընդունիչ
ՌԴ ընդունիչ

Այս նախագծի համար օգտագործվող ՌԴ մոդուլը RXB6 է: Դա գերհետերոդինային ընդունիչ է, ի տարբերություն պակաս ցանկալի գերվերածնիչ ընդունիչների: Եթե նայեք ՌԴ -ի էժան մոդուլներին, ապա կգտնեք, որ հաղորդիչ և ընդունիչ տախտակները հաճախ միավորված են: Այդ փաթեթավորված ընդունիչներից շատերը գերվերածնող տեսակներ են, ուստի նրանք հակված են ունենալ ավելի ցածր կատարողական բնութագրեր (ներառյալ միջակայքը), քան գերհետերոդինային ընդունիչները: Այս նախագծի համար մեզ անհրաժեշտ է միայն ընդունիչի մոդուլը, քանի որ մենք ազդանշաններ ենք ստանալու եղանակային տվիչների հաղորդիչից:

Քայլ 3: ՌԴ ալեհավաքներ

ՌԴ ալեհավաքներ
ՌԴ ալեհավաքներ

RXB6- ը չի գալիս ալեհավաքով: Դուք կարող եք բավականին էժան գնել որոշ պարույրներ, բայց նաև հեշտ է պատրաստել ձեր սեփական ալեհավաքը: Իրականում, տախտակի ցատկող մալուխը կարող է սահել մոդուլի ալեհավաքի քորոցի վրա, եթե չեք ցանկանում չափազանց շքեղ դառնալ: Իդեալում, ուղիղ մետաղալար ալեհավաքը կլինի 1/4 ալիքի երկարություն, որը աշխատում է մինչև 6,8 դյույմ: Սկզբում ես կատարեցի թռիչքի մետաղալարերի գործը և խնդիր չունեի վերցնել արտաքին սենսորը, չնայած էլեկտրոնիկայի արտադրամասը իմ նկուղում էր:

Մեկ այլ հնարավորություն է `պատրաստել ձեր սեփական պարուրաձև ալեհավաքը: Համացանցում դրա համար կան մի շարք ծրագրեր, բայց վերևում պատկերվածը այն է, ինչ ես պատրաստել եմ: Ես օգտագործեցի որոշ պինդ միջուկային մետաղալարեր Ethernet մալուխի կտորից և այն փաթաթեցի 5/32 դյույմանոց հորատման սահուն հատվածի շուրջը: Թողեք մեկուսացումը, բացառությամբ այն հուշման, որը կպչում է ՌԴ տախտակին: Ձեզ անհրաժեշտ կլինի 20 պտույտ: Կարող եք նաև օգտագործել 7/32 դյույմանոց փորվածք և փոխարենը փաթեթավորել 17 պտույտ: Սրանցից որևէ մեկը հավանաբար լավ կաշխատի այն տիրույթների համար, որոնք, ամենայն հավանականությամբ, կունենաք ձեր տվիչների համար: Իրական բանալին սկզբում լավ ՌԴ ընդունիչ ունենալն է: AcuRite տվիչներն ունեն նաև բավականին հզոր հաղորդիչներ:

Քայլ 4: ՌԴ հաղորդակցության արձանագրություն

Գոյություն ունեն տվյալների փոխանցման մի քանի տարբեր մոդուլյացիոն տեխնիկա, սակայն այս սենսորներն օգտագործում են ամենապարզը ՝ OOK (անջատում-անջատում) կամ ASK (ամպլիտուդայի հերթափոխ-բանալին): Քանի որ այս օրինակում մենք գործ ունենք 0/1 տվյալների բիթերի հետ, ամպլիտուդը լրիվ միացված է կամ լրիվ անջատված: Այսպիսով, մեր նպատակների համար OOK- ը և ASK- ը նույնն են, որովհետև OOK- ը նշանակում է, որ ՌԴ փոխադրողը կա՛մ միացված է, կա՛մ լրիվ անջատված: Հաղորդագրության ձևաչափը ընդհանուր առմամբ սահմանվում է փոխանցող սարքի արտադրողի կողմից, և նրանք կարող են օգտագործել գրեթե ցանկացած փոխանցման արագություն, բիթերի ձևաչափման ցանկացած ոճ և հաղորդագրության ցանկացած երկարություն: 433-ՄՀց հաճախականությունը խցանված է փոխանցման տուփերով ՝ խելացի հաշվիչների և այլնի համար, այնպես որ ծրագրակազմը պետք է կարգավորվի ՝ զտելու համար միայն այն հաղորդագրության ձևաչափի համար, որը մենք ցանկանում ենք օգտագործել:

Քայլ 5: Timeամանակի տվյալներ

Timeամանակի տվյալներ
Timeամանակի տվյալներ

Ես օգտագործում եմ էժան GPS սարք, որպեսզի ստանամ ժամանակի ճշգրիտ տվյալներ, որոնք ինքնաբերաբար կվերագործարկվեն հոսանքի անջատումից հետո: Ես ունեմ մի քանի GPS միավոր (առանց դիսփլեյների), որոնք թողարկում են ստանդարտ NMEA նախադասությունները, բայց իմ ունեցած ամենափոքրն ու ամենաէժանը NEO-6M- ն է: NEO-6M մոդուլը հեշտ է միանում Arduino- ին, քանի որ այն օգտագործում է TTL մակարդակի սերիական պորտ: Միակ իրական տարբերությունն այն է, որ NMEA ստանդարտը սահմանում է 4800 բաուդ սերիայի արագություն, սակայն NEO-6M- ը կանխադրված է 9600 բաուդ: Դուք կարող եք գործարկել անվճար «u-center» ծրագիրը ՝ փոխելու բաուդ արագությունը, բայց ես այն թողեցի գործարանային լռելյայն: Կա նաև անվճար օգտակար ծրագիր `GPSInfo (տեղադրված է Globalsat- ի կողմից), որը շատ հարմար է համակարգչում GPS տեղեկատվությունը դիտելու համար: Դուք կարող եք GPS միավորը միացնել USB- ից TTL ստանդարտ մալուխին `այն ստուգելու կամ համակարգչի միջոցով կարգավորելու համար: Հիշեք, որ մոդուլի GPS չիպը իրականում աշխատում է 3.3 վոլտ (ներկառուցված լարման կարգավորիչի միջոցով), այնպես որ, եթե ցանկանում եք միանալ իր RXD նավահանգստին, ապա պետք է մակարդակը փոխեք 5 վոլտից: TXD նավահանգիստը կարող է միանալ անմիջապես Arduino- ին կամ համակարգչին:

Քայլ 6: Timeամային գոտիներ

GPS- ի ժամանակը ցուցադրելը հեշտ բան է, քանի դեռ ցանկանում եք ցուցադրել UTC (Համընդհանուր ժամանակի համակարգված): NMEA նախադասությունները կազմված են ASCII նիշերից, որոնք կարող են ուղղակիորեն մուտքագրվել LCD- ին: Portionամանակի մասը գտնվում է HHMMSS. FF ձևաչափով (ժամ, րոպե, վայրկյան և կոտորակային վայրկյան): Մեր ժամացույցի համար կոտորակային մասը օգտակար չէ, այնպես որ այն ամենը, ինչ մեզ պետք է լուծել, վեց նիշ է: Խնդիրն այն է, որ դուք պետք է փոխարկեք ձեր տեղական ժամանակը և 12-ժամյա AM/PM ձևաչափի, եթե դա ցանկանում եք: Բայց երբեմն խնդիրներն այն են, ինչը կյանքը դարձնում է հետաքրքիր, ուստի ծրագրաշարի այդ հատվածն իրականում հենց դրանում է:

Ինչ վերաբերում է ժամային գոտիներին, ապա դուք կարող եք մտածել, որ դրանցից պարզապես 24-ը կլինեն, որոնցից 12-ը UTC- ի գտնվելու վայրից արևելք (+ գոտիներ) և 12-ը UTC- ի գտնվելու վայրից արևմուտք (- գոտիներ): Փաստորեն, կան մի քանի տարօրինակ ժամեր, որոնք կոտորակային ժամեր են և զույգեր, որոնք գերազանցում են 12 ժամվա «սահմանը»: Եթե դուք պատահում եք, որ ապրում եք այդ տարածքներից մեկում, ես ներողություն եմ խնդրում, քանի որ իմ ծրագրակազմը կազմում է միայն ամբողջ 24 ժամյա գոտիները: Կան նաև մեզանից ոմանք, ովքեր օգտագործում են ցերեկային ժամերը տարվա մի մասը, բայց դա ինքնաբերաբար չի հաշվառվում ծրագրակազմում: Դա կպահանջի ապագա ամսաթվերի որոնման աղյուսակ, ծրագրակազմի լրացուցիչ բարդություն և ծրագրակազմի թարմացման անհրաժեշտություն, եթե տարվա անցման շաբաթները փոխվեն: Փոխարենը, ապարատը օգտագործում է ակնթարթային կոնտակտային անջատիչ ՝ ժամային գոտու հեշտ կարգավորումը (UTC օֆսեթ) թույլ տալու համար:

Քայլ 7: Սխեմատիկ

Սխեմատիկ
Սխեմատիկ

Սխեմատիկան ցուցադրվում է վերևում և ներառում է 1602 LCD- ի 4-բիթանոց ինտերֆեյսի միացումները: ՌԴ ստացողի սերիական տվյալները թվային տրամաբանության մակարդակում են, այնպես որ այն ուղղակիորեն միացված է Arduino- ի տվյալների մուտքագրման կապումներից մեկին: Քորոցը ծրագրակազմում կազմաձևված է `ընդհատման-փոփոխման գործառույթ կատարելու համար, որպեսզի կարողանանք չափել զարկերակի լայնությունները: GPS TXD ելքն ուղղակիորեն միացված է Arduino RX մուտքին:

Օգտագործվում է երկու անջատիչ: Ինչպես նշվեց ավելի վաղ, ակնթարթային շփման անջատիչը թույլ է տալիս կարգավորել UTC անջատումը: Անջատիչը կարող է սեղմվել ցանկացած պահի `սահմանված ռեժիմ մուտք գործելու համար: Սկզբում էկրանին կցուցադրվի «+77» անվավեր UTC օֆսեթ: UTC- ի օֆսեթ կարգավորման հրահանգների համար դիմեք «ockամացույցի ծրագրակազմ» բաժին:

Երկրորդ անջատիչը միացման/անջատման պարզ անջատիչ է: «Անջատված» դիրքում ժամանակը կցուցադրվի 12-ժամյա ձևաչափով (AM/PM), իսկ «միացված» դիրքում ՝ ժամանակը ՝ 24-ժամյա ձևաչափով: Այս անջատիչը կարող է փոխվել ցանկացած պահի ՝ ձևաչափերի միջև անցնելու համար:

Եթե ցանկալի է միայն ժամացույցի գործառույթը, ապա ՌԴ ստացողի մոդուլը պետք չէ միացնել: Եթե միայն եղանակային գործառույթն է ցանկալի, ապա GPS- ն ու երկու անջատիչները միացման կարիք չունեն:

Քայլ 8: LCD ծրագրակազմ

Ես հակված եմ օգտագործել երկու տեսակի LCD միջերեսներից մեկը: Մեկը ստանդարտ 4-բիթանոց ինտերֆեյսն է, իսկ մյուսը `3-լարային ինտերֆեյսը, որն օգտագործում է հերթափոխի գրանցամատյան: Ես նախագծեցի այդ ինտերֆեյսը, երբ աշխատում էի PIC- ի փոքր միկրոկոնտրոլերների հետ, որոնք ունեին սահմանափակ թվով I/O կապում: Այս նախագծի համար ես օգտագործել եմ 4-բիթանոց ինտերֆեյսը, բայց ունեմ իմ ընդհանուր LCD ֆայլը ՝ ընդհանուր Arduino LCD գրադարանից օգտվելու փոխարեն: Դա նվազեցնում է հիշողության սպառումը և կոդի բարդությունը, ինչպես նաև թույլ է տալիս ինձ փոփոխել ծածկագիրը այսպիսի նախագծերի համար:

Քայլ 9: Clամացույցի ծրագրակազմ

GPS միավորը թողարկում է ստանդարտ NMEA-0183 նախադասություններ, որոնք ASCII տողեր են, որոնք պարունակում են բազմազան տեղեկատվություն: Այս հավելվածի համար ես ընտրեցի GGA նախադասությունը ՝ ժամանակի մասին տեղեկատվություն ստանալու համար, քանի որ դա այն նախադասությունն է, որը ես օգտագործել էի GPS- ի նախորդ նախագծի համար: NMEA նախադասությունների տեղեկատվական դաշտերը բաժանվում են ստորակետներով, այնպես որ, GGA նախադասության վերնագրի հայտնաբերումից հետո, ծրագրաշարը սովորաբար հաշվում էր ստորակետներով և զանգահարում համապատասխան ռեժիմ GPS տեղեկատվության յուրաքանչյուր ցանկալի դաշտի համար: Այստեղ միայն ժամանակի մասին տեղեկատվությունն է անհրաժեշտ, և դա առաջին ստորակետից հետո դաշտում է, այնպես որ հաշվարկի կարիք չկա:

Վեց ժամանակային թվանշանները (HHMMSS) բուֆերացված են, այնուհետև մշակվում են բոլորի ստացումից հետո: GPS- ը կարող է վաղաժամ թողնել որոշ թերի հաղորդագրություններ, այնպես որ բուֆերային ռեժիմը ստուգում է, որ յուրաքանչյուր նիշ ASCII- ի թվային արժեք է: Եթե վատ նշան է ստացվել, հաղորդագրությունը հեռացվում է: Դա կարող է պատահել նաև հազվագյուտ դեպքերում նորմալ աշխատանքի ընթացքում, մասնավորապես, եթե սերիական նավահանգստի հաղորդակցությունը մի փոքր ընկնում է: Ես սա միայն մեկ անգամ եմ տեսել, և այն, ինչ տեղի ունեցավ, այն է, որ ժամանակը կանգ առավ մեկ վայրկյան, իսկ հետո ցատկեց երկու վայրկյանի փոխարեն:

Եթե ծրագրաշարը կազմաձևված է միայն ժամանակի ցուցադրման համար, ապա LCD- ի առաջին տողը կցուցադրի տեղական ժամանակը, իսկ երկրորդ տողը `UTC: UTC- ի համար ծրագրակազմն ուղղակի ASCII նիշերն ուղարկում է անմիջապես ցուցադրման ռեժիմին ՝ հաստ կետերով (:) համապատասխան տեղադրված:

UTC- ն տեղական ժամանակի փոխարկելու համար պետք է կիրառվի UTC օֆսեթը (ժամային գոտի): Քանի որ GPS- ից UTC ժամանակը ASCII ձևաչափով է, ծրագրակազմը ASCII ժամային նիշերը վերածում է տասնորդականի և այնուհետ ավելացնում UTC օֆսեթը: UTC օֆսեթը պահվում է որպես դրական BCD արժեք ՝ նշանի բիթով, ուստի այն նախ փոխակերպվում է ամբողջ արժեքի, այնուհետև մերժվում է, եթե նշանի բիթը դրված է: Տեղական ժամանակի ժամի արժեքը հաշվարկվելուց հետո որոնման աղյուսակը օգտագործվում է այն BCD- ի փոխարկելու համար, այնուհետև BCD- ը կրկին վերածվում է ASCII- ի `ցուցադրման համար: Որոնման աղյուսակը պետք է կարգավորի 24 ժամյա UTC ձևաչափը, ինչպես նաև +/- 12 ժամային գոտիները: Որպեսզի դա կատարվի, UTC- ի ժամը 0000 -ից 2300 -ը զբաղեցնում են աղյուսակի միջին 24 գրառումները `12 մուտքով առաջ և 12 գրառում` ժամային գոտիների հաշվառման համար: Մեկ սեղանը 12-ժամյա ձևաչափով է, այնպես որ ես ավելացրի նաև ցուցադրման AM/PM մասի որոնման աղյուսակը: Մյուս սեղանը 24-ժամյա ձևաչափով է: Ինչպես արդեն նշվեց, միացման/անջատման անջատիչը թույլ է տալիս ընտրել 12-ժամյա կամ 24-ժամյա ձևաչափ:

Initialամային գոտին EEPROM- ից վերցվում է սկզբնավորման ընթացքում և կարճ ցուցադրվում: Եթե այն գոնե մեկ անգամ չի սահմանվել, ապա կարգաբերման ռեժիմը կոչվում է: Կարգավորման ռեժիմը կարող է ցանկացած ժամանակ կանչվել ՝ սեղմելով պահի շփման անջատիչը: Կարգավորման ռեժիմը էկրանը կսկսի «UTC OFFSET +77»: Անջատիչի կարճ սեղմումը արժեքը կփոխի «-00» -ի: Եթե պահանջվում է դրական ժամային գոտի, ապա մեկ այլ կարճ սեղմումով արժեքը կփոխվի «+00» - ի: Երկար սեղմումով (> 1 վայրկյան) կարգավորումների ռեժիմը կտեղափոխվի հաջորդ քայլին: Այս պահին յուրաքանչյուր կարճ սեղմում կավելացնի ժամանակի արժեքը մինչև առավելագույնը 12. theանկալի ժամային գոտու հասնելուց հետո սեղմեք և պահեք անջատիչը ավելի քան 1 վայրկյան, ապա բաց թողեք այն: Այնուհետև ծրագրաշարը կպահպանի UTC արժեքը EEPROM- ում և հակիրճ կցուցադրի «OFFSET SAVED»: Եթե սխալ եք թույլ տալիս մուտքի ժամանակ, պարզապես դուրս եկեք, այնուհետև նորից սեղմեք անջատիչը `այն վերականգնելու համար:

NEO-6M- ը չի պահանջում դիրքի լավ ամրագրում ՝ ժամանակը թողարկելու համար, այնպես որ այն պետք է հաղորդագրություններ թողնի մեկ արբանյակ ստանալուն պես: Մինչ այդ էկրանը կարդալու է «ՏՎՅԱԼՆԵՐՈՎ»:

Քայլ 10. Եղանակի ծրագրակազմ

PIC միկրոկառավարիչը հնարավորություն ունի միացնել/անջատել ժմչփը ՝ օգտագործելով արտաքին զարկերակ: Այդ նույն մուտքային զարկերակը կարող է օգտագործվել նաև որպես արտաքին ընդհատում ՝ ազդանշանի իմպուլսի տևողության ընթերցման համար: Arduino- ն չունի այդ ճշգրիտ հնարավորությունը, այնպես որ ես օգտագործեցի փոփոխության ընդհատման գործառույթը: ՌԴ հաղորդագրության զարկերակի մի եզրին ընթացիկ միկրովայրկյան ժամանակը խնայում է ընդհատիչ կարգավորիչը: Հակառակ եզրին անցած ժամանակը հաշվարկվում է զարկերակի լայնությունը որոշելու համար:

Theրագրակազմն ունի «DEBUG» սահմանում, որը թույլ է տալիս ցուցադրել ստացված հաղորդագրությունների տվյալների հում ձևաչափը: Կա նաև սահման ՝ ՌԴ ընդունիչից սերիական հոսքի համար Arduino մուտքագրման քորոցը նշելու համար: Theրագրակազմը ստեղծվել է `այս սահմանման հիման վրա հաշվարկել համապատասխան ընդհատումների փոփոխման գրանցամատյանների կարգավորումները: Հաշվարկը գործում է միայն Arduino թվային կապում: Փոխարենը կարող է օգտագործվել անալոգային քորոց, բայց դա կպահանջի գրանցամատյանների արժեքների կոշտ կոդավորում:

Ընդհատման կարգավորիչը որոշում է, թե գրավված հաշվարկը բավականաչափ երկար է արդյոք սկզբնական զարկերակ լինելու համար: Ինչպես արդեն նշվեց, բազմաթիվ հաղորդագրությունների միջև եղած բացը 2 ms է, այնպես որ դա այն է, ինչ փնտրում է ծրագրակազմը: 433-ՄՀց բոլոր տրաֆիկի պատճառով ծրագրային ապահովման սկզբնական ստուգումը համոզված է, որ չափված ժամանակը առնվազն 1.8 մ է, բայց ոչ ավելի, քան 2.4 մկմ: Սկիզբը հայտնաբերելուց հետո ծրագրաշարը փնտրում է համաժամացման բիթեր (600us) և հաշվում `համոզվելու համար, որ դրանցից չորսը ստացվել են: Այս թեստերն անցնելուց հետո ծրագրաշարը փնտրում է 200us և 400us համապատասխան բիթային ժամանակները:

Ստացված բիթերը ձևավորվում են բայթերի մեջ և յուրաքանչյուր բայթ պահվում է: Յոթ բայթ ստանալուց հետո հաղորդագրության ստուգիչ գումարը ստուգվում է մինչև հետագա մշակման թույլտվությունը: Եթե հում բայթերը պետք է թողարկվեն (կարգաբերման ռեժիմ), ապա բայթերը վերածվում են ASCII նիշերի և ուղարկվում են LCD- ին: Եթե խոնավության և ջերմաստիճանի արդյունքները ցանկալի են, ապա կատարվում են համապատասխան փոխակերպումներ:

ՌԴ հաղորդագրության Centigrade- ի երկու բայթ տվյալները միավորված են ՝ կազմելով 11-բիթանոց արժեք: Ստորին հատվածը մեկ բիթ տեղափոխվում է ձախ ՝ հավասարության բիթը վերացնելու և այն վերին հատվածի բիթերի հետ հավասարեցնելու համար: Երկու բայթերը ձևավորվում են 16-բիթանոց բառի փոփոխականի, այնուհետև ամբողջը ճիշտ տեղափոխվում է մեկ բիթ `վերջնական բիթերի հավասարեցում ստանալու համար: Այնուհետև փոփոխական բառը մաթեմատիկական հաշվարկների համար վերածվում է լողացող կետի փոփոխականի:

PIC- ում Arduino- ի և հավաքման լեզվի վրա C ++ օգտագործելու մեծ առավելությունն այն է, որ այն պարզեցնում է մաթեմատիկական հաշվարկները: Ինչպես արդեն նշվեց, Centigrade- ի փոխակերպումը (C / 10) -100 է: Արդյունքը փոխակերպվում է տողի և ուղարկվում LCD- ի ցուցադրման համար: Ֆարենհայտի հաշվարկն է (C * 1.8) + 32. Արդյունքը կրկին վերածվում է տողի և ուղարկվում LCD- ի ցուցադրման: Երկու դեպքում էլ, Լարերի փոխարկումը ներառում է բացասական նշանը (անհրաժեշտության դեպքում) և տասնորդական կետը: Տասնորդական կետի համար ստուգում է կատարվում `տասնորդականից հետո միայն մեկ նիշ ուղարկելու համար էկրան: Այդ ստուգումն անհրաժեշտ է, քանի որ տողը կարող է տատանվել 3 -ից 5 նիշ երկարությամբ:

Ես ունեմ երկու AcuRite տվիչ, այնպես որ ես ծրագրում ստուգում ավելացրի, որպեսզի համոզվեմ, որ մեկի տվյալները չեն փոխարինի մյուսի տվյալները, եթե ծրագրակազմը միայն եղանակային գործառույթն է կատարում: Առաջին սենսորը, որը ստացվել է հոսանքի ուժգնացումից հետո, ցուցադրվում է 1 -ին տողում, իսկ մյուսը ցուցադրվում է տողում 2 -ում: Օգտագործելով վրիպազերծման ռեժիմը, ես կարող եմ տեսնել, թե որն է ID- ն յուրաքանչյուր սենսորի համար, որպեսզի կարողանամ պարզ ստուգում կատարել ծածկագրում, եթե միայն ցանկանում էր մշակել դրանցից մեկի տվյալները:

Theրագիրը վերահսկում է մարտկոցի կարգավիճակը (բայթ 3) և ցուցադրում է հաղորդագրություն, եթե այն ցույց է տալիս մարտկոցի լիցքը: Այս հաղորդագրությունը փոխարինում է այդ տվիչի բոլոր մյուս տվյալները:

Քայլ 11: Disուցադրում

Ուցադրում է
Ուցադրում է
Ուցադրում է
Ուցադրում է
Ուցադրում է
Ուցադրում է

Ահա տարբեր գործառույթների ցուցադրման օրինակներ: Ես ունեմ մի քանի այլ հրահանգներ, բայց իմ PIC միկրոկառավարիչների նախագծերի մեծ մասը կարելի է գտնել իմ կայքում ՝ www.boomerrules.wordpress.com

Խորհուրդ ենք տալիս: