Гость Just.J 9 ноября, 2012 Опубликовано 9 ноября, 2012 · Жалоба Гляньте структурную схему LIS3DSH на 10-ой странице! :smile3046: Ничего себе.. Там НЕТ температурного датчика, т.к. он подключен к ацп которого в LIS3DSH нет (а в начале указан!!!). "Это просто позор какой то" (собачье сердце). В LIS3DH на 8-ой странице ацп и датчик присутствует. Занавес! Не, датчик там есть, но он почему-то структурно объединён вместе с FIFO, судя по картинке. Буду копать в этом направлении, авось получится что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adc 0 13 ноября, 2012 Опубликовано 13 ноября, 2012 · Жалоба Подключаю сейчас LIS3DSH, и натыкаюсь на непонятки, а именно: Непонятно с адресацией регистров. Здесь lis3dsh_driver_lx адреса регистров такие: #define LIS3DSH_CTRL_REG1 0x20 /* control reg 1 */ #define LIS3DSH_CTRL_REG2 0x21 /* control reg 2 */ #define LIS3DSH_CTRL_REG3 0x22 /* control reg 3 */ #define LIS3DSH_CTRL_REG4 0x23 /* control reg 4 */ #define LIS3DSH_CTRL_REG5 0x24 /* control reg 3 */ #define LIS3DSH_CTRL_REG6 0x25 /* control reg 4 */ В datasheet-е такие: CTRL_REG3 23 CTRL_REG4 20 CTRL_REG5 24 CTRL_REG6 25 Где правильно? 2 Just.J: А Вы как прописывали? Прошу еще показать как Вы делаете инициализацию ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adc 0 14 ноября, 2012 Опубликовано 14 ноября, 2012 · Жалоба Я просто в шоке! Dataseet на lis3dsh ну просто наполнен опечатками по самые небалуйся. Как они отвратительно работают с документацией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость Just.J 15 ноября, 2012 Опубликовано 15 ноября, 2012 (изменено) · Жалоба Подключаю сейчас LIS3DSH, и натыкаюсь на непонятки, а именно: Непонятно с адресацией регистров. Здесь lis3dsh_driver_lx адреса регистров такие: #define LIS3DSH_CTRL_REG1 0x20 /* control reg 1 */ #define LIS3DSH_CTRL_REG2 0x21 /* control reg 2 */ #define LIS3DSH_CTRL_REG3 0x22 /* control reg 3 */ #define LIS3DSH_CTRL_REG4 0x23 /* control reg 4 */ #define LIS3DSH_CTRL_REG5 0x24 /* control reg 3 */ #define LIS3DSH_CTRL_REG6 0x25 /* control reg 4 */ В datasheet-е такие: CTRL_REG3 23 CTRL_REG4 20 CTRL_REG5 24 CTRL_REG6 25 Где правильно? 2 Just.J: А Вы как прописывали? Прошу еще показать как Вы делаете инициализацию ? Правильно - как написано в даташите, я тот линуксово/андроидный драйвер скачивал, когда писал драйвера, чисто из любопытства и оттуда ничего не брал (+ не уверен, что он работает вообще). Пока что мой драйвер написан не на прерываниях, а на прямой логике. Регистры, которые я использую: #define LIS3DSH_ADRESS_READ 0b00111101 #define LIS3DSH_ADRESS_WRITE 0b00111100 #define ADDRESS_CTRL_REG4 0x20 #define ADDRESS_CTRL_REG5 0x24 #define ADDRESS_CTRL_REG6 0x25 #define CTRL_REG4_ODR_PWR_DOWN 0b00000000 #define CTRL_REG4_ODR_3_125_HZ 0b00010000 #define CTRL_REG4_ODR_6_25_HZ 0b00100000 #define CTRL_REG4_ODR_12_5_HZ 0b00110000 #define CTRL_REG4_ODR_25_HZ 0b01000000 #define CTRL_REG4_ODR_50_HZ 0b01010000 #define CTRL_REG4_ODR_100_HZ 0b01100000 #define CTRL_REG4_ODR_400_HZ 0b01110000 #define CTRL_REG4_ODR_800_HZ 0b10000000 #define CTRL_REG4_ODR_1600_HZ 0b10010000 #define CTRL_REG4_BDU_NOT_UPD_UNTIL_READ 0b00001000 #define CTRL_REG4_BDU_CONT_UPDATE 0b00000000 #define CTRL_REG4_ASIX_ENABLE 0b00000111 #define CTRL_REG5_BW_FILTER_50_HZ 0b11000000 #define CTRL_REG5_BW_FILTER_200_HZ 0b10000000 #define CTRL_REG5_BW_FILTER_400_HZ 0b01000000 #define CTRL_REG5_BW_FILTER_800_HZ 0b00000000 #define CTRL_REG5_FSCALE_2G 0b00000000 #define CTRL_REG5_FSCALE_4G 0b00001000 #define CTRL_REG5_FSCALE_6G 0b00010000 #define CTRL_REG5_FSCALE_8G 0b00011000 #define CTRL_REG5_FSCALE_16G 0b00100000 #define CTRL_REG5_SIM_4_WIRE 0b00000000 #define CTRL_REG5_ST_DISABLED 0b00000000 #define CTRL_REG5_ST_POSITIVE 0b00000010 #define CTRL_REG5_ST_NEGATIVE 0b00000100 #define CTRL_REG5_ST_NOT_ALLOWED 0b00000110 Инициализация следующая: LIS3DSHWriteData(ADDRESS_CTRL_REG4, CTRL_REG4_ODR_1600_HZ | CTRL_REG4_BDU_NOT_UPD_UNTIL_READ | CTRL_REG4_ASIX_ENABLE); LIS3DSHWriteData(ADDRESS_CTRL_REG5, CTRL_REG5_BW_FILTER_50_HZ | CTRL_REG5_FSCALE_2G | CTRL_REG5_ST_DISABLED | CTRL_REG5_SIM_4_WIRE); , где static void LIS3DSHWriteData(uint8_t adress, uint8_t data_to_write) { TWISendSLA(LIS3DSH_ADRESS_WRITE); TWI_Wait_WIF_Flag(); TWISendData(adress); TWI_Wait_WIF_Flag(); TWISendData(data_to_write); TWI_Wait_WIF_Flag(); TWISendStopCondition(); TWI_Wait_Bus_Idle(); } void TWI_Wait_WIF_Flag(){ while (0 == (TWIE.MASTER.STATUS & TWI_MASTER_WIF_bm)); } void TWI_Wait_Bus_Idle(){ while (0 == (TWIE.MASTER.STATUS & TWI_MASTER_BUSSTATE_IDLE_gc)); } Это всё для TWI(I2C)шного варианта драйвера. Адреса регистров и логика работы - верны, иначе бы у меня оно не завелось. TWI тут висит на PORTE иксмеги. Изменено 15 ноября, 2012 пользователем Just.J Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adc 0 16 ноября, 2012 Опубликовано 16 ноября, 2012 · Жалоба Погонял lis3dsh. Прикладываю картинку с данными по одной оси. Датчик лежит неподвижно. Частота чтения 100Гц. ODR - 100Гц. BW- 11(50 Hz).2G. Я вот только не понял, разве в lis3dsh постоянную составляющую с помощью внутренней настройки убрать нельзя(как в lis3dh)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость Just.J 16 ноября, 2012 Опубликовано 16 ноября, 2012 · Жалоба Я вот только не понял, разве в lis3dsh постоянную составляющую с помощью внутренней настройки убрать нельзя(как в lis3dh)? Почему же, можно. OFF_XYZ (10h, 11h, 12h) в ответе за константное смещение по каждой из осей. Картинка вполне ожидаемая, у меня примерно такая же ерунда по I2C. Хотелось бы конечно ещё SPI посмотреть ваш, хотя подозреваю конечно, что проблема озвученная мной в самом начале у всех этих акселерометров присутствует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adc 0 16 ноября, 2012 Опубликовано 16 ноября, 2012 · Жалоба Почему же, можно. OFF_XYZ (10h, 11h, 12h) в ответе за константное смещение по каждой из осей. Ну это, как я понимаю, просто вычитание значения из результата. Допуcтим мне необходимо чтобы по всем осям был ноль при неподвижном датчике. Какие значения мне нужно туда записать? Где про них можно почитать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bob1 0 8 октября, 2013 Опубликовано 8 октября, 2013 · Жалоба Подскажите возможно использование датчика MMA7660 в качестве датчика наклона? Предполагается использование для автоматического поворота изображения на индикаторе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 8 октября, 2013 Опубликовано 8 октября, 2013 · Жалоба Подскажите возможно использование датчика MMA7660 в качестве датчика наклона? Предполагается использование для автоматического поворота изображения на индикаторе. Я бы такой поворот вообще не делал. Очень раздражающая и неадекватно работающая на практике опция ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bob1 0 8 октября, 2013 Опубликовано 8 октября, 2013 · Жалоба Сейчас ручное режим переключения Правша--левша. Предполагается сделать в качестве отключаемой опции. На сотовых вроде стабильно работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adc 0 25 февраля, 2014 Опубликовано 25 февраля, 2014 · Жалоба Дык вроде все понятно -для диапазона 2g имеем при a(x)=1g в коде 0х400 (т.е 1024), при a(x)=-1g в коде 0хС00 (т.е -1024 если доп.код считать для 12-битного представления, т.е 4ю тетраду не учитываем). При 2g и -2g будет по всей видимости 2047 и -2048 (0x7FF и 0x800). Вообщето 2047 соотв. не 2g, а 2g*2047/2048 если быть точным. Для других диапазонов будет тоже самое, только 2047 будет соотв. не 2g, а установленному диапазону. Хм. да, такое ощущение что для 350mg они чтото напутали. Значения больше чем для 1g. Чтото я тоже не въеду :) PS. Нет, точно напутали -в одном месте - где 1g - там будет не 04:00, а 40:00. Младшая тетрада отбрасывается (выравнивание по левому краю) и это дает 0х400 -т.е 1024. а 350mg это 0х15E -тут все верно. Задам вопрос здесь же, что бы не создавать лишних тем. Подскажите пожалуйста как интерпритировать число 0х800 пришедшее от датчика. Как 0h или как 800h (-2048)? Старший бит отвечает же за знак числа?! Вопрос вроде элементарный, а ответить однозначно немогу... Есть небольшая таблица на 12 странице. AN2847 Сам датчик:LIS331HH Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adc 0 25 февраля, 2014 Опубликовано 25 февраля, 2014 · Жалоба Никто не знает, или я непонятно задал вопрос? Данные с датчика в формате в доп. кода Допустим 1100 0000b это -(40h). 0100 0000b это (40h). А что в таком случае 1000 0000b? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 25 февраля, 2014 Опубликовано 25 февраля, 2014 · Жалоба Никто не знает, или я непонятно задал вопрос? Данные с датчика в формате в доп. кода Допустим 1100 0000b это -(40h). 0100 0000b это (40h). А что в таком случае 1000 0000b? Если размерность 16 бит, то в дополнительном коде 0х800 это -2047 в десятичном. Соответственно, 1100 0000b это 0х3F или 63. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adc 0 25 февраля, 2014 Опубликовано 25 февраля, 2014 · Жалоба Если размерность 16 бит, то в дополнительном коде 0х800 это -2047 в десятичном. Соответственно, 1100 0000b это 0х3F или 63. Наверное -2048? размерность 12 бит. Старший разряд знаковый. т.е. данные в формате хххх 1000 0000 0000b Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 25 февраля, 2014 Опубликовано 25 февраля, 2014 · Жалоба Нет, именно -2047. -2048 в такой разрядности уже не бывает. 12 бит, конечно. Хотя на первой странице ДШ они лукаво пишут: "16 bit data output". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться