সুচিপত্র:

MSP430 সেকেন্ডের কাউন্টার: 10 টি ধাপ
MSP430 সেকেন্ডের কাউন্টার: 10 টি ধাপ

ভিডিও: MSP430 সেকেন্ডের কাউন্টার: 10 টি ধাপ

ভিডিও: MSP430 সেকেন্ডের কাউন্টার: 10 টি ধাপ
ভিডিও: Lecture 11: PWM AND INTERRUPT on STM32F401 2024, নভেম্বর
Anonim
MSP430 সেকেন্ডের কাউন্টার
MSP430 সেকেন্ডের কাউন্টার

স্বাগত! সেকেন্ড কাউন্টার তৈরি করা: প্রকল্পের জন্য CCStudio 8 এবং MSP430F5529 ব্যবহার করা।

মাইক্রো কন্ট্রোলার কোড করার জন্য C ভাষা। লো পাওয়ার মোড, টাইমার এবং ইন্টারাপ্ট প্রয়োগ করা হচ্ছে আউটপুট 7 সেগমেন্টের মাধ্যমে প্রদর্শিত হয়।

ধাপ 1: অন্তর্দৃষ্টি

অন্তর্দৃষ্টি
অন্তর্দৃষ্টি

চল শুরু করি!

ওয়াচডগ টাইমারের জন্য প্রয়োজনীয় পাসওয়ার্ড ব্যবহার করে ওয়াচডগ টাইমার বন্ধ অবস্থায় চালু করুন (এটি প্রসেসরকে নিরাপদ রেখে অসীম লুপগুলি পরীক্ষা করতে সাহায্য করে)।

#অন্তর্ভুক্ত

/** * 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 OU বা POW DOWN এর মধ্যে তাদের নির্বাচন করার জন্য, নির্দেশ P $ OUT | = 0xFF ব্যবহার করা হয়।

যদি 0xFF ব্যবহার করা হয় তবে তারা পুল ইউপি প্রতিরোধক হিসাবে কনফিগার করে এবং যদি 0x00 তারা পুল ডাউন হিসাবে কনফিগার করে।

ধাপ 3: আল্ট্রা লো পাওয়ার

MSP430F5529 আমাদের প্রসেসর থেকে পাওয়ার লস কমাতে দেয়। এটি স্বতন্ত্র অ্যাপ্লিকেশনগুলিতে দরকারী।

এটি সমস্ত পিন বা পোর্টকে আউটপুটে ঘোষণার আহ্বান জানায়।

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

ধাপ 4: টাইমার

এক সেকেন্ডের বিলম্ব প্রজন্মের জন্য টাইমারের ব্যবহার। এটি 1MHz এর SMCLK ব্যবহার করে, এছাড়াও লো পাওয়ার মোডে টাইমার চলে (পরবর্তী ধাপে, এলপিএম থেকে তার গণনার পরে)। এই প্রক্রিয়াটি প্রসেসরের শক্তি এবং বোঝা বাঁচায়

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

মান 999, কারণ টাইমার রেজিস্টারে শূন্যে ফিরতে আরও একটি গণনা লাগে।

ধাপ 5: লো পাওয়ার মোড

_BIS_SR (LPM0_bits+GIE);

এটি জেনারেল ইন্টারাপ্ট এনাবল (GIE) সক্ষম করে, এবং CPU কে LPM0 তে রাখে, যেখানে MCLK যে cpu সমর্থন করে, এবং SMCLK এবং ACLK চালায় যা টাইমারকে সচল রাখে। তাই আমরা দেখতে পাচ্ছি CPU বন্ধ আছে, সেখানে বিদ্যুৎ সাশ্রয় করে।

ধাপ 6: ISR- টাইমার

আইএসআর-টাইমার
আইএসআর-টাইমার

#প্রাগমা ভেক্টর = TIMER0_A0_VECTOR

_ বিরতিহীন অকার্যকর টাইমার_এ (অকার্যকর)

{

z ++;

যদি (z> বিলম্ব)

{

P3OUT = কোড [x];

P6OUT = code1 [y];

x ++;

যদি (x == 10)

{

x = 0;

y ++;

}

যদি (y == 6)

y = 0;

z = 0;

}

}

প্রগমা ভেক্টর সি এমবিডিতে আইএসআর প্রতিনিধিত্বের জন্য।

কোড [x] এবং কোড 1 [y] হল এমন অ্যারে যা 60 সেকেন্ডের কাউন্টার প্রদর্শনের জন্য দুটি সাতটি অংশের আউটপুট মান ধারণ করে।

ধাপ 7: হার্ডওয়্যার ইন্টারাপ্ট

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = বিআইটি 1;

P2IFG & = ~ BIT1;

এখানে P2.1 কে হার্ডওয়্যার ইন্টারাপ্ট হিসেবে ঘোষণা করা হয়, যদি বোতাম টিপে থাকে, কাউন্টারটি ভ্যালুতে রিসেট হয়।

এই বিরতির ISR এর ভিতরে বাকি প্রোগ্রাম লেখা আছে।

ধাপ 8: ISR- রিসেট/ পুশ বোতাম

#pragma ভেক্টর = PORT2_VECTOR

_ বিরতিহীন শূন্য পোর্ট ২ (অকার্যকর)

{

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 নির্ধারণ করুন

চার কোড = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

char code1 = {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 | = বিআইটি 1;

P2IFG & = ~ BIT1;

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

_BIS_SR (LPM0_bits+GIE);

}

// টাইমার A0 বিঘ্নিত পরিষেবা রুটিন

#প্রাগমা ভেক্টর = TIMER0_A0_VECTOR

_ বিরতিহীন অকার্যকর টাইমার_এ (অকার্যকর)

{

z ++;

যদি (z> বিলম্ব)

{

P3OUT = কোড [x];

P6OUT = code1 [y];

x ++;

যদি (x == 10)

{

x = 0;

y ++;

}

যদি (y == 6)

y = 0;

z = 0;

}

}

// হার্ডওয়্যার ইন্টারাপ্ট সার্ভিস রুটিন

#pragma ভেক্টর = PORT2_VECTOR

_ বিরতিহীন শূন্য পোর্ট ২ (অকার্যকর)

{

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: রেফারেন্স কোড

রেফারেন্স কোড
রেফারেন্স কোড

গিটহাব রিপোজিটরি

প্রস্তাবিত: