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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> MSP430g2553 TA.1.2
thrush007
сообщение Jun 17 2014, 14:48
Сообщение #16


Участник
*

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



Цитата(A_lex_sander @ Jun 17 2014, 18:43) *
Делал не помогло.
У вас случаем нет примера рабочего такого типа (я понимаю что такая просьба наглость ,но.. ) просто все, что можно попробывал уже .


Примера на захват нету, но могу попробовать ваш пример на плате погонять. Прикрепите main.
Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 17 2014, 15:11
Сообщение #17





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



Прикрепил весь проект спс за помощ
Прикрепленные файлы
Прикрепленный файл  final.zip ( 308.68 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 17 2014, 17:36
Сообщение #18


Участник
*

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



Цитата(A_lex_sander @ Jun 17 2014, 19:11) *
Прикрепил весь проект спс за помощ


Посмотрел твой проект, решил создать новый sm.gif Надо отлаживать новую периферию по частям, а не пытаться завести проект с АЦП, таймером, UART, режимами сна и т.д. Привожу рабочий код из CCSv5, по фронту на P2.5 значение таймера-счетчика записывается в TA1CCR2 и меняется состояние светодиода на P1.0.


#include "msp430g2553.h"

void main(void)
{

WDTCTL = WDTPW + WDTHOLD; // Отключение сторожевого таймера

// Тактирование микроконтроллера от встроенного
// генератора с калибровкой на 16 МГц
// основной тактовый сигнал MCLK от DCOCLK

BCSCTL1 = CALBC1_16MHZ; // basic clock system
BCSCTL2 = DIVS0; // тактирование MCLK без предделителя, тактирование SMCLK = 16/2 MHz
DCOCTL = CALDCO_16MHZ; // digital controlled oscillator

P1OUT = 0x00;
P2OUT = 0x00; // не сбрасываются после перезапуска
P3OUT = 0x00;

P1SEL = 0x00; // Все выводы портов 1,2 настроить как линии портов ввода-вывода
P1SEL2 = 0x00;
P2SEL = 0x00;
P2SEL2 = 0x00;

P2SEL2 |= BIT5; // вывод P2.5 использовать как вывод основного периферийного модуля

P1DIR = 0xFF; // All P1.x outputs
P1REN = 0x00; // отключение внутренних подтягивающих резисторов от всех выводов порта 1
P1OUT = 0x00; // All P1.x reset

P2DIR = 0xFF; // Все выводы порта 2 настроить как выходы
P2REN = 0x00; // отключение внутренних подтягивающих резисторов от всех выводов порта 2
P2OUT = 0x00; // All P2.x reset

TA1CCTL2 = CM_1 + CCIS_1 + SCS + SCCI + CAP + CCIE;
// CM_1 (1*0x4000u) Capture mode: 1 - pos. edge
// CCIS_1 (1*0x1000u) Capture input select: 1 - CCIxB

TA1CTL = TASSEL_2 | ID_3 | TACLR; // настройка таймера 1
// TASSEL_2 - тактирование таймера-счетчика от SMCLK (8 МГц)
// ID_3 - коэффициент предделителя для тактового сигнала таймера-счетчика равен 8

TA1CTL |= MC_2; // запуск, счет вверх до переполнения
__enable_interrupt(); // общее разрешение прерываний

while (1);

}

#pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void)
{
return;
}

#pragma vector = PORT2_VECTOR
__interrupt void P2_ISR (void)

{
return;
}

#pragma vector = TIMER1_A0_VECTOR
__interrupt void T1_CCR0_ISR(void)
{

// Код обработки прерывания от таймера-счетчика 1 при равенстве TA1R = TA1CCR0

return;
}

#pragma vector = TIMER1_A1_VECTOR
__interrupt void T1_CCR1_ISR(void) // общее прерывание для регистров захвата/сравнения TA1CCR1 и TA1CCR2.
{

TA1IV = 0x00;
P1OUT ^= BIT0;
return;

}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void T0_CCR0_ISR(void)
{
return;
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void T0_CCR1_ISR(void)
{
return;
}


// Обработчики неиспользуемых прерываний

#pragma vector = ADC10_VECTOR

__interrupt void ADC_ISR(void)
{
return;
}

#pragma vector = COMPARATORA_VECTOR

__interrupt void COMPARATORA_ISR(void)
{
return;
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
IFG2 = 0x00; // обнуление регистра флагов прерываний окончания приема или передачи UART
return;
}

#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
IFG2 = 0x00;
return;
}


#pragma vector=WDT_VECTOR // прерывание от сторожевого таймера
__interrupt void watchdog_timer (void)
{
return;
}

#pragma vector=NMI_VECTOR // вектор немаскируемого прерывания по активному фронту на выводе ~RST
__interrupt void nmi_ (void)
{
return;
}

Go to the top of the page
 
+Quote Post
A_lex_sander
сообщение Jun 18 2014, 06:41
Сообщение #19





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



Цитата(thrush007 @ Jun 17 2014, 20:36) *
Посмотрел твой проект, решил создать новый sm.gif Надо отлаживать новую периферию по частям, а не пытаться завести проект с АЦП, таймером, UART, режимами сна и т.д. Привожу рабочий код из CCSv5, по фронту на P2.5 значение таймера-счетчика записывается в TA1CCR2 и меняется состояние светодиода на P1.0.


#include "msp430g2553.h"

void main(void)
{

WDTCTL = WDTPW + WDTHOLD; // Отключение сторожевого таймера

// Тактирование микроконтроллера от встроенного
// генератора с калибровкой на 16 МГц
// основной тактовый сигнал MCLK от DCOCLK

BCSCTL1 = CALBC1_16MHZ; // basic clock system
BCSCTL2 = DIVS0; // тактирование MCLK без предделителя, тактирование SMCLK = 16/2 MHz
DCOCTL = CALDCO_16MHZ; // digital controlled oscillator

P1OUT = 0x00;
P2OUT = 0x00; // не сбрасываются после перезапуска
P3OUT = 0x00;

P1SEL = 0x00; // Все выводы портов 1,2 настроить как линии портов ввода-вывода
P1SEL2 = 0x00;
P2SEL = 0x00;
P2SEL2 = 0x00;

P2SEL2 |= BIT5; // вывод P2.5 использовать как вывод основного периферийного модуля

P1DIR = 0xFF; // All P1.x outputs
P1REN = 0x00; // отключение внутренних подтягивающих резисторов от всех выводов порта 1
P1OUT = 0x00; // All P1.x reset

P2DIR = 0xFF; // Все выводы порта 2 настроить как выходы
P2REN = 0x00; // отключение внутренних подтягивающих резисторов от всех выводов порта 2
P2OUT = 0x00; // All P2.x reset

TA1CCTL2 = CM_1 + CCIS_1 + SCS + SCCI + CAP + CCIE;
// CM_1 (1*0x4000u) Capture mode: 1 - pos. edge
// CCIS_1 (1*0x1000u) Capture input select: 1 - CCIxB

TA1CTL = TASSEL_2 | ID_3 | TACLR; // настройка таймера 1
// TASSEL_2 - тактирование таймера-счетчика от SMCLK (8 МГц)
// ID_3 - коэффициент предделителя для тактового сигнала таймера-счетчика равен 8

TA1CTL |= MC_2; // запуск, счет вверх до переполнения
__enable_interrupt(); // общее разрешение прерываний

while (1);

}

#pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void)
{
return;
}

#pragma vector = PORT2_VECTOR
__interrupt void P2_ISR (void)

{
return;
}

#pragma vector = TIMER1_A0_VECTOR
__interrupt void T1_CCR0_ISR(void)
{

// Код обработки прерывания от таймера-счетчика 1 при равенстве TA1R = TA1CCR0

return;
}

#pragma vector = TIMER1_A1_VECTOR
__interrupt void T1_CCR1_ISR(void) // общее прерывание для регистров захвата/сравнения TA1CCR1 и TA1CCR2.
{

TA1IV = 0x00;
P1OUT ^= BIT0;
return;

}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void T0_CCR0_ISR(void)
{
return;
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void T0_CCR1_ISR(void)
{
return;
}


// Обработчики неиспользуемых прерываний

#pragma vector = ADC10_VECTOR

__interrupt void ADC_ISR(void)
{
return;
}

#pragma vector = COMPARATORA_VECTOR

__interrupt void COMPARATORA_ISR(void)
{
return;
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
IFG2 = 0x00; // обнуление регистра флагов прерываний окончания приема или передачи UART
return;
}

#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
IFG2 = 0x00;
return;
}


#pragma vector=WDT_VECTOR // прерывание от сторожевого таймера
__interrupt void watchdog_timer (void)
{
return;
}

#pragma vector=NMI_VECTOR // вектор немаскируемого прерывания по активному фронту на выводе ~RST
__interrupt void nmi_ (void)
{
return;
}


все хорошо кроме одного частота на Р.1.0 есть всегда sad.gif что это за частота такая ?
почему то стабильно держит частоту 27 кГц а должен 22 к видеть и частота 27 не меняется от частоты 22 .

Сообщение отредактировал A_lex_sander - Jun 18 2014, 07:10
Go to the top of the page
 
+Quote Post
thrush007
сообщение Jun 18 2014, 17:07
Сообщение #20


Участник
*

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



Цитата(A_lex_sander @ Jun 18 2014, 10:41) *
все хорошо кроме одного частота на Р.1.0 есть всегда sad.gif что это за частота такая ?
почему то стабильно держит частоту 27 кГц а должен 22 к видеть и частота 27 не меняется от частоты 22 .


Изменение состояния вывода P1.0 в прерывании я сделал просто для отладки, чтобы видеть, заходит МК в прерывание или нет. В этом примере шаг таймера 1 мкс (тактирование от 1 МГц). Для измерения временных интервалов в десятки мкс лучше увеличить разрешающую способность таймера, т.е. коэффициент предделителя тактового сигнала сделать не 8, а 1 или 2. И тогда уже смотреть на регистр TA1CCR2.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:07
Рейтинг@Mail.ru


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