Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Вопрос на asm для AVR:
Отправлено
Леонид Иванович
27 февраля 2009 г. 11:25
есть прерывание по совпадению (таймер 1). Внутри обработчика нужно убрать джиттер. Вижу, что при входе в обработчик значение TCNT1L бывает 0x05, 0x06, 0x07, 0x08. Как это дело выровнять с наименьшими затратами времени?
Составить ответ
|
Вернуться на конференцию.
Ответы
неужели 60...180 нс критично? раньше такие фронты были, и ничё, полет был нормальный...
-
papa
(27.02.2009 14:26:15
172.17.206.42,217.117.85.98
,
пустое
)
тогда только использовать аппаратные возможности - установить/сбросить ногу при сранении
-
papa
(27.02.2009 15:09:52
172.17.206.42,217.117.85.98
,
пустое
)
16 бит ЦАП, однако. Джиттер 150 ns - это катастрофа.
-
Леонид Иванович
(27.02.2009 15:05:7
87.252.227.58
,
пустое
)
Только коррекцией задержкой, уже обсуждалось. Можно пробовать пропусками по битам прочитанного значения таймера, можно как по ссылке
-
ReAl
(27.02.2009 12:19:17
193.111.248.46
,
пустое
,
ссылка
)
Разумно. Кстати, в теме про "битовые поля" я был не прав - подумал про одно, а про написал другое :))
-
Юрий_СВ
(27.02.2009 13:31:38
217.12.195.250
,
пустое
,
ссылка
)
Красиво!
-
Леонид Иванович
(27.02.2009 12:52:58
87.252.227.58
,
пустое
)
Для полной красоты надо поставить защиту от зависания(+)
-
Quasy
(27.02.2009 15:13:50
192.168.0.207,80.243.9.34
, 633 байт)
Или предварительным прерыванием от блока В и поллингом флага от А
-
Quasy
(27.02.2009 12:45:17
192.168.0.207,80.243.9.34
,
пустое
)
Поллинг даст джиттер от самого поллинга - в зависимости от того, на что попадёт событие - на команду проверки или на команду перехода и на какой такт команды перехода.
-
ReAl
(27.02.2009 12:52:24
193.111.248.46
,
пустое
)
Он вроде не боится такого расклада
-
Quasy
(27.02.2009 12:57:54
192.168.0.207,80.243.9.34
,
пустое
,
ссылка
)
Но можно и не поллинг, а вложенное прерывание из линейного кода...
-
Quasy
(27.02.2009 13:01:17
192.168.0.207,80.243.9.34
,
пустое
)
Чтобы полностью убрать - надо спать и просыпаться по рперыванию. Но, вообще, желательно не закладываться на "синхронность" прерываний. Синхронность невозможна, т.к. команды имеют разную длину + сигнал таймера условно асинхронен.
-
Юрий_СВ
(27.02.2009 11:43:19
217.12.195.250
,
пустое
)
Ответ: Судя по маленьким значениям счетчика, там и спать-то некогда. А делитель уменьшить или частоту кварца поднять можно?
-
newby
(27.02.2009 11:49:24
89.20.150.51
,
пустое
)
Всё это не то. Нужно читать в прерывании младший байт таймера и использовать его как параметр для некого кода, выравнивающего задержку. Весь вопрос в оптимальном построении этого кода.
-
Леонид Иванович
(27.02.2009 12:02:19
87.252.227.58
,
пустое
)
Ну, тогда анализировать, при выполнении какой команды произошло прерывание :-)
-
newby
(27.02.2009 12:14:50
89.20.150.51
,
пустое
)
Сказано : значение не "счётчика", а его младшего байта. Такая разность будет наблюдаться при возникновении прерывания во время разных команд (1,2,3,4 такта). Если ещё есть и критические секции (куски с запрещёнными прерываниями) - тогда вообще плохо.
-
Юрий_СВ
(27.02.2009 11:57:52
217.12.195.250
,
пустое
)
Кусков с запрещенными прерываниями, естественно, нет. А джиттер только из-за разного времени выполнения прерываемых команд.
-
Леонид Иванович
(27.02.2009 12:00:51
87.252.227.58
,
пустое
)
Не только. Даже если вы будете циклиться. A: RJMP A - всё равно будет дрожание фазы (на 1 такт). Т.к. если если в интервалах таймера не будет соблюдаться кратность двойке - прерывания могут выпадать и на 1-й и на 2-й такт команды RJMP. А выполнять только 1-тактные команды невозможно.
-
Юрий_СВ
(27.02.2009 12:06:0
217.12.195.250
,
пустое
)
Ну и ладно. Я буду компенсировать это дрожание в обработчике, внося задержку, согласно значению TCNT1L.
-
Леонид Иванович
(27.02.2009 12:11:13
87.252.227.58
,
пустое
)
Ещё, вы можете по тому же таймеру засыпать прямо перед "настоящим" прерыванием. На всё уйдёт примерно 20 тактов (войти в прерывание, перенастроить тот же регистр сравнения и заснуть). По идее, дрожания не будет вообще.
-
Юрий_СВ
(27.02.2009 12:24:11
217.12.195.250
,
пустое
)
Может вам нужно синхронно запускать АЦП - это проще.
-
Юрий_СВ
(27.02.2009 12:06:44
217.12.195.250
,
пустое
)
Нет у меня АЦП, есть только ЦАП.
-
Леонид Иванович
(27.02.2009 12:11:47
87.252.227.58
,
пустое
)
А по какой причине нужна синхронность (если не секрет) ?
-
Юрий_СВ
(27.02.2009 11:47:59
217.12.195.250
,
пустое
)
Для уменьшения фазового шума на выходе ЦАП, который грузится в прерывании.
-
Леонид Иванович
(27.02.2009 11:59:21
87.252.227.58
,
пустое
)
Из Слипа прерываетесь?
-
Quasy
(27.02.2009 11:27:7
192.168.0.207,80.243.9.34
,
пустое
)
Наверное, из слипа дрожание должно быть меньше
-
newby
(27.02.2009 11:35:3
89.20.150.51
,
пустое
)
Из слипа нельзя, основная программа должна всегда работать.
-
Леонид Иванович
(27.02.2009 11:57:44
87.252.227.58
,
пустое
)
Sleep - это тоже часть программы
-
newby
(27.02.2009 12:16:45
89.20.150.51
,
пустое
)
Да, там всегда будет 10 или в некоторых моделях 11 :)
-
Quasy
(27.02.2009 11:39:44
192.168.0.207,80.243.9.34
,
пустое
)
Нет.
-
Леонид Иванович
(27.02.2009 11:33:14
87.252.227.58
,
пустое
)
Извращаться пробовали - типа прерывания разрешать на линейном(+)
-
Quasy
(27.02.2009 11:49:49
192.168.0.207,80.243.9.34
, 59 байт)
А толку? Мне нужно получить строгую периодичность выполнения обработчика.
-
Леонид Иванович
(27.02.2009 11:58:20
87.252.227.58
,
пустое
)
Так. А можно величину для следующего прерывания корректировать?
-
Quasy
(27.02.2009 12:04:38
192.168.0.207,80.243.9.34
,
пустое
)
Корректировать OCR1A? Это идея, нужно подумать.
-
Леонид Иванович
(27.02.2009 12:12:48
87.252.227.58
,
пустое
)
Нет, не выйдет. Я же не знаю latency для следующего прерывания.
-
Леонид Иванович
(27.02.2009 12:13:49
87.252.227.58
,
пустое
)
Ну по минимальному расстоянию как-нибудь, задержками выравнивать.(+)
-
Quasy
(27.02.2009 12:25:10
192.168.0.207,80.243.9.34
, 144 байт)
Получится спаренная или "дуплетая" работа блоков сравнения :)
-
Quasy
(27.02.2009 12:31:54
192.168.0.207,80.243.9.34
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 567:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru