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

 
 
> деление до сотых, на Си для 8-битного микроконтрллера
another_one
сообщение Feb 19 2010, 11:11
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557



Здравствуйте.

Нужна поддержка в следующем вопросе:

Можно ли целую величину поделить например на 1.66 и можно ли как-нибудь вещественным рельтатом оперировать в качестве содержимым регистра таймера?

Буду рад любой информации по этому поводу

Заранее благодарен


--------------------
One Chip is All You Need
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
another_one
сообщение Feb 19 2010, 11:51
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557



Спасибо большое за поддержку.

Понял что не правильно задал вопрос:

Задача заключается в деление частоты входного дискретного сигнала на 1.66 и выдача ее наружу.

Частота входного сигнала - значение таймера между двумя соседними "импульсами", выходная частота - деление на 1.66 входной.

"на входе" и "на выходе" целое число, коэффициент деления вещественное число.

Не сооброжу как можно наиболее точно поделить(, используя ресурсы 8-ми битного микроконтроллера и IAR компилятора.


--------------------
One Chip is All You Need
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 19 2010, 14:43
Сообщение #3


Гуру
******

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



Цитата(another_one @ Feb 19 2010, 15:51) *
Не сооброжу как можно наиболее точно поделить(, используя ресурсы 8-ми битного микроконтроллера и IAR компилятора.

Проблемы не в 8-разрядным контроллере или IARе, а в Вашей голове wink.gif
Поточнее поделить можно только смещая "фиксированную точку"
Например a=b*50/3


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
rezident
сообщение Feb 19 2010, 15:57
Сообщение #4


Гуру
******

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



Цитата(Dog Pawlowa @ Feb 19 2010, 19:43) *
Поточнее поделить можно только смещая "фиксированную точку"
Например a=b*50/3
Нет. Деление нужно заменить умножением. Деление на 1,66=166/100 эквивалентно умножению на обратную дробь 100/166=0,6024096. При целочисленном умножении точность не уменьшается. Ошибка возникает при целочисленном делении. Вот ее и нужно оценить.
Для упрощения (и ускорения) целочисленного деления оно заменяется сдвигами, которые эквивалентны делению на 2^N. Соответственно исходную дробь нужно заранее умножить на 2^N так, чтобы с одной стороны не превысить разрядную сетку вычислений после умножения, а с другой стороны, чтобы обеспечить требуемую точность приближения дроби. Если исходное целое число 16-и разрядное, а вычисления ведутся в 32-х битной арифметике, то можно домножить на 2^16=65536. Тогда получается "магическое" число 39480 (39480/65536=0,602417). Исходное 16-и разрядное число умножаем на 39480, а затем делаем сдвиг результата умножения вправо на 16 разрядов. Погрешность при таком целочисленном делении получается меньше 0,0015%.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- another_one   деление до сотых   Feb 19 2010, 11:11
- - aaarrr   Цитата(another_one @ Feb 19 2010, 14:11) ...   Feb 19 2010, 11:21
|- - MrYuran   Цитата(another_one @ Feb 19 2010, 14:51) ...   Feb 19 2010, 12:00
|- - rezident   Цитата(another_one @ Feb 19 2010, 16:51) ...   Feb 19 2010, 13:18
||- - VladimirYU   Цитата(rezident @ Feb 19 2010, 18:57) Тог...   Feb 20 2010, 07:09
||- - Dog Pawlowa   Цитата(rezident @ Feb 19 2010, 19:57) Нет...   Feb 20 2010, 15:35
|- - ASN   another_one А почему нельзя сразу частоту таймера ...   Feb 20 2010, 09:22
|- - VladimirYU   Цитата(ASN @ Feb 20 2010, 12:22) another_...   Feb 20 2010, 11:37
|- - ASN   VladimirYU Речь идёт именно о том, что частота вхо...   Feb 20 2010, 12:10
- - V_G   А я понял вопрос топикстартера так: как сделать де...   Feb 19 2010, 15:05
- - another_one   Всем большое спасибо за поддержку ЦитатаКакой разр...   Feb 21 2010, 05:23
- - Dog Pawlowa   Цитата(another_one @ Feb 21 2010, 08:23) ...   Feb 21 2010, 06:49
- - ASN   another_one Если у Вас ДВА таймера - можно задать ...   Feb 21 2010, 10:31


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

 


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


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