Подключение HMC5883L

Тема в разделе "Arduino & Shields", создана пользователем Artclonic, 3 мар 2018.

  1. Artclonic

    Artclonic Гик

    Модуль один в один, маркировка один в один, подключение один в один...
    Как не правильно? 4 провода... Два - питания, два sda и scl
     
    Последнее редактирование: 4 мар 2018
  2. mcureenab

    mcureenab Гуру

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

    [​IMG]
     
  3. Artclonic

    Artclonic Гик

    эта картинка вообще не соответствует, питание не в том порядке, sdа b scl - правильно
     
  4. Artclonic

    Artclonic Гик

    Мож библиотека #include <Wire.h> глюченая, дате ссылочку на рабочую
     
  5. Artclonic

    Artclonic Гик

    Я сеичас смотрю, и не нахожу даннои библиотеки в папке библиотек...Но почему не ругался при компиляции?
     
  6. mcureenab

    mcureenab Гуру

    Со стороны Arduino UNO - маркировка правильная:
    Uno, Ethernet A4 (SDA), A5 (SCL)

    а со стороны модуля порядок пинов перепутан
     
  7. mcureenab

    mcureenab Гуру

    Она в IDE входит. Можно IDE обновить, но это крайне маловероятно.
     
  8. Artclonic

    Artclonic Гик

    Uno, Ethernet A4 (SDA), A5 (SCL)- У меня наоборот...
     
  9. Artclonic

    Artclonic Гик

    все правильно - у меня так и сесть A4 (SDA), A5 (SCL)
    не работает.... Все более нет сил... Завтра открою тему по MPU, может мои модудь GY - неисправен...
     
  10. Sencis

    Sencis Гик

    Исправен вы уверены что это HMC 5883l как ни странно но адрес то не от него. Точнее есть подобные проблемы нов сборках нескольких микросхем на одной плате там проблема решается так :

    Если у вас заработает этот код то это не HMC 5883l а QMC5833L.
    Нашёл даже статью на этот счёт думаю догадка верная

    Код (C++):
    #include <Wire.h> //I2C Arduino Library

    #define addr 0x0D //I2C Address for The HMC5883

    void setup() {

      Serial.begin(9600);
      Wire.begin();
     //Проверить изменение показаний можно магнитом

      Wire.beginTransmission(addr); //start talking
      Wire.write(0x0B); // Tell the HMC5883 to Continuously Measure
      Wire.write(0x01); // Set the Register
      Wire.endTransmission();
      Wire.beginTransmission(addr); //start talking
      Wire.write(0x09); // Tell the HMC5883 to Continuously Measure
      Wire.write(0x1D); // Set the Register
      Wire.endTransmission();
    }

    void loop() {

      int x, y, z; //triple axis data

      //Tell the HMC what regist to begin writing data into


      Wire.beginTransmission(addr);
      Wire.write(0x00); //start with register 3.
      Wire.endTransmission();

      //Read the data.. 2 bytes for each axis.. 6 total bytes
      Wire.requestFrom(addr, 6);
      if (6 <= Wire.available()) {
        x = Wire.read(); //MSB  x
        x |= Wire.read() << 8; //LSB  x
        z = Wire.read(); //MSB  z
        z |= Wire.read() << 8; //LSB z
        y = Wire.read(); //MSB y
        y |= Wire.read() << 8; //LSB y
      }

      // Show Values
      Serial.print("X Value: ");
      Serial.println(x);
      Serial.print("Y Value: ");
      Serial.println(y);
      Serial.print("Z Value: ");
      Serial.println(z);
      Serial.println();

      delay(500);
    }
     
  11. Artclonic

    Artclonic Гик

    Так этот адрес нужно куда ни будь будет прописывать? (0x0D)?
     
  12. mcureenab

    mcureenab Гуру

    [​IMG]

    В этом скетче уже всё прописано.
    Посмотри на маркировку микросхемы.
    Что на ней написано?

    [​IMG]


    [​IMG]
     
  13. Artclonic

    Artclonic Гик

    У меня даже микроскоп китайский электронный пришел вчера, смогу вечером попробывать посмотреть!
     
    Последнее редактирование: 5 мар 2018
  14. Artclonic

    Artclonic Гик

    Вроде ЗАРАБОТАЛО!!!!!! УХХХХ... (маркировку не видно правда...на чипе...)

    Чем они отличаются? QMC5833L?
     
  15. mcureenab

    mcureenab Гуру

    Как минимум адресами отличаются.
     
  16. Artclonic

    Artclonic Гик

    Рад до ушеи! Подскажите, а бывают мониторы порта -граfические? А то сеичас для понимания и анализа работы сначала изменил код (чтоб только показания были), потом копирую в блокнот, потом вставляю табуляцю, только потом в Ексель, что б значения в разных столбцах были, соответственно потом граfик...
     
  17. mcureenab

    mcureenab Гуру

    В Arduino IDE есть инструмент Serial Plotter умеет графики рисовать, как осциллограф.

     
  18. Sencis

    Sencis Гик

    Таки чип QMC5833L получается или вы изменяли скетч?
     
  19. Artclonic

    Artclonic Гик

    Я только залил Ваш последнии код... и заработало УРА
     
  20. Artclonic

    Artclonic Гик

    Код (C++):
    #include <Wire.h> //I2C Arduino Library

    #define addr 0x0D //I2C Address for The HMC5883

    void setup() {

      Serial.begin(9600);
      Wire.begin();
    //Проверить изменение показаний можно магнитом

      Wire.beginTransmission(addr); //start talking
      Wire.write(0x0B); // Tell the HMC5883 to Continuously Measure
      Wire.write(0x01); // Set the Register
      Wire.endTransmission();
      Wire.beginTransmission(addr); //start talking
      Wire.write(0x09); // Tell the HMC5883 to Continuously Measure
      Wire.write(0x1D); // Set the Register
      Wire.endTransmission();
    }

    void loop() {

      int x, y, z; //triple axis data

      //Tell the HMC what regist to begin writing data into


      Wire.beginTransmission(addr);
      Wire.write(0x00); //start with register 3.
      Wire.endTransmission();

      //Read the data.. 2 bytes for each axis.. 6 total bytes
      Wire.requestFrom(addr, 6);
      if (6 <= Wire.available()) {
        x = Wire.read(); //MSB  x
        x |= Wire.read() << 8; //LSB  x
        z = Wire.read(); //MSB  z
        z |= Wire.read() << 8; //LSB z
        y = Wire.read(); //MSB y
        y |= Wire.read() << 8; //LSB y
      }

      // Show Values
      //Serial.print("X Value: ");
      //Serial.println(x);
      //Serial.print("Y Value: ");
      //Serial.println(y);
      //Serial.print("Z Value: ");
      //Serial.println(z);
      //Serial.println();

      //Serial.print("X Value: ");
      Serial.print(x);
      //Serial.print("s");
      Serial.print(y);
      //Serial.print("s");
      Serial.print(z);
      //Serial.println();

      delay(150);
    }
    Непоиму плоттер по последовательному соединению, он с како-то библиотекои работает? Или он будет выводить любое число посланное в порт? Непонятно...