Выручайте RDA5807M

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Максим B, 20 июл 2016.

  1. Andrey12

    Andrey12 Гик

    Напрямую нельзя!Ну резистор не беда, просто будет громко.

    Отлично, адреса читает сканером? Усилитель рабочий? Если пальцами входной провод взять фонит?

    А теперь сам код. Код у меня компилится и загружается в Arduino IDE 1.8.2 Проверь, если работает значит подключение правильное.

    Код (C++):
    #include <Wire.h>

    void wireWrite16(uint16_t data)
    {
      Wire.write(data >> 8);
      Wire.write(data & 0xFF);
    }

    void regWrite(uint8_t regNum, uint16_t regData)
    {
      Wire.beginTransmission(0x11);
      Wire.write(regNum);
      wireWrite16(regData);
      Wire.endTransmission();
    }

    void setup() {
      Wire.begin();
      Serial.begin(115200);

      // инициализация
      uint8_t initStatus = 0;
      Wire.beginTransmission(0x11);
      initStatus = Wire.endTransmission();
      if (0 == initStatus) {
        uint16_t bufRDA[6] = { 0x03, 0x00, 0xA00, 0x88CF, 0x00, 0x00 };
        Wire.beginTransmission(0x10);
        for (int i = 0; i < 6; i++) {
          wireWrite16(bufRDA[i]);
        }
        Wire.endTransmission();
      }

      delay(1000);

      // настройка на станцию
      // установи свою станцию которая у тебя уверенно принимается в формате частота * 100
      // то есть если твоя станция 89.5 то ставить надо 8950
      // у меня лучше всего принимает 104,90 FM
      uint16_t newFrequency = 10490;
      newFrequency = (newFrequency - 8700) / 10;

      uint16_t b2 = 0xC001;
      regWrite(0x02, b2);
      uint16_t b3 = 0;
      b3 = newFrequency << 6;
      b3 = b3 + 16;
      regWrite(0x03, b3);

    }

    void loop() {

    }
     
    Последнее редактирование: 29 май 2017
  2. Максим B

    Максим B Гуру

    Фон есть в динамике, но звука нет. Частоту сменил на 103,7 - так же фон
     
  3. Максим B

    Максим B Гуру

    при чтение по i2c динамик потрескивает
     
  4. Максим B

    Максим B Гуру

    Резисторы для i2c обязательны???
     
  5. Andrey12

    Andrey12 Гик

    Да, резисторы обязательны. Я без них не пробовал, но везде i2c с резисторами.
     
  6. Максим B

    Максим B Гуру

    У вас какой номинал?? 4,7 кОм?
     
    Andrey12 нравится это.
  7. Andrey12

    Andrey12 Гик

    От 4.7к до 10к нормально работают.
    Сейчас проверил без них не работает.
    И они у меня идут к +5
     
    CYITEP_BAC9I нравится это.
  8. Максим B

    Максим B Гуру

    А можно чуть подробнее картинку с резисторами. Спасибо. А почему к +5 ??? - ведь для радио надо 3.3 - или я что-то не допонимаю.
     
  9. Максим B

    Максим B Гуру

    уже все сделал -- только шум
     
  10. Максим B

    Максим B Гуру

    Я же правильно соединяю данный усилитель с динамиком??? https://im0-tub-ru.yandex.net/i?id=30d1a3da924078c3b9e274c5f19a8e86&n=33&h=215&w=287 - там, где надписи L R и общий - общщий это земля, и провод от FM приемника на любой из каналов левый или правый
     
  11. Andrey12

    Andrey12 Гик

    Да по схеме вроде правильно.
    У меня I2C на +5 это потому как дисплей на 5 вольт. А подружить RDA5807m с преобразователем уровней мне не удалось. Но как и написал все работает и без преобразователя уровней. Питание RDA5807m от 3х вольт.
    А точно в месте где лежит макетка хороший прием? У меня прием на рабочем месте очень плохой, я сделал антенну подлиннее.

    Да и покажите кусок скетч, как в нем частоту выставили?

    Вот фото покрупнее.

    IMG_20170529_072651.jpg
     
  12. Максим B

    Максим B Гуру

    Код (Text):
    #include <Wire.h>

    void wireWrite16(uint16_t data)
    {
      Wire.write(data >> 8);
      Wire.write(data & 0xFF);
    }

    void regWrite(uint8_t regNum, uint16_t regData)
    {
      Wire.beginTransmission(0x11);
      Wire.write(regNum);
      wireWrite16(regData);
      Wire.endTransmission();
    }

    void setup() {
      Wire.begin();
      Serial.begin(115200);

      // инициализация
      uint8_t initStatus = 0;
      Wire.beginTransmission(0x11);
      initStatus = Wire.endTransmission();
      if (0 == initStatus) {
        uint16_t bufRDA[6] = { 0x03, 0x00, 0xA00, 0x88CF, 0x00, 0x00 };
        Wire.beginTransmission(0x10);
        for (int i = 0; i < 6; i++) {
          wireWrite16(bufRDA[i]);
        }
        Wire.endTransmission();
      }

      delay(1000);

      // настройка на станцию
      // установи свою станцию которая у тебя уверенно принимается в формате частота * 100
      // то есть если твоя станция 89.5 то ставить надо 8950
      // у меня лучше всего принимает 104,90 FM
      uint16_t newFrequency = 10370;                                                           //ВОТ ЗДЕСЬ МЕНЯЛ
      newFrequency = (newFrequency - 8700) / 10;

      uint16_t b2 = 0xC001;
      regWrite(0x02, b2);
      uint16_t b3 = 0;
      b3 = newFrequency << 6;
      b3 = b3 + 16;
      regWrite(0x03, b3);

    }

    void loop() {

    }
    В других кодах (из других библиотек)- аналогично менял частоту только. В другом месте у окна - так же не работает. Очень маленькое напряжение на выводах L и R - RDA
     
    Последнее редактирование: 29 май 2017
    Andrey12 нравится это.
  13. Andrey12

    Andrey12 Гик

    Ну вроде все правильно! Даже и не знаю куда копать.
    У меня модуль заработал. Не сразу но заработал.
    Хотя попробуйте поставить после delay(1000) следующее
    Код (C++):
    delay(1000);
    Serial.print("Init status - ");
    Serial.println(initStatus);
    Что показывает при старте в мониторе COM порта?
    Если 0 то все нормально, будем рыть дальше.
     
  14. Максим B

    Максим B Гуру


    Какие напряжения у вас между выводами L и R на самой RDA??? Такое ощущения, что у меня просто не идет сигнал на динамик с RDA. Осцилографа нету.
     
  15. Andrey12

    Andrey12 Гик

    Между землей и R (L) 1.3 вольта
    Между L и R - 0
    В посмотрели что возвращает initStatus?
     
  16. Максим B

    Максим B Гуру

    Напряжение 0,04
     
  17. Максим B

    Максим B Гуру

    init status - 0
     
  18. Andrey12

    Andrey12 Гик

    ну wire значит работает.
    ну тут даже не знаю, модуль или не ловит, или не работает.
    завтра посмотрю регистры которые на чтение. там модуль должен статус возвращать, уровень сигнала и все такое.
    ну и попробую выставить частоту любую на которой нет станции и посмотреть напряжение на выходе.
    а 0.04 это между L и R ? у меня там 0. а между L или R и землей 1.3
     
  19. Максим B

    Максим B Гуру

    Между землей и L или R
     
  20. Andrey12

    Andrey12 Гик

    Ну последнее что остается это считать статус после настройки на станцию.
    Я попробую дописать чтение, и посмотрим ловит модуль станцию или нет.
    Если ловит то может ты сжег аудиовыход. Придется искать новый модуль чтобы проверить.