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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

WiseLord писал(а):Код нечитабелен, сплошные "магические числа".

ВОТ ТАК ВСЕГДА-СТАРАЕШЬСЯ ПОМОЧЬ КАКТО А ПОТОМ ПОЛУЧАЕШЬ ПОДЗАТЫЛЬНИК...ЧТО СКАЗАТЬ-СПАСИБО!

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

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

Сообщение WiseLord »

Я вообще про изначальный код вопрошающего говорил. Да, виноват, надо было цитировать конкретное сообщение. А Вы вроде только hex-ы выкладывали, без кода, так что непонятно, почему на свой счёт приняли. (P.S. Нет, нашёл Ваш пример на бейсике чуть раньше кода автора. Но там тоже "магические числа" в ходу :) ).

pavel1979 писал(а):вот можно ли както обратиться именно к какомуто регистру ?например-вкл/выкл приемника,регулировка громкости....надо рыть...

Нет. Даташит явно говорит - любая запись всегда начинается с регистра 0x02h, любое чтение - всегда с 0x0Ah. При последовательном чтении/записи нескольких байт максимально достигаемый адрес - 0x3Ah, после чего идёт переход к регистру 0x00h.

При смене частоты, регулировке громкости приходится посылать всю посылку, начиная, с 02H и заканчивая, как минимум, байтом, в котором что-то меняем. Проще всего всё это красиво в виде глобального массива. Один раз массив инициализировать нужными значениями, а потом, при регулировке частоты, например - поменять значение в нужных байтах и отправить массив целиком. Ну или громкость поменять в одном байте и снова отправить массив целиком.

В приведённом коде мною так и сделано. Причём, если не требуется перестройка частоты при новой посылке (например, при регулировке громкости), просто не устанавливать бит TUNE.

Подозреваю, что изначальный код автора во многом из-за этого не работал. По шине I2C постоянно шли данные и бит TUNE, что заставляло тюнер постоянно подстраиваться. А у RDA5807 есть такая особенность, что при каждой новой настройке (бит TUNE - 4 бит 03L - в состоянии лог. 1) громкость приглушается на полсекунды. А данные шли чаще чем раз в полсекунды, вот и получалось вечное MUTE. Пока код не был переписан под отправку только при нажатии кнопки.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

WiseLord писал(а): (P.S. Нет, нашёл Ваш пример на бейсике чуть раньше кода автора. Но там тоже "магические числа" в ходу ).

что сказать-эту программу писал для себя,мне все абсолютно понятно,зря я ее привел...
Последний раз редактировалось pavel1979 Вт мар 10, 2015 04:31:16, всего редактировалось 1 раз.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

короче получилось вот так. Исходник на Си под мега 16 CV AVR. Расчёт частоты точный(87.0--108.0,шаг 0.1 МГц) и выведен на ЛСД. Проверил по плееру YP-Z5F Samsung,кстати там ТЕА 5767 стоит,не устоял,вскрывал-смотрел. Совпадение 100%. Ещё раз отдельное спасибо Pavel 1979 :beer:
исходник писался в CV AVR версии 1.25.8 Professional. Проект протеуса версии 7.7
Всем удачи,и не ругайтесь хотябы здесь пожалуйста.
Вложения
проба RDA 5807.rar
(77.42 КБ) 688 скачиваний
Последний раз редактировалось eduardo Пн мар 09, 2015 21:34:12, всего редактировалось 1 раз.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

Не за что!хоть чтото сегодня хорошее
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

pavel1979 писал(а):СПЕЦИАЛЬНО ДЛЯ WiseLord КОТОРЫЙ НИХРЕНА НЕ ПОНЯЛ ИСХОДНИК

Лично я Ваш код прекрасно понял, хотя никогда на бейсике под AVR не писал. Имхо, это не тот язык, на котором для микроконтроллеров пишут. Я лишь указал на то, что в Вашем коде (хотя изначально речь шла не о нём, а о коде eduardo) используются "магические числа", которые отсылаются по шине, и для того, чтобы понять, что они значат, нужно лезть в даташит.

RDA5807 я знаю практически "от и до" и знаю, какой регистр за что отвечает, поэтому проблем с пониманием даже такого кода лично у меня нет. Но у других вполне могут возникнуть. У меня в проекте она используется лишь как маленькая незначительная часть всего кода. И если бы я этот проект писал в таком же стиле, он бы не стал тем, чем стал, затормозившись на полпути из-за запутанности кода.

pavel1979 писал(а):я у вас вообще не понимаю-какието define,include
Это директивы препроцессора C.

#include - не что иное как включение другого файла в исходник. #define - дать удобное имя константе (на самом деле, возможности #define выше, но пока и такое объяснение сойдёт).

Попытаюсь привести аналог на том языке, что у Вас (бейсик, как я понимаю).

pavel1979 писал(а):

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

I2cwbyte &B00100000 'ЗАПИСЬ В РДА-адрес RDA5807,читай даташит
I2cwbyte &B11010010 '02H байт-читай даташит
I2cwbyte &B00000101 '02L байт-читай даташит,его же не просто так писали
В этом-то и проблема, что код заставляет лезть в даташит, чтобы понять эти магические числа с потолка.

Почему бы не сделать как-то так (я бейсиков не умею, так что попытаюсь пояснить принцип, синтаксически могут быть ошибки):

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

Config RDA5807_I2C_ADDR = &B00100000
'02H
Config RDA5807_DHIZ = &B10000000 'В языке C это было бы 0b10000000, или, лучше, (1<<7) - единица, сдвинутая на 7
Config RDA5807_DMUTE = &B01000000 ' Аналогично - (1<<6) - шестой бит 02H
Config RDA5807_BASS = &B00010000' Аналогично - (1<<4)
Config RDA5807_SEEKUP = &B00000010
'02L
Config RDA5807_NEW_METHOD = &B00000100
Config RDA5807_ENABLE = &B00000001
'Аналогично описать и другие регистры, а потом...

I2cwbyte RDA5807_I2C_ADDR 'ЗАПИСЬ В РДА-адрес RDA5807, даташит читать не нужно - и так всё понятно
I2cwbyte (RDA5807_DHIZ And RDA5807_DMUTE And RDA5807_BASS And RDA5807_SEEKUP) '02H байт - и без даташита понятно
I2cwbyte (RDA5807_NEW_METHOD And RDA5807_ENABLE) '02L - и тут, как ни странно, всё понятно. И без даташита

Естественно, всю эту конфигурацию в начале естественным будет хранить в отдельном файле, не загромождая исходник. Для этого в C есть #include, в бейсике что-то подобное должно быть то же. Потому что хороший читабельный код не пишется в одном файле, а разбивается на удобные блоки, которые включаются в нужном месте.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

СпойлерИмхо, это не тот язык, на котором для микроконтроллеров пишут
какая разница на чем писать?можно хоть и в досе писать если уметь-главное составить все правильно,как положено и тогда будет толк,микроконтроллеру абсолютно по барабану на чем вы написали
хэ,когдато пытался учить си,начал отсюда http://www.123avr.com/3,ничего не понял и забросил,так что чтоб понять си надо иметь как минимум техн образование
сейчас скачал винавр,написал программку для тини 13
#include <avr/io.h>
int main (void) {
PORTB=0b11111110;
DDRB= 0b00000001;
while (1) {}
}
все сделал как надо,откомпилил-получилось 4,8%
странно то что то же самое в баскоме заняло 10%-больше чем в 2 раза,так что WiseLord-вы правы,надо учить си,начинаю рыться через гугл
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Странно,знакомый один наоборот васком хвалит.Правда он васком с CV AVR сравнивает. Говорит,что одинаковые коды компилируются по-разному,код скомпилированный в баскоме весит меньше.чем скомпилированный в CV AVR.
А что касается образования,то я вообще ПТУшник и по информатике с математикой у меня было 3 с двумя минусами.

От себя могу лишь порекомендовать книгу Лебедева М.Б."Code Vision AVR.Пособие для начинающих".Там описана работа с компилятором и основы языка Си. Но это уже другая тема...
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

ну не знаю...но факт остается фактом-есть проекты на тини13 и дисплее нокиа1110,написанные то ли асм,то ли си,в баскоме же даже библиотека не лезет,вот в этом проекте http://vrtp.ru/index.php?showtopic=7338&view=findpost&p=614103 с горем пополам уместил библиотеку нокиа3310/5110,память 99 %

книгу поищу,вроде валяется какаято в гараже
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

SergSV писал(а):в RDA5807M в режиме ТЕА5767 работать не может. В режиме совместимости работает RDA5807FP.
Схема и печатка в файле нарисованы в DipTrace . Делал себе на 5 каналов. Все резисторы 10 кОм , полевики BSS138 но можно другие использовать.
чуть выше я выкладывал исходник для RDA5807M.



Собрал "согласователь" уровней по вашей схеме. Использовал транзисторы КП 501 А. На шине DS 1307 и RDA 5807 M. Элементы согласователя разместил на плате-переходнике для RDA. Если подключать по одному устройству,всё работает нормально. Если подключить RDA и DS 1307,контроллер вообще не видит ниодного устройства. В чём может быть причина,подскажите пожалста? :dont_know:

Или может стоит переделать на вот такой делитель?
Вложения
Шина I2C для DS1307 и RDA.JPG
(183.81 КБ) 653 скачивания
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

На такой - точно не стоит. Да, передать по I2C от МК к RDA5807 данные, используя его, получится. Но прочитать из тюнера статус - уже нет. Нужен именно двунаправленный, на полевиках. Причём, обязательно, между стоком и истоком полевика должен быть диод. В тех же 2N7002, BSS138 он там технологически присутствует, а по поводу КП501А не уверен, (хотя, судя по документации, всё там ОК). Если преобразователь не работает, Вы, возможно, перепутали местами сток и исток.

Тут хорошо расписано, как работает такой (и прочие) преобразователь.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Проверил схему--всё соответствует.Транзисторы оставил 501А. Пробовал внешние диоды припаивать,не работает... Ткнул осциллографом,уровни соблюдены.Но... Не видит ниодного устройства....

Может причина в транзисторах? В ёмкости перехода?
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

Я тоже долго парился с этим согласователем,потом плюнул-перевел все на питание 3,3 в,все работает.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

переделал на биполярные транзисторы ( КТ3102)--вроде как заработало...
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

pavel1979 писал(а):Я тоже долго парился с этим согласователем,потом плюнул-перевел все на питание 3,3 в,все работает.


У меня так вряд-ли получится.7-сегментники вряд-ли от 3,3 вольт работать будут...
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

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

Сообщение voffka_rostov »

Уважаемые! Помогите! Не могу настроить этот модуль. частоту хочу задать 101.6 для начала. вычисляю по Вашим формулам 1016-870=146, перевожу в двоичную 0010010010, самым наглым образом заливаю в регистр 03H и 03L, но в ответ только шипит:

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

Wire.beginTransmission(0x10);  // Адрес чипа RDA5807M
   Wire.write(0b11000000);                // 02h
   Wire.write(0b00000101);                // 02L
        Wire.write(0b00100100);                //03H     
   Wire.write(0b10010000);               // 03L
   Wire.write(0b00000010);                // 04h
   Wire.write(0x00);                      // 04l
   Wire.write(0b10001000);                // 05h
   Wire.write(0b00000100);                // 05l
        Wire.write(0x00);                      // 06h
        Wire.write(0x00);                      // 06l
        Wire.write(0b01000010);                // 07h
        Wire.write(0b00000010);                // 07l
   Wire.endTransmission();


Периодически проверяю прошивкой под TEA5767, модуль работает... Что я выставляю не так?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Могу предложить два варианта:
1. Попробуйте посылать только первые 4 байта, остальные не отправлять вообще (пусть они будут в значениях по умолчанию).
2. Попробуйте байт 05L высылать как 0b10001111 (последние 4 бита - громкость на максимуме, первый бит тоже важен).

Можете на мой код глянуть - заголовочный файл, функции.
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

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

Сообщение voffka_rostov »

Супер!
Последний раз редактировалось voffka_rostov Ср апр 15, 2015 12:14:21, всего редактировалось 1 раз.
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

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

Сообщение voffka_rostov »

WiseLord писал(а):Могу предложить два варианта:
1. Попробуйте посылать только первые 4 байта, остальные не отправлять вообще (пусть они будут в значениях по умолчанию).
2. Попробуйте байт 05L высылать как 0b10001111 (последние 4 бита - громкость на максимуме, первый бит тоже важен).

Можете на мой код глянуть - заголовочный файл, функции.


WiseLord, как Вы это делаете!? ))))) Все заработало!!! И действительно звучит неплохо!

Получается что расчет частоты всеже верный!

Что это за первый бит в 05L? У меня в даташите про него вообще ни чего нет...
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

У RDA5807FP эти биты задействуют FMIN вход

У RDA5807M такого входа нет - число ножек микросхемы много меньше - но меня терзают смутные сомнения, что в обеих микросхемах используется один и тот же кристалл.

Так что - либо инициализируем и этот бит, отсылая все байты, либо отсылаем не всё - тогда это значение будет дефолтным.

Я изначально в своём коде отсылал только 4 байта, и всё работало замечательно. А когда решил добавить в библиотеки функции управления громкостью, что вынудило отсылать большее колчество данных по шине, столкнулся с тем, что эти биты, описанные в даташите на RDA5807FP, влияют на работоспособность и RDA5807M, хотя там они не описаны.
Ответить

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