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

 
 
> Точное измерение длительности импульса таймером
MosVit
сообщение Nov 12 2008, 20:05
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 7-10-08
Пользователь №: 40 755



Сканирую вход микроконтролера (ATTiny2313) для измерения длительности импульса (переход от лог 1 к лог 0) 16 разрядным таймером (TIMER1).

Код на С (IAR WB)

while (PINB &= (1 << PB2));
TCCR1B = 0x00; // Stop timer

Дает ошибку в 5 МЦ (машинных циклов)
Пример: Разница между измеряными числами кратна 5
06564
06249
06529
06724
06484
06519

асемблерная вставка:
asm("nop");
asm("loop: sbic $16, 2");
asm("rjmp loop");
TCCR1B = 0x00; // Stop timer

Ошибка - 3 МЦ

По даташиту это вроде бы как предел точности, из-за того что команда "sbic" выполняется 3 МЦ при выполнении условия и 1 МЦ в противном случае.

Пример: Разница между измеряными числами кратна 3
00425
00425
00425
00434
00425
00428

Может кто подскажет как можно уменьшить ошибку до 1 МЦ?

Сообщение отредактировал MosVit - Nov 12 2008, 20:08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Огурцов
сообщение Nov 12 2008, 20:53
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(MosVit @ Nov 12 2008, 20:05) *
Может кто подскажет как можно уменьшить ошибку до 1 МЦ?

Разверните цикл - ошибка будет или 1 или 0 МЦ, т.е. то, что надо.
Go to the top of the page
 
+Quote Post



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

 


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


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