Перейти к содержанию
    

Гость Just.J
Гляньте структурную схему LIS3DSH на 10-ой странице! :smile3046: Ничего себе.. Там НЕТ температурного датчика, т.к. он подключен к ацп которого в LIS3DSH нет (а в начале указан!!!). "Это просто позор какой то" (собачье сердце).

В LIS3DH на 8-ой странице ацп и датчик присутствует.

Занавес! :wacko:

 

Не, датчик там есть, но он почему-то структурно объединён вместе с FIFO, судя по картинке. Буду копать в этом направлении, авось получится что.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подключаю сейчас 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: А Вы как прописывали? Прошу еще показать как Вы делаете инициализацию ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я просто в шоке! Dataseet на lis3dsh ну просто наполнен опечатками по самые небалуйся. Как они отвратительно работают с документацией. :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость Just.J
Подключаю сейчас 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 иксмеги.

Изменено пользователем Just.J

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Погонял lis3dsh. Прикладываю картинку с данными по одной оси. Датчик лежит неподвижно. Частота чтения 100Гц. ODR - 100Гц. BW- 11(50 Hz).2G.

Я вот только не понял, разве в lis3dsh постоянную составляющую с помощью внутренней настройки убрать нельзя(как в lis3dh)?

post-31836-1353076772_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость Just.J
Я вот только не понял, разве в lis3dsh постоянную составляющую с помощью внутренней настройки убрать нельзя(как в lis3dh)?

 

Почему же, можно. OFF_XYZ (10h, 11h, 12h) в ответе за константное смещение по каждой из осей.

 

Картинка вполне ожидаемая, у меня примерно такая же ерунда по I2C. Хотелось бы конечно ещё SPI посмотреть ваш, хотя подозреваю конечно, что проблема озвученная мной в самом начале у всех этих акселерометров присутствует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему же, можно. OFF_XYZ (10h, 11h, 12h) в ответе за константное смещение по каждой из осей.

Ну это, как я понимаю, просто вычитание значения из результата.

Допуcтим мне необходимо чтобы по всем осям был ноль при неподвижном датчике. Какие значения мне нужно туда записать? Где про них можно почитать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите возможно использование датчика MMA7660 в качестве датчика наклона? Предполагается использование для автоматического поворота изображения на индикаторе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите возможно использование датчика MMA7660 в качестве датчика наклона? Предполагается использование для автоматического поворота изображения на индикаторе.

Я бы такой поворот вообще не делал. Очень раздражающая и неадекватно работающая на практике опция ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас ручное режим переключения Правша--левша. Предполагается сделать в качестве отключаемой опции. На сотовых вроде стабильно работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык вроде все понятно -для диапазона 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)? Старший бит отвечает же за знак числа?! :wacko: Вопрос вроде элементарный, а ответить однозначно немогу...

Есть небольшая таблица на 12 странице. AN2847

Сам датчик:LIS331HH

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никто не знает, или я непонятно задал вопрос?

Данные с датчика в формате в доп. кода Допустим 1100 0000b это -(40h). 0100 0000b это (40h). А что в таком случае 1000 0000b?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никто не знает, или я непонятно задал вопрос?

Данные с датчика в формате в доп. кода Допустим 1100 0000b это -(40h). 0100 0000b это (40h). А что в таком случае 1000 0000b?

Если размерность 16 бит, то в дополнительном коде 0х800 это -2047 в десятичном. Соответственно, 1100 0000b это 0х3F или 63.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если размерность 16 бит, то в дополнительном коде 0х800 это -2047 в десятичном. Соответственно, 1100 0000b это 0х3F или 63.

Наверное -2048? размерность 12 бит. Старший разряд знаковый. т.е. данные в формате хххх 1000 0000 0000b

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, именно -2047. -2048 в такой разрядности уже не бывает.

12 бит, конечно. Хотя на первой странице ДШ они лукаво пишут: "16 bit data output".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...