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

 
 
 
Reply to this topicStart new topic
> совместный запуск таймеров TIMER A и TIMER B, TIMER A формирует 10мс интервалы и запускает TIMER B на подсчет f
Make_Pic
сообщение Jul 28 2018, 04:53
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Процессор MSP430F2274 тактируется от DCO 1МГц/4 = 250кГц, но частота RC генратора - DCO нестабильна от температуры и напряжения. Использование калибровки резисторов с последующей записью в калибровочную область памяти не подходит из за длительности процедуры и записи во флеш периодической. Выбран вариант поправочного коэффициента- делителя, который измеряется подсчетом импульсов частоты MCLK DCO 250кГц таймером TIMER B. Временной интервал подсчета формирует TIMER A от 8МГц кварца.

Не могу сделать совместный запуск таймеров TIMER A и TIMER B - Подскажите пожалуйста как это лучше сделать?

Заранее спасибо!
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 29 2018, 07:40
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Для этого процессора сделать стабильной (малозависимой от температуры и напряжения) частоту DCO не получится. IMHO. По причине отсутствия
в тактовой системе процессора узла FLL, который присутствует в F5xxx, может и в F4xxx появился. При наличии FLL используется кварц 32 кГц, работающий
постоянно, и от него стабилизируется высокочастотный (или не высокочастотный) DCO, который может работать постоянно или запускаться при выходе из LPM.
---
Непонятно, что подразумевается под "совместный". Если нужна абсолютная синхронность работы таймеров - я использовал бы внешнее аппаратное управление или тактирование.
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jul 29 2018, 08:21
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата( @ Jul 29 2018, 10:40) *
Для этого процессора сделать стабильной (малозависимой от температуры и напряжения) частоту DCO не получится. IMHO. По причине отсутствия
в тактовой системе процессора узла FLL, который присутствует в F5xxx, может и в F4xxx появился. При наличии FLL используется кварц 32 кГц, работающий
постоянно, и от него стабилизируется высокочастотный (или не высокочастотный) DCO, который может работать постоянно или запускаться при выходе из LPM.
---
Непонятно, что подразумевается под "совместный". Если нужна абсолютная синхронность работы таймеров - я использовал бы внешнее аппаратное управление или тактирование.

FLL нет и не будет -помечтать...
Совместная - это когда работает один таймер от кварца, а другой от DCO. Подчеркиваю - работают, а не один работает, а другой по какой то неясной причине не запускается.
Про стабильность - мне достаточно периодически (перед запуском подпрограммы, которая формирует время, частоту - требуется и точность +/- 0.5%) замерить стабилизированным кварцем таймером частоту DCO (TIMERA время 10мс от кварца, TIMERB тактируется от DCO 250кГц) количество импульсов - это будет поправочный коэффициент на определенный промежуток времени до следующего замера.
Повторяюсь уже - опять непонятно?

P.S. Не в тему - где сейчас Rezident? - Реально дельные советы по MSP430 здесь давал. sad.gif
Вымерли Гуру по MSP430 sad.gif
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Jul 29 2018, 09:20
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Покажите хотя бы ту часть кода, где инициализируются: кварц, DCO, таймеры, MCLK.
Как определили, что один из таймеров не работает?
Есть ли внутрисхемный отладчик, или только программатор?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 30 2018, 04:06
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Make_Pic @ Jul 29 2018, 11:21) *
Вымерли Гуру по MSP430 sad.gif

Не вымерли, пошли дальше.
Я делал так (емнип)
ACLK от часового кварца, на него сажаем таймер А.
Таймер В - от DCO, а на вход капчи подаем выход CCR таймера А.
Тогда в ССR таймера В зафиксируется количество тактов DCO, соответствующее интервалу таймера А.

У TI немного другой подход - они подгоняют коэффициенты DCO под нужную частоту


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jul 30 2018, 08:50
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(MrYuran @ Jul 30 2018, 07:06) *
Не вымерли, пошли дальше.
Я делал так (емнип)
ACLK от часового кварца, на него сажаем таймер А.
Таймер В - от DCO, а на вход капчи подаем выход CCR таймера А.
Тогда в ССR таймера В зафиксируется количество тактов DCO, соответствующее интервалу таймера А.

У TI немного другой подход - они подгоняют коэффициенты DCO под нужную частоту

Спасибо, я так примерно и делаю, но не работает - вы можете привести здесь кусок своего кода?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 30 2018, 09:10
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Код
/**
    \brief Калибровочная переменная
    Хранит количество тиков ТВ в периоде ACLK
*/
unsigned int TB_Tkts_In_ms = 4800;

static unsigned int Last_TB_Tkts = 4800;
static unsigned int LastTBR = 0;
static unsigned int DeltaTBR = 1100;

/**
*    \brief Флаг запуска калибровки DCO
*/
char NeedToCalibrateDCO = 1;


void SetDCO()
{
    BCSCTL1 = DIVA_3            // ACLK=LF XTAL, DIVA=8, RSEL=7
            | 0x07;                // max DCO freq

    BCSCTL2 = (DIVS_0)          // SMCLK=DCOCLK, DIVS=1,
            |(SELM_0)|(DIVM_0);    // DIVM=1, MCLK=DCOCLC

    DCOCTL = DCO0 | DCO1 | DCO2;                //DCO около 5МГц
    FCTL2 = FWKEY | FSSEL_1 | FN3 | FN2 | FN1;  // MCLK/14 for Flash Timing Generator

    TACTL = TASSEL1 | TACLR;
    TBCTL = TBSSEL1 | TBCLR | MC_2;     // Непрерывный режим, SMCLK

    TBCCTL6 = CCIS_1            // Вход захвата - CCIxA - ACLK
            | CM_1              // Захват по переднему фронту
            | CAP               // Режим захвата
            | CCIE;             // Прерывание разрешено

    //----------- Инициализация переменных ----------------------------
    TB_Tkts_In_ms = 4800;
    Last_TB_Tkts = 4800;
    LastTBR = 0;
    DeltaTBR = 1100;
    NeedToCalibrateDCO = 0;
    //-----------------------------------------------------------------
}

/**
*   Прерывание по захвату ACLK
*   \brief Определяет период ACLK в тактах ТВ
*/
static interrupt (TIMERB1_VECTOR) Timerb_ccr1(void) __attribute__ ((used));
interrupt (TIMERB1_VECTOR) Timerb_ccr1(void)
{
    switch(TBIV)
    {
        case 12: // прерывание по захвату ACLK, калибровка DCO

            DeltaTBR = TBCCR6 - LastTBR;
            LastTBR = TBCCR6;

            break;
    }
}


Ровно 10 лет прошло )

Это для F149, если что


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Aug 9 2018, 13:35
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(MrYuran @ Jul 30 2018, 12:10) *
Код
/**
    \brief Калибровочная переменная
    Хранит количество тиков ТВ в периоде ACLK
*/
...
/**
*   Прерывание по захвату ACLK
*   \brief Определяет период ACLK в тактах ТВ
*/
static interrupt (TIMERB1_VECTOR) Timerb_ccr1(void) __attribute__ ((used));
interrupt (TIMERB1_VECTOR) Timerb_ccr1(void)
{
    switch(TBIV)
    {
        case 12: // прерывание по захвату ACLK, калибровка DCO

            DeltaTBR = TBCCR6 - LastTBR;
            LastTBR = TBCCR6;

            break;
    }
}


Ровно 10 лет прошло )

Это для F149, если что

Не совсем понял, что вы делаете с полученной дельтой в прерывании. И если я правильно понял, таймер считает на переполнение от ACLK DCO - RC генератора, А таймер И отчего запущен - у вас оба таймера тактируются от ACLK (TACTL = TASSEL1, TBCTL = TBSSEL1) - где стабильный кварцеванный источник? Как вы калибруете тактовый сигнал?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th April 2024 - 01:27
Рейтинг@Mail.ru


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