Top.Mail.Ru
Уведомления
Очистить все

[Решено] SPI Соединение 2-х устройств по типу звезда

Страница 3 / 4
Aveal
(@aveal)
Top level Admin

@mihayk в итоге проблемы пропали окончательно получается?

ОтветитьЦитата
Размещено : 24.10.2023 20:53
(@mihayk)
Level 3

Запись от: @aveal

@mihayk в итоге проблемы пропали окончательно получается?

К сожаленью нет. День работает, а день сбоит. Мистика какая-то! Когда сбой - мне приходиться перезаливать скетч на контроллер, тогда работа восстанавливается...

 

ОтветитьЦитата
Создатель темы Размещено : 25.10.2023 07:49
(@eduard)
Level 5 Moderator

@mihayk

Запись от: @mihayk

мне приходиться перезаливать скетч на контроллер

Нужно заливать прошивку, а не одноактную пьесу. 🤣 🤣 🤣 

ОтветитьЦитата
Размещено : 25.10.2023 18:21
(@mihayk)
Level 3

Запись от: @eduard

@mihayk

Запись от: @mihayk

мне приходиться перезаливать скетч на контроллер

Нужно заливать прошивку, а не одноактную пьесу. 🤣 🤣 🤣 

Смешно, да? Мне тоже! 

 

ОтветитьЦитата
Создатель темы Размещено : 26.10.2023 05:38
Aveal
(@aveal)
Top level Admin

@mihayk а скинь проект плз посмотреть. Проблемы сейчас такие же как в начале темы описаны?

ОтветитьЦитата
Размещено : 26.10.2023 10:20
(@mihayk)
Level 3

 Проблемы немного улучшились, монитор перестал выделываться! Данные с MPU9250 сначала идут корректно, затем начинается каша мала. На удивление, бывали дни когда работа была бесперебойная.  

ОтветитьЦитата
Создатель темы Размещено : 26.10.2023 10:37
Aveal
(@aveal)
Top level Admin

Запись от: @mihayk

 Проблемы немного улучшились, монитор перестал выделываться! Данные с MPU9250 сначала идут корректно, затем начинается каша мала. На удивление, бывали дни когда работа была бесперебойная.  

То есть на дисплее выводятся данные с датчика, которые не соответствуют действительности? А WHO_AM_I при этом верный?

 

ОтветитьЦитата
Размещено : 27.10.2023 12:54
(@mihayk)
Level 3

Запись от: @aveal

То есть на дисплее выводятся данные с датчика, которые не соответствуют действительности? А WHO_AM_I при этом верный?

 

 

WHO_AM_I = 0x70 для  MPU9250.  Для магнетометра 0х00. Данные с датчика идут сначала нормальные, потом каша-мала. Время работы в "нормальном режиме" может быть разное. Может даже целый день работать нормально. Жду такой же датчик для проверки. Проверю - отпишусь! 

 

ОтветитьЦитата
Создатель темы Размещено : 04.11.2023 10:00
(@mihayk)
Level 3

Пришел 2-ой MPU9250. Выводы, которые я сделал по порядку:

1. ak8963 (магнетометр) не работает на двух устройствах - регистр WhoAmI 0х00, а судя по описанию должен быть 0х48. Либо неправльная инициалиция, либо он вообще не определяется на интерфейсе SPI.  Буду пробовать на интерфейсе I2C. WhoAmI для MPU9250 - 0x70 и 0х74 (2 устройства)

2. Была задача посадить два устройства на один канал SPI (монитор и MPU9250). Получается нестабильная работа двух устройств. Заставить не начинать работать одному устройству, пока другое устройство не завершило работу не получилось. 

3. Если использовать 2 канала SPI1 и SPI2, подсоеденив к каждому по устройству, проблем нет. 

ОтветитьЦитата
Создатель темы Размещено : 08.11.2023 14:12
(@mihayk)
Level 3

Если у кого есть проект MPU9250 с I2C интерфейсом, скиньте сюда пожалкйста! 

ОтветитьЦитата
Создатель темы Размещено : 08.11.2023 14:20
Aveal
(@aveal)
Top level Admin

@mihayk у меня там как раз I2C, в том варианте библиотеки что скидывал, сто процентов работает, сам использовал.

ОтветитьЦитата
Размещено : 08.11.2023 15:09
(@mihayk)
Level 3

Запись от: @aveal

@mihayk у меня там как раз I2C, в том варианте библиотеки что скидывал, сто процентов работает, сам использовал.

В этой библиотеке не хватает flash.h И некоторые объявления перемнных  типа MPU9250_Sensor. Можете скинуть весь проект целиком? так я разберусь быстрее... 

 

ОтветитьЦитата
Создатель темы Размещено : 10.11.2023 09:05
Aveal
(@aveal)
Top level Admin

@mihayk Да проект коммерческий был, не могу скинуть в первозданном виде... Там надо выкинуть работу с flash-памятью, калибровочные данные сохранялись. MPU9250_Sensor:

typedef enum
{
  MPU9250_MAG_SENSOR  = 0,
  MPU9250_ACC_SENSOR  = 1,
  MPU9250_GYRO_SENSOR = 2,
  MPU9250_SENSOR_NUM = 3,
} MPU9250_Sensor;   
ОтветитьЦитата
Размещено : 10.11.2023 12:54
(@mihayk)
Level 3

Руки дошли до программирования. 

В коде используется переменная uSec в функции MPU9250_Process():

extern int uSec;

Now = uSec;
deltat = (float)((Now - lastUpdate) / 1000000.0f) ;
lastUpdate = Now;
        
sum += deltat;
sumCount++;
 
delt_t = HAL_GetTick() - count;

Не совсем понятно что за зафиксированное время, наверное из главного модуля main.c? Подскажите  плиз! 

ОтветитьЦитата
Создатель темы Размещено : 13.11.2023 09:58
Aveal
(@aveal)
Top level Admin

@mihayk Да, нашел, объявлена в stm32f1xx_it.c:

int uSec = 0;

Инкрементируется в прерывании по TIM6:

void TIM6_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&htim6);
  uSec += 50;
}

Судя по логике таймер должен переполняться каждые 50 мкс )

ОтветитьЦитата
Размещено : 13.11.2023 10:58
Страница 3 / 4
Поделиться: