|
Как получить точно интервал 1ms? |
|
|
|
Nov 9 2010, 05:55
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 10-06-05
Из: Новосибирск
Пользователь №: 5 890

|
Цитата(sunset @ Nov 9 2010, 01:18)  прикинул достаточно будет 8Мгц для моих целей. какие поставить конденсаторы? Все они сильно разные. А величину "точности" можно озвучить. 10 в(-9ой) это ведь тоже высокая точность  .
Сообщение отредактировал O.L. - Nov 9 2010, 05:55
|
|
|
|
|
Nov 13 2010, 12:20
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Короче. Кварц 5 Мгц. Минимальный шаг ровно 200нс.
void Init_Sys(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// Port P1.0 Config. P1IES &= ~0x01; P1IFG &= ~0x01; // Disable flag P1IE = 0x01; // Enable interrupt P1.0 // Init timer CCTL0 = OUTMOD_3 + CCIE; // CCR0 toggle, interrupt enabled CCTL1 = OUTMOD_3 + CCIE; // CCR1 toggle, interrupt enabled CCR0 = 0; // CCR1 = 1; // Add Offset to CCR1 TACTL = TASSEL_2 + MC_1; // SMCLK, upmode BCSCTL2 = XT2OFF + DIVS_0 + SELS; // Enable XT2CLK
_EINT(); // Enable global interrupt }
// Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A0 (void) { P1OUT ^= 0x01; } //
Будет менять состояние каждые 200нс.
Сообщение отредактировал fiatlux37 - Nov 13 2010, 12:24
|
|
|
|
|
Nov 13 2010, 13:52
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Может код и неполон немного - быстро писал. Главное идея.
Подключаю внешний кварц (5МГц), строчка
BCSCTL2 = XT2OFF + DIVS_0 + SELS;
говорит, что надо юзать его. Строчка
TACTL = TASSEL_2 + MC_1;
говорит, что для таймера А импульсы берутся с этого самого внешнего кварца + таймер считает вверх (MC_1).
Задавая параметры CCR0 и CCR1 вы и задате нужный вам интервал импульса, т.к. строчка
CCTL0 = OUTMOD_3 + CCIE
говорит о том, что как только таймер досчитает до CCR1, нога поднимется в '1', а досчитав до CCR0 опустится в '0' + разрешает прерывания (CCIE).
Обработку прерывания и конфигурирование таймера на порт (бит P1DIR |= 0x01;) можно написать самому. Я ЛИЧНО получал так на экране осциллографа картинку, что при прибавлении к CCRх единицы (1 тактового импульса кварца), полученный импульс сдвигается на 200нс (это минимальный шаг). Учитывая, что 1 такт кварца равен 200нс, несложно высчитать любое необходимое время импульса.
++ внешний кварц подключал вместо встроенного в отладочную плату. Не забудьте, что максимальная частота кварца для 149-ого равна 8 МГц.
|
|
|
|
|
Nov 13 2010, 14:06
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(fiatlux37 @ Nov 13 2010, 18:52)  Учитывая, что 1 такт кварца равен 200нс, несложно высчитать любое необходимое время импульса. Это утверждение является для меня банальностью и поэтому по skipано вкупе с предыдущими банальными (опять же для меня лично) пояснениями. А интересовала меня следующая информация Цитата(fiatlux37 @ Nov 13 2010, 18:52)  ++ внешний кварц подключал вместо встроенного в отладочную плату. Не забудьте, что максимальная частота кварца для 149-ого равна 8 МГц. которая опять оказалась бесполезной. Т.к. я не вижу и не знаю, что у вас там за отладочная плата и куда именно там был "встроен" кварц? Посему повторяю вопрос: как и куда (к каким выводам МК) у вас подключен кварц 5МГц?
|
|
|
|
|
Nov 13 2010, 14:30
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
У msp430f149 есть ноги, которые называются XIN и XOUT (скорее всего 8 и 9, как у 15x и 16x) и XT2IN и XT2OUT (так же 52 и 53). Туда и подключается кварц. Потому что больше просто некуда. Далее в коде программы выбирается именно этот кварц (читай начало юзер гайда - какие именно биты необходимо включить (конкретно Basic Clock Module Introduction и картинка 4-1). User's Guide
Сообщение отредактировал fiatlux37 - Nov 13 2010, 14:33
|
|
|
|
|
Nov 13 2010, 15:04
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Мы с вами явно недопонимаем друг друга. Цитата из гайда: XT2CLK: Optional high-frequency oscillator that can be used with standard crystals, resonators, or external clock sources in the 450-kHz to 8-MHz range.[/b]
Далее следуя картинке 4-2, выбираем BCSCTL2 = XT2OFF + DIVS_0 + SELS; (включение вашего кварца). Это и будет ваш Sub System Clock (SMCLK, который выбирается битами TASSEL_2 для таймера). И, внимание, он подключается к ногам 52 и 53 !!! Т.к. эти ноги предназначенны для ВЧ кварца.
Сообщение отредактировал fiatlux37 - Nov 13 2010, 15:06
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|