A_lex_sander 0 13 июня, 2014 Опубликовано 13 июня, 2014 · Жалоба Нужно таймером померять частоту( временные интервалы ) на " лапке " кто знает как это сделать подскажите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2014 Опубликовано 13 июня, 2014 · Жалоба Нужно таймером померять частоту( временные интервалы ) на " лапке " кто знает как это сделать подскажите В зависимости от диапазона измеряемой частоты решения могут быть различными. Опишите задачу по-подробнее (частота от и до, точность, быстродействие), так и решение быстрее найдется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A_lex_sander 0 13 июня, 2014 Опубликовано 13 июня, 2014 · Жалоба надо таймером отличать частоты 20 и 22 килогерца Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thrush007 0 13 июня, 2014 Опубликовано 13 июня, 2014 · Жалоба Настраиваете тактирование таймера-счетчика и выбираете режим счета "вверх до переполнения" в регистре TA1CTL. Потом выбираете режим захвата, захват по нарастающему (или спадающему) фронту, синхронный захват в регистре TA1CCTLx. Запускаете таймер. Теперь по фронту сигнала на выводе CCIxA в регистре TA1CCRx будет защелкиваться значение таймера-счетчика и вызываться прерывание. При первом прерывании надо сбросить (и обнулить) таймер-счетчик и опять его запустить. При втором прерывании считать значение регистра TA1CCRx (это будет период сигнала на выводе CCIxA) и сбросить, обнулить, запустить опять таймер. И так далее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A_lex_sander 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба Настраиваете тактирование таймера-счетчика и выбираете режим счета "вверх до переполнения" в регистре 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 почемуто от частоты не зависят Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thrush007 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба Сделал как ты сказал , заработало в прерывание попадаю , но вне зависимости от частоты заначение 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 (режим захвата). В русском переводе даташита ошибка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A_lex_sander 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба поставил CAP теперь в прерывание не заходит :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thrush007 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба поставил CAP теперь в прерывание не заходит :( CCIS1 - что означает? Проверь, на какой вывод МК надо подавать сигнал. Регистры PxSEL, PxSEL2 как установлены? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A_lex_sander 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба 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; } вроде все установлено Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thrush007 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба 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; } вроде все установлено А на какой вывод сигнал подаешь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A_lex_sander 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба Р.2.5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thrush007 0 16 июня, 2014 Опубликовано 16 июня, 2014 · Жалоба Р.2.5 Надо на вход захвата сигнал подавать. Посмотри на распиновку выводов (таблица 2 из даташита). CCI1A input - P1.2, CCI0A input - P2.0. ПОсмотри еще, что у тебя биты CCISx задают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A_lex_sander 0 17 июня, 2014 Опубликовано 17 июня, 2014 · Жалоба Надо на вход захвата сигнал подавать. Посмотри на распиновку выводов (таблица 2 из даташита). CCI1A input - P1.2, CCI0A input - P2.0. ПОсмотри еще, что у тебя биты CCISx задают. Выставлены правильно(CCI2B) это как бы проверял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thrush007 0 17 июня, 2014 Опубликовано 17 июня, 2014 · Жалоба Выставлены правильно(CCI2B) это как бы проверял. Можно попробовать отключить подтяжку от вывода P2.5. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A_lex_sander 0 17 июня, 2014 Опубликовано 17 июня, 2014 · Жалоба Можно попробовать отключить подтяжку от вывода P2.5. Делал не помогло. У вас случаем нет примера рабочего такого типа (я понимаю что такая просьба наглость ,но.. ) просто все, что можно попробывал уже . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться