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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Как получить точно интервал 1ms?
AHTOXA
сообщение Nov 15 2010, 16:49
Сообщение #31


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(rezident @ Nov 15 2010, 21:33) *
Моя ошибка была в том, что я когда писал про "использование ВЧ-кварца на XT2 при отсутствии часового или ВЧ-кварца на XT1 невозможно чисто аппаратно/технически" забыл, что у топикстартера МК из серии 1хх. Но я потом поправился, что это утверждение относится к серии 2xx.
Ага. Только и к серии 2xx это тоже не относится. О чём вам и сказал ih_ фразой:
Цитата(ih_ @ Nov 15 2010, 10:58) *
Тактирование ядра возможно только от XT2 в обоих семействах. Есть особенности инициализации. Но возможно.

Правильнее было сформулировать "Тактирование ядра только от XT2 возможно в обоих семействах.", но из контекста беседы и так понятно. Вы же предпочли интерпретировать её как очевидную глупость, и радостно начали её разоблачать.
Цитата
Я на блок-схемах показал, что тактирование ядра процессора (сигнал MCLK) возможно не только от XT2, но и от XT1 тоже.
А также то, что тактирование только от XT2 ("при отсутствии часового или ВЧ-кварца на XT1") возможно как на 1xx, так и на 2xx.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 15 2010, 17:12
Сообщение #32


Гуру
******

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



Цитата(AHTOXA @ Nov 15 2010, 21:49) *
Правильнее было сформулировать "Тактирование ядра только от XT2 возможно в обоих семействах.", но из контекста беседы и так понятно.
Кому понятно? Мне лично непонятно. Как пишут, так я и понимаю. Именно домысливание за собеседника обычно приводит к недоразумениям.
Вывод в том топике был сделан на основе главы 5.2.7 Basic Clock Module+ Fail-Safe Operation. Поясните, почему вы несогласны и если ваши доводы будут убедительными, то я признаю, что был неправ. За мной признание моих ошибок не заржевеет.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
fiatlux37
сообщение Nov 15 2010, 17:35
Сообщение #33





Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711



Раз уж к теме подключилось столько народу, то готов и признать свою ошибку, ежели она имеется, конечно.
Кто-нибудь из участников форума юзал внешний ВЧ кварц???
Утверждение, что припаянные к ногам XT2 кварц включается как SMCLK битами
BCSCTL2 = XT2OFF + DIVS_0 + SELS; // Enable XT2CLK
будет работать ???
Для первого семейства!
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 15 2010, 17:42
Сообщение #34


Гуру
******

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



Цитата(fiatlux37 @ Nov 15 2010, 22:35) *
будет работать ???
При определенных условиях - будет. Если к моменту выполнения этой команды а) генерация на XT2 будет уже устойчивой, б) флаг OFIFG будет уже программно очищен, в) уже будет проинициализирован какой-либо модуль, который требует тактирования именно от XT2.
Прикрепленные файлы
Прикрепленный файл  From_MSP430x1xx_Family_User_s_Manual___Compel.pdf ( 415.78 килобайт ) Кол-во скачиваний: 76
 
Go to the top of the page
 
+Quote Post
fiatlux37
сообщение Nov 15 2010, 17:50
Сообщение #35





Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711



Цитата(rezident @ Nov 15 2010, 21:42) *
Если к моменту выполнения этой команды а) генерация на XT2 будет уже устойчивой, б) флаг OFIFG будет уже программно очищен, в) уже будет проинициализирован какой-либо модуль, который требует тактирования именно от XT2.


Это само собой ))) Факт неоспоримый. smile.gif Пару циклов установки и проверки флагов написать необходимо.
Но сама-то мысль, которую я хотел донести своим первым сообщением в теме об SMCLK и таймере, получается, является правильной? yeah.gif

Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 15 2010, 18:05
Сообщение #36


Гуру
******

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



Цитата(fiatlux37 @ Nov 15 2010, 22:50) *
Но сама-то мысль, которую я хотел донести своим первым сообщением в теме об SMCLK и таймере, получается, является правильной? yeah.gif
Еще раз хочу повторить: как пишете, так и понимают написанное! В исходное вашем посте и приведенном в нем исходном коде выполняется только условие "в".
Go to the top of the page
 
+Quote Post
ih_
сообщение Nov 16 2010, 05:54
Сообщение #37


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



2АНТОХА, Благодарю за потдержку. smile.gif
2rezident, Благодарю за наставления.
Цитата(Сергей Борщ @ Nov 15 2010, 16:25) *
А никого не смутило, что нога дергается обращением к порту в прерывании?...
Цитата(Shread @ Nov 15 2010, 16:43) *
До обсуждения этого еще просто дело не дошло, и без того ведь знатный холиварчик получился, ...
А вот и мудрецы пожаловали, прогнулось пространство от сечи. Вдохновляют на принятие и терпимость . smile.gif
Однако, продолжим по сути темы.
Цитата(fiatlux37 @ Nov 13 2010, 15:20) *
Короче. Кварц 5 Мгц. Минимальный шаг ровно 200нс.
...
Если у Вас еще не заработало? То Вашу задачу можно реализовать, если:
- отключить WDT (это понятно и сделано);
- запустить XT2, подождать пока стабилизируется и переключить SMCLK на него (MCLK на ваше усмотрение);
- инициализировать таймер как счетчик и запустить его на счет (частично сделано, проверьте значение CCR1 и отключите генерацию прерываний);
- инициализировать вывод (пин) как функциональный вывод от таймера (это не сложно);
- можно "усыпить" контроллер (но не глубоко). smile.gif

Лишний код:
Код
  P1IES  &=  ~0x01;
  P1IFG  &= ~0x01;                            // Disable flag
  P1IE    =  0x01;                            // Enable interrupt P1.0
...
_EINT();                                    // Enable global interrupt
...
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
  {    
    P1OUT ^= 0x01;
  }
Дерзайте! smile.gif

Цитата(Сергей Борщ @ Nov 15 2010, 16:25) *
...Для чего, интересно, разработчики заложили в таймер_A аж целых 3 Compare модуля с возможностью аппаратного дерганья ног безо всяких прерываний вообще?
Может я просто не понял Вас во всей вашей глубокой мудрости?
Цитата из slau144e (страница 12-11):
12.2.4 Capture/Compare Blocks
...
Capture Mode
... If a capture occurs:
- The timer value is copied into the TACCRx register;
- The interrupt flag CCIFG is set

Сообщение отредактировал ih_ - Nov 16 2010, 06:49
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 16 2010, 06:45
Сообщение #38


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

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



Если
Цитата(ih_ @ Nov 16 2010, 08:54) *
- инициализировать вывод (пин) как функциональный вывод от таймера (это не сложно);

то это
Код
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
  {    
    P1OUT ^= 0x01;
  }

уже не нужно.
Это по поводу
Цитата
Может я просто не понял Вас во всей вашей глубокой мудрости?


Цитата
- The interrupt flag CCIFG is set

- означает, что флаг прерывания установится.
но не означает автоматическую необходимость вызова и обработки этого прерывания


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 16 2010, 06:59
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Кажется, об этом речь?

Код
void ClockConfiguration(void)
{    unsigned int i;
    __disable_interrupt();

    DCOCTL= 0x56;            //    without changes
    BCSCTL1=0x07;        //    START XT2, DCO faster
    TogglePin(PulseWdt);
    OnPin(ErrorLed);
    do
    {    IFG1 &= ~OFIFG;
        for (i = 0x3FFF; i > 0; i--)
            TogglePin(PulseWdt);
        TogglePin(ErrorLed);
    }
    while (IFG1 & OFIFG);        // if OSCFault flag set => repeat(error)
    BCSCTL2=SELS;        // select SMCLK=XT2CLK
}

uint del;
    

void TimerBConfiguration(void)
{    __bic_SR_register OSCOFF;

    TBCTL = TBSSEL_2 + TBCLR + MC_0;    //    Timer B counts SMCLK clocks continuosly

    TBCCTL0 = CCIE;            //    module 0 configuration
    TBCCR0 = MaxB;            //    period of timer overflow

    TBCCTL1 = OUTMOD_3;            //    module 1 configuration for ADC, Set/reset
    TBCCR1 = (MaxB/3)*2;            //    out2=set/reset

    TBCCTL2 = OUTMOD_3;            //    module 2 configuration for valve, set/reset
    TBCCR2 = MaxB/2;            //    here 50%, setup value will be used when valve starts

    TBCCTL3 = OUTMOD_3; //+CCIE;    //    AC generation        set/reset
    TBCCR3 = MaxB/2;    
    

    TBCTL    |= MC_1;            //    timer start to "UP" mode
}


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
ih_
сообщение Nov 16 2010, 08:10
Сообщение #40


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



Цитата
...но не означает автоматическую необходимость вызова и обработки этого прерывания
И rezident призывает - давайте выражаться яснее и четче. Что Вы имели ввиду под: "...автоматическую необходимость..."?

Сообщение отредактировал ih_ - Nov 16 2010, 08:10
Go to the top of the page
 
+Quote Post
msalov
сообщение Nov 16 2010, 08:16
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(ih_ @ Nov 16 2010, 07:54) *
Может я просто не понял Вас во всей вашей глубокой мудрости?
Цитата из slau144e (страница 12-11):
12.2.4 Capture/Compare Blocks
...
Capture Mode
... If a capture occurs:
- The timer value is copied into the TACCRx register;
- The interrupt flag CCIFG is set

Только вам нужен не Capture Режим, а Compare
Цитата
Compare Mode
The compare mode is selected when CAP = 0. The compare mode is used to
generate PWM output signals or interrupts at specific time intervals. When
TAR counts to the value in a TACCRx:
 Interrupt flag CCIFG is set
 Internal signal EQUx = 1
 EQUx affects the output according to the output mode
 The input signal CCI is latched into SCC
Go to the top of the page
 
+Quote Post

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

 


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


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