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

MSP430 վայրկյանների հաշվիչ ՝ 10 քայլ
MSP430 վայրկյանների հաշվիչ ՝ 10 քայլ

Video: MSP430 վայրկյանների հաշվիչ ՝ 10 քայլ

Video: MSP430 վայրկյանների հաշվիչ ՝ 10 քայլ
Video: Лекция 6. Обзор контроллера MSP-430 2024, Հուլիսի
Anonim
MSP430 վայրկյան հաշվիչ
MSP430 վայրկյան հաշվիչ

Բարի գալուստ: Վայրկյանների հաշվիչի պատրաստում. Նախագծի համար օգտագործելով CCStudio 8 և MSP430F5529:

C լեզու `միկրոկարգավորիչը կոդավորելու համար: Lowածր էներգիայի ռեժիմների, ժամաչափերի և ընդհատումների կիրառում: Արդյունքը ցուցադրվում է 7 հատվածի միջոցով:

Քայլ 1: Խորաթափանցություն

Խորաթափանցություն
Խորաթափանցություն

Եկեք սկսենք!

Գործարկեք դիտորդի ժմչփը դեպի OFF վիճակ ՝ օգտագործելով դիտորդի ժամաչափի համար անհրաժեշտ գաղտնաբառը (Այն օգնում է ստուգել անսահմանափակ օղակները ՝ ապահով պահելով պրոցեսորը):

#ներառում

/** * main.c */

int հիմնական (անվավեր)

{

WDTCTL = WDTPW | WDTHOLD; // դադարեցնել հսկիչ ժամաչափը

վերադարձ 0;

}

Քայլ 2: Նավահանգստի սկզբնականացում

{

P3DIR = 0xFF; // P3DIR = 0x00;

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00- ը մեզ ասում է, որ ամբողջ PORT-3- ը նախաստորագրված է մուտքեր ընդունելու համար:

P3DIR | = 0xFF- ն մեզ ասում է, որ PORT-3- ի ամբողջը նախաստորագրված է ելքեր տալու համար:

P3DIR | = 0x01 միայն P3.0 կապը նախաստորագրված է PORT-3- ում ելքի համար: Սա հետևում է տասնվեցերորդ նավահանգստի քարտեզագրմանը:

P4REN | = 0xFF, սա ցույց է տալիս, որ PORT-4- ի կապում միացված և բարձրացնող դիմադրամները միացված են:

Pull UP կամ Pull DOWN միջև դրանք ընտրելու համար օգտագործվում է P $ OUT | = 0xFF հրահանգը:

Եթե օգտագործվում է 0xFF, դրանք կազմաձևվում են որպես Pull UP ռեզիստորներ, իսկ եթե 0x00- ով ՝ որպես Pull DOWN:

Քայլ 3: ծայրահեղ ցածր էներգիա

MSP430F5529 թույլ է տալիս մեզ նվազեցնել էներգիայի կորուստը պրոցեսորից: Սա օգտակար է ինքնուրույն ծրագրերում:

Սա պահանջում է բոլոր փին կամ նավահանգիստների ելք հայտարարելը:

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Քայլ 4: IMԱՄԱՆԱԿ

. Ամաչափի օգտագործումը Հետաձգման մեկ վայրկյան առաջացման համար: Սա օգտագործում է 1 ՄՀց SMCLK- ը, ինչպես նաև ժմչփն աշխատում է ցածր էներգիայի ռեժիմում (հաջորդ քայլին, երբ այն հաշվելուց հետո այն ընդհատվել է LPM- ից): Այս գործընթացը խնայում է էներգիան և բեռը պրոցեսորի վրա

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Արժեքները 999 են, քանի որ ժամանակաչափի գրանցամատյանում զրո վերադառնալու համար անհրաժեշտ է ևս մեկ հաշվարկ:

Քայլ 5: Powerածր էներգիայի ռեժիմ

_BIS_SR (LPM0_bits+GIE);

Սա հնարավորություն է տալիս Ընդհանուր ընդհատում միացնել (GIE), և պրոցեսորը դնում է LPM0, որտեղ անջատված է CPU- ն աջակցող MCLK- ը, և SMCLK և ACLK գործարկումը, որը պահում է ժամաչափի աշխատանքը: այնպես որ մենք կարող ենք տեսնել, որ պրոցեսորը անջատված է ՝ էներգիա խնայելով:

Քայլ 6: ISR- ժմչփ

ISR- ժմչփ
ISR- ժմչփ

#պրագմայի վեկտոր = TIMER0_A0_VECTOR

_ ընդհատվող դատարկ ժամանակաչափ_Ա (անվավեր)

{

z ++;

եթե (z> ուշացում)

{

P3OUT = ծածկագիր [x];

P6OUT = code1 [y];

x ++;

եթե (x == 10)

{

x = 0;

y ++;

}

եթե (y == 6)

y = 0;

z = 0;

}

}

պրագմայի վեկտորը նախատեսված է C embd- ում ISR ներկայացման համար:

կոդը [x] և code1 [y] այն զանգվածներն են, որոնք պարունակում են ելքային արժեքներ երկու յոթ հատվածների համար ՝ 60 վայրկյան հաշվիչ ցուցադրելու համար:

Քայլ 7: Սարքաշարի ընդհատում

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Այստեղ P2.1- ը հայտարարվում է որպես ապարատային ընդհատում, եթե կոճակը սեղմված է, հաշվիչը վերադառնում է արժեքին:

մնացած ծրագիրը գրված է այս ընդհատման ISR- ի ներսում:

Քայլ 8: ISR- Վերագործարկեք/ սեղմեք կոճակը

#պրագմայի վեկտոր = PORT2_VECTOR

_ ընդհատվող դատարկ պորտ_2 (դատարկ)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = ծածկագիր [x];

P6OUT = code1 [y];

v ++;

համար (i = 0; i

{

P1OUT | = BIT0; //P1.0 = միացում

_ ուշացման_հեծանիվներ (1048576);

P1OUT & = ~ BIT0; // P1.0 = անջատում

_ ուշացման_հեծանիվներ (1048576);

}

Այս ISR- ն վերականգնում է հաշվիչը և հաշվում է, թե մնացածը քանի անգամ է սեղմվել:

(Այստեղ ցուցադրումը կատարվում է led անջատիչի միջոցով, կարող է նաև օգտագործել մեկ այլ զանգված և ժամանակաչափ ՝ այդ արժեքները որպես ելք 7 հատվածում ցուցադրելու համար):

Քայլ 9: ԿՈԴ

ԿՈԴ
ԿՈԴ

#ներառում

#սահմանի 1000 հետաձգում

char կոդը = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

char կոդը 1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

անկայուն անստորագիր int x = 0, y = 0, z = 0;

անկայուն անստորագիր int v = 0, i = 0;

դատարկ հիմնական ()

{

WDTCTL = WDTPW | WDTHOLD; // դադարեցնել պահակախմբի ժամաչափը

P7DIR | = 0xFF;

P7OUT | = 0x00;

P8DIR | = 0xFF;

P8OUT | = 0x00;

P4DIR | = 0xFF;

P4OUT | = 0x00;

P5DIR | = 0xFF;

P5OUT | = 0x00;

P1DIR = 0xFF;

P3DIR = 0xFF;

P6DIR = 0xFF;

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

_BIS_SR (LPM0_bits+GIE);

}

// erամաչափ A0 ծառայության ընդհատման ռեժիմ

#պրագմայի վեկտոր = TIMER0_A0_VECTOR

_ ընդհատվող դատարկ ժամանակաչափ_Ա (անվավեր)

{

z ++;

եթե (z> ուշացում)

{

P3OUT = ծածկագիր [x];

P6OUT = code1 [y];

x ++;

եթե (x == 10)

{

x = 0;

y ++;

}

եթե (y == 6)

y = 0;

z = 0;

}

}

// Սարքավորման ընդհատման ծառայության ռեժիմ

#պրագմայի վեկտոր = PORT2_VECTOR

_ ընդհատվող դատարկ պորտ_2 (դատարկ)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = ծածկագիր [x];

P6OUT = code1 [y];

v ++;

համար (i = 0; i

{P1OUT | = BIT0; // P1.0 = անջատում

_ ուշացման_հեծանիվներ (1048576);

P1OUT & = ~ BIT0; // P1.0 = անջատում

_ ուշացման_հեծանիվներ (1048576);

}

}

Քայլ 10: Հղման ծածկագիր

Հղման ծածկագիր
Հղման ծածկագիր

GitHub շտեմարան

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