реклама на сайте
подробности

 
 
> сторожевой таймер, watchdog
chainikru
сообщение Jan 20 2012, 10:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-12-11
Пользователь №: 68 682



Подскажите пожалуйста как задать интервал для сторожевого таймера равным 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
rezident
сообщение Jan 20 2012, 20:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Несмотря на то, что у 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.
Go to the top of the page
 
+Quote Post
chainikru
сообщение Jan 22 2012, 19:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-12-11
Пользователь №: 68 682



неподскажете как задать такт равным 500 мС в таймере А
т.е. когда таймер будет считать от 0 до 1 проходило 500мС
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 22 2012, 21:14
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Вполне очевидно, что для этого нужно подать на тактовый вход таймера TACLK или TAINCLK частоту 2Гц. Объясните, что именно вы хотите получить от таймера?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jan 22 2012, 21:31
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ещё более очевидным является то, что автор не дал себе труд хотя бы на беглое ознакомление с документацией.
chainikru, Вы по каждому чиху собираетесь темы создавать?
Считайте это устным предупреждением.
Go to the top of the page
 
+Quote Post
chainikru
сообщение Jan 22 2012, 23:22
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-12-11
Пользователь №: 68 682



с документацией если не не в совершенстве то хоть както я ознакомился. Насчет количества тем извеняюсь, согласен, что свой оследний вопрос нужно было задать в этой теме просто я недавний пользователь форума и подумал что если я напишу здесь то его никто не прочтет.
насчет вопроса я решил потренироваться во время перерыва между семестрами и написать программу для светофора перед этим посмотрев как он работает и я увидел что он мигает 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. я решил использовать таймер в режиме пряиого счета

Сообщение отредактировал chainikru - Jan 23 2012, 11:15
Причина редактирования: [codebox]!!!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 13:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016