зачем вам вообще компас?! вам надо знать угол к горизонту? для этого используется акселерометр. и по нему же корректируются данные для компаса, что бы он хоть что то адекватное выдавал при наклонах в каком-нибудь полетном контролере. калибровка выглядит так
при этом показания гуляют в состоянии покоя куда сильней акселерометра. + данные плавают от малейших изменений. например подошел человек с ремнем с металлической пряжкой - данные уплыли. хоть что то железосодержащее рядом - данные уплыли.
данные, получаемые из компаса без обработки не скажут тебе вообще абсолютно ни о чем. Более того, я когда пытался понять, что он показывает, пришел к выводу, что у меня магнитный полюс земли в подвале дома находится.
у голых данных хотя бы должна быть закономерность, к примеру если направить одну из ось X на север, то в младшем байте Y будет 0; если на запад или восток, то у X младшего байта будет что-то ближе к 256. И, как я понимаю, второй байт для 5 Gain 390LSB/Gauss) долэен быть или 0 или 255, и менять значения на границе перехода частей света(север-юг, запад-восток), а у меня в одной стороне держится градусов на 150. Попробовал сделать Self test, данные привожу Mode 01: x[0]=1; x[1]=211; y[0]=1; y[1]=182; z[0]=1; z[1]=165. Mode 10: x[0]=254; x[1]=50; y[0]=254; y[1]=68; z[0]=254; z[1]=92. По расчетам для 5Gain значения должны лежать в пределах L=243*390/390=243, H=575*390/390=575. Как все-таки рассчитывается полное значение X?. и для чего Self test? Чтобы просто сравнить, находятся ли значения в этом рассчитаном диапазоне? Если нет, то как корректировать? Далее вопрос задам по расчету полного значения X и двух байт для 5Gain. Как я понял, используется всегда 12 бит, причем 12-й - это знак +-. А остальной полубайт x[0] забивается тем же значением что и 12-бит? Имеем, к примеру x[0]=0, x[1]=160, получаем X=160. А если x[0]=255(11111111) x[1]=160, получаем X=1952, я думал, что следующее за 255 значения должен получать в диапазоне 256-511, а тут сразу скачек. в чем у меня проблема? почему я так все спрашиваю, потому что у меня не Ardunio, и нет готовых библиотек под PIC, а математика какая-то мутная в библиотеках Ardunio, я в ней разобраться не смог. Сейчас задача: разоброаться как работает и выдает информацию кампас, а выбор конечного прибора будет позднее.
aalleexxaa писал(а): к примеру если направить одну из ось X на север, то в младшем байте Y будет 0; если на запад или восток, то у X младшего байта будет что-то ближе к 256.
Ага, щаззз. Компас(который на самом деле магнитометр) даст абсолютные значения разложенного магнитного поля в попугаях, а не направление на север. Ловить внутри помещений вообще нечего - там дофига магнитных материалов и полей, компас будет безбожно врать(о чем уже говорилось выше). Если уйти в чисто поле, то получим все равно не направление на север, а направление магнитных линий, пересчитанных на попугаи для данного конкретного места. например, угол к вертикали зависит от геогр. широты, ближайших ЛЭП и железных рудников и т.д. Так что хватит лохматить бабушку, для заявленной задачи компас бесполезен.
настолько может врать, что плюсовое значение для оси X находится в секторе не 180 градусов, а 210, а отрицательное в оставшихся 150 градусов (навскидку). А в каком-то диапазоне (сектор в 40 градусов) значение практически не меняется (+-3 бита - ошибка измерения, вместо нескольких десятков). Я сейчас спрашиваю не конкретно, подойдет ли компас к данной задаче, а, для начала, уж если он у меня есть, как расшифровать данные, принимаемые с компаса без использования общественного Ardunio.