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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> MSP430g2553 TA.1.2
A_lex_sander
сообщение Jun 13 2014, 11:37
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



Нужно таймером померять частоту( временные интервалы ) на " лапке " кто знает как это сделать подскажите
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 13 2014, 11:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(A_lex_sander @ Jun 13 2014, 19:47) *
Нужно таймером померять частоту( временные интервалы ) на " лапке " кто знает как это сделать подскажите

В зависимости от диапазона измеряемой частоты решения могут быть различными.
Опишите задачу по-подробнее (частота от и до, точность, быстродействие), так и решение быстрее найдется.
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 13 2014, 12:04
Сообщение #3





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



надо таймером отличать частоты 20 и 22 килогерца
Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 13 2014, 20:55
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-05-13
Из: Россия
Пользователь №: 76 733



Настраиваете тактирование таймера-счетчика и выбираете режим счета "вверх до переполнения" в регистре TA1CTL. Потом выбираете режим захвата, захват по нарастающему (или спадающему) фронту, синхронный захват в регистре TA1CCTLx. Запускаете таймер. Теперь по фронту сигнала на выводе CCIxA в регистре TA1CCRx будет защелкиваться значение таймера-счетчика и вызываться прерывание. При первом прерывании надо сбросить (и обнулить) таймер-счетчик и опять его запустить. При втором прерывании считать значение регистра TA1CCRx (это будет период сигнала на выводе CCIxA) и сбросить, обнулить, запустить опять таймер. И так далее.
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 16 2014, 13:18
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



Цитата(thrush007 @ Jun 13 2014, 23:55) *
Настраиваете тактирование таймера-счетчика и выбираете режим счета "вверх до переполнения" в регистре TA1CTL. Потом выбираете режим захвата, захват по нарастающему (или спадающему) фронту, синхронный захват в регистре TA1CCTLx. Запускаете таймер. Теперь по фронту сигнала на выводе CCIxA в регистре TA1CCRx будет защелкиваться значение таймера-счетчика и вызываться прерывание. При первом прерывании надо сбросить (и обнулить) таймер-счетчик и опять его запустить. При втором прерывании считать значение регистра TA1CCRx (это будет период сигнала на выводе CCIxA) и сбросить, обнулить, запустить опять таймер. И так далее.


Сделал как ты сказал , заработало в прерывание попадаю , но вне зависимости от частоты заначение TAR счетного регистра одно и тоже

Вот моя настройка

{
TA1CCR0 = time;
TA1CCR2 =(unsigned int )time/2;
TA1CCTL2 = OUTMOD_4+CM_1+CCIE+CCIS1+SCS ;
TA1CTL = TASSEL_2| MC_1;
}

потом я попадаю в прерывание


#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer1_A1 (void)
{
uint16_t currentValue = TAR; // тут смотрю в дебагере значение счетчика
uint16_t currentValue = TA1CCR2;

}
значения TAR и TA1CCR2 почемуто от частоты не зависят



Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 16 2014, 14:13
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-05-13
Из: Россия
Пользователь №: 76 733



Цитата(A_lex_sander @ Jun 16 2014, 17:18) *
Сделал как ты сказал , заработало в прерывание попадаю , но вне зависимости от частоты заначение TAR счетного регистра одно и тоже

Вот моя настройка

{
TA1CCR0 = time;
TA1CCR2 =(unsigned int )time/2;
TA1CCTL2 = OUTMOD_4+CM_1+CCIE+CCIS1+SCS ;
TA1CTL = TASSEL_2| MC_1;
}

потом я попадаю в прерывание


#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer1_A1 (void)
{
uint16_t currentValue = TAR; // тут смотрю в дебагере значение счетчика
uint16_t currentValue = TA1CCR2;

}
значения TAR и TA1CCR2 почемуто от частоты не зависят



Ты забыл установить бит CAP в регистре TA1CCTL2 (режим захвата). В русском переводе даташита ошибка.
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 16 2014, 14:29
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



поставил CAP теперь в прерывание не заходит sad.gif
Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 16 2014, 14:43
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-05-13
Из: Россия
Пользователь №: 76 733



Цитата(A_lex_sander @ Jun 16 2014, 18:29) *
поставил CAP теперь в прерывание не заходит sad.gif


CCIS1 - что означает? Проверь, на какой вывод МК надо подавать сигнал. Регистры PxSEL, PxSEL2 как установлены?
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 16 2014, 14:46
Сообщение #9





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



void main(void)
{
unsigned int a=0;

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
{
P1SEL|=BIT6+BIT7;
P1SEL2|=BIT6+BIT7;

P2DIR &= ~(BIT2 | BIT3 | BIT4 | BIT5);
P2REN |= BIT2 | BIT3 | BIT4 | BIT5;
P2OUT |= BIT2 | BIT3 | BIT4 | BIT5;
P2SEL|=BIT5;

P3DIR &= ~(BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT6 | BIT7);
P3REN |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 |BIT7;
P3OUT |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT7;


Set_DCO();

}
__enable_interrupt();

ADC_init();

freq ( 100 );
while(1)
{
}

}

void freq (unsigned int time)
{
TA1CCR0 = time;
TA1CCR2 =(unsigned int )time/2;
TA1CCTL2 = OUTMOD_4+CM_1+CCIE+CCIS1+SCS ;
TA1CTL = TASSEL_2| MC_1;
}

#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer1_A1 (void)
{
uint16_t currentValue = TA1CCR2;
last =TA1R;
TA1R = 0;
old=last;

}
вроде все установлено
Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 16 2014, 14:55
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-05-13
Из: Россия
Пользователь №: 76 733



Цитата(A_lex_sander @ Jun 16 2014, 18:46) *
void main(void)
{
unsigned int a=0;

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
{
P1SEL|=BIT6+BIT7;
P1SEL2|=BIT6+BIT7;

P2DIR &= ~(BIT2 | BIT3 | BIT4 | BIT5);
P2REN |= BIT2 | BIT3 | BIT4 | BIT5;
P2OUT |= BIT2 | BIT3 | BIT4 | BIT5;
P2SEL|=BIT5;

P3DIR &= ~(BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT6 | BIT7);
P3REN |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 |BIT7;
P3OUT |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT7;


Set_DCO();

}
__enable_interrupt();

ADC_init();

freq ( 100 );
while(1)
{
}

}

void freq (unsigned int time)
{
TA1CCR0 = time;
TA1CCR2 =(unsigned int )time/2;
TA1CCTL2 = OUTMOD_4+CM_1+CCIE+CCIS1+SCS ;
TA1CTL = TASSEL_2| MC_1;
}

#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer1_A1 (void)
{
uint16_t currentValue = TA1CCR2;
last =TA1R;
TA1R = 0;
old=last;

}
вроде все установлено


А на какой вывод сигнал подаешь?
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 16 2014, 14:55
Сообщение #11





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



Р.2.5
Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 16 2014, 15:12
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-05-13
Из: Россия
Пользователь №: 76 733



Цитата(A_lex_sander @ Jun 16 2014, 18:55) *
Р.2.5


Надо на вход захвата сигнал подавать. Посмотри на распиновку выводов (таблица 2 из даташита). CCI1A input - P1.2, CCI0A input - P2.0. ПОсмотри еще, что у тебя биты CCISx задают.
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 17 2014, 07:38
Сообщение #13





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



Цитата(thrush007 @ Jun 16 2014, 18:12) *
Надо на вход захвата сигнал подавать. Посмотри на распиновку выводов (таблица 2 из даташита). CCI1A input - P1.2, CCI0A input - P2.0. ПОсмотри еще, что у тебя биты CCISx задают.

Выставлены правильно(CCI2B) это как бы проверял.
Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 17 2014, 12:52
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-05-13
Из: Россия
Пользователь №: 76 733



Цитата(A_lex_sander @ Jun 17 2014, 11:38) *
Выставлены правильно(CCI2B) это как бы проверял.


Можно попробовать отключить подтяжку от вывода P2.5.
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 17 2014, 14:43
Сообщение #15





Группа: Участник
Сообщений: 13
Регистрация: 27-01-14
Пользователь №: 80 202



Цитата(thrush007 @ Jun 17 2014, 15:52) *
Можно попробовать отключить подтяжку от вывода P2.5.

Делал не помогло.
У вас случаем нет примера рабочего такого типа (я понимаю что такая просьба наглость ,но.. ) просто все, что можно попробывал уже .
Go to the top of the page
 
+Quote Post

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

 


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


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