|
Как получить точно интервал 1ms? |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 40)
|
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
|
|
|
|
|
Nov 13 2010, 17:21
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Ну а сейчас что не понятно ??? Какие способности к цитированию? Написанно - ВЧ кварц называется XT2CLK. Смотрим даташит к msp-шнику и смотрим, что ВЧ кварц цепляется на ноги 52 и 53. Смотрим на картинку 4-2 в гиде и видим как активизировать этот ВЧ кварц как SMCLK. Прописываем SMCLK как кварц, используемый для таймера. Так норм ?
|
|
|
|
|
Nov 14 2010, 02:54
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(fiatlux37 @ Nov 13 2010, 22:21)  Ну а сейчас что не понятно ??? Какие способности к цитированию? Написанно - ВЧ кварц называется XT2CLK. Смотрим даташит к msp-шнику и смотрим, что ВЧ кварц цепляется на ноги 52 и 53. Вы по-прежнему троллите или просто такой .... эээ ... задумчивый в суждениях? Мне не нужно знать как написано (это я и так знаю), а нужно как у вас реально подключено? Потому, что ВЧ-кварц можно подключать к обоим генераторам, но я хочу знать, куда вы его подключили? Намекну, почему сейчас у вас не работает кварц куда бы вы его не подключили. Если подключать 5МГц кварц к XT2, то он не будет работать поскольку вы сами выключили генератор XT2 установкой бита XT2OFF. Цитата BCSCTL2 = XT2OFF + DIVS_0 + SELS; Если подключать 5МГц кварц к XT1, то он не будет работать до тех пор, пока вы не переведете этот генератор в ВЧ-режим работы установкой бита XTS. Цитата BCSCTL2 = XT2OFF + XTS + DIVS_0 + SELS; Но в любом из двух случаев, нужно провести некоторую процедуру, связанную с ожиданием готовности работы генератора до тех пор, пока он не придет в норму. Только после этого частоту генератора можно будет использовать для внутреннего тактирования. В противном случае и для MCLK и для SMCLK будет использоваться источник тактирования DCO. Описана эта процедура в разделе 4.2.6 Basic Clock Module Fail-Safe Operation документа MSP430x1xx Family User's Manual (Rev.F), который вы тут пытались мне цитировать. Кстати, использование ВЧ-кварца на XT2 при отсутствии часового или ВЧ-кварца на XT1 невозможно чисто аппаратно/технически.
Сообщение отредактировал rezident - Nov 14 2010, 03:18
|
|
|
|
|
Nov 14 2010, 05:03
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Да что вы говорите. Вот вам отрывок из хедера на 169-ый: #define XT2OFF (0x80) /* Enable XT2CLK */С этим разобрались. #define SELS (0x08) /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */Видимо, SELS_1 тоже штука необходимая. А то, что часового кварца у меня нет никто и не заявлял. Вообще-то я даже писал, что использую отладочную плату. На ней дефолтом все кварцы есть. ВЧ кварц я перепаял сам. The LFXT1 oscillator also supports high-speed crystals or resonators when in HF mode (XTS = 1) - с этим я согласен, но я и не оспаривал это. Думаю, вам пора уже припаять ВЧ кварц к ногам 52 и 53 и включить его как вы сами хотите. Я вам сказал, как припаял его я, и как я его в программе включил. У меня всё работает.
Сообщение отредактировал fiatlux37 - Nov 14 2010, 05:06
|
|
|
|
|
Nov 14 2010, 14:00
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата(rezident @ Nov 14 2010, 05:54)  ...Кстати, использование ВЧ-кварца на XT2 при отсутствии часового или ВЧ-кварца на XT1 невозможно чисто аппаратно/технически.  Простите, но у меня пару проектов только на XT2. И работают. А почему Вы решили, что это не возможно?
|
|
|
|
|
Nov 14 2010, 14:24
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
ih, рассудите нас пожалуйста. Как ВЫ подключали внешний кварц ???
Сообщение отредактировал fiatlux37 - Nov 14 2010, 14:24
|
|
|
|
|
Nov 14 2010, 18:31
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(fiatlux37 @ Nov 14 2010, 10:03)  Да что вы говорите. Вот вам отрывок из хедера на 169-ый: #define XT2OFF (0x80) /* Enable XT2CLK */С этим разобрались. Понятия не имею, что у вас за хедер и кто писал к нему комментарии, но вас не удивляет, что бит имеет в названии OFF, которое в английском языке имеет значение - отсутствие, удаление, прекращение, аннулирование, отмену? Я лично предпочитаю пользоваться документацией производителя. Вам видимо как детям, нужно на картинках показывать? ОК. Показываю. См. приложение, вырезка из User's Manual. Цитата(fiatlux37 @ Nov 14 2010, 10:03)  #define SELS (0x08) /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */ Видимо, SELS_1 тоже штука необходимая. Это вообще "мимо кассы". К биту SELS я никаких "претензий" не "предъявлял". А что такое SELS_1 могу только догадываться. Цитата(fiatlux37 @ Nov 14 2010, 10:03)  А то, что часового кварца у меня нет никто и не заявлял. Вообще-то я даже писал, что использую отладочную плату. На ней дефолтом все кварцы есть. ВЧ кварц я перепаял сам. Это абзац! "На пятый день индеец Джо обнаружил, что в тюрьме нет четвертой стены".  Именно этого я и добивался от вас! Информации о том, что вы впаяли 5МГц кварц на место другого, который был подключен к XT2. Я даже знаю, почему у вас это (случайно) работает. Но когда при простой перестановке операторов и/или порядка инициализации и/или в реальном устройстве работать перестанет, то всегда можете прийти сюда и спросить, почему не работает/перестало работать?  Цитата(ih_ @ Nov 14 2010, 19:00)  Простите, но у меня пару проектов только на XT2. И работают. А почему Вы решили, что это не возможно? Замечание касается серии MSP430x 2xx и тактирования от XT2 ядра процессора (MCLK). Вот там обсуждали.
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 15 2010, 04:43
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Хорошо. Думаю надо перестать спорить. У автора сей темы 149-ый msp-шник (касается серии MSP430x 1xx), как его подключить, я написал. Прямые цитаты из даташита, гайда и хедера вас не устраивают. Припаяйте уже ваш кварц как сами хотите и отпишитесь о результате. Цитата(rezident @ Nov 14 2010, 22:31)  Именно этого я и добивался от вас! Информации о том, что вы впаяли 5МГц кварц на место другого, который был подключен к XT2. Цитата(fiatlux37 @ Nov 13 2010, 19:04)  И, внимание, он подключается к ногам 52 и 53 !!!
Сообщение отредактировал fiatlux37 - Nov 15 2010, 04:44
|
|
|
|
|
Nov 15 2010, 05:58
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата(fiatlux37 @ Nov 14 2010, 17:24)  ih, рассудите нас пожалуйста. Как ВЫ подключали внешний кварц ???  За рассуждением обратитесь к мудрости старших коллег.  Кварц подключаю на выводы XT2. Цитата(rezident @ Nov 14 2010, 21:31)  Замечание касается серии MSP430x 2xx и тактирования от XT2 ядра процессора (MCLK). Вот там обсуждали. Прочитал/участвовал в этой ветке. Тактирование ядра возможно только от XT2 в обоих семействах. Есть особенности инициализации. Но возможно.
Сообщение отредактировал ih_ - Nov 15 2010, 07:22
|
|
|
|
|
Nov 15 2010, 13:43
|
иногда заглядывающий
   
Группа: Свой
Сообщений: 900
Регистрация: 18-05-05
Из: Зеленоград
Пользователь №: 5 170

|
Цитата(Сергей Борщ @ Nov 15 2010, 16:25)  А никого не смутило, что нога дергается обращением к порту в прерывании? И при наличии в программе любого другого прерывания этот обработчик может быть задержан на непредсказуемое время? Для чего, интересно, разработчики заложили в таймер_A аж целых 3 Compare модуля с возможностью аппаратного дерганья ног безо всяких прерываний вообще? До обсуждения этого еще просто дело не дошло, и без того ведь знатный холиварчик получился, я, как зритель, очень высоко ценю то упорство, которое проявляет уважаемый Rezident в общении с людьми нежелающими читать даташиты...
|
|
|
|
|
Nov 15 2010, 16:33
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(AHTOXA @ Nov 15 2010, 21:12)  вместо того, чтобы признать свою ошибку. Моя ошибка была в том, что я когда писал про "использование ВЧ-кварца на XT2 при отсутствии часового или ВЧ-кварца на XT1 невозможно чисто аппаратно/технически" забыл, что у топикстартера МК из серии 1хх. Но я потом поправился, что это утверждение относится к серии 2xx. Вы же привязались к сообщению, которое относится к совсем другому утверждению (не моему) о том, что "Тактирование ядра возможно только от XT2 в обоих семействах". Я на блок-схемах показал, что тактирование ядра процессора (сигнал MCLK) возможно не только от XT2, но и от XT1 тоже. В чем еще вы возжелаете меня обвинить? "Часовню тоже я разрушил?" (с) Кавказская пленница
|
|
|
|
|
Nov 15 2010, 16:49
|

фанат дивана
     
Группа: Свой
Сообщений: 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.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 15 2010, 17:12
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(AHTOXA @ Nov 15 2010, 21:49)  Правильнее было сформулировать "Тактирование ядра только от XT2 возможно в обоих семействах.", но из контекста беседы и так понятно. Кому понятно? Мне лично непонятно. Как пишут, так я и понимаю. Именно домысливание за собеседника обычно приводит к недоразумениям. Вывод в том топике был сделан на основе главы 5.2.7 Basic Clock Module+ Fail-Safe Operation. Поясните, почему вы несогласны и если ваши доводы будут убедительными, то я признаю, что был неправ. За мной признание моих ошибок не заржевеет.
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 15 2010, 17:35
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Раз уж к теме подключилось столько народу, то готов и признать свою ошибку, ежели она имеется, конечно. Кто-нибудь из участников форума юзал внешний ВЧ кварц??? Утверждение, что припаянные к ногам XT2 кварц включается как SMCLK битами BCSCTL2 = XT2OFF + DIVS_0 + SELS; // Enable XT2CLK будет работать ??? Для первого семейства!
|
|
|
|
|
Nov 15 2010, 17:50
|
Группа: Участник
Сообщений: 11
Регистрация: 17-04-10
Из: Томск
Пользователь №: 56 711

|
Цитата(rezident @ Nov 15 2010, 21:42)  Если к моменту выполнения этой команды а) генерация на XT2 будет уже устойчивой, б) флаг OFIFG будет уже программно очищен, в) уже будет проинициализирован какой-либо модуль, который требует тактирования именно от XT2. Это само собой ))) Факт неоспоримый.  Пару циклов установки и проверки флагов написать необходимо. Но сама-то мысль, которую я хотел донести своим первым сообщением в теме об SMCLK и таймере, получается, является правильной?
|
|
|
|
|
Nov 16 2010, 05:54
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

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

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 =)
|
|
|
|
|
Nov 16 2010, 08:10
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата ...но не означает автоматическую необходимость вызова и обработки этого прерывания И rezident призывает - давайте выражаться яснее и четче. Что Вы имели ввиду под: "...автоматическую необходимость..."?
Сообщение отредактировал ih_ - Nov 16 2010, 08:10
|
|
|
|
|
Nov 16 2010, 08:16
|
Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|