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

 
 
 
Reply to this topicStart new topic
sigmaN
сообщение Nov 9 2014, 20:00
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Необходимо с точностью до +/-20мкс организовать задержку в диапазоне от 330 до аж 4440мкс.
При этом(по всем известным причинам) контроллер изначально был взят без учета этого мега полезного функционала(Tiny13) и теперь немного нехватает флэша )
Перед какими-то трудоёмкими делами вроде переписываением всей прошивки на асме, хотелось бы поинтересоваться есть ли у кого на примете компактный способ организации такой задержки?
Всего сейчас доступно 224 байта. Ну под задержку все выделить не получится, нужно же на логику что-то оставить.. В общем чем меньше тем лучше. Как обычно )
Щас копну delay.h и главный цикл задержки оттуда попробую достать, но пока суть да дело, решил подключить коллективный разум в лице участников этого форума...
P.S. естественно ищется что-то эффективнее конструкции вида
Код
void Delay_us(int n) {
  while (n--) {
   _delay_us(1);
}
}


Кажется помощь коллективного разума не потребуется, но вдруг кому пригодится.
В общем на каждую итерацию 4 цикла не считая загрузку рабочих регистров там пару циклов единоразово в самом начале.
Ну а уж как вы будете пересчитывать колв-во итераций в микросекунды это дело другое wink.gif
Благо в моём случае можно посчитать всё заранее и подставлять в функцию по мере надобности.
Код
static void delay_loop_2(uint16_t __count)
{
    __asm__ volatile (
    "1: sbiw %0,1" "\n\t"
    "brne 1b"
    : "=w" (__count)
    : "0" (__count)
    );
}


Нет, что-то я тормознул. Если флэш в дефиците то посчитать заранее - плохая идея. Надо считаь на ходу...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 9 2014, 20:53
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(sigmaN @ Nov 9 2014, 23:00) *
Перед какими-то трудоёмкими делами вроде переписываением всей прошивки на асме, хотелось бы поинтересоваться есть ли у кого на примете компактный способ организации такой задержки?


Зачем же переписывать на асме ВСЮ прошивку, когда можно написать на нем ТОЛЬКО подпрограмму задержки?

Впрочем, такая задержка все равно выглядела бы как цикл, проблема лишь в его калибровке, т.е. переводе времени в число оборотов цикла.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Nov 9 2014, 20:58
Сообщение #3


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ну переписывать всё, потому что много чего туда не влазит и по хорошему надо бы наверно именно всё )
Учитывая нужную точность за калибровкой дело не встало... В общем delay_loop_2() вопрос решил полностью. Чё-то поторопился я немного с постом на форум...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 9 2014, 21:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(sigmaN @ Nov 10 2014, 00:58) *
Ну переписывать всё, потому что много чего туда не влазит и по хорошему надо бы наверно именно всё )

Я такое по прерыванию от таймера делаю. Прерывание от таймера возникает, например, раз в 100 мкС. В обработчике увеличиваем счетчик на единичку. И все. В фоновой программе, там, где нужна задержка, перед тем, как она нужна, сбрасываем этот счетчик в ноль и в цикле ждем, когда он дорастет до нужной величины ...
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Nov 9 2014, 22:27
Сообщение #5


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Да, было-бы прекрасно, но единственный таймер тиньки занят измерением периода поступающих на вход прибора импульсов... А вот сделать задержку программно оказалось вполне приемлемо, что и было сделано.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

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

 


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


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