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

 
 
 
Reply to this topicStart new topic
> как по срабатыванию компаратора, вычитать значение TAR в 430F149
Dmitron
сообщение Mar 28 2006, 15:50
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 627
Регистрация: 24-03-05
Из: Севастополь
Пользователь №: 3 655



Джентельмены, проясните или дайте пример кода,
Нужно по переднему фронту срабатывания компаратора вычитать данные из таймера А. У меня получился такой код:

// настройка компаратора
CACTL1 = CARSEL+CAREF1+CAON+CAIE;
CACTL2 = P2CA0+CAF;
// настройка таймера
TACTL = TASSEL1 + TACLR+ID0+ID1; // SMCK, clear TAR, devider=8
TACCTL1 = CCIE + CCIS0 + CM0 + CAP; /* прерывание, подключить вход capture к выходу таймера, захват по переднему фронту, capture mode
TACCR1 = 1000; /* регистр, в который по моей мысли должен сохраняться ТАR при срабатывании capture*/
flagCF=1; // флаг
TACTL |= MC0; // пуск таймера, и заряда ёмкости через резюк
while(flagCF); //ждём, пока что-нибудь не сработает
temp2 = TACCR1; // сохраняём
return (temp2);
}
// а вот и прерывания:
#pragma vector=TIMERA0_VECTOR
__interrupt void TA0_timer_ISR (void)
{
TACTL &= ~(MC0+MC1);
flagCF=0; // stop timer
}

#pragma vector=COMPARATORA_VECTOR
__interrupt void TA0_capture_ISR (void)
{
TACTL &= ~(MC0+MC1);
flagCF=0; // stop timer
}

Собственно, как это сделать чудесно расписано, но примера кода нигде нет. И я вроде как всё делаю правильно, таймер запускается, но в регистр не сохраняется. Что бы это могло быть?


--------------------
Решаю любые проблемы кроме своих
(dmitron1036()mail.ru)
http://uselect-el.ucoz.com
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 28 2006, 16:08
Сообщение #2


Гуру
******

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



Неправильно мыслите. Читайте внимательно Руководство пользователя.
1. В регистр TACCRx при захвате записывается текущее значение TAR.
2. Чтобы по сигналу от компаратора срабатывал регистр захвата нужно соответствующим (программным) образом эти сигналы скоммутировать (CAOUT назначить сигналом для входа CCI1B регистра CCR1). См. таблицу в разделе timer_A3 (стр.18) даташита MSP430F149.
3. В вашем примере описаны обработчики векторов прерываний от компаратора и от одного регистра таймера. Но у таймера ведь не один вектор прерывания! По необозначенному вами вектору TIMERA1_VECTOR происходит переход при прерывании от CCR1, CCR2 и установке TAIFG.
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 28 2006, 19:23
Сообщение #3


Гуру
******

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



Вот Тексасовский пример в котором используется требуемые вам функции компаратора и таймера. Правда он для MSP430F1121, но это не суть важно.
Go to the top of the page
 
+Quote Post
Dmitron
сообщение Mar 29 2006, 15:52
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 627
Регистрация: 24-03-05
Из: Севастополь
Пользователь №: 3 655



Большое пасибо! попали прямо в точку.


--------------------
Решаю любые проблемы кроме своих
(dmitron1036()mail.ru)
http://uselect-el.ucoz.com
Go to the top of the page
 
+Quote Post
Terminator_2017
сообщение Apr 18 2017, 09:52
Сообщение #5





Группа: Участник
Сообщений: 6
Регистрация: 18-04-17
Пользователь №: 96 596



Цитата(rezident @ Mar 28 2006, 20:23) *
Вот Тексасовский пример в котором используется требуемые вам функции компаратора и таймера. Правда он для MSP430F1121, но это не суть важно.



Добрый день, а где можно найти этот пример?

А также как реализовать этот пункт: Чтобы по сигналу от компаратора срабатывал регистр захвата нужно соответствующим (программным) образом эти сигналы скоммутировать (CAOUT назначить сигналом для входа CCI1B регистра CCR1).

Заранее спасибо!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 18 2017, 10:14
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 039
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Terminator_2017 @ Apr 18 2017, 12:52) *
как реализовать этот пункт: Чтобы по сигналу от компаратора срабатывал регистр захвата нужно соответствующим (программным) образом эти сигналы скоммутировать (CAOUT назначить сигналом для входа CCI1B регистра CCR1)
"Чтение документации из интернета вслух - 100 евро в час". Если уж вам лень самостоятельно прочитать указанный пункт документации:

QUOTE (rezident @ Mar 28 2006, 19:08) *
(CAOUT назначить сигналом для входа CCI1B регистра CCR1). См. таблицу в разделе timer_A3 (стр.18) даташита MSP430F149.





--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Terminator_2017
сообщение Apr 18 2017, 11:56
Сообщение #7





Группа: Участник
Сообщений: 6
Регистрация: 18-04-17
Пользователь №: 96 596



Цитата(Сергей Борщ @ Apr 18 2017, 11:14) *
"Чтение документации из интернета вслух - 100 евро в час". Если уж вам лень самостоятельно прочитать указанный пункт документации:


Я спрашивал как в коде это реализовать. Пишу на С++.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 18 2017, 12:33
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 039
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Terminator_2017 @ Apr 18 2017, 14:56) *
Я спрашивал как в коде это реализовать. Пишу на С++.
То есть вы пишете на С++, но при этом не знаете, как записать число в регистр управления таймером? Какое число писать и в какой регистр - указано в упомянутой документации.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th September 2017 - 17:51
Рейтинг@Mail.ru


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