Чтение данных с датчика MIS-3600-006DI

Можете показать в даташите, откуда вы взяли, что перед чтением значения нужно послать сенсору 0х60 ?

Может это и есть причина, почему

1 лайк
void readPressureData() {
  // Читаем давление 
  Wire.beginTransmission(PRESSURE_SENSOR_ADDRESS);
  Wire.write(0x0F);
  Wire.write(0x49);
  Wire.endTransmission(false); 
  delay(50); 
  
  Wire.requestFrom((uint8_t)PRESSURE_SENSOR_ADDRESS, (uint8_t)2);
  uint16_t pressure = 0;
  if (Wire.available() >= 2) {
    uint8_t msb = Wire.read();
    uint8_t lsb = Wire.read();
    pressure = (msb << 8) | lsb;
  }

  // Читаем температуру 
  Wire.beginTransmission(PRESSURE_SENSOR_ADDRESS);
  Wire.write(0x0F);
  Wire.write(0x21);
  Wire.endTransmission(false); 
  delay(50); 
  
  Wire.requestFrom((uint8_t)PRESSURE_SENSOR_ADDRESS, (uint8_t)2);
  uint16_t temperature = 0;
  if (Wire.available() >= 2) {
    uint8_t msb = Wire.read();
    uint8_t lsb = Wire.read();
    temperature = (msb << 8) | lsb;
  }

  Serial.print("Pressure: 0x");
  if ((pressure >> 8) < 16) Serial.print("0");
  Serial.print((uint8_t)(pressure >> 8), HEX);
  if ((pressure & 0xFF) < 16) Serial.print("0");
  Serial.print((uint8_t)(pressure & 0xFF), HEX);
  Serial.print(" (");
  Serial.print(pressure);
  Serial.print(")  ");

  Serial.print("Temperature: 0x");
  if ((temperature >> 8) < 16) Serial.print("0");
  Serial.print((uint8_t)(temperature >> 8), HEX);
  if ((temperature & 0xFF) < 16) Serial.print("0");
  Serial.print((uint8_t)(temperature & 0xFF), HEX);
  Serial.print(" (");
  Serial.print(temperature);
  Serial.println(")");
}
17:35:09.725 -> Pressure: 0x8000 (32768)  Temperature: 0x8000 (32768)

Теперь так
17:35:09.725 → Pressure: 0x8000 (32768) Temperature: 0x8000 (32768) Значения не меняются.

А калибровочные коэффициенты реальные читает или тоже все одинаковые?

И да, что-то вот эта картинка в ДШ наводит на мысль, что коэфф С1-С13 вы читаете тоже неправильно.

Если я понял верно, читать надо три байта.

void readCalibrationCoefficients() {
  Serial.println("Reading calibration coefficients...");
  
  // Сброс датчика перед чтением коэффициентов
  Wire.beginTransmission(PRESSURE_SENSOR_ADDRESS);
  Wire.write(0x1E);
  Wire.endTransmission();
  delay(100);
  
  // Массив команд для чтения коэффициентов C1-C13
  uint8_t commands[13][2] = {
    {0x0E, 0x20}, // C1
    {0x0E, 0x28}, // C2
    {0x0E, 0x30}, // C3
    {0x0E, 0x38}, // C4
    {0x0E, 0x40}, // C5
    {0x0E, 0x48}, // C6
    {0x0E, 0x50}, // C7
    {0x0E, 0x58}, // C8
    {0x0E, 0x60}, // C9
    {0x0E, 0x68}, // C10
    {0x0E, 0x70}, // C11
    {0x0E, 0x78}, // C12
    {0x0E, 0x80}  // C13
  };
  
  for (int i = 0; i < 13; i++) {
    // Отправляем команду чтения коэффициента
    Wire.beginTransmission(PRESSURE_SENSOR_ADDRESS);
    Wire.write(commands[i][0]);
    Wire.write(commands[i][1]);
    Wire.endTransmission(false); 
    
    Wire.requestFrom((uint8_t)PRESSURE_SENSOR_ADDRESS, (uint8_t)2);
    
    if (Wire.available() >= 2) {
      uint8_t msb = Wire.read();
      uint8_t lsb = Wire.read();
      uint16_t coefficient = (msb << 8) | lsb;
      
      Serial.print("C");
      Serial.print(i + 1);
      Serial.print(": 0x");
      if (msb < 16) Serial.print("0");
      Serial.print(msb, HEX);
      if (lsb < 16) Serial.print("0");
      Serial.print(lsb, HEX);
      Serial.print(" (");
      Serial.print(coefficient);
      Serial.println(")");
    } else {
      Serial.print("C");
      Serial.print(i + 1);
      Serial.println(": No data");
    }

17:49:44.163 → C1: No data
17:49:44.209 → C2: No data
17:49:44.257 → C3: 0x805C (32860)
17:49:45.273 → C4: No data
17:49:45.357 → C5: No data
17:49:46.417 → C6: No data
17:49:46.464 → C7: No data
17:49:47.503 → C8: No data
17:49:47.549 → C9: No data
17:49:47.595 → C10: 0x802B (32811)
17:49:47.630 → C11: 0x802A (32810)
17:49:47.719 → C12: 0x80D6 (32982)
17:49:48.732 → C13: No data

Это что? RESET? Почему 0x1E ?

Откуда вы это все берете? В первую очередь - в ресете два байта! И ни один из них не 0x1E

Слушайте, такое впечатление, что мы с вами читаем разные даташиты… Может вы мне неверную ссылку дали?

RESET:

@127486
У меня сейчас главный вопрос, который меня интересует - откуда вы берете все то, чего нет в даташите?

То что перед чтением надо послать 0x60 ? То что Reset это 0x1E ? То как читать коэфф С1 - С13 …

Не бойтесь, ответьте честно, я над вами не стебусь. Может я не вижу того, где это все написано?

Да это куча исходников отладочных накопилось за два дня, оттуда и ошибки остались не верные. Даташит один единственный, другого нету.
Я сегодня посижу, все замечания учту, поправлю скетч чтобы был один единственный.
А то своей невнимательностью в заблуждение ввожу.
Просто голова уже кругом.
А всякие 0x60, 0x1E, это если память не изменяет, сканером команды слал, на какие ответы были те и забрал видимо.

Ок.
В первую очередь внимательно перечитайте ДШ и делайте строго как там.

1 лайк

Глянул. Заинтересовали эти строчки:

"The MIS-3600 can provide two types of serial interfaces as SPI or I2C. The type of serial interface is defined as
the device manufactured. The user can`t choose the type of serial interface by hardware wiring. So the user have to
decide the type of serial interface as ordering the device. "

MIS-3600 может поддерживать два типа последовательных интерфейсов, таких как SPI или I2C. Тип последовательного интерфейса определяется в
зависимости от производителя устройства. Пользователь не может выбрать тип последовательного интерфейса с помощью аппаратного подключения. Таким образом, пользователь должен
выбрать тип последовательного интерфейса при заказе устройства.

А ведь может, и не поддерживать?

Оно в названии зашифровано.

Оно бы, наверно, тогда не находилось сканером?

Не нашёл в даташите

Да, но на 100% не уверен

Ну тогда вопрос снят. На какой странице эти данные?

Это в отдельном.
http://web.rfoe.net:8000/SENSORS/ZLXIAZAI/METRODYNE/MIS-3600series.pdf

1 лайк

Да, всё уже мне разъяснили. Протупил, не уделил достаточно времени поиску, поверхностно отнёсся

я только подошёл, увидел твой пост ну и скинул картинку, потом посмотрел, а там уже накидали, звиняйте

1 лайк