Երբ Որդին սոսնձեց դպրոցը լուսացույցի թղթից, միտքը եկավ. «Եվ ինչու նրա համար չհավաքել միկրոկոնտրոլերի վրա լուսացույցի գործողությունը»: Ինտերնետում նրանց համար կան բազմաթիվ սխեմաներ եւ ծրագրեր, իրականացնելով ամենապարզ լուսացույցի սկզբունքը: Բայց դրանք կամ շատ բարդ են խաղալիքների համար (DC-DC Transducer, Shift գրանցամատյաններ եւ այլն) կամ ներկայացված են միայն որպես հավաքման ամենապարզ ծրագրի օրինակ: Ես ուզում եմ վերանայել խաղալիք լուսացույցի ավարտված ձեւավորման հավաքածուի հավաքման եւ ծրագիրը `որոշ լրացուցիչ հատկություններով: Ավելին, այն հավաքվում է «Penny» միկրոկոնտրոլերի վրա ամենապարզ սխեմայի երկայնքով, որը կարեւոր է սկսնակների համար: Հուսով եմ սա Պարզ սխեման Այն կդառնա շատ սկսնակների համար, ուսումնասիրելու Pic Microcontrollers ծրագրավորումը, առաջին դիզայնը, ըստ էության, հավաքվել է նկարում: Պարզ, բայց միեւնույն ժամանակ պարունակում է հիմնական տեխնիկան եւ ծրագրավորման ատրիբուտները, ծրագիրը հեշտացնում է դրա հետ հասկանալ եւ փորձարկել:
Նույնիսկ ով է զբաղվում ծրագրավորող միկրոկոնտրոլներով, գրելու հիմնական սկզբունքները հայտնի են գրելու հիմնական սկզբունքները. Որպես կարճ ժամանակ է կատարման եւ կարճ կոդերի, այլ սուբրոջերի բեռնաթափում եւ այլն: Այս դեպքում ընդհատումները թույլատրվում են փոխել միայն մակարդակը (մենք չենք կարող կարոտել այլ ընդհատումներ, քանի որ դրանք պարզապես չեն), եւ ես, պարզեցնելու համար, հնարավոր է հեռացնել այս սկզբունքներից: Այստեղ ընդհատվող բեռնաթափում կան ցիկլեր եւ կան մեկ այլ ենթածրագիր, եւ (սարսափի մասին) նույնիսկ քնի ռեժիմի անցում: Հետեւաբար, վերնագրում ծրագիրը կոչվում է «սխալ»: Մեջ Այս դեպքըԸնդհարձակվող բեռնատարը օգտագործվում է որպես կանոնավոր ենթածրագիր, սակայն, այլ դեպքերում, վերը նշված սկզբունքները, իհարկե, ուժի մեջ են մնում:
Սարքի հակիրճ բնութագրերը.
Սարքը փողոցային լուսացույցի մոդել է `իր գործողության հուսալի սիմուլյացիայով (ծաղիկների անջատիչ, կանաչ շող) եւ ունի Լրացուցիչ գործառույթներՓոխեք անջատիչ հաճախականությունը `սեղմելով կոճակը, թարթման ռեժիմը դեղին է, ձեռքով քնի ռեժիմի անցումը եւ Ավտոմատ ռեժիմ որին հաջորդում է սեղմելով կոճակը: Այս սարքը կարող է օգտագործվել որպես մանկական խաղալիք, ինչպես նաեւ տեսողական նպաստ մանկական նախադպրոցական հաստատություններում, երեխաներին ճանապարհային վարքի ժամանակ ուսուցանելիս:
Այսպիսով, մենք դիմում ենք սխեմայի նկարագրությանը եւ դիտարկմանը:
Սխեման հավաքվում է էժան Microcontroller Pic12F629: Ուղղորդության վերահսկման, GP0-GP2, GP4, GP5 (ոտքեր 7, B, 5, 3, 2) եզրակացություններն օգտագործվում են, ծրագրավորված են որպես արդյունք: Յուրաքանչյուր ուղղության համար LED- ները համակցված են սերիական խմբերի, ինչը թույլ է տալիս նվազագույնի հասցնել սպառված ընթացիկ: R3-R8 դիմադրիչները սահմանափակում են LED հոսանքները: Տարբեր գույների LED- ների վերադարձի ուժեղ տարբերության դեպքում դուք պետք է ընտրեք համապատասխան դիմադրիչներին: Ես, օրինակ, երկու դեղին խմբեր կապված են զուգահեռ եւ միացված մեկ ռեզիստորի հետ, եւ նույն անվանական, ինչպես մնացածը եւ ավելի պայծառ են լինում):
Այս սխեմայում LED- ները ավելի քան 1,5-ից ավելին են սնվում լրացուցիչ տարրից (այս դեպքում, երբ ընթացիկ ելքը անջատված է, քանի որ անցում կատարելու շատ ավելի շատ լարվածություն է Երկու LED- ներից, քան 1,5 V (առնվազն 2.5 C): Եվ նույնիսկ երկու LED- ների տրոհմամբ (ինչը քիչ հավանական է), գումարած ուժի մեջ ներքին պաշտպանիչ դիոդի միջոցով հոսանքը կլինի 7,5 մա, ինչը շատ ավելի քիչ թույլատրելի կլինի: LED- ների ներկայիս սպառումը շատ ավելի բարձր է, քան MK- ի սպառումը, հետեւաբար, տարրերի արտանետման տարբերությունը (MK- ի ներկայիս սպառումը չի հոսում) հնարավոր է անտեսել դա, չնայած դրա անկմանը հոսանքը LED- ների միջով, երբ մարտկոցը լիցքաթափվում է, մարտկոցի պայծառ մակարդակում մնում է ընդունելի մակարդակում մարտկոցի ամբողջ լարման միջակայքում: Դիագրամը չափազանց պարզեցված է, ինչը հնարավորություն չի տվել լիցքավորել Էլեկտրաէներգիայի անջատիչ (ընթացիկ սպառումը քնի ռեժիմում `1-3 մ) ka):
Սարքի գործողությունների կառավարման կոճակը միացված է GP3- ի ելքին (ոտքը 4), որը կազմաձեւման բիթերում հայտարարվում է որպես թվային մուտք: Երբ սեղմում եք կոճակը, ընդհատումը տեղի է ունենում այն \u200b\u200bվերամշակման մեջ, որի ընթացքում տեղի է ունենում հետեւյալը: Երկար մամուլով (ավելի քան 4 հատ), սարքը մտնում է քնի ռեժիմ: Ավելի կարճ ճնշումներով, լուսացույցի արագության հաջորդական միացում կա շրջանի մեջ `ներկայիս արագության ցուցիչով` նկարչության համաձայն:
Վերջին ռեժիմում (կարմիր LED- ները վառվում են), միացված է դեղին ing րամեկուսացման ազդանշանի ռեժիմը: Կոճակի երկար սեղմումով (հաստատված է բոլոր LED- ների բնակչությամբ), անցեք նորմալ գործողության միջոցով ռեժիմը նորը փոխելու միջոցով, եթե կոճակը չի սեղմվում ավելի քան 6 վայրկյան: Գործողության ռեժիմը մնում է նույնը, ինչ Կոճակը սեղմված է:
Քնի ռեժիմում AA- ի լիցքավորման տարրերը բավարար են ոչ պակաս, քան մեկ տարի, այդ իսկ պատճառով էլեկտրաէներգիայի անջատիչը չի տրամադրվում սարքում: Սարքը քնի ռեժիմում է մտնում նաեւ 0.5 - 1 ժամից հետո (կախված է փոխարկման գույների արագությունից), առանց կոճակի վրա ազդելու: Քնի ռեժիմից արդյունքը տեղի է ունենում կոճակի ցանկացած սեղմումով: Microcontroller- ը սնուցվում է 1 եւ 8 ելքերով: Եզրակացություններն պահելու եւ դիզայնը պարզեցնելու համար այն միացված է ներքին գեներատորի ռեժիմի, առանց արտաքին տարրերի:
Փոքր բացատրություններ ծրագրի համար, որը ներկայացված է ներդրումներում:
Կոճակի սեղմման վերամշակումն իրականացվում է ենթախմբերում. Սպասեք_բուտտ __- սպասում է 6-ականների սեղմմանը եւ գրանցմանը: Առանց սեղմելու, push_butt __- կտտացման տեւողության գրանցում, սպասեք_nobutt __- սպասում չցված կոճակի: Լուսացույցի կարգավիճակը փոխելու պահերին (դեղին եւ թարթող կանաչ), ելքային պորտը կարդացվում է աղյուսակից աղյուսակից `սուբրոյում (երիտասարդ կամ ավագ կիսաֆաբրիկ): Նմանապես, կարգավիճակի նշումը, երբ կոճակը սեղմվում է `Ind__ Subroutine- ից: Գործողության ժամանակից հետո քնի ռեժիմը անցնելու համար հարկադիր անցում է տեղի ունենում ընդհատվող վերամշակման ենթահողերի կողմից Ծրագրաշարի տեղադրում Ընդհատեք դրոշը: Const_Min Constant, Const_reg, Const_SL- ն փոխելը կարող է համապատասխանաբար փոխվել, մարտկոցը միացնելիս կանաչ թարթման ժամանակահատվածը, մարտկոցը `գործողության ժամանակը ազդելու համար:
Տպագրված միացման տախտակը պատրաստված է միակողմանի փայլաթիթեղի ապակե ապակու եւ ունի 22x87 մմ չափսեր: Ծայրահեղ LED- ները դասին զուգահեռ են անցկացվում տարբեր ուղղություններով: Միջինքը մասի մասից մեկը սահմանում է, իսկ մյուսը `հետեւի կողմում, եզրակացությունների ելքով` տախտակի բացվածքների վրա եւ դրանք ամրացնում է զամբյուղի աղբյուրներից եւ հետքերի կողմը `համապատասխան հետքերով:
0.125 վտ հզորությամբ բոլոր դիմադրիչները: LED- ները կարող են ընդունվել ցանկացած տնային կամ ներմուծված ցանկալի մեկ տեսակը `ուղիղ լարման կաթիլով` 10 մա մոտ 2 վոլտ: Կոճակը `ցանկացած առանց ամրագրման: Միկրոկոնտրոլերը տեղադրված է բլոկի վրա:
Կազմաձեւման բառը ավտոմատ կերպով մուտքագրվում է հիշողության մեջ, երբ որոնվածը բեռնված է («Թռչունում» տեղադրված է միայն PWRT կետում, մնացած իրերը «վերափոխում» են »: Նախ եւ առաջ անհրաժեշտ է կարդալ որոնվածը մաքուր չիպով եւ գրել բառի արժեքը 03FF ծրագրի հիշողության ավարտին, որը պահանջվում է կազմաձեւել չիպի հատուկ օրինակու ներքին գեներատորի հաճախականությունը: Hex ֆայլի ծրագրին ներբեռնելուց հետո դուք պետք է ձեռքով տեղադրեք այս արժեքը 03ff: Մեջ Այս սարքը Հաճախականության շեղումը կրիտիկական չէ, բայց դեռ պետք է իմանաք, որ այս ընթացակարգը պահանջում է նման ընթացակարգ: Ծայրահեղ դեպքերում, եթե գործարանի արժեքը կորչում է, կարող եք որեւէ բան անել. Ծրագիրը քայլեր է ձեռնարկել ճիշտ աշխատանքի եւ այս դեպքում:
Սարքը տեղադրված է համապատասխան պլաստիկ տուփի մեջ: Համապատասխան անցքերն իրականացվում են վանդակում եւ կափարիչով LED- ների տակ: Իմ մարմնավորման մեջ երթեւեկի լույսն ու բազան կոճակով եւ մարտկոցը միացված են պլաստիկե ջրատարի հատվածի միջոցով, 20 մմ տրամագծով:
Դիմումը ունի. Մոդել, Տպագիր տպատախտակ Lay ձեւաչափով, MPASM- ի հավաքման, Hex որոնվածի ֆայլի ծրագիր:
Ռադիո տարրերի ցուցակ
Նշանակումը | Մի տեսակ | Անվանական | թիվ | Նշում | Գնահատական | Իմ նոթատետրը |
---|---|---|---|---|---|---|
Ic1 | Mk pic 8-bit | Pic12f629: | 1 | Ընկղմել | Նոութբուքում | |
R1 | Դիմադրող | 3 com | 1 | 0.125 Վ. | Նոութբուքում | |
R2 | Դիմադրող | 100 Օ. | 1 | 0.125 Վ. | Նոութբուքում | |
R3-R8: | Դիմադրող | 200 Օ. | 6 | 0.125 Վ. | Նոութբուքում | |
HL1, HL2, HL9, HL10 | Թեթեւ արտանետող դիոդ | Al307a: | 4 | Կարմիր | Նոութբուքում | |
HL3, HL4, HL11, HL12 | Թեթեւ արտանետող դիոդ |
Երբ Որդին սոսնձեց դպրոցը լուսացույցի թղթից, միտքը եկավ. «Եվ ինչու նրա համար չհավաքել միկրոկոնտրոլերի վրա լուսացույցի գործողությունը»: Ինտերնետում նրանց համար կան բազմաթիվ սխեմաներ եւ ծրագրեր, իրականացնելով ամենապարզ լուսացույցի սկզբունքը: Բայց դրանք կամ շատ բարդ են խաղալիքների համար (DC-DC Transducer, Shift գրանցամատյաններ եւ այլն) կամ ներկայացված են միայն որպես հավաքման ամենապարզ ծրագրի օրինակ: Ես ուզում եմ վերանայել խաղալիք լուսացույցի ավարտված ձեւավորման հավաքածուի հավաքման եւ ծրագիրը `որոշ լրացուցիչ հատկություններով: Ավելին, այն հավաքվում է «Penny» միկրոկոնտրոլերի վրա ամենապարզ սխեմայի երկայնքով, որը կարեւոր է սկսնակների համար: Հուսով եմ, որ այս պարզ սխեման կդառնա շատ սկսնակների համար `ուսումնասիրելու Pic Microcontrollers, առաջին իրական հավաքած դիզայնը: Պարզ, բայց միեւնույն ժամանակ պարունակում է հիմնական տեխնիկան եւ ծրագրավորման ատրիբուտները, ծրագիրը հեշտացնում է դրա հետ հասկանալ եւ փորձարկել:
Նույնիսկ ով է զբաղվում ծրագրավորող միկրոկոնտրոլներով, գրելու հիմնական սկզբունքները հայտնի են գրելու հիմնական սկզբունքները. Որպես կարճ ժամանակ է կատարման եւ կարճ կոդերի, այլ սուբրոջերի բեռնաթափում եւ այլն: Այս դեպքում ընդհատումները թույլատրվում են փոխել միայն մակարդակը (մենք չենք կարող կարոտել այլ ընդհատումներ, քանի որ դրանք պարզապես չեն), եւ ես, պարզեցնելու համար, հնարավոր է հեռացնել այս սկզբունքներից: Այստեղ ընդհատվող բեռնաթափում կան ցիկլեր եւ կան մեկ այլ ենթածրագիր, եւ (սարսափի մասին) նույնիսկ քնի ռեժիմի անցում: Հետեւաբար, վերնագրում ծրագիրը կոչվում է «սխալ»: Այս դեպքում ընդհատվող բեռնաթափիչը օգտագործվում է որպես կանոնավոր ենթաբաժին, սակայն, այլ դեպքերում, վերը նշված սկզբունքները, իհարկե, մնում են ուժի մեջ:
Սարքի հակիրճ բնութագրերը.
Սարքը փողոցային լուսացույցի մոդել է `իր գործողության հուսալի սիմուլյացիայով (ծաղիկների միացում, պայթեցված կանաչ) եւ ունի լրացուցիչ գործառույթներ. Փոխեք միացման հաճախականությունը` սեղմելով կոճակը, ապա Blinking ռեժիմը Ձեռնարկ եւ ավտոմատ ռեժիմ, որին հաջորդում է կոճակը սեղմելով կոճակը: Այս սարքը կարող է օգտագործվել որպես մանկական խաղալիք, ինչպես նաեւ տեսողական նպաստ մանկական նախադպրոցական հաստատություններում, երեխաներին ճանապարհային վարքի ժամանակ ուսուցանելիս:
Այսպիսով, մենք դիմում ենք սխեմայի նկարագրությանը եւ քննարկմանը.
Սխեման հավաքվում է էժան միկրոկոնտրոլերի վրա: Ուղղորդության վերահսկման, GP0-GP2, GP4, GP5 (ոտքեր 7, B, 5, 3, 2) եզրակացություններն օգտագործվում են, ծրագրավորված են որպես արդյունք: Յուրաքանչյուր ուղղության համար LED- ները համակցված են սերիական խմբերի, ինչը թույլ է տալիս նվազագույնի հասցնել սպառված ընթացիկ: R3-R8 դիմադրիչները սահմանափակում են LED հոսանքները: Տարբեր գույների LED- ների վերադարձի ուժեղ տարբերության դեպքում դուք պետք է ընտրեք համապատասխան դիմադրիչներին: Ես, օրինակ, երկու դեղին խմբեր կապված են զուգահեռ եւ միացված մեկ ռեզիստորի հետ, եւ նույն անվանական, ինչպես մնացածը եւ ավելի պայծառ են լինում):
Այս սխեմայում LED- ները ավելի քան 1,5-ից ավելին են սնվում լրացուցիչ տարրից (այս դեպքում, երբ ընթացիկ ելքը անջատված է, քանի որ անցում կատարելու շատ ավելի շատ լարվածություն է Երկու LED- ներից, քան 1,5 V (առնվազն 2.5 C): Եվ նույնիսկ երկու LED- ների տրոհմամբ (ինչը քիչ հավանական է), գումարած ուժի մեջ ներքին պաշտպանիչ դիոդի միջոցով հոսանքը կլինի 7,5 մա, ինչը շատ ավելի քիչ թույլատրելի կլինի: LED- ների ներկայիս սպառումը շատ ավելի բարձր է, քան MK- ի սպառումը, հետեւաբար, տարրերի արտանետման տարբերությունը (MK- ի ներկայիս սպառումը չի հոսում) հնարավոր է անտեսել դա, չնայած դրա անկմանը հոսանքը LED- ների միջով, երբ մարտկոցը լիցքաթափվում է, մարտկոցի պայծառ մակարդակում մնում է ընդունելի մակարդակում մարտկոցի ամբողջ լարման միջակայքում: Դիագրամը չափազանց պարզեցված է, ինչը հնարավորություն չի տվել լիցքավորել լրացուցիչ հոսանք Էլեկտրաէներգիայի անջատիչ (ընթացիկ սպառումը քնի ռեժիմում `1-3 մ) ka):
Սարքի գործողությունների կառավարման կոճակը միացված է GP3- ի ելքին (ոտքը 4), որը կազմաձեւման բիթերում հայտարարվում է որպես թվային մուտք: Երբ սեղմում եք կոճակը, ընդհատումը տեղի է ունենում այն \u200b\u200bվերամշակման մեջ, որի ընթացքում տեղի է ունենում հետեւյալը: Երկար մամուլով (ավելի քան 4 հատ), սարքը մտնում է քնի ռեժիմ: Ավելի կարճ ճնշումներով, երթեւեկության լույսի արագության հաջորդական միացում կա շրջանակի մեջ `ներկայիս արագության ցուցիչով` ըստ նկարչության:
Վերջին ռեժիմում (կարմիր LED- ները վառվում են), միացված է դեղին ing րամեկուսացման ազդանշանի ռեժիմը: Կոճակի երկար սեղմումով (հաստատված է բոլոր LED- ների բնակչությամբ), անցեք նորմալ գործողության միջոցով ռեժիմը նորը փոխելու միջոցով, եթե կոճակը չի սեղմվում ավելի քան 6 վայրկյան: Գործողության ռեժիմը մնում է նույնը, ինչ Կոճակը սեղմված է:
Քնի ռեժիմում AA- ի լիցքավորման տարրերը բավարար են ոչ պակաս, քան մեկ տարի, այդ իսկ պատճառով էլեկտրաէներգիայի անջատիչը չի տրամադրվում սարքում: Սարքը քնի ռեժիմում է մտնում նաեւ 0.5 - 1 ժամից հետո (կախված է փոխարկման գույների արագությունից), առանց կոճակի վրա ազդելու: Քնի ռեժիմից արդյունքը տեղի է ունենում կոճակի ցանկացած սեղմումով: Microcontroller- ը սնուցվում է 1 եւ 8 ելքերով: Եզրակացություններն պահելու եւ դիզայնը պարզեցնելու համար այն միացված է ներքին գեներատորի ռեժիմի, առանց արտաքին տարրերի:
Ծրագրի համար փոքր բացատրություններ, որոնք ներդրման մեջ են.
Կոճակի սեղմման վերամշակումն իրականացվում է ենթախմբերում. Սպասեք_բուտտ __- սպասում է 6-ականների սեղմմանը եւ գրանցմանը: Առանց սեղմելու, push_butt __- կտտացման տեւողության գրանցում, սպասեք_nobutt __- սպասում չցված կոճակի: Լուսացույցի կարգավիճակը փոխելու պահերին (դեղին եւ թարթող կանաչ), ելքային պորտը կարդացվում է աղյուսակից աղյուսակից `սուբրոյում (երիտասարդ կամ ավագ կիսաֆաբրիկ): Նմանապես, կարգավիճակի նշումը, երբ կոճակը սեղմվում է `Ind__ Subroutine- ից: Անցումից հետո քնելու ռեժիմի գնալու համար տեղի է ունենում ծրագրային ապահովման ծրագրային ապահովման ծրագրային ապահովման համար ծրագրային ապահովման հետ կապված ընդհատվող բեռնաթափման համար պարտադիր անցում: Const_Min Constant, Const_reg, Const_SL- ն փոխելը կարող է համապատասխանաբար փոխվել, մարտկոցը միացնելիս կանաչ թարթման ժամանակահատվածը, մարտկոցը `գործողության ժամանակը ազդելու համար:
Տպագրված միացման տախտակը պատրաստված է միակողմանի փայլաթիթեղի ապակե ապակու եւ ունի 22x87 մմ չափսեր: Ծայրահեղ LED- ները դասին զուգահեռ են անցկացվում տարբեր ուղղություններով: Միջինքը մասի մասից մեկը սահմանում է, իսկ մյուսը `հետեւի կողմում, եզրակացությունների ելքով` տախտակի բացվածքների վրա եւ դրանք ամրացնում է զամբյուղի աղբյուրներից եւ հետքերի կողմը `համապատասխան հետքերով:
0.125 վտ հզորությամբ բոլոր դիմադրիչները: LED- ները կարող են ընդունվել ցանկացած տնային կամ ներմուծված ցանկալի մեկ տեսակը `ուղիղ լարման կաթիլով` 10 մա մոտ 2 վոլտ: Կոճակը `ցանկացած առանց ամրագրման: Միկրոկոնտրոլերը տեղադրված է բլոկի վրա:
Կազմաձեւման բառը ավտոմատ կերպով մուտքագրվում է հիշողության մեջ, երբ որոնվածը բեռնված է (IC-PROG- ում "« Թռչունը »տեղադրվում է միայն« Rescillator »սյունակում մնացած« Տեղադրում »սյունակում ): Նախ եւ առաջ անհրաժեշտ է կարդալ որոնվածը մաքուր չիպով եւ գրել բառի արժեքը 03FF ծրագրի հիշողության ավարտին, որը պահանջվում է կազմաձեւել չիպի հատուկ օրինակու ներքին գեներատորի հաճախականությունը: Hex ֆայլի ծրագրին ներբեռնելուց հետո դուք պետք է ձեռքով տեղադրեք այս արժեքը 03ff: Այս սարքում հաճախականության շեղումը կրիտիկական չէ, բայց դեռ պետք է իմանաք, որ այս միկրոկրիկը պահանջում է նման ընթացակարգ: Ծայրահեղ դեպքերում, եթե գործարանի արժեքը կորչում է, կարող եք որեւէ բան անել. Ծրագիրը քայլեր է ձեռնարկել ճիշտ աշխատանքի եւ այս դեպքում:
Սարքը տեղադրված է համապատասխան պլաստիկ տուփի մեջ: Համապատասխան անցքերն իրականացվում են վանդակում եւ կափարիչով LED- ների տակ: Իմ մարմնավորման մեջ երթեւեկի լույսն ու բազան կոճակով եւ մարտկոցը միացված են պլաստիկե ջրատարի հատվածի միջոցով, 20 մմ տրամագծով:
Բարեւ!
Անկանում եմ ցույց տալ, թե ինչպես է ծրագիրը գրված պլյուրի վրա վերահսկելու տեխնոլոգիական սարքավորումները:
Ամենից հաճախ ես զբաղվում էի Schneider- ի էլեկտրականության PLC- ի արտադրության հետ: Այս առաջադրանքի համար ընտրված քվանտը այս արտադրողի ամենահզոր եւ թանկ PLC- ն է: Այն կարող է վերահսկել սարքավորումները հազարավոր ազդանշաններով լուսացույցների համար իրական կյանք Ոչ ոք, բնականաբար, այն չի օգտագործում:
Ես երբեք չեմ ներգրավվել լուսացույցների ավտոմատացման մեջ, ուստի ալգորիթմը հայտնվեց իր հետ: Ահա այն:
1. Լուսացույց, կարգավորելի հետիոտնային անցման համար: Նրանք: Մեքենաների, հետիոտնային լուսացույցների լուսացույցը եւ հետիոտների համար կոճակը կտտացնելով, հետիոտնը տեղեկացնում է ճանապարհը տեղափոխելու ցանկության մասին:
2. Ծրագրի մեկնարկից հետո կանաչի համար կանաչի համար կանաչի համար `հետիոտների համար:
3. Կոճակը սեղմելուց հետո հետիոտն սկսում է թարթել կանաչ մեքենաների համար, ապա դեղին, ապա կարմիր: Դրանից հետո կանաչի համար կանաչը լույս է տալիս Սահմանել ժամանակը Այն սկսում է շողալ, հետիոտների համար կարմիրը լուսավորում է, ապա դեղին եւ կարմիր լույսերը ավտոմեքենաների համար, ապա կանաչ:
4. Հետիոտնային լուսացույցի լույսի վրա կանաչ գույնից հետո կանխորոշված \u200b\u200bժամանակահատվածի համար հետիոտնային կոճակը սեղմելը չի \u200b\u200bսկսում անցումային ալգորիթմը: Անցումային ալգորիթմը այս դեպքում սկսվում է միայն նշված ժամանակն ավարտվելուց հետո:
PLC ծրագրավորումն իրականացվում է IEC 61131-3 ստանդարտ լեզուներով միասնության ծրագրավորման միջավայրում: Մեջ Այս ստանդարտը Ներառված են 5 լեզու: Օրինակ, ես ընտրեցի գործառույթի բլոկների լեզուն `FBD:
Ահա միասնության նախագծի զննարկիչը.
Կարգավորել PLC.
PLC- ն բաղկացած է մոնտաժային վահանակից, էլեկտրամատակարարման միավոր (1), վերահսկիչ (2), 24V DC ազդանշանի 32-ի դիսկրետ մուտքային մոդուլը, 32 DC ազդանշանի համար 24 վրկ (5): Մեկ վերահսկիչի հետ կապված մոնտաժային պանելների իրական նախագծում Տարբեր ցանցերԿարող է լինել տասնյակ, իսկ ես / o մոդուլները հարյուրավոր են:
Ստեղծեք փոփոխականներ `փոփոխականների խմբագրում պահանջվող տեսակներ.
I / O մոդուլներից տուժած փոփոխականներն ունեն հասցեն, որը ցույց է տալիս, թե որ զամբյուղը, մոդուլն ու ալիքը ազդանշան են:
Ծրագիրը բաղկացած է յուրաքանչյուր վերահսկիչի սկանավորման ցիկլի կողմից իրականացված հատվածներից:
Պարզեցված վերահսկիչի սկան ցիկլը այսպիսին է.
1. Կարդացեք մուտքային ազդանշանները մուտքային մոդուլից մինչեւ հասցեներով փոփոխականներ:
2. Բաժիններ կատարելը:
3. Փոփոխականներից ռեկորդային արժեքները `ելքային ելքային մոդուլների հասցեներով:
4. 1-ին պահանջի անցում:
Ստեղծեք ժամացույցի բաժին, 0,5 վայրկյան ժամանակահատվածով ազդարարող գեներատորով: TP միավորը, երբ մուտքի ազդանշանը փոխվում է 0-ից 1-ից ելքային, այն տալիս է տվյալ տեւողության զարկերակը:
Այստեղ եւ ներքեւում հատվածների սքրինշոթերը տրվում են անիմացիոն ռեժիմում, եւ ոչ թե խմբագրման ռեժիմը: Դրանք ցուցադրվում են փոփոխական արժեքների արժեքներ ներկա ժամանակում բեռնված ծրագրով PLC- ին միանալիս (թվեր թվային փոփոխականների, գույնի կանաչ (1) համար):
Հիմնական բաժինը մշակում է հիմնական տրամաբանությունը:
SR միավորը սահմանում է ելքը 1-ին S1 \u003d 1-ում եւ վերականգնում է 2-ին R \u003d 1-ում:
R_Trig Unit- ը սահմանում է 1 սկան ցիկլի ելքը 1-ում մուտքագրումը 0-ից 1-ից (առջեւի դետեկտոր) մուտք գործելու համար:
Block F_Trig- ը սահմանում է 1 սկան ցիկլի 1-ին 1-ին 1-ից 0-ի մուտքագրում (հետեւի եզրային դետեկտոր) մուտքագրում:
InButton փոփոխական, որը կապված է կոճակի կոճակի հետ, փոխարինվում է INBUTTONFORTEST բաժնում, որպեսզի փոխեք իր արժեքը վերահսկիչի սիմուլյատորի վրա, առանց իրական սարքավորումների:
Արդյունքների բաժինը առաջացնում է ելքային ազդանշաններ `լուսացույցների լույսերը վերահսկելու համար:
Ծրագիրը ներբեռնում ենք վերահսկիչ սիմուլյատորի.
Any անկացած փոփոխականների արժեքը կարելի է դիտել անիմացիոն աղյուսակում.
Բայց կարգաբերման հարմարության համար կարող եք օպերատորի էկրանը դարձնել պարզ գրաֆիկայի, որի անիմացիան կապված է փոփոխականի հետ.
Մենք փորձում ենք ճանապարհը տեղափոխել.
Ես չէի սպասում, որ վերահսկելու նման պարզ օբյեկտը, որպես լուսացույց, այն կտեւի 30 բլոկ:
Հաջորդ հոդվածում ես ձեզ ցույց կտամ, թե ինչպես գրել Այս ծրագիրըՕգտագործելով IEC 61131-3 ստանդարտ լեզուները միաժամանակ:
Թարմացրեք: Շտկվել է ստանդարտի անունով սխալ:
(Թվեր), (վահանակ):
Դիմում ստեղծելուց առաջ պետք է ուսումնասիրվի նոր բաղադրիչների նկարագրությունը:
Առաջադրանքը: Մոդելավորեք լուսացույցի աշխատանքը: Երբ սկսում եք նախագիծը, տրաֆիկի պանելը պետք է դատարկ լինի: Սկսման կոճակը սեղմելուց հետո լամպը սկսվում է կսկսվի անցնել: Stop կոճակը սեղմելուց հետո. Լույսի վահանակը կրկին դատարկ է: Օգտագործելով ժամանակաչափ, երթեւեկության ազդանշանը հավասար ընդմիջումներով փոխելու համար: Արագության դաշտում մուտքագրվում է ժմչփի ընդմիջում:
Ծրագրի առաջընթացը
1. Ստեղծել Նոր նախագիծ, Պահպանեք այն առանձին թղթապանակում, անվանեք այն «լուսացույցներ»:
2. Տեղադրեք ձեւի վահանակի (շապիկ), երկու կոճակ (TButton), տեքստային դաշտ (TEDIT), մակագրությունը (TLABEL), ժմչփ (TTIMER) `համապատասխան նմուշի.
Սա պետք է այսպիսին լինի.
2. Մենք գրանցում ենք կատարում.
Սահմանեք այս հատկությունների արժեքները օբյեկտի տեսուչին.
Բաղադրիչ | Գին | Արժեք |
Ձեւ 1 | Վերնագիր | Լուսացույց |
Panel1 | Վերնագիր | * Դատարկ * |
Shapew1 | Ձեւավորել | Քարշիկ |
Ձեւ 2: | Ձեւավորել | Քարշիկ |
Ձեւ 3 | Ձեւավորել | Քարշիկ |
Label1 | Վերնագիր | Արագություն |
Խմբագրել 1 | Տեքստ: | * Դատարկ * |
Կոճակ 1 | Վերնագիր | Սկիզբ |
Կոճակ 2: | Վերնագիր | Կանգ առնել |
3. Ստեղծել միջոցառում 1-ի համար Enstreate բաժնում - սեղմեք Troytheater- ը
Ստեղծեք իրադարձություն Timer1- ի համար OnTimer հատվածում - սեղմեք TROETH- ը
4. Գույներ սահմանեք թվերին.
Վերջնական տեսակը.
5. Ձեւի բեռի ընթացքում ժմչփը անջատված է, վահանակի վրա ձեւերը դառնում են անտեսանելի:
Ստեղծեք ֆորմատի միջոցառման ձեռնարկ (երկու անգամ կտտացրեք Form1 բաղադրիչին) եւ տեղադրեք այս ծածկագիրը.
var k: ամբողջ թիվ; Ընթացակարգը TFOMES.FORMCREATE (ուղարկող, վերնագրեր); Սկսեք timer1.enabled: \u003d FALSE; Shape1.visible: \u003d կեղծ; Shape2.visible: \u003d կեղծ; Shape3.visible: \u003d կեղծ; վերջ;
6. Լամպի լամպերը փոխելու համար գրեք ծրագրի կոդը Timer1Timer իրադարձության գործընթացում: Այս ծածկագիրը կկատարվի այն ընդմիջմամբ, որը օգտագործողը մտնում է դաշտում արագություն: Ըստ ժամանակաչափերի ցուցմունքների, վարակված է լամպի համարը, որը պետք է զբաղվի այս պահին.
Երկու անգամ կտտացրեք Timer1 բաղադրիչի վրա եւ տեղադրեք այս ծածկագիրը.
6. Գրեք ծրագրի կոդը մեկնարկի կոճակի համար: Սեղմելով դաշտից կոճակը, ժամանակաչափի ընդմիջումը կարդացվում է, ժմչփ ընթերցումները մուտքագրվում են, ժմչփը միացված է:
Երկու անգամ կտտացրեք կոճակի 1 բաղադրիչի վրա եւ տեղադրեք ծածկագիրը.
Ընթացակարգի TFOM1.Button1click (ուղարկող. Togject); Սկսեք timer1.intererval: \u003d strtoint (edit1.text); k: \u003d 0; Timer1.enabled: \u003d True; վերջ;
7. Գրեք ծրագրի կոդը Stop կոճակի համար: Կոճակը սեղմելուց հետո ժամանակաչափը պետք է անջատվի, լամպերը կրկին անտեսանելի են:
Երկու անգամ կտտացրեք կոճակը 2 բաղադրիչի վրա եւ տեղադրեք ծածկագիրը.
Ընթացակարգը TFOM1.Button2Click (ուղարկող. Togject); Սկսեք timer1.enabled: \u003d FALSE; Shape1.visible: \u003d կեղծ; Shape2.visible: \u003d կեղծ; Shape3.visible: \u003d կեղծ; վերջ;
8. Գործարկել նախագիծը: Արագության դաշտում մուտքագրեք 1000 համարը (1000 MS \u003d 1C): Լուսացույցի լուսավոր լամպերը կսկսեն մեկ վայրկյանում անցնել միջակայքը:
Արտեմ Պոզննիակ, ուսանող 10 «Ա» դպրոցի թիվ 23 դպրոց, Էկիբասբուզ
Շատերը կարծում են, որ հավաքիչը արդեն հնացած է եւ չի օգտագործվել ոչ մի տեղ, բայց հիմնականում երիտասարդներ, ովքեր չեն զբաղվում մասնագիտական \u200b\u200bհամակարգային ծրագրերով: Ծրագրային ապահովման զարգացումը, իհարկե, լավ է, բայց ի տարբերություն բարձր մակարդակի ծրագրավորման լեզուների, հավաքիչը կսովորեցնի խորապես հասկանալ համակարգչի աշխատանքը, օպտիմալացնել ապարատային ռեսուրսներով, ինչպես նաեւ ծրագրավորել ցանկացած տեխնիկա Մեքենաների ուսուցում: Հին այս հնագույն YAP- ը հասկանալու համար նախ պետք է գործածվել Պարզ ծրագրերԴա լավագույնս բացատրում է հավաքիչի ֆունկցիոնալությունը:
Ide հավաքիչի համար:
Առաջին հարց. Որ զարգացման միջավայրում է հավաքագրվում հավաքողին: Պատասխանը միանշանակ է. MAMM32:, այն Ստանդարտ ծրագիրօգտագործվում է այս Jap- ի համար: Դուք կարող եք ներբեռնել այն Masm32.com- ի պաշտոնական կայքում, արխիվի տեսքով, որը պետք է բացվի եւ գործարկելուց հետո տեղադրեք տեղադրիչը: Որպես այլընտրանք, կարող եք օգտագործել FASM, բայց դրա համար ծածկագիրը զգալիորեն տարբեր կլինի:
Աշխատանքից առաջ գլխավորը չպետք է մոռանալ համակարգի փոփոխականին ավելացնել ուղի գիծ.
C: \\ masm32 \\ bin
Hello World ծրագիրը Assembler- ում
Համարվում է, որ սա Հիմնական ծրագիր Ծրագրով, որ սկսնակներն առաջին հերթին գրում են: Միգուցե այս մոտեցումը այնքան էլ հավատարիմ չէ, բայց այս կամ այն \u200b\u200bկերպ թույլ է տալիս անմիջապես տեսնել տեսողական արդյունք.
386 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / lib / kernel32.lib .data msg_title db "title", 0 msg_message DB "HELLO WORLD", 0 .Code Սկիզբ.
Սկսելու համար գործարկեք QEDitor.exe խմբագրիչը թղթապանակում տեղադրված MAMM32- ի հետ, եւ դրա մեջ մենք գրում ենք ծրագրի ծածկագիրը: Այն բանից հետո, երբ մենք պահենք այն որպես ֆայլ «.Amm» ընդլայնմամբ, եւ Bildim ծրագիրը, օգտագործելով Ծրագրի ընտրացանկի տարրը → «Կառուցեք բոլորը»: Եթե \u200b\u200bկոդում սխալներ չկան, ծրագիրը հաջողությամբ կազմված է, եւ արդյունքում մենք կստանանք պատրաստի EXE ֆայլ, որը ցույց կտա windows պատուհան «Բարեւ աշխարհ» մակագրությամբ:
Assembler- ում երկու համարի ավելացում
Այս դեպքում մենք նայում ենք, արդյոք թվերի քանակը զրո է, թե ոչ: Եթե \u200b\u200bայդպես է, ապա համապատասխան հաղորդագրությունը հայտնվում է էկրանին, եւ եթե ոչ, կա այլ ծանուցում:
486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / LIB / KERNEL32.LIB Ներառեք / emasm32 / Macrouss / Macros.ASM MAMM32, ComcTL32, WS2_32 .Դատ: CHR $ ("IN EAX Ոչ 0!"), CHR $ ("Տեղեկատվություն"), 0 JMP Lexit Zero: Invoke Messagebox, 0, CHR $ ("INFO"), 0 Lexit: Diskoke ExitProcess, 0 վերջի մեկնարկ
Այստեղ մենք օգտագործում ենք այսպես կոչված պիտակները եւ Հատուկ թիմեր Դրանց օգտագործման միջոցով (JZ, JMP, Test): Մենք ավելի շատ կտեսնենք.
- test - օգտագործվում է փոփոխականների (օպերանդների) տրամաբանական համեմատության համար բայթերի, բառերի կամ կրկնակի բառերի տեսքով: Համեմատության համար, հրամանը օգտագործում է տրամաբանական բազմապատկում եւ նայում է բիտերին. Եթե դրանք հավասար են 1-ի, ապա արդյունքը կլինի 1-ը, եթե մենք 0-ը հասնենք ), որը հավասար կլինի 1-ի: Հետեւյալ արդյունքները վերլուծվում են ZF- ի հիման վրա:
- jNZ - Եթե ZF դրոշը ոչ մի տեղ չի առաքվել, անցումը կատարվում է այս պիտակի վրա: Հաճախ այս հրամանը կիրառվում է, եթե ծրագիրը ունի համեմատության գործողություններ, որոնք ինչ-որ կերպ ազդում են ZF- ի արդյունքի վրա: Սա ներառում է թեստ եւ CMP:
- jZ - Եթե դեռ տեղադրվել է ZF դրոշը, ապա պիտակի անցումը:
- jMP - Անկախ նրանից, թե կա ZF, թե ոչ, անցումը կատարվում է պիտակի կողմից:
Համարների քանակը հավաքիչի վրա
Պրիմիտիվ ծրագիր, որը ցույց է տալիս երկու փոփոխականների ամփոփման գործընթացը.
486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / LIB / Kernel32.lib Ներառեք / emasm32 / Macrouss / Macros.Asm Maselib Masm32, Comctl32, WS2_32: Սկսել սկսել.
Հավաքագրում գումարը հաշվարկելու համար անհրաժեշտ կլինի շատ գործողություններ իրականացնել, քանի որ ծրագրավորման լեզուն ուղղակիորեն աշխատում է համակարգի հիշողության հետ: Այստեղ մենք հիմնականում շահարկում ենք ռեսուրսները եւ ինքնուրույն նշում են, թե որքան կարեւոր է փոփոխականը կարեւորել, թե որ տեսքով համարները ընկալելու համար, եւ որտեղ դրանք դարձնել:
Ստանալով արժեքը հրամանի տողից, հավաքածուի վրա
Ծրագրավորման մեջ կարեւոր հիմնական գործողություններից մեկը վահանակից տվյալներ ստանալն է `հետագա մշակման համար: Այս դեպքում մենք դրանք ստանում ենք Հրամանի տող եւ ցուցադրել Windows պատուհանում.
486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / LIB / Kernel32.lib- ը ներառում է / emasm32 / Macrous / Macros.Asm Uslib Masm32, ComcTL32, WS2_32 .DADA: Արդյունքը կտեղադրվի EAX PUSH 0 PUSH CHR $ («հրամանի տող») Push Eax; Տեքստի համար տեքստը մենք վերցնում ենք EAX հրում 0 զանգի հաղորդագրություն push 0 զանգի ExitProcess End Start
Կարող եք նաեւ օգտագործել այլընտրանքային մեթոդ.
486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է LIB / Kernel32.lib- ը ներառում է / emasm32 / Macrous / Macros.Asm Uslib Masm32, ComcTL32, WS2_32 .DADA: Արդյունքը կտեղադրվի EAX- ի Rulecommandline Invoke Messagebox- ում, 0, EAX, CHR $ ("Command Line"), 0 Rukake ExitProcess, 0 Push 0 CallProcess End Start
Այստեղ օգտագործվում է Rureck - Հատուկ մակրո, որի միջոցով ծրագրի կոդը պարզեցված է: Հավաքածուի ընթացքում մակրո հրամանները վերածվում են հավաքման հրամանների: Համենայն դեպս, մենք օգտագործում ենք ստանդարտ `տվյալների պահպանման պարզունակ միջոց, բայց միեւնույն ժամանակ շատ հարմար: STDCALL- ի համաձայնությամբ, բոլոր WinaPi- ի գործառույթներում փոփոխականները փոխանցվում են կեռիկի միջոցով, միայն Հակադարձ կարգեւ տեղադրված է համապատասխան EAX գրանցամատյանում:
C իկլեր հավաքարարում
Օգտագործեք տարբերակ.
Data Msg_Title DB «Վերնագիր», 0 A DB 1H բուֆեր DB 128 DUP (?) Format DUM "% D", 0 .Առաջին, A.REPEAT INC, հավելյալ բուֆեր, Addr Format, Al Invoke MessageBox, 0, Addr Buffer, MB_OK Direcke ExitProcess, 0 վերջ մեկնարկ. Data Msg_Title DUG (? Mov Eax, 1 MOV EDX, 1 .WHILE EDX \u003d\u003d 1 Inc EAX .Եթե EAX \u003d\u003d 7 .Բ. Հարդարման, Addr Buffer, MB_OK Դրանից դուրս եկեք ելք, 0
Մի ցիկլ ստեղծելու համար օգտագործեք կրկնող հրամանը: Հաջորդը, օգտագործելով Inc- ն ավելացնում է 1-ի փոփոխականի արժեքը, անկախ նրանից, թե արդյոք այն գտնվում է Պատահական մուտքի հիշողությունկամ հենց պրոցեսորի մեջ: C իկլերի աշխատանքը ընդհատելու համար օգտագործվում է «. Երջանկ» հրահանգը: Դա կարող է լինել, թե ինչպես կարելի է դադարեցնել ցիկլը եւ շարունակել իր գործողությունները «դադարից» հետո: Կարող եք նաեւ ընդհատել ծրագրի կոդի կատարումը եւ ստուգել կրկնումը եւ մինչդեռ պայմանը `օգտագործելով« .Continue »հրահանգը:
Հավաքիչի զանգվածի տարրերի քանակը
Այստեղ մենք ամփոփում ենք զանգվածի փոփոխականների արժեքները `օգտագործելով« For »ցիկլը.
486 .Model Flat, Stdcall Option Casemap. Ոչ մեկը ներառում է / commasm32/include/windows.inc ներառում է / commasm32/include/kernel32.lib / masm32 / lib / kernel32.lib ներառում են / smaMSM32/Macros.MACROS.ASM USELIB MAMM32, COMCTL32, WS2_32 .DATA MSG_TITLE DB "Title", 01, 8,9,10,11 N DD 12 բուֆեր DB 128 DUP (?) Format db "% d", 0. Կոդ սկիզբ. MOS EAX, 0 MOVE EBX, X Ավելացնել EAX, X Ավելացնել EMX, Type X DEC ECX CMP ECX, 0 JNE L Invake WSPrintf, Addr Buffer, Addr Format, EAX DISHOSE հաղորդագրությունատուփ, 0, MSG_TITLE, MB_OK DESTPOCESS, 0 Վերջ Սկսել
Դեկային հրամանատարությունը, ինչպես նաեւ Inc- ը փոխում է օպերայի արժեքը յուրաքանչյուր միավորի համար, միայն հակառակ ուղղությամբ, -1-ում: Բայց CMP- ն փոփոխականները համեմատում է հանման միջոցով. Երկրորդից մեկ արժեք է վերցնում եւ, կախված արդյունքից, դնում է համապատասխան դրոշները:
Օգտագործելով JNE հրամանը, պիտակը հիմնված է պիտակի վրա `փոփոխականների համեմատության հիման վրա: Եթե \u200b\u200bդա բացասական է, կա անցում, եւ եթե օպերաները հավասար չեն միմյանց, անցումը չի իրականացվում:
Assemsber- ը հետաքրքիր է փոփոխականների ներկայացման համար, ինչը թույլ է տալիս նրանց հետ որեւէ բան անել: Մասնագետ, որը պարզում էր բոլոր նրբություններում այս լեզվից Ծրագրավորում, իսկապես արժեքավոր գիտելիք ունի, որոնք օգտագործման շատ եղանակներ ունեն: Մեկ խնդիր կարող է առավելագույնը լուծվել տարբեր ճանապարհներՀետեւաբար, ճանապարհը կլինի փշոտ, բայց ոչ պակաս հետաքրքիր:
Գրառումներ. 767