Мазмұны:
- 1 -қадам: түсінік
- 2 -қадам: Портты инициализациялау
- 3 -қадам: Өте төмен қуат
- 4 -қадам: ТАЙМЕР
- 5 -қадам: төмен қуат режимі
- 6-қадам: ISR-таймер
- 7 -қадам: аппараттық құралдардың үзілуі
- 8-қадам: ISR- қалпына келтіру/ басу түймесі
- 9 -қадам: КОД
- 10 -қадам: Анықтама коды
Бейне: MSP430 секунд санағышы: 10 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Қош келдіңіз! Seconds Counter жасау: жоба үшін CCStudio 8 мен MSP430F5529 қолдану.
Микроконтроллерді кодтау үшін C тілі. Төмен қуат режимдерін, таймерлер мен үзілістерді қолдану. Шығу 7 сегмент арқылы көрсетіледі.
1 -қадам: түсінік
Бастайық!
Күзетші таймері үшін қажетті құпия сөзді қолданып, күзетші таймерін ӨШІРУ күйіне келтіріңіз (процессордың қауіпсіздігін сақтай отырып, шексіз ілмектерді тексеруге көмектеседі).
#қосу
/** * негізгі.c */
int main (жарамсыз)
{
WDTCTL = WDTPW | WDTHOLD; // күзетші таймерін тоқтату
қайтару 0;
}
2 -қадам: Портты инициализациялау
{
P3DIR = 0xFF; // P3DIR = 0x00;
P6DIR = 0xFF;
P4DIR | = 0x00;
P4REN | = 0xFF;
P4OUT | = 0xFF;
}
P3DIR | = 0x00 бізге ПОРТ-3 түгелдей кіріс енгізу үшін инициализацияланғанын айтады.
P3DIR | = 0xFF бізге ПОРТ-3 түгелдей шығыс беру үшін инициализацияланғанын айтады.
P3DIR | = 0x01 PORT-3 шығысына тек P3.0 түйрегіші инициализацияланған. Бұл он алтылық портты салыстырудан кейін.
P4REN | = 0xFF, бұл PORT-4 түйреуіштерінің жоғары/төмен тартылатын резисторлары қосылғанын көрсетеді.
Оларды Pull UP немесе Pull DOWN арасында таңдау үшін P $ OUT | = 0xFF нұсқауы қолданылады.
Егер 0xFF қолданылса, олар Pull UP резисторлары ретінде конфигурацияланады, ал 0x00 - POW DOWN ретінде конфигурацияланады.
3 -қадам: Өте төмен қуат
MSP430F5529 процессордан қуат шығынын азайтуға мүмкіндік береді. Бұл дербес қосымшаларда пайдалы.
Бұл барлық түйреуіштерді немесе порттарды шығаруды жариялауды талап етеді.
{
P7DIR | = 0xFF;
P6DIR | = 0xFF;
P5DIR | = 0xFF;
P4DIR | = 0xFF;
P3DIR | = 0xFF;
P2DIR | = 0xFF;
P1DIR | = 0xFF;
}
4 -қадам: ТАЙМЕР
Бір секундқа кешіктіру үшін таймерді қолдану. Бұл 1MHz SMCLK пайдаланады, сонымен қатар таймер төмен қуат режимінде жұмыс істейді (келесі қадамда, оның есептелуінен кейін LPM үзіледі). Бұл процесс процессорға жүктеме мен қуатты үнемдейді
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = TASSEL_2 + MC_1;
Мәндер - 999, өйткені таймер регистрінде нөлге оралу үшін тағы бір есеп қажет.
5 -қадам: төмен қуат режимі
_BIS_SR (LPM0_bits+GIE);
Бұл жалпы үзілісті қосуды қосады (GIE) және процессорды LPM0 күйіне қояды, мұнда процессорды қолдайтын MCLK өшірулі, ал таймердің жұмыс істеуін қамтамасыз ететін SMCLK және ACLK жұмыс істейді. біз қуатты үнемдеу арқылы процессордың өшірілгенін көре аламыз.
6-қадам: ISR-таймер
#прагма векторы = TIMER0_A0_VECTOR
_ үзіліссіз уақыт Timer_A (жарамсыз)
{
z ++;
егер (z> кешіктіру)
{
P3OUT = коды [x];
P6OUT = код1 [у];
x ++;
егер (x == 10)
{
x = 0;
y ++;
}
егер (y == 6)
y = 0;
z = 0;
}
}
прагма векторы C embd ішіндегі ISR ұсынуға арналған.
code [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 = код1 [у];
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 code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
тұрақсыз белгісіз int x = 0, y = 0, z = 0;
тұрақсыз белгісіз int v = 0, i = 0;
void main ()
{
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);
}
// Таймер A0 үзіліс қызметі
#прагма векторы = TIMER0_A0_VECTOR
_ үзіліс жарамсыздығы Timer_A (жарамсыз)
{
z ++;
егер (z> кешіктіру)
{
P3OUT = коды [x];
P6OUT = код1 [у];
x ++;
егер (x == 10)
{
x = 0;
y ++;
}
егер (y == 6)
y = 0;
z = 0;
}
}
// Аппаратты үзу қызметі
#прагма векторы = PORT2_VECTOR
_ үзіліс жарамсыз порт_2 (жарамсыз)
{
P2IFG & = ~ BIT1;
x = 0;
y = 0;
P3OUT = коды [x];
P6OUT = код1 [у];
v ++;
үшін (i = 0; i
{P1OUT | = BIT0; // P1.0 = ауысу
_кідіріс_циклдар (1048576);
P1OUT & = ~ BIT0; // P1.0 = ауысу
_ кешіктіру_циклдары (1048576);
}
}
10 -қадам: Анықтама коды
GitHub репозиторийі
Ұсынылған:
Arduino қолданатын қарапайым жиілік санағышы: 6 қадам
Arduino қолданатын қарапайым жиілік санағышы: Бұл оқулықта біз Arduino көмегімен қарапайым жиілік есептегішін жасауды үйренеміз. Бейнені қараңыз
Arduino көмегімен жиілік санағышы: 8 қадам (суреттермен)
Arduino көмегімен жиілікті санауыш: бұл қарапайым және арзан arduino негізіндегі жиілік есептегішінің бағасы 4 доллардан төмен, шағын тізбектерді өлшеу өте пайдалы болды
Ақылды 3D принтерлік жіп санағышы: 5 қадам (суреттермен)
Ақылды 3D принтерлердің жіптерінің есептегіші: жіптерді санаудың не қажеті бар? Бірнеше себеп: Сәтті басып шығару үшін дұрыс калибрленген экструдер қажет: gcode экструдерге жіпті 2 мм жылжытуды айтқан кезде, ол дәл 2 мм жылжуы керек. Егер ол шамадан тыс шығарылса немесе жеткіліксіз болса, жаман нәрселер болады
Nerf үшін Arduino: хронограф және кадр санағышы: 28 қадам (суреттермен)
Arduino for Nerf: Chronograph and Shot Counter: Менің алдыңғы нұсқаулығымда инфрақызыл сәуле шығарғыш пен детекторды қолдана отырып, дарттың жылдамдығын анықтаудың негіздері қарастырылған. Бұл жоба портативті қару -жарақ есептегіші мен хронограф жасау үшін баспа тақтасын, дисплей мен батареяларды қолдана отырып, бір қадам алға жылжиды
MSP430 Breadboard дыбыстық спектр анализаторы: 6 қадам
MSP430 Breadboard Audio Spectrum Analyzer: Бұл жоба микрофонға негізделген және ең аз сыртқы компоненттерді қажет етеді. 2 x LR44 монета ұяшықтары пайдаланылады, осылайша мен 170 құрылымды шағын тақтаның құрылымында жұмыс жасай аламын. ADC10, TimerA үзіліс LPM ояту, TimerA PWM