Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

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

Пн мар 09, 2015 19:55:24

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

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

и мой исходник как видите помог,без каких-либо коментариев,что нужно было человеку он понял,а кому не понятно-спросит,это же форум

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

Пн мар 09, 2015 20:20:01

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

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

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

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

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

Подозреваю, что изначальный код автора во многом из-за этого не работал. По шине I2C постоянно шли данные и бит TUNE, что заставляло тюнер постоянно подстраиваться. А у RDA5807 есть такая особенность, что при каждой новой настройке (бит TUNE - 4 бит 03L - в состоянии лог. 1) громкость приглушается на полсекунды. А данные шли чаще чем раз в полсекунды, вот и получалось вечное MUTE. Пока код не был переписан под отправку только при нажатии кнопки.

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

Пн мар 09, 2015 21:00:54

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

что сказать-эту программу писал для себя,мне все абсолютно понятно,зря я ее привел...
Последний раз редактировалось pavel1979 Вт мар 10, 2015 04:31:16, всего редактировалось 1 раз.

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

Пн мар 09, 2015 21:25:42

короче получилось вот так. Исходник на Си под мега 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 KiB) Скачиваний: 629
Последний раз редактировалось eduardo Пн мар 09, 2015 21:34:12, всего редактировалось 1 раз.

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

Пн мар 09, 2015 21:29:08

Не за что!хоть чтото сегодня хорошее

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

Пн мар 09, 2015 22:25:36

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, в бейсике что-то подобное должно быть то же. Потому что хороший читабельный код не пишется в одном файле, а разбивается на удобные блоки, которые включаются в нужном месте.

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

Вт мар 10, 2015 04:59:25

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

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

Ср мар 11, 2015 01:33:14

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

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

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

Ср мар 11, 2015 06:40:34

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

книгу поищу,вроде валяется какаято в гараже

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

Пт мар 13, 2015 00:47:36

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 KiB) Скачиваний: 607

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

Пт мар 13, 2015 06:04:01

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

Тут хорошо расписано, как работает такой (и прочие) преобразователь.

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

Сб мар 14, 2015 17:28:42

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

Может причина в транзисторах? В ёмкости перехода?

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

Сб мар 14, 2015 22:31:07

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

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

Вс мар 15, 2015 00:10:25

переделал на биполярные транзисторы ( КТ3102)--вроде как заработало...

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

Вс мар 15, 2015 00:11:38

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


У меня так вряд-ли получится.7-сегментники вряд-ли от 3,3 вольт работать будут...

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

Ср апр 15, 2015 10:18:03

Уважаемые! Помогите! Не могу настроить этот модуль. частоту хочу задать 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, модуль работает... Что я выставляю не так?

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

Ср апр 15, 2015 11:49:41

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

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

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

Ср апр 15, 2015 12:13:20

Супер!
Последний раз редактировалось voffka_rostov Ср апр 15, 2015 12:14:21, всего редактировалось 1 раз.

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

Ср апр 15, 2015 12:13:55

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

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


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

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

Что это за первый бит в 05L? У меня в даташите про него вообще ни чего нет...

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

Ср апр 15, 2015 13:28:17

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

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

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

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