Easyelectronics.ru

Электроника для всех
Текущее время: 15 дек 2017, 18:54

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Акселерометр H3LIS200DLTR
СообщениеДобавлено: 30 окт 2017, 02:09 
Здравствуйте!

Зарегистрирован: 30 окт 2017, 01:51
Сообщения: 2
Приветствую, уважаемые форумчане.

Пытаюсь подключить аксель H3LIS200DLTR к микроконтроллеру STM32F446 по SPI.
Удалось считать ID устройства из регистра Who am I сейчас пытаюсь получить данные с оси Х предварительно произвожу инициализацию устройства.
Из регистра отвечающего за ось Х по переменно приходят либо 0х00 либо 0хFF, может быть кто-то сталкивался с данным датчиком или просто имеет опыт работы с подобного рода устройствами

Как я понял значение приходящее с данного датчика имеют размерность 1 байт, но возможно я заблуждаюсь.
GPIO_PIN_15 это чип селект.
Адрес функции чтения А9 соответствует регистру 0х29 с единичкой в старшем бите.

Ниже представлены функции для считывания id (работает), инициализации и чтения данных из регистра 0х29, отвечающего за ось Х
Ещё интересный момент состоит в том, что не получается одновременно записать что-то в регистр а следующим шагом считать значение из него (Пробовал на регистре отвечающим за инициализацию устройства 0х20)

Спасибо всем за помощь!!!)

Код:
void accel_who(void)
{
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_Delay(100);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0x8F;      
      HAL_SPI_TransmitReceive(&hspi1, &adress, &data, sizeof(data), 0x1000);
     HAL_Delay(100);   
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
}


Код:
void accel_init(void)
{
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0x20;      
     command = 0x37;   
     HAL_SPI_Transmit(&hspi1, &adress, 1, 0x1000);
     HAL_SPI_Transmit(&hspi1, &command, 1, 0x1000);
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
     HAL_Delay(1000);
}



Код:
void accel_read(void)
{

     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0xA9;      
      HAL_SPI_Transmit(&hspi1, &adress, 1, 0x1000);   
     HAL_SPI_Receive(&hspi1, &data_xyz[0], 1, 0x1000);
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Акселерометр H3LIS200DLTR
СообщениеДобавлено: 30 окт 2017, 12:10 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 458
Diman1422 писал(а):
Приветствую, уважаемые форумчане.

Пытаюсь подключить аксель H3LIS200DLTR к микроконтроллеру STM32F446 по SPI.
Удалось считать ID устройства из регистра Who am I сейчас пытаюсь получить данные с оси Х предварительно произвожу инициализацию устройства.
Из регистра отвечающего за ось Х по переменно приходят либо 0х00 либо 0хFF, может быть кто-то сталкивался с данным датчиком или просто имеет опыт работы с подобного рода устройствами

Как я понял значение приходящее с данного датчика имеют размерность 1 байт, но возможно я заблуждаюсь.
GPIO_PIN_15 это чип селект.
Адрес функции чтения А9 соответствует регистру 0х29 с единичкой в старшем бите.

Ниже представлены функции для считывания id (работает), инициализации и чтения данных из регистра 0х29, отвечающего за ось Х
Ещё интересный момент состоит в том, что не получается одновременно записать что-то в регистр а следующим шагом считать значение из него (Пробовал на регистре отвечающим за инициализацию устройства 0х20)

Спасибо всем за помощь!!!)

Код:
void accel_who(void)
{
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_Delay(100);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0x8F;      
      HAL_SPI_TransmitReceive(&hspi1, &adress, &data, sizeof(data), 0x1000);
     HAL_Delay(100);   
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
}


Код:
void accel_init(void)
{
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0x20;      
     command = 0x37;   
     HAL_SPI_Transmit(&hspi1, &adress, 1, 0x1000);
     HAL_SPI_Transmit(&hspi1, &command, 1, 0x1000);
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
     HAL_Delay(1000);
}



Код:
void accel_read(void)
{

     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0xA9;      
      HAL_SPI_Transmit(&hspi1, &adress, 1, 0x1000);   
     HAL_SPI_Receive(&hspi1, &data_xyz[0], 1, 0x1000);
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      
}


Попробуй использовать ф-цию TransmitReceive В HAL была какая-то странная ошибка в коде для SPI. К сожалению точно не помню в какой ф-ции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Акселерометр H3LIS200DLTR
СообщениеДобавлено: 30 окт 2017, 12:11 
Заглядывает иногда

Зарегистрирован: 03 мар 2013, 11:01
Сообщения: 191
Diman1422 писал(а):
...Пытаюсь подключить аксель H3LIS200DLTR к микроконтроллеру STM32F446 по SPI.
Удалось считать ID устройства из регистра Who am I сейчас пытаюсь получить данные с оси Х предварительно произвожу инициализацию устройства...

Неверна методика НИР с таким девайсом.
1. Необходимо проверить и перепроверить характеристики акселерометра без "накладок" со стороны программы микроконтроллера и, возможно, самого микроконтроллера из-за его сложности;
2. Программа должна быть на Ассемблере с минимально возможными задержками между циклами считывания данных с осей X и Y - в идеале это считывание должно происходить одновременно...
В противном случае, результат Вашего труда будет интересен только Вам...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Акселерометр H3LIS200DLTR
СообщениеДобавлено: 01 ноя 2017, 00:23 
Здравствуйте!

Зарегистрирован: 30 окт 2017, 01:51
Сообщения: 2
kos писал(а):
Diman1422 писал(а):
Приветствую, уважаемые форумчане.

Пытаюсь подключить аксель H3LIS200DLTR к микроконтроллеру STM32F446 по SPI.
Удалось считать ID устройства из регистра Who am I сейчас пытаюсь получить данные с оси Х предварительно произвожу инициализацию устройства.
Из регистра отвечающего за ось Х по переменно приходят либо 0х00 либо 0хFF, может быть кто-то сталкивался с данным датчиком или просто имеет опыт работы с подобного рода устройствами

Как я понял значение приходящее с данного датчика имеют размерность 1 байт, но возможно я заблуждаюсь.
GPIO_PIN_15 это чип селект.
Адрес функции чтения А9 соответствует регистру 0х29 с единичкой в старшем бите.

Ниже представлены функции для считывания id (работает), инициализации и чтения данных из регистра 0х29, отвечающего за ось Х
Ещё интересный момент состоит в том, что не получается одновременно записать что-то в регистр а следующим шагом считать значение из него (Пробовал на регистре отвечающим за инициализацию устройства 0х20)

Спасибо всем за помощь!!!)

Код:
void accel_who(void)
{
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_Delay(100);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0x8F;      
      HAL_SPI_TransmitReceive(&hspi1, &adress, &data, sizeof(data), 0x1000);
     HAL_Delay(100);   
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
}


Код:
void accel_init(void)
{
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0x20;      
     command = 0x37;   
     HAL_SPI_Transmit(&hspi1, &adress, 1, 0x1000);
     HAL_SPI_Transmit(&hspi1, &command, 1, 0x1000);
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
     HAL_Delay(1000);
}



Код:
void accel_read(void)
{

     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
     adress = 0xA9;      
      HAL_SPI_Transmit(&hspi1, &adress, 1, 0x1000);   
     HAL_SPI_Receive(&hspi1, &data_xyz[0], 1, 0x1000);
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
      
}


Попробуй использовать ф-цию TransmitReceive В HAL была какая-то странная ошибка в коде для SPI. К сожалению точно не помню в какой ф-ции.




Спасибо за совет действительно с помощью данной функции получилось снять данные с одной оси, но когда пытаюсь читать 3 регистра (X,Y,Z) в переменные записываются одинаковые значения, хотя читаю я с разных адресов, не пойму то ли баг дебагера кеиловского то ли я что-то не правильно делаю.
Чип селектом вроде рулю после каждого цикла чтения, а что ещё для SPI надо?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB