Радиомодуль rda5807m

Lictor
Offline
Зарегистрирован: 01.10.2015

Добрый день

Нашел код в интернете, код рабочий, но мне не до конца понятен, помогите, пожалуйста, разобраться.

#include <Wire.h>              // I2C-Library

double f_ini=106.2;            // Стартовая частота настройки приемника. (Изменяем на нужную).

void setup()                    // Инициализация.
{
  Wire.begin();                // Инициализация двухпроводной шины I2C.
  setFrequency(f_ini);          // Вызываем фукнкцию загрузки частоты настройки в модуль EM5807M.
}

void loop()                    // Основной цикл программы
{
  // Здесь можем написать нашу самую лучшую программу, которая будет работать так как нам нужно.
}

void setFrequency(double fmhz)  // Функция загрузки частоты настройки в модуль EM5807M.
{
  int  frequencyB = 4 * (fmhz * 1000000 + 225000) / 32768;
  char frequencyH = frequencyB >> 8;    // Старший байт.
  char frequencyL = frequencyB & 0XFF;  // Накладываем маску 0xFF на младший байт.
  Wire.beginTransmission(0x60);          // Адрес чипа RDA5807M
  Wire.write(frequencyH);                // Старший байт.
  Wire.write(frequencyL);                // Младший байт.
  Wire.write(0xB8);                      // 1011 1000    =Стерео
  Wire.write(0x10);                      // 0001 0000
  Wire.write((byte)0x00);                //
  Wire.endTransmission();                // формируем I2C-Stop.
}

Вобщем-то вопросы:

Функция setFrequency использует значение f_ini  возвращает fmhz, но откуда берется значение fmhz? оно нигде не задается в явном виде? И как учитывается значение f_ini, оно тоже явно нигде не используется в формулах.

В строках 24,25 задается задается режим работы стерео или моно, а что задаетсяв 26 строке?

В 18 строке идет пересчет частоты в целое число, для дальнешей побитовой загрузки, как именно это происходит? Я вижу, что там используется частота кварца,а  что означают остальные множители?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Lictor пишет:

Функция setFrequency использует значение f_ini  возвращает fmhz, 

Функция setFrequency ничего не возвращает - она void.

Lictor пишет:

откуда берется значение fmhz? оно нигде не задается в явном виде? 

Это формальный параметр функции, он задан в явном виде в списке параметров в стр. 16, смотрите внимательнее.

Lictor пишет:

И как учитывается значение f_ini, оно тоже явно нигде не используется в формулах.

Опять же смотрите внимательнее, оно явно используется в строке 8 - передаётся функции в качестве фактического параметра.

Lictor пишет:

В строках 24,25 задается задается режим работы стерео или моно, а что задаетсяв 26 строке?

На самом деле в строках 24-25 задаётся много всего, там до чёрта параметров. В 26 строке задается следующий регистр. Подробно про каждый бит всех регистров см. стр. 8-12 даташита.

Lictor пишет:

В 18 строке идет пересчет частоты в целое число, для дальнешей побитовой загрузки, как именно это происходит? Я вижу, что там используется частота кварца,а  что означают остальные множители?

Процедура расчёта частоты описана в даташите на стр. 9 

Channel Select.
BAND = 0
Frequency =
Channel Spacing (kHz) x CHAN+ 87.0 MHz
BAND = 1or 2
Frequency =
Channel Spacing (kHz) x CHAN + 76.0 MHz
BAND = 3
Frequency =
Channel Spacing (kHz) x CHAN + 65.0 MHz
CHAN is updated after a seek operation

 

Lictor
Offline
Зарегистрирован: 01.10.2015

Огромное спасибо, буду разбираться дальше.