Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 08.01.2018, 15:28   #1
igor-k
Junior Member
 
Аватар для igor-k
 
Регистрация: 10.06.2011
Возраст: 36
Сообщений: 14
Вес репутации: 100/28
igor-k will become famous soon enoughigor-k will become famous soon enough
Отправить сообщение для igor-k с помощью Skype™
По умолчанию Не работает atan2

Функция арттангенса.

double atan2( double y_coord, double x_coord );

Давал на вход и дубл, и флоат, инты, чары, на выходе стабильно или 0 или 1.57

Причем если Y<X, то на выходе 0, иначе на выходе 1.57

Перебробовал
mplab 3.5 и 4.05
ХС8 1.40 и 1.45 (free и PRO режимы)

в заголовке #include <math.h>

Куда копать ?

зы. синусы-косинусы тоже не работают
igor-k вне форума   Ответить с цитированием
Старый 08.01.2018, 17:43   #2
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 56
Сообщений: 2,821
Вес репутации: 3872/104
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: Не работает atan2

Радианы... Не???
__________________
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA вне форума   Ответить с цитированием
Старый 08.01.2018, 20:16   #3
igor-k
Junior Member
 
Аватар для igor-k
 
Регистрация: 10.06.2011
Возраст: 36
Сообщений: 14
Вес репутации: 100/28
igor-k will become famous soon enoughigor-k will become famous soon enough
Отправить сообщение для igor-k с помощью Skype™
По умолчанию Re: Не работает atan2

Ответ в радианах.
Но почему только 0 и Пи/2 (1.57) ?
igor-k вне форума   Ответить с цитированием
Старый 08.01.2018, 23:00   #4
satvga
Member
 
Регистрация: 28.04.2013
Сообщений: 50
Вес репутации: 121/21
satvga will become famous soon enoughsatvga will become famous soon enough
По умолчанию Re: Не работает atan2

в xc16 работает в разных версиях
satvga вне форума   Ответить с цитированием
Старый 08.01.2018, 23:51   #5
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,777
Вес репутации: 3483/74
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Не работает atan2

igor-k
копать в сторону сторонних реализаций математических библиотек.

в целом в решениях без аппаратной поддержки плавающей точки следует избегать плавающей точки. особенно если дело касается восьмибитников.
besogon вне форума   Ответить с цитированием
Старый 09.01.2018, 09:42   #6
igor-k
Junior Member
 
Аватар для igor-k
 
Регистрация: 10.06.2011
Возраст: 36
Сообщений: 14
Вес репутации: 100/28
igor-k will become famous soon enoughigor-k will become famous soon enough
Отправить сообщение для igor-k с помощью Skype™
По умолчанию Re: Не работает atan2

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

Какие альтернативные варианты ?
У меня приходят данные от компаса, Х и Y , нужно вычислить угол.
igor-k вне форума   Ответить с цитированием
Старый 09.01.2018, 10:20   #7
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,777
Вес репутации: 3483/74
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Не работает atan2

igor-k
данные от компаса - целые или с фиксированной точкой?
если целые или с фиксированной точко - то нагуглить arctan fixed point
besogon вне форума   Ответить с цитированием
Старый 09.01.2018, 11:27   #8
igor-k
Junior Member
 
Аватар для igor-k
 
Регистрация: 10.06.2011
Возраст: 36
Сообщений: 14
Вес репутации: 100/28
igor-k will become famous soon enoughigor-k will become famous soon enough
Отправить сообщение для igor-k с помощью Skype™
По умолчанию Re: Не работает atan2

Спасибо за наводку.
Нагуглил формулу на https://dspguru.com/dsp/tricks/fixed...normalization/
Погонял данные в экселе, погрешность пару градусов, для моих задач вполне хватит.
igor-k вне форума   Ответить с цитированием
Старый 09.01.2018, 19:35   #9
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,410
Вес репутации: 4688/109
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Не работает atan2

Цитата:
Сообщение от igor-k Посмотреть сообщение
Спасибо за наводку.
Нагуглил формулу на https://dspguru.com/dsp/tricks/fixed...normalization/
Погонял данные в экселе, погрешность пару градусов, для моих задач вполне хватит.
Если бы мне выпала чисто случайно Ваша задача, попробовал бы применить CORDIC, чисто из спортивного интереса.
+ не требуется нормировать т.е. выполнять деление
+ не требуется ни разу ничего делить
+ в Ваши 2 градуса можно зайти выполнив менее чем 6 итераций.
+ можно решать только в целых числах.
+ ответ получать либо в градусах сразу, либо в 1/256 (или других степеней двойки)

- время вычисления очень сильно зависит от платформы и может оказаться что с делением выйдет быстрее

Последний раз редактировалось ampersant; 09.01.2018 в 19:45.
ampersant на форуме   Ответить с цитированием
Старый 10.01.2018, 10:24   #10
igor-k
Junior Member
 
Аватар для igor-k
 
Регистрация: 10.06.2011
Возраст: 36
Сообщений: 14
Вес репутации: 100/28
igor-k will become famous soon enoughigor-k will become famous soon enough
Отправить сообщение для igor-k с помощью Skype™
По умолчанию Re: Не работает atan2

Посмотрел CORDIC, попробую.

Деления, кроме времени выполнения, чем ещё нежелательно ?

Заюзал такие функции :

Код:
double arctan2(double y, double x)
{
double coeff_1;
double coeff_2;
double abs_y;
double r;
double angle;

   coeff_1 = 0.78539815;  // (Pi / 4 )
   coeff_2 =  2.3561944 ;  //   (3*coeff_1;)
   abs_y = fabs(y)+1e-10;      // kludge to prevent 0/0 condition
   if (x>=0)
   {
      r = (x - abs_y) / (x + abs_y);
      angle = coeff_1 - coeff_1 * r;
   }
   else
   {
      r = (x + abs_y) / (abs_y - x);
      angle = coeff_2 - coeff_1 * r;
   }
   if (y < 0)
   return(-angle);     // negate if in quad III or IV
   else
   return(angle);
}

Код:
double sin_my (double angle_sin)   //угол от 0 до 90. Дальше начинаются расхождения
{
    double to_out_sin;
    to_out_sin = (0.954929*angle_sin-0.129*angle_sin*angle_sin*angle_sin);
    return   to_out_sin;
}
Код:
double cos_my (double angle_cos)    // без учёта знака
{
    double to_out_cos;
    to_out_cos = (sqrt (1-(sin_my(angle_cos) * sin_my(angle_cos))));
    return to_out_cos;
}
арктангенс - https://docs.google.com/spreadsheets...it?usp=sharing

синус, косинус - https://docs.google.com/spreadsheets...it?usp=sharing
igor-k вне форума   Ответить с цитированием
Старый 10.01.2018, 14:06   #11
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,410
Вес репутации: 4688/109
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Не работает atan2

Цитата:
Сообщение от igor-k Посмотреть сообщение
Посмотрел CORDIC, попробую.

Деления, кроме времени выполнения, чем ещё нежелательно ?

Заюзал такие функции :

Код:
double arctan2(double y, double x)
{
double coeff_1;
double coeff_2;
double abs_y;
double r;
double angle;

   coeff_1 = 0.78539815;  // (Pi / 4 )
   coeff_2 =  2.3561944 ;  //   (3*coeff_1;)
   abs_y = fabs(y)+1e-10;      // kludge to prevent 0/0 condition
   if (x>=0)
   {
      r = (x - abs_y) / (x + abs_y);
      angle = coeff_1 - coeff_1 * r;
   }
   else
   {
      r = (x + abs_y) / (abs_y - x);
      angle = coeff_2 - coeff_1 * r;
   }
   if (y < 0)
   return(-angle);     // negate if in quad III or IV
   else
   return(angle);
}
Код:
double sin_my (double angle_sin)   //угол от 0 до 90. Дальше начинаются расхождения
{
    double to_out_sin;
    to_out_sin = (0.954929*angle_sin-0.129*angle_sin*angle_sin*angle_sin);
    return   to_out_sin;
}
Код:
double cos_my (double angle_cos)    // без учёта знака
{
    double to_out_cos;
    to_out_cos = (sqrt (1-(sin_my(angle_cos) * sin_my(angle_cos))));
    return to_out_cos;
}
арктангенс - https://docs.google.com/spreadsheets...it?usp=sharing

синус, косинус - https://docs.google.com/spreadsheets...it?usp=sharing
вот чего нарыл. Только int там 32 бита

http://www.cyberforum.ru/post5479599.html
ampersant на форуме   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не на всех браузерах работает скрипт. smart_pic Cетевые протоколы и технологии 25 01.07.2016 17:30
Питание pic18f25k80 ( не работает от 5В ) taraserker Продукция MICROCHIP 23 27.06.2014 16:56
STM32 не работает часовой кварц flyL29 Микроконтроллеры других производителей 4 05.09.2012 08:20


Часовой пояс GMT +3, время: 04:35.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot