Например TDA7294

Форум РадиоКот • Просмотр темы - Не отвечает датчик MPL3115A2
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт янв 01, 2026 03:53:37

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Не отвечает датчик MPL3115A2
СообщениеДобавлено: Сб апр 30, 2022 22:55:23 
Открыл глаза

Зарегистрирован: Вт июн 05, 2012 23:32:13
Сообщений: 46
Рейтинг сообщения: 0
У меня есть модуль с микросхемйо MPL3115A2 ( https://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf ) покупал данный модуль на али ( https://aliexpress.ru/item/400113915144 ... 439367hG2x )

Пытюась прочитать регистр WHO I AM через STM32 вот таким кодом
Спойлер
Код:
uint8_t I2Cx_ReadData(uint8_t DeviceAddr, uint8_t RegisterAddr) {
   uint8_t value = 0;
   HAL_I2C_Master_Transmit(&hi2c1, (DeviceAddr << 1), &RegisterAddr, 1, 10);
   HAL_I2C_Master_Receive(&hi2c1, (DeviceAddr << 1), &value, 1, 10);
   return value;
}
И в ответ тишина, при этом данный код на других датчиках работает исправно.

Проверял логическим анализатором, адреса идут корректные, как в даташите 0xC0 - для записи, 0xC1 - при чтение.

Сначала подумал, что может адрес не верный. Сделал цикл в котором перебираются все варианты адресов и только по правильному адресу 0xC0 получаю в логическом анализаторе строку вида "Setup Write to [0xC0] + ACK" по всем другим адресам я получаю NAK.

И вот когда я встаю на чтение регистров, то всегда получаю ответ 0x00+ NAK

Подскажите пожалуйста в чем может проблема?
Датчика у меня 2 и оба ведут себя одинаково


Последний раз редактировалось The Rock Вс май 01, 2022 09:45:44, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не отвечает датчик MPL3115A2
СообщениеДобавлено: Вс май 01, 2022 02:07:33 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
таймаут не слишком мал?

Добавлено after 6 minutes 6 seconds:
И что-то Вы не всё показали. В даташите попытка чтения регистра врое несколько более запуутанна, например, сначала получить статус состояния, перед этим вообще инициализировать и активировать датчик...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не отвечает датчик MPL3115A2
СообщениеДобавлено: Вс май 01, 2022 09:52:09 
Открыл глаза

Зарегистрирован: Вт июн 05, 2012 23:32:13
Сообщений: 46
Рейтинг сообщения: 0
Martian писал(а):
таймаут не слишком мал?


Поднял таймаут до 100 не помогло=(

Martian писал(а):
И что-то Вы не всё показали. В даташите попытка чтения регистра врое несколько более запуутанна, например, сначала получить статус состояния, перед этим вообще инициализировать и активировать датчик...

Да, чтение основных регистров с давление и температуры идет через проверку готовности новых данных. Но на сколько я имел опыт работы с датчиками I2C , то на WHO I AM они отвечают напрямую. Да и у меня есть библиотека от Adafruit для этого датчика там тоже чтение WHO I AM идет на прямую.
Спойлер
Код:
boolean Adafruit_MPL3115A2::begin(TwoWire *twoWire) {
  if (i2c_dev)
    delete i2c_dev;
  i2c_dev = new Adafruit_I2CDevice(MPL3115A2_ADDRESS, twoWire);
  if (!i2c_dev->begin())
    return false;

  // sanity check
  uint8_t whoami = read8(MPL3115A2_WHOAMI);
  if (whoami != 0xC4) {
    return false;
  }
  }
Делал ещё такую проверку, проходил в цикле на чтение по регистрам от 1 до 255 и во всех случаях был ответ 0x00 + NAK


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не отвечает датчик MPL3115A2
СообщениеДобавлено: Вс май 01, 2022 21:10:33 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Возможно, что на плате вместо MPL3115A2 установленa старая модель MPL115A2. У неё чтение по адресу 0х0С действительно возвращает 0. В этом случае маркировка датчика должна быть M2PR. Но даже если у Вас на датчике написано M3PR, это не гарантия если куплено на Али. В любом случае, при чтении всех регистров должны не всегда возвращаться нули. У меня есть в наличии только MPL115A2, и у неё при чтении 8 калибровочных коэффициентов, начиная с адреса 0х04 возвращаются не нули, см. картинку. Если у Вас есть логический анализатор, выложите сюда его осциллограмму. Возможно проблема в инициализации I2C модуля МК либо выводов под интерфейс. Выше Вы упомянули Arduinо - а она читает ID датчика правильно?
Вложение:
mpl115.png [48.34 KiB]
Скачиваний: 67


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Не отвечает датчик MPL3115A2
СообщениеДобавлено: Сб май 07, 2022 12:35:50 
Открыл глаза

Зарегистрирован: Вт июн 05, 2012 23:32:13
Сообщений: 46
Рейтинг сообщения: 0
Всем спасибо за участие!

Разобрался с проблемой, оказывается данному датчику не подходит обращение через 2 функции передача и прием. Так как они разделяются сигналом STOP, а данному датчику подавай REPEATED START. Благодаря этому датчику нашел ещё более удобный способ читать данные из датчиков по I2C
Спойлер
Код:
void I2Cx_ReadDataRepeatedStart(uint8_t DeviceAddr, uint8_t RegisterAddr, uint8_t i2cRxBuff[], uint8_t size){
   HAL_I2C_Mem_Read(&hi2c1, DeviceAddr, RegisterAddr, 1, i2cRxBuff, size, 100);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не отвечает датчик MPL3115A2
СообщениеДобавлено: Сб май 07, 2022 12:59:55 
Потрогал лапой паяльник
Аватар пользователя

Карма: -6
Рейтинг сообщений: -2
Зарегистрирован: Вс апр 03, 2022 07:01:29
Сообщений: 362
Рейтинг сообщения: 0
Ну, вообще-то, это обычная практика - смена направления запись/чтение через состояние Restart. То есть, чтобы прочитать какой-то конкретный регистр, вы передаете адрес этого регистра, затем Restart и читаете указанный регистр. Суть в том, что нужно сменить бит направления передачи по интерфейсу, а сделать это можно только через restart, передав адрес устройства.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не отвечает датчик MPL3115A2
СообщениеДобавлено: Сб май 07, 2022 13:11:42 
Открыл глаза

Зарегистрирован: Вт июн 05, 2012 23:32:13
Сообщений: 46
Рейтинг сообщения: 0
Да, скорее всего это распространенная практика. Однако, я только начинаю работать с датчиками и через меня прошло всего 5 разных датчика. И все они корректно работали через STOP, а вот этот оказался привередливым ) Дня 3 потратил на то чтобы разобраться в таком простом вопросе)


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

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y