Расчет частоты приема для RDA5807M

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

Re: Расчет частоты приема для RDA5807M

Сообщение salyamkamrad »

[uquote="Novice user",url="/forum/viewtopic.php?p=3283132#p3283132"]SOFTMUTE_EN и SOFTBLEND_EN в ноле[/uquote]
Я кажется пробовал, и вроде не помогало. Завтра попробую еще раз.
Реклама
sonyyy
Родился
Сообщения: 2
Зарегистрирован: Вт дек 08, 2009 23:20:34

Re: Расчет частоты приема для RDA5807M

Сообщение sonyyy »

Такой код получился. можно както упростить? по функциям надо только чтоб работал при подаче питания сразу на 110.5мгц с возможностью перестраиваться по частоте на 1мгц вверх и вниз с шагом в 50кгц.
Пока работает на 110.55 при нажатие кнопок частота скидывается и возвращается обратно на 110.55. но косяк при включение не всегда включатся, приходится нажать любую кнопку.
Спойлер#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <avr/eeprom.h>

#include "i2c.h"

#define FQ_UP (PINC & (1<<0))
#define FQ_DN (PINC & (1<<1))
#define ST_UP (PINC & (1<<2))
#define ST_DN (PINC & (1<<3))

unsigned int f; // частота

unsigned char station=1;
uint8_t station_ee EEMEM ;

static uint8_t writeBuf[9];

// запись I2C
void I2C_write (void) {

i2c_start_cond();
i2c_send_byte(0x20);
i2c_send_byte(writeBuf[0]);
i2c_send_byte(writeBuf[1]);
i2c_send_byte(writeBuf[2]);
i2c_send_byte(writeBuf[3]);
i2c_send_byte(writeBuf[4]);
i2c_send_byte(writeBuf[5]);
i2c_send_byte(writeBuf[6]);
i2c_send_byte(writeBuf[7]);
i2c_send_byte(writeBuf[8]);
i2c_send_byte(writeBuf[9]);
i2c_send_byte(writeBuf[10]);
i2c_send_byte(writeBuf[11]);
i2c_send_byte(writeBuf[12]);
i2c_send_byte(writeBuf[13]);
i2c_stop_cond();
}
// инициализация, конфигурация
void FM__init (void) {
writeBuf[0] = 0b11110010;
writeBuf[1] = 0b10000101;
writeBuf[2] = 0;
writeBuf[3] = 0;
writeBuf[4] = 0b00000010;
writeBuf[5] = 0b00000000;
writeBuf[6] = 0b00001000;
writeBuf[7] = 0b10001111;
writeBuf[8] = 0;
writeBuf[9] = 0;
writeBuf[10] = 0;
writeBuf[11] = 0b00000011;
writeBuf[12] = 0b01011011;
writeBuf[13] = 0b11111110;

I2C_write();
return;
}

// задать частоту радиостанции
// частота в формате 101.2 FM пишем как 1012 (например)
// шаг 0.1 МГц
void SetFreq (uint16_t freq) {
freq -= 1104;
writeBuf[2] = freq>>2; // смаршие 8 бит
writeBuf[3] = freq<<6 | (1<<4); //Tune enable (1)
I2C_write();
return;
}
//************************************
void set_station (uint8_t st) {
if (st==1) {f=1104; SetFreq(f); }
if (st==1) {f=1105; SetFreq(f); }
eeprom_write_byte(&station_ee, st);
}
// =============
int main (void)
{
DDRC &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3));//Настройка кнопок
PORTC|=(1<<0)|(1<<1)|(1<<2)|(1<<3);

i2c_init();
FM__init();

sei();// глобально разрешить прерывания


station=eeprom_read_byte(&station_ee);
set_station(station);

while(1)
{
if (!FQ_UP) {f++; if (f>1106) {f=1104;} SetFreq(f); _delay_ms(200);}
if (!FQ_DN) {f--; if (f<1104) {f=1106;} SetFreq(f); _delay_ms(200);}
if (!ST_UP) {station++; if (station>15) {station=1;} set_station(station); _delay_ms(200);}
if (!ST_DN) {station--; if (station<1) {station=15;} set_station(station); _delay_ms(200);}
} // end while(1)
} // end main
Реклама
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

Re: Расчет частоты приема для RDA5807M

Сообщение salyamkamrad »

Кто-нибудь измерял сколько потребляет эта микросхема при напряжении питания 1,8-2 вольта? Вопрос возник в ходе обсуждения с коллегой одного проекта, но как назло как раз сейчас нет под рукой модуля с микросхемой чтобы проверить потребление при низком напряжении питания. Возможно, кто-то проводил измерения и располагает результатами?

P.S. Добрался сегодня до модуля и тестера. При 2 вольтах питания микросхема потребляет 21 миллиампер с отключенными наушниками.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Расчет частоты приема для RDA5807M

Сообщение Novice user »

Возникла необходимость принимать частоту 64,7 МГц,в принципе понятно-
BAND[1:0] =11 (0x03H_bit<3:2>)
65M_50M MODE =0
но как считать частоту?
для 87-108- Frequency =Channel Spacing (kHz) x CHAN+ 87.0 MHz
для 76–91 и 76-108- Frequency =Channel Spacing (kHz) x CHAN + 76.0 MHz
для 65 –76- Frequency =Channel Spacing (kHz) x CHAN + 65.0 MHz
а как для 50-65MHz?

Добавлено after 13 minutes 16 seconds:
Разобрался,для 50-76 Frequency =Channel Spacing (kHz) x CHAN + 50.0 MHz,,,,
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

Re: Расчет частоты приема для RDA5807M

Сообщение salyamkamrad »

Возвращаясь к вопросу питания - RDA5807M вполне сносно работает при напряжении 1,6 вольта. Принимает слово управления, настраивается, принимает. Даже при 1,5 вольтах продолжает чего-то принимать, но уже с заметными шумами. Правда, при 1,5 вольтах нечем загнать в нее управляющие слова, а при 1,6 вольта некоторые экземпляры PIC16F1829 еще в состоянии дергать ногами.
Реклама
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

Re: Расчет частоты приема для RDA5807M

Сообщение salyamkamrad »

В поисках способа избавится от приглушения звука докатился до "прямой" загрузки частоты синтезатор микросхемы RDA5807M. Не помогло, звук все равно глохнет после каждого шага 1 кГц, хотя бит TUNE при этом не затрагивается. Видимо, нет способа заставить нормально работать эту микросхему. Сделать настройку энкодером нет возможности, при вращении его с нормальной для ручной настройки скоростью звук вообще не появляется, настроится можно только на известные заранее частоты контролируя частоту настройки по дисплею. Похоже, придется эту RDA топку. Настройка кнопками, это несерьезно...
Реклама
sanya0605
Родился
Сообщения: 6
Зарегистрирован: Пт ноя 04, 2011 15:44:39

Re: Расчет частоты приема для RDA5807M

Сообщение sanya0605 »

Приветствую. Написал прошивку на arduino nano, радиоприемник ожил: автопоиск вверх и вниз работает отлично, регулировка громкости тоже работает, фиксированный канал тоже настраивается в общем вроде бы все работает, но есть одно но: не могу получить выод текущей частоты. По регистру 0x0A считываю старший и младший бит. Индикатор стерео работает ( плохой сигнал 0, когда хороший 1), индикатор настройки тоже работает (при настройке 0, как только нашел 1), а вот частота при включении питания 0x1FF, как только настраиваю либо вниз, либо вверх постоянно число 0xFF и ни при каких обстоятельствах не меняется. Кстати адреса по I2C сканеру у меня нашел 0x20, 0x21, 0x22, 0xC0, 0xC1, 0xC2. Конкретно на запись адрес у меня сейчас 0x22, на чтение 0x21. (пробывал все остальные. Итог либо вообще не работает, либо тоже самое). Модулей 2 у меня, работают идентично.
Вопрос может я что то упускаю, что он мне шлет постоянно 0xFF.
sanya0605
Родился
Сообщения: 6
Зарегистрирован: Пт ноя 04, 2011 15:44:39

Re: Расчет частоты приема для RDA5807M

Сообщение sanya0605 »

"Спасибо" всем откликнувшимся, разобрался сам. Если вдруг кто-то столкнется с такой же проблемой, то вот мое решение: вместо адреса частоты в адресе 0x0A я считал значение в адресе 0x03. Частоту теперь показывает, но с небольшой погрешностью +-0.2МГц.
aleksey_1184
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Сб сен 15, 2018 19:04:00

Re: Расчет частоты приема для RDA5807M

Сообщение aleksey_1184 »

Здравствуйте, собираю тоже приемник на RDA5807, в общем то все работает, единственное RDS адекватно только при хорошем уровне сигнала. Как я понял нужна коррекция ошибок, в общем научился раскладывать полученные 4 блока данных на 26 бит, инет помог, а что дальше делать х...его знает. Очень буду признателен за помощь.
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Расчет частоты приема для RDA5807M

Сообщение Albert_V »

Возможно, вам поможет документация, которую я выкладывал в этом посте (под спойлером).
Не столь важно, для какой микросхемы документация, после того как вы считали блоки RDS.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

RDA5807 уже сама аппаратно раскладывает данные на 4 блока по 26 бит, делает коррекцию ошибок и отдаёт в 4 регистра готовый результат в виде четырёх 16-битных регистров.

Не знаю, где Вы умудрились эти 26 бит выкопать в RDA5807.
aleksey_1184
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Сб сен 15, 2018 19:04:00

Re: Расчет частоты приема для RDA5807M

Сообщение aleksey_1184 »

Два одинаковых вопроса задал на разных форумах,ладно. Вроде как слово смещения каждого блока для коррекции ошибки рассчитывается из полученных 16 бит блока.

Добавлено after 55 minutes 14 seconds:
В общем спасибо за разъяснение данного вопроса.
veso74
Поставщик валерьянки для Кота
Сообщения: 1913
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение veso74 »

Сколько реальное изменение RSSI у RDA5807М?

По пдф: 7 bit (или max 128):
reg 0BH, 15:9, RSSI[6:0]

Мне необходимо для машабирования (примерно за подобие S-meter на max 7..9 шагов).

На моего радио-модуль на столе:
с ок. 1м проводник для антенны - на самой сильной станции: 74
без антенна: ок. 10

Для Si4702/03:
RSSI is measured units of dBμV in 1 dB increments with a maximum of approximately 75 dBμV. Si4702/03-C19 does not report RSSI levels greater than 75 dBuV.

Это верхний предел и для RDA5807М?
---
Чтобы декодировать RDS без ошибок, я бы попытался проверка FM TRUE true, RDSR true, RDSS true и RSSI выше 60..62.
Получение A и B дважды не очень помогает. Я убрал - дает задержку только.
Из-за меняющихся station_name мне пришлось добавить два буфера - для "зарядки букв" и для "печат".
Работает лучше чем без. Но иногда есть еще ошибки и я не понимаю почему есть, а BLERA и BLERB в 0.
Есть еще что проверить?

Мне нравится работа модуля RDA5807М. Раздражает только глушение -> следует без ручного режима, но это терпимо :)
А вот автоматический поиск станций, на удивление, хорошо работает :)
agaurov
Родился
Сообщения: 4
Зарегистрирован: Вс авг 18, 2019 19:09:58

Re: Расчет частоты приема для RDA5807M

Сообщение agaurov »

Здравствуйте.Объясните мне пожалуйста:
вот код принудительной записи в rda5807
так находит но на станцию ниже
rcall IIC_Start
ldi temp,0b00100000 ;адрес FM модуля с битом записи
rcall IIC_Send
ldi temp,0b11010011 ;02H байт
rcall IIC_Send
ldi temp,0b00000101 ;02L байт
rcall IIC_Send
ldi temp,0b10100010 ;103,2 настраивается на 101.5
rcall IIC_Send
ldi temp,0b01000000 ;03L байт
rcall IIC_Send
rcall IIC_Stop
частота получается 151,9 мГц
Приемник принимает Юмор-FM
транслирующийся на частоте 88,9 мГц
На 151,9 унас в городе вещания нет.
Как такое происходит или расчет чатоты
неверный?Заранее спасибо.
veso74
Поставщик валерьянки для Кота
Сообщения: 1913
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение veso74 »

reg_3 = (freq - 870) << 6, где freq - частота в MHz (* 10)

напр. для 88,9 MHz:
reg_3 = (889 - 870) << 6 = 19 << 6 = 0b10011 << 6 = 0b0000010011000000

или:
03H: 0b00000100
03L: 0b11000000

DIRECT MODE = 0, TUNE = 1, BAND = 00, SPACE = 00, сл.
03H: 0b00000100
03L: 0b11010000
-----------------------------
При:
03H = 0b10100010, 03L = 0b01000000 => reg_3 = 0b1010001001000000 >> 6 = 0b1010001001 = 649, сл.
(649 + 870) / 10 = 151,9 MHz,

то частота вне раб. диапазона:
The RDA5807M series support frequency range is from 50MHz to 115MHz.

Что принимает RDA5807M на 151,9 MHz, то это непредсказуемо.
agaurov
Родился
Сообщения: 4
Зарегистрирован: Вс авг 18, 2019 19:09:58

Re: Расчет частоты приема для RDA5807M

Сообщение agaurov »

Добрый день.
Спасибо за ответ.
Есть ли разница между чипами 5807.....?
У меня чип 5809м, надпись на плате RRD-102 Ver:2.0
При вводе данных
ldi temp,0b0b10100010 ;03H
rcall IIC_Send
ldi temp,0b01000000 ;03L
поет Юмор - 88,9 мГц? а
при вводе
ldi temp,0b00000100 ;03H
rcall IIC_Send
ldi temp,0b11010000 ;03L
тишина, даже шумов нет.
Объясните мне пожалуйста, что я делаю не так,
а то я совсем запутался.
rcall IIC_Start
ldi temp,0b00100000 ;адрес FM модуля с битом записи
rcall IIC_Send
ldi temp,0b11010011 ;02H
rcall IIC_Send
ldi temp,0b00000101 ;02L
rcall IIC_Send
ldi temp,0b00000100 ;03H
rcall IIC_Send
ldi temp,0b11010000 ;03L
rcall IIC_Send
rcall IIC_Stop
Заранее благодарен.
veso74
Поставщик валерьянки для Кота
Сообщения: 1913
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение veso74 »

Попробуйте через адрес 0x11 (random access).
Напр. тест работает у меня, 90.3 MHz, код для Arduino:

Wire.beginTransmission(0x11);
Wire.write(0x02); // reg 0x02
Wire.write(0xC0);
Wire.write(0x0D);
Wire.endTransmission();

delay(50);

Wire.beginTransmission(0x11);
Wire.write(0x03); // reg 0x03
Wire.write(0x08); // [15:8] - frequencyH 90,3 MHz
Wire.write(0x50); // [7..0] - frequencyL 90,3 MHz + TUNE bit
Wire.endTransmission();

RDA5807M и управление: 3,3V (подключил I2C через резистори 10k).
Можно и без delay(ms).
Последний раз редактировалось veso74 Пн авг 26, 2019 19:02:35, всего редактировалось 3 раза.
agaurov
Родился
Сообщения: 4
Зарегистрирован: Вс авг 18, 2019 19:09:58

Re: Расчет частоты приема для RDA5807M

Сообщение agaurov »

Огромное спасибо.
Макетка лежит на работе,
через день попробую.
Еще раз спасибо.
agaurov
Родился
Сообщения: 4
Зарегистрирован: Вс авг 18, 2019 19:09:58

Re: Расчет частоты приема для RDA5807M

Сообщение agaurov »

Добрый день!
Прошил адрес 11,
с ним вообще не работает.
Заметил еще одну особенность, если
по старшим адресам 03H заносить
другие значения, то все равно
принимается одна и та же станция.
Пробывал другой чип - так же.
Ничего уже не понимаю. Извините.
veso74
Поставщик валерьянки для Кота
Сообщения: 1913
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение veso74 »

Ваш микроконтроллер какой?
Ваше управление для I2C bus коректно работает?
Какая скорост I2C?

Проверяли соединения SDA/SCL, проверяли через I2C Scanner RDA отвечает или нет и на какой адрес?
Мой модуль отвечает на 3 адреса:
0x10 (sequential)
0x11 (random)
0x60 (emulate TEA5767)

Ниже: код для Arduino, модуль RDA5807M, работает на 90,3 MHz, super-bass on и de-emphasis 50 ms.
Попробуйте, если Arduino модуль есть. Так будем проверять Ваш модуль-радио работает или нет.

Потом напишете код для Вашего микроконтролера и на Вашем любимом языке программирования.

Не сдавайся так легко, все поправимо :).
Вложения
rda_05a.zip
(6.73 КБ) 282 скачивания
Последний раз редактировалось veso74 Пт авг 30, 2019 13:22:17, всего редактировалось 1 раз.
Ответить

Вернуться в «Периферия»