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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> задержка aka Delay, кто как пишет
CAHTA_1939
сообщение Aug 18 2007, 18:08
Сообщение #1


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



начал программировать жки ака MT-12864J. и столкнулся с необходимостью задержки на несколько нс.
for'ом уже не катит. пришла в голову мыслю использования прерывания, но вот как... хз.
нашел несколько примеров, но мне они показались странными...

напишите, кто как реализует задержку на несколько нс (сек)?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 18 2007, 20:31
Сообщение #2


Гуру
******

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



Цитата(CAHTA_1939 @ Aug 18 2007, 21:08) *
напишите, кто как реализует задержку на несколько нс (сек)?

Так несколько нс или несколько с?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Aug 18 2007, 20:42
Сообщение #3


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



Цитата(Dog Pawlowa @ Aug 19 2007, 00:31) *
Так несколько нс или несколько с?



нс =)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 18 2007, 20:52
Сообщение #4


Гуру
******

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



Цитата(CAHTA_1939 @ Aug 18 2007, 23:42) *
нс =)

Несколько нс (наносекунд) как-то сами образуются, там не только прерывания не нужны, там вообще ничего не нужно. smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Aug 18 2007, 20:57
Сообщение #5


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



Цитата(Dog Pawlowa @ Aug 19 2007, 00:52) *
Несколько нс (наносекунд) как-то сами образуются, там не только прерывания не нужны, там вообще ничего не нужно. smile.gif



это если нужно 10нс...
мне нужно 140нс - 450нс - 1000нс
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 18 2007, 21:45
Сообщение #6


Гуру
******

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



Цитата(CAHTA_1939 @ Aug 18 2007, 23:57) *
это если нужно 10нс...
мне нужно 140нс - 450нс - 1000нс

У меня интервал между прерываниями по таймеру составляет 500 нс, и действительно делаю задержку с такой точностью с помощью прерывания от таймера. То есть 450 нс = Delay(1), 1000нс=Delay(2).
Задержку меньше 500 нс реализую с помощью встроенной в компилятор функции.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Aug 18 2007, 21:55
Сообщение #7


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



а примерчик можешь дать?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 18 2007, 22:13
Сообщение #8


Гуру
******

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



Цитата(CAHTA_1939 @ Aug 19 2007, 00:55) *
а примерчик можешь дать?

Де жа вю...

//******* DELAY SUPPORT *******//
__no_init int delay_count;

void StartDelay(int t)
{ delay_count=t; }

void Delay(int t)
{ StartDelay(t); while(delay_count>0) CheckTimeAndResetWDT() ; }

void BackgroundService()
{ // Delay service
if (delay_count) delay_count--;
}

void TimerBConfiguration(void)
{ __bic_SR_register OSCOFF;
TBCTL = TBSSEL_2 + TBCLR + MC_0; // Timer B counts SMCLK clocks continuos
TBCCTL0 = CCIE; // module 0 configuration
TBCCR0 = MaxB; // period of timer overflow
TBCTL |= MC_1; // timer start to "UP" mode
};

#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB_modul0()
{ __enable_interrupt();
ResetWDT1;
BackgroundService();
}


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Aug 18 2007, 22:30
Сообщение #9


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



эм... чтото не воткну =)
выложи плиз все ф-ции. плиз

Сообщение отредактировал CAHTA_1939 - Aug 18 2007, 22:35
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 18 2007, 22:57
Сообщение #10


Гуру
******

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



Господа, вы обалдели что ли? 07.gif Судя по тому, что тема в разделе MSP430, то вопрос применительно к нему. Так про какие наносекунды гутарим-то? cranky.gif Ядро MSP430 кроме серии MSP430F2xxx может тактироваться частотой максимум 8МГц. Т.е. период клока - 125нс. Вход в прерывание - 6 тактов (>=750нс), выход из прерывания 5 тактов (>=625нс). О каком формировании интервала меньше 1,2мкс с помощью прерывания может вообще идти речь? Такие задержки на MSP430 только NOP-ами формируются! 1111493779.gif
P.S. на такт ошибся с прерываниями. Исправил.

Сообщение отредактировал rezident - Aug 18 2007, 23:21
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Aug 18 2007, 23:06
Сообщение #11


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



вот блин... то есть задержки нужно мутить NOD'ами и осциллографом?
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 18 2007, 23:19
Сообщение #12


Гуру
******

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



Цитата(CAHTA_1939 @ Aug 19 2007, 05:06) *
вот блин... то есть задержки нужно мутить NOD'ами и осциллографом?

Можно и без осциллографа обойтись. Количество тактов за которое выполняется каждая команда в User's Manual описано. команда NOP за 1 такт выполняется. Если тактовая 8МГц, то два NOP дадут задержку 250нс, 4 NOP - 500нс. Формировать задержку с помощью прерываний имеет смысл только при временах в десятки-сотни мкс или больше.
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Aug 19 2007, 12:54
Сообщение #13


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

Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713



ну лан, с "нс" я понял , а что делать с "мс" ? как их мутить? нужна задержка от 100мс до 1000мс с шагом примерно 20-50мс

помогите плиз
Go to the top of the page
 
+Quote Post
VAI
сообщение Aug 19 2007, 13:48
Сообщение #14


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Цитата
как их мутить? нужна задержка от 100мс до 1000мс с шагом примерно 20-50мс

У меня тикает прерывание каждую милисекунду и есть глобальная переменная
Код
volatile unsigned long tick_ms;        // милисекундные тики, хватит на 49 дней непрерывной работы прибора

тогда милисекундная задержка выглядит так
Код
void delay( unsigned long del )
{
  for ( del += tick_ms; del > tick_ms; )
;
}

получается от 1мс до 49 дней, с шагом 1 мс


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 19 2007, 17:53
Сообщение #15


Гуру
******

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



Цитата(VAI @ Aug 19 2007, 19:48) *
У меня тикает прерывание каждую милисекунду и есть глобальная переменная
Код
volatile unsigned long tick_ms;        // милисекундные тики, хватит на 49 дней непрерывной работы прибора

тогда милисекундная задержка выглядит так
Код
void delay( unsigned long del )
{
  for ( del += tick_ms; del > tick_ms; )
;
}

получается от 1мс до 49 дней, с шагом 1 мс

+1. Только у меня в зависимости от задачи тикает с периодом от 1мс до 32мс. Но отсчет времени все равно в мс идет. Просто инкремент тиков на величину периода происходит.
Код
#define SYSTEM_TICK_MS 10UL  //период системных тиков 10мс

tick_ms+=SYSTEM_TICK_MS; //инкремент счетчика системных тиков

Сформировать задержку очень просто
Код
unsigned long tmp=tick_ms;
while ((tick_ms-tmp)<5000); //задержка на 5 сек

При таком способе даже момент переполнения счетчика tick_ms не влияет на отсчет временного интервала, т.к. в цикле ожидания вычитание беззнаковых величин происходит.
Go to the top of the page
 
+Quote Post

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

 


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


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