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

 
 
6 страниц V  « < 3 4 5 6 >  
Reply to this topicStart new topic
> atmega32 + HMC5883 (по i2c), подключение компаса к мк
ILYAUL
сообщение May 23 2012, 11:30
Сообщение #61


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Kruftin @ May 23 2012, 15:23) *
0xFF во всех регистрах

Блин , ерунда какая-то и как назло в Москве ни у кого нет. Поставки 2-3 недели. А атмеловская приблуда с ним - дорого. Попробую завтра на рынках поискать. Так будет проще разбираться. Так , что уся надежда на тебя.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Kruftin
сообщение May 23 2012, 11:45
Сообщение #62


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



Дак и LSB меняются, усиление меняешь дак они сильнее меняются. Надо вообщем прочитать про калибровку. Ну получается был глюк с продвижением указателя по регистрам, хотя может так и надо к каждому регистру по отдельности обращаться. Вот рабочий код.
А еще как мне тип дабл по уарту передать(по уарту я могу передать 8 бит максимум)? Я же получу градусы по следующей формуле:
angle= atan(y/x)* (180 / 3.14159265) +180; // angle in degrees
где x = xl|xh << 8
y = yl|yh << 8

Это получится мне нужно градусы передать как два байта за раз, поскольку я сливаю старший и младший байты?

Сообщение отредактировал Kruftin - May 23 2012, 12:16
Прикрепленные файлы
Прикрепленный файл  TWI_COMPASS.rar ( 52.24 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 23 2012, 12:15
Сообщение #63


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Kruftin @ May 23 2012, 15:45) *
Это получится мне нужно градусы передать как два байта за раз, поскольку я сливаю старший и младший байты?

Пересчитай в ASCII и передавай сразу в привычном виде- чуть длинее но понятнее

ДА ! И поздравляю!!!!


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Kruftin
сообщение May 23 2012, 12:16
Сообщение #64


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



А как пересчитать? Получается я использую double а потом его конвертирую в char. Пойду обычный компас покупать, чтобы точность проверить.
Ну т.е. сейчас у меня есть например число 185.2(double) и мне его надо сделать как char для того чтобы передать.

Сообщение отредактировал Kruftin - May 23 2012, 13:35
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 23 2012, 14:48
Сообщение #65


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Поищи в инете, где-то я видел как пересчитывают , но помоему используют float


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Kruftin
сообщение May 23 2012, 16:53
Сообщение #66


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



Вот нашел пример преобразования. Только надо чтобы число был в один байт. Вопрос в том получится(уместится) ли значение angle в один байт.
У меня же angle меняется от 0 до 360 даже если я к целому преобразую, а в один байт влазит до 255 1111493779.gif

Сообщение отредактировал Kruftin - May 23 2012, 17:18
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 23 2012, 18:49
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Kruftin @ May 23 2012, 19:53) *
Вот нашел пример преобразования.

Мутный пример какой-то.

Цитата(Kruftin @ May 23 2012, 19:53) *
Вот нашел пример преобразования. Только надо чтобы число был в один байт.

Ну 360 не вместится, разве что на 2 поделить.

Пример
Код
void SendToUart(unsigned char new_byte)
{
// посылка в порт
}
#include <stdio.h>

void SendAngle(double angle)
{
unsigned short tmp=(unsigned short)Value;
char Buf[20];
unsigned char l=sprintf(Buf,"Angle=%d\n\r", tmp);
for (char i=0; i<l; i++) {
   SendToUart(Buf[i]);
}

Go to the top of the page
 
+Quote Post
Kruftin
сообщение May 24 2012, 05:29
Сообщение #68


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



Т.е. в массиве Buf будут лежать десятичные цифры? Если число 180.52, то в Buf[0]=1 Buf[1] = 8 Buf[3] = . Buf[4] = 5?
Если да, то это круто). Или просто число будет разбито по байтам?
Спасибо огромное ILYAUL и Артем!!! 08.gif a14.gif Не знаю что бы я без вас делал.
Поехал сейчас компас покупать.
Код отредактировал маленько:
Код
void SendAngle(float angle)
{
unsigned short tmp=(unsigned short)angle; //преобразуем угол в целое число
char Buf[20]; //создаем массив
unsigned char l=sprintf(Buf,"Angle=%d\n\r", tmp); //записываем в буфер значение угла по цифрам
unsigned char i = 0;
for (i=0; i<l; i++) {
   USART_SendChar(Buf[i]);//выводим все по уарту
}
}


Сообщение отредактировал Kruftin - May 24 2012, 07:57
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  TWI_COMPASS.rar ( 108.52 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
Kruftin
сообщение May 24 2012, 17:57
Сообщение #69


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



Так вот только формула для определения севера неверная походу, хотя написана тут http://www.seeedstudio.com/wiki/index.php?...s_Compass_v1.0b

По ней получается, что значения меняются от 180 до 268, учитывая что по даташиту значения регистров меняются от 0xF800 to 0x07FF получается по формуле
xv = xh << 8|xl;
yv = zh << 8|zl;
angle = atan2(yv,xv)*(180/3.14)+180;

имеем от 180 до 268 значения угла.
В даташите вот ни слова нету как вычислить угол. Но компас вроде как верно работает.
Хотя если считать как angle = atan2(yv,xv) то можно получать значения от 0 до 90 со странные перескоками с 30 на 60 и т.д. Поскольку нету отрицательных значений. Режим postive и negative bias как я понял для самотестирования. Сделать компас под выдачу нормальных данных так и не удалось и в даташите про расчет углов ничего вроде как нету. Смотрел пример расчета и калибровки для ардуино, так вот чето не все понял. Мда столько времени на него потратил, а он самый последний шаг сделать не получается. Код для ардуино приложил.

Сообщение отредактировал Kruftin - May 25 2012, 12:45
Прикрепленные файлы
Прикрепленный файл  libraries_20120118_0959.zip ( 539.64 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
Kruftin
сообщение May 31 2012, 13:06
Сообщение #70


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



Мда, на данный момент я получаю правдивые значения углов в диапазоне от 0 до 270 градусов, в оставшемся компас выдает скачущие и неверные данные. Правдивыми являются данные angle от 0 до -135, это результат atan2(yv,xv)*180/pi, где xv = (xh << 8)|xl; yv = (yh << 8)|yl;
Причем относительно реального севера нулевая отметка смещена градусов на 30, но это не проблема, главное что изменение градусов он показывает верно(правда надо умножить значение на 2) но только в диапазоне от 0 до 270 градусов. Похоже это баг компаса моего, либо надо поиграть усилением, но ведь на 75% значений при вращении оно не влияет. Код на сегодня приложил.

P.S. Хотя судя по примеру для ардуино я должен получать сразу значение от - 180 до 180, не умножая на два.
Прикрепленные файлы
Прикрепленный файл  TWI_COMPASS.rar ( 108.34 килобайт ) Кол-во скачиваний: 31
 
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 31 2012, 13:27
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Kruftin @ May 31 2012, 16:06) *
Причем относительно реального севера нулевая отметка смещена градусов на 30

Так вроде и должно быть: северный полюс и магнитный полюс не совпадают. Разница градусов 20.
Go to the top of the page
 
+Quote Post
Kruftin
сообщение May 31 2012, 15:48
Сообщение #72


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



Не я имею ввиду, что магнитный север я смотрел по компасу обычному и сравниваю значение нуля, оно отличается градусов на 20-30. Причем есть зона градусов в 45, где компас выдает нестабильные и левые значения.

Сообщение отредактировал Kruftin - May 31 2012, 15:49
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jun 1 2012, 06:12
Сообщение #73


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Z нашёл иот такую формулу для него

Код
// convert the raw data into a heading in degrees
        float headingDegrees = atan2((double)raw_y,(double)raw_x)* 180 / 3.14159265


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Kruftin
сообщение Jun 1 2012, 14:26
Сообщение #74


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



Ну у меня точно такая же, если скачать код и посмотреть). Только нету преобразования в из инта в дабл для значений х и у. А так все тоже.
Go to the top of the page
 
+Quote Post
Kruftin
сообщение Jun 5 2012, 19:10
Сообщение #75


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 30-05-11
Из: Екатеринбург
Пользователь №: 65 365



А компас то работает четко. Правда оказалось, что откуда не возьмись в комнате наводки брались. Принес в просторную комнату и компас работает как надо. yeah.gif Хотя если поставить компас вблизи розеток и ноутов, то север смещается. Все работает, всем спасибо!
Go to the top of the page
 
+Quote Post

6 страниц V  « < 3 4 5 6 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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