Страница 1 из 7

FM приёмник с RDS на RDA5807

Добавлено: Вс окт 29, 2017 15:17:11
WiseLord
Эта тема предназначена для того, чтобы узнать, был ли бы интересен сообществу описанный ниже карманный радиоприёмник.

Захотелось мне разобраться с FM модулями на базе RDA5807 с целью выжать из них по максимуму возможностей.

У меня уже есть пара проектов, в которых они используются. Но из-за специфики проектов, особенно ampcontrol, приходится искусственно ограничивать их функционал. Потому что, когда поддерживаются 5-6 разных FM-тюнеров, сложно продумать всё так, чтобы из каждого выжимать по максимуму. Приходится ограничиваться некими базовыми вещами вроде настройки на определённую станцию. Хорошо ещё, если удаётся из тюнера достать некоторые данные вроде уровня сигнала, стереоиндикации и т.п. О вещах вроде автосканирования уже и речи не идёт.

Поэтому один из поддерживаемых тюнеров, RDA5807, не раскрывает всего своего потенциала.

Вот я и решил попробовать сделать отдельный проект чисто под него. Хотя, если честно, с точки зрения архитектуры есть задел и на другие тюнеры.

Коль скоро тюнер умеет RDS, в качестве дисплея взят мелкий недорогой OLED дисплей на SSD1306.

За пару выходных был написан код на базе уже имеющихся наработок и получилось что-то уже более-менее работающее, пусть пока и в виде россыпи модулей и проводов.



Основная идея - получить карманный радиоприёмник, но умеющий показывать RDS.

Что уже реализовано:
- Собственно приём станций;
- Приём информации RDS;
- Поиск станции вверх и вниз;
- Регулировка громкости;
- Запоминание последних параметров при выключении;
- Уход дисплея и МК в режим сна при отсутствии нажатий в течение 10 секунд (тюнер продолжает играть);
- Уход всей системы в сон по длительному нажатию кнопки питания.

Что планируется:
- Ручной поиск;
- Автопоиск по всему диапазону;
- Расширение поддержки RDS.

На данный момент в плане RDS поддерживается:
- поле PS (8 символов, обычно - название станции, но иногда в нём станции прокручивают и другую информацию)
- (?) поле TEXT. (64 символа). Тут я не уверен, потому что у меня условия приёма плохие, и те станции, что там что-то передают у меня не очень хорошо принимаются. Поэтому нужно тестирование на стороне
Ещё в RDS может передаваться и текущее время, и кое-какая другая информация, но тут я уже не уверен, что в Минске кто-то вообще это передаёт.

Тут на сайте уже было несколько статей и устройств на базе RDA5807, но всё там как-то не очень. Во-первых, авторы с какого-то перепугу не делятся исходниками, во вторых, с RDS тоже особо никто не заморачивается. Поэтому этот проект задуман именно как полностью открытый - как в плане исходников, так и новых идей к реализации.

В общем, если кого заинтересовало, вот базовая схема:

Изображение

Ну а исходники у меня, как водится, на гитхабе: https://github.com/WiseLord/oledfm

Скомпилировать их самостоятельно не должно быть проблемой (как и прочие мои проекты), но, если что, обращайтесь.

В любом случае, буду пока выкладывать файлы прошивок на Dropbox.

Re: FM приёмник с RDS на RDA5807

Добавлено: Вс окт 29, 2017 17:14:17
MASIK
На схем нет есть тоже похожий проект, посмотрите может пригодится. http://forum.cxem.net/index.php?/topic/ ... %BE%D0%B2/

Re: FM приёмник с RDS на RDA5807

Добавлено: Вт окт 31, 2017 07:40:26
Cheal
WiseLord здравствуйте.

Желательно сделать сообщение об этой теме в других Ваших разработках.
Сам случайно наткнулся.

Понравилось. Буду заказывать дисплей, а пока с удовольствием почитаю.

Приёмник на этом дисплее есть по адресу: http://catcatcat.d-lan.dp.ua/ukv-radiopriem-chast-2/.

Успехов.

Re: FM приёмник с RDS на RDA5807

Добавлено: Пт ноя 03, 2017 18:50:18
Kuzma511
WiseLord здравствуйте. Приёмник понравился. Одно сомнение — не маловат ли дисплей учитывая отображение информации RDS?

Re: FM приёмник с RDS на RDA5807

Добавлено: Сб ноя 04, 2017 15:03:33
maxsimus
Схему для Atmega328 в dip корпусе если не затруднит - можно выложить.
С энкодером планируется поддержка приемника.

Re: FM приёмник с RDS на RDA5807

Добавлено: Сб ноя 04, 2017 16:27:56
prinv
WiseLord, добрый день!

Пытаюсь прикрутить вашу библиотеку к STM32F103.

Код: Выделить всё

	rda580xInit(hi2c2);
	rda580xSetPower(hi2c2, 1);
	rda580xSetVolume(hi2c2, 8);
	rda580xSetFreq(hi2c2, 10320);  // 103.2 МГц
Считываю значение из регистра 0A

Код: Выделить всё

	rda580xReadReg(hi2c2, 0x0A, &i);
	LCD_PrintDec(i & RDA580X_0A_STC);
всегда одно и то же значение CHAN, не зависящее от rda580xSetFreq. Флаг STC не устанавливается :(

Re: FM приёмник с RDS на RDA5807

Добавлено: Чт янв 04, 2018 16:43:02
ALEX 288
WiseLord здравствуйте. Идея хорошая, но на даче Ваш приемник из проекта Простой FM-приёмник с часами и термометром "теряет"
половину станций. Чувствительности RDA5807 не хватает. Проверить на даче модуль TUX 032 от автомагнитолы не успел. Конечно для карманного
приемника он не годится, но думаю в приемниках чувствительность стоит не на последнем месте.
Не смотря ни на что, буду делать этот проект - хочется сделать приемник своими руками с красивым дисплеем. В Москве с приемом У RDA5807 проблем не было.
Спасибо Вам за все Ваши проекты, особенно за часы на MAX7219.

Re: FM приёмник с RDS на RDA5807

Добавлено: Вт янв 09, 2018 09:32:33
Morroc
Не пробовали в уже настроенном и работающем приемнике аккуратно поотключать все, кроме самого модуля с микросхемой ? Может помехи наводятся от мк или экрана (если oled - там преобразователь может быть). У самой микросхемы чувствительность вполне неплохая.

Re: FM приёмник с RDS на RDA5807

Добавлено: Ср янв 10, 2018 18:14:15
ALEX 288
[uquote="Morroc",url="/forum/viewtopic.php?p=3278291#p3278291"]Не пробовали в уже настроенном и работающем приемнике аккуратно поотключать все, кроме самого модуля с микросхемой ? Может помехи наводятся от мк или экрана (если oled - там преобразователь может быть). У самой микросхемы чувствительность вполне неплохая.[/uquote]
Приемник из проекта "Простой FM-приёмник с часами и термометром" на даче работает, но не все станции принимает. Я не использую импульсные блоки питания, преоразователи и усилители класса D. Проверить работу с модулем от автомагнитолы TUX-032 смогу только весной.
Извините, что отвлекся от основной темы.
От данного проекта хочется удобства управления: ручная настройка станций и запись их в память, независимо от рабочих частот.
Обычно все создают список любимых станций. Если часто используются две одновременно нажатые кнопки - ставлю дополнительную.

Re: FM приёмник с RDS на RDA5807

Добавлено: Ср янв 10, 2018 22:44:16
Morroc
[uquote="ALEX 288",url="/forum/viewtopic.php?p=3279607#p3279607"]Я не использую импульсные блоки питания, преоразователи и усилители класса D.[/uquote]
МК со светодиодной динамической индикацией тоже нехилый источник помех (она там не отключается автоматом со временем ?) если конструкция выполнена как в той статье (т.е. платы рядом в пластиковом корпусе без экранировки). Если так - должно помочь подключение антенны коаксиальным кабелем и полноразмерная наружная антенна FM диапазона.

Re: FM приёмник с RDS на RDA5807

Добавлено: Пн янв 15, 2018 22:02:52
Novice user
2 вопроса-где какая кнопка и какие фузы?
собрал,фузы пока заводские,снял CKDIV8

Re: FM приёмник с RDS на RDA5807

Добавлено: Вт янв 16, 2018 20:12:30
Novice user
[uquote="Novice user",url="/forum/viewtopic.php?p=3284162#p3284162"]2 вопроса-где какая кнопка и какие фузы?
собрал,фузы пока заводские,снял CKDIV8[/uquote]
сам себе и отвечаю-lfuse:w:0xff:m -U hfuse:w:0xd1
PORTD6="+",PORTD5="-",PORTD4="вкл/выкл"
плата (MC34119 по даташиту)
DS1307 стоит на будущее
прошивка исправленная (при разводке + и - перепутал местами,на PORTB5 выведен сигнал управления мс34119 (станбай)

Re: FM приёмник с RDS на RDA5807

Добавлено: Вс янв 21, 2018 05:42:15
sonyyy
Запустил рда по такому коду, работает, но мне кажется, что сетку частот он сразу всю прописывает, хотя кнопками все переключается. Как грамотно задать функцию, чтоб сетка частот правильно записывалась в 2и3 байт 1 раз и после перезагрузке включалось последняя частота?
Спойлер#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 ST_UP (PINC & (1<<0)) //кнопки
#define ST_DN (PINC & (1<<1))

unsigned char station=1;
uint8_t station_ee EEMEM ;

static uint8_t writeBuf[9];

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_stop_cond();
}

void FM__init (void) {
writeBuf[0] = 0b11110000;
writeBuf[1] = 0b10000101;
writeBuf[2] = 0;
writeBuf[3] = 0;
writeBuf[4] = 0b01000011;
writeBuf[5] = 0b00000000;
writeBuf[6] = 0b00001000;
writeBuf[7] = 0b10001111;
I2C_write();
return;
}
//******************************************************************** сетка частоты
void set_station (uint8_t st) {
if (st==1) {writeBuf[2] = 0b11101010; writeBuf[3] = 0b10110011;}
if (st==2) {writeBuf[2] = 0b11101010; writeBuf[3] = 0b11110011;}
if (st==3) {writeBuf[2] = 0b11101011; writeBuf[3] = 0b00110011;}
if (st==4) {writeBuf[2] = 0b11101011; writeBuf[3] = 0b01110011;}
if (st==5) {writeBuf[2] = 0b11101011; writeBuf[3] = 0b10110011;}
if (st==6) {writeBuf[2] = 0b11101011; writeBuf[3] = 0b11110011;}
if (st==7) {writeBuf[2] = 0b11101100; writeBuf[3] = 0b00110011;}
if (st==8) {writeBuf[2] = 0b11101100; writeBuf[3] = 0b01110011;}
if (st==9) {writeBuf[2] = 0b11101100; writeBuf[3] = 0b10110011;}
if (st==10) {writeBuf[2] = 0b11101100; writeBuf[3] = 0b11110011;}
if (st==11) {writeBuf[2] = 0b11101101; writeBuf[3] = 0b00110011;}

eeprom_write_byte(&station_ee, st);
I2C_write();
return;
}

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 (!ST_UP) {station++; if (station>11) {station=1;} set_station(station); _delay_ms(200);}
if (!ST_DN) {station--; if (station<1) {station=11;} set_station(station); _delay_ms(200);}
}
} // end main

Re: FM приёмник с RDS на RDA5807

Добавлено: Ср янв 31, 2018 20:52:13
Novice user
Есть ли вариант прошивки без отключения дисплея во время приема?

Re: FM приёмник с RDS на RDA5807

Добавлено: Ср янв 31, 2018 21:29:37
WiseLord
Даже лучше - есть исходники

Re: FM приёмник с RDS на RDA5807

Добавлено: Ср мар 07, 2018 16:49:16
Novice user
толку от исходника-не понятно в какой среде написано и как компилировать..
нормальный адекватный человек как минимум указывает в какой среде написано

Re: FM приёмник с RDS на RDA5807

Добавлено: Ср мар 07, 2018 17:47:24
WiseLord
Вместе с исходниками лежит Makefile, в коем явно видно, что это для компилятора avr-gcc с управлением через make. А среда - кому как удобно. Кто любит Eclipse, кто (как я) QtCreator, кто вообще в простом блокнотике код смотрит. Можно вообще без IDE, из терминала, собирать.
Это не какой-то там заточенный под AVRStudio проект (или, упаси ЛММ, под CodeVision) проект. Хотя и AVRStudio подойдёт, там тоже avr-gcc.
WiseLord писал(а):Скомпилировать их самостоятельно не должно быть проблемой (как и прочие мои проекты), но, если что, обращайтесь
Для пользователей Windows я выкладывал на Youtube что к чему. Проект другой, но принцип ровно тот же.

Re: FM приёмник с RDS на RDA5807

Добавлено: Ср мар 07, 2018 20:26:33
Novice user
вот спасибо,особенно за видео!

Re: FM приёмник с RDS на RDA5807

Добавлено: Вс мар 18, 2018 09:05:54
WiseLord
Вчера вечер провозился с модулями на Si4703 с Aliexpress.
Предварительный вывод: программировать их сложнее (куча неочевидных заморочек), но по качеству приёма вроде чуть лучше RDA5807M. По крайней мере, RDS лучше принимается.

Re: FM приёмник с RDS на RDA5807

Добавлено: Пн мар 19, 2018 21:59:13
Halex
[uquote="WiseLord",url="/forum/viewtopic.php?p=3333393#p3333393"]Вчера вечер провозился с модулями на Si4703 с Aliexpress.[/uquote]
А я ровно неделей раньше. Да, немного геморней, чем RDA, да ещё и антенну подколхозивать неудобняк на ихний готовый модуль. В одном направлении идём, однако...
У меня "в своле" для эксКрементов ещё один китайский "зверёк" получен - QN8035. Правда, готовых дешёвых модулей на них я не нашёл. Знаю, что Мастер КИТ лепит их в "свои" (условно назовём) модули MP3510. Их полно на Али и Ebay вдвое дешевле, но всё-равно меня "земноводное" уговорило взять просто микросхемы с Ali. Но не учёл, что они десятиногие, сейчас жду макетки SOP10, а то самопальные травить негде - у меня на лоджии ремонт, и продлится ещё дней 10, а макетки уже больше недели в пути.
Сравнивал даташиты, QN8035 вроде как самая чуЙствительная по сравнению с RDA и Si, посмотрим в деле...