Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: сторожевой таймер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
chainikru
Подскажите пожалуйста как задать интервал для сторожевого таймера равным 500мС
WDTCTL = WDT_MDLY_32; // Set Watchdog Timer interval to ~30ms
WDTCTL = (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1); // Set Watchdog Timer interval 0,5ms
WDTCTL = .................................................................; // Set Watchdog Timer interval 500ms
rezident
Несмотря на то, что у WDT 16-и разрядный счетчик, нельзя установить произвольное значение этого счтечика. Счетчик WDT можно только сбросить. И выходных линий у счетчика WDT только 4 с коэффициентами деления /64, /512, /8192 и /32768. Поэтому, чтобы выбирать произвольный период остается только один способ - непосредственное управление источником тактирования: сигналы SMCLK и ACLK. В разделе 10.1 Watchdog Timer+ (WDT+) Introduction из MSP430x2xx Family User's Guide (Rev. H) есть вполне понятная блок-схема этого модуля и поэтому непонятно, отчего вы задаете вопрос на форуме, а не читаете доступную документацию?
Если вы хотите задавать произвольные периоды, то разумнее было бы пользоваться возможностями TimerA.
chainikru
неподскажете как задать такт равным 500 мС в таймере А
т.е. когда таймер будет считать от 0 до 1 проходило 500мС
rezident
Вполне очевидно, что для этого нужно подать на тактовый вход таймера TACLK или TAINCLK частоту 2Гц. Объясните, что именно вы хотите получить от таймера?
IgorKossak
Ещё более очевидным является то, что автор не дал себе труд хотя бы на беглое ознакомление с документацией.
chainikru, Вы по каждому чиху собираетесь темы создавать?
Считайте это устным предупреждением.
chainikru
с документацией если не не в совершенстве то хоть както я ознакомился. Насчет количества тем извеняюсь, согласен, что свой оследний вопрос нужно было задать в этой теме просто я недавний пользователь форума и подумал что если я напишу здесь то его никто не прочтет.
насчет вопроса я решил потренироваться во время перерыва между семестрами и написать программу для светофора перед этим посмотрев как он работает и я увидел что он мигает 3 раза в 3 секунды следовательно такт должен быть равен 500мС
вот что я написал предварительно:
CODE

#include <msp430x20x3.h>
#define u_char unsigned char
//-------------------------------------------------------------------
#define LED_R_1 0x02 // P1.1
#define LED_Y_1 0x04 // P1.2
#define LED_G_1 0x08 // P1.3
#define LED_R_2 0x10 // P1.4
#define LED_G_2 0x20 // P1.5
//begin ####################### main() ##############################
static u_char ct500ms;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x00;
P1OUT |= 0xFF;
//P1DIR |= LED_R_1+LED_Y_1+LED_G_1+LED_R_2+LED_G_2;
//P1OUT &=~( LED_R_1+LED_Y_1+LED_G_1+LED_R_2+LED_G_2);
CCTL0 = CCIE;
CCR0=62500;
TACTL = TASSEL_2 + MC_1+ID_3;
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
switch (ct500ms)
{
case 0:
P1OUT |= LED_R_1; P1OUT |= LED_G_2;
break;
case 54:
P1OUT &= ~LED_G_2; P1OUT |= LED_R_2;
break;
case 60:
P1OUT &= ~LED_R_1;
break;
case 61:
P1OUT |= LED_R_1;
break;
case 62:
P1OUT &= ~LED_R_1;
break;
case 63:
P1OUT |= LED_R_1;
break;
case 64:
P1OUT &= ~LED_R_1;
break;
case 65:
P1OUT |= LED_R_1;
break;
case 66:
P1OUT &= ~LED_R_1;
P1OUT |= LED_Y_1;
break;
case 72:
P1OUT &= ~LED_Y_1; P1OUT |= LED_G_1;
break;
case 192:
P1OUT &= ~LED_G_1;
break;
case 193:
P1OUT |= LED_G_1;
break;
case 194:
P1OUT &= ~LED_G_1;
break;
case 195:
P1OUT |= LED_G_1;
break;
case 196:
P1OUT &= ~LED_G_1;
break;
case 197:
P1OUT |= LED_G_1;
break;
case 198:
P1OUT |= LED_Y_1;
break;
case 204:
P1OUT &= ~LED_Y_1; P1OUT &= ~LED_R_2;
break;
}
ct500ms++;
}

где переключатель я решил сделать когда таймер дойдет до нужношо мне значения, сдесь 0...204 это не времена а какбы интервалы которые я получил поделив к примеру время работы первого красного светодиода который работает 30000мС на 500 и получил 60 в данном светофоре от конца одного сигнала до его следующего появления пройдет 102000мС
и прочитав документацию я узнал, что тактовый сигнал можно изменить при помощи IDx (делением задающего тактового сигнала), но так как у меня как я понял 1МГЦ т.е. если я не ошибаюсь 1мС , а мне надо 500мС то я и спосил у вас как мне это реализовать

p.s. я решил использовать таймер в режиме пряиого счета
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.