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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

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

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

Сообщение pavel1979 »

eduardo буду посмотреть :lol:

чтото мне не нравится в тих сторках
data_radio2=data_radio1<<6;
l=data_radio2;
l=l+(char)0b00010000,там пока просто тупо напишите
l=0b00010000

и попробуй во второй строчке
i2c_write(0b11010100);// байт 02Н заменить на i2c_write(0b11010010);// байт 02Н,в остальном вроде схоже

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

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

Сообщение eduardo »

Спасибо за отзыв. Это не асм а Си,проект в протеусе есть в архиве,или он неоткрывается увас?Дабы не вводить в заблуждение,
ранее все эти файлы были для пробы ТЕА 5767.

перемнные radio1 и radio2 типа int (16бит); l и h типа char(8 бит)

Что касается строки l=l+(char)0b00010000;// здесь происходит как бы логическое сложение и преобразование из int в char
в строке data_radio2=data_radio1<<6;//здесь в переменной радио1 сдвиг влево на 6 бит с последующим присвоением в переменную радио2
переменные l,h присвоены портам и
в протеусе видно,что 7 и 6 биты переменной l изменяются,а бит 4 возведён в 1
Последний раз редактировалось eduardo Вс мар 08, 2015 14:15:47, всего редактировалось 1 раз.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

pavel1979 писал(а):eduardo буду посмотреть :lol:

чтото мне не нравится в тих сторках
data_radio2=data_radio1<<6;
l=data_radio2;
l=l+(char)0b00010000,там пока просто тупо напишите
l=0b00010000

и попробуй во второй строчке
i2c_write(0b11010100);// байт 02Н заменить на i2c_write(0b11010010);// байт 02Н,в остальном вроде схоже

жаль не умею компилировать-инфы мало и не знаю асм,прогнал бы в протеусе,посмотрел бы
Написал,как вы посоветовали,но всё тоже самое... Может сам модуль неисправен? Я его перепаивал,но контакты вроде целые были...
Реклама
Эиком - электронные компоненты и радиодетали
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)
Вложения
rda5807 .rar
(2.77 КБ) 424 скачивания
Реклама
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

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

Сообщение cahek80 »

посмотрел код, появились глупые вопросы (под AVR не писал):
int data_radio1,data_radio2,data_lcd=870;
data_radio1 - не инициализируется?

у меня делается так

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

// RDA5807 
uint8_t RDA_reg_data[8] = {
   0xc0,0x0c,  // 02H // c - bass off d - bass on
   0x00,0x10,  // 03H
   0x00,0x40,  // 04H
   0x90,0x83,  // 05H
};

void RDA5807_FM_set_frequency(uint8_t freq) {
	unsigned char temp;
        freq = freq + 10; // 87++ MHz not 88 Mhz
  	temp = ((uint16_t) freq >> 2) & 0xff;
  	RDA_reg_data[2] = temp;
	temp = ((freq & 0x03) << 6);
	RDA_reg_data[3] = temp | 0x10; // tune mode
	RDA_reg_data[3] &= 0xf3; // fm mode
	RDA5807_write_reg(); // отправка RDA_reg_data в RDA
}
freq = 0..200
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Реклама
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

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

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

Сообщение eduardo »

cahek80 писал(а):посмотрел код, появились глупые вопросы (под AVR не писал):
int data_radio1,data_radio2,data_lcd=870;
data_radio1 - не инициализируется?

у меня делается так

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

// RDA5807 
uint8_t RDA_reg_data[8] = {
   0xc0,0x0c,  // 02H // c - bass off d - bass on
   0x00,0x10,  // 03H
   0x00,0x40,  // 04H
   0x90,0x83,  // 05H
};

void RDA5807_FM_set_frequency(uint8_t freq) {
	unsigned char temp;
        freq = freq + 10; // 87++ MHz not 88 Mhz
  	temp = ((uint16_t) freq >> 2) & 0xff;
  	RDA_reg_data[2] = temp;
	temp = ((freq & 0x03) << 6);
	RDA_reg_data[3] = temp | 0x10; // tune mode
	RDA_reg_data[3] &= 0xf3; // fm mode
	RDA5807_write_reg(); // отправка RDA_reg_data в RDA
}
freq = 0..200
А зачем? Там изначально 0...
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

eduardo писал(а):
pavel1979 писал(а):попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)
Ваш код в моём протеусе работает,а в железе нет. Дисплей не показывет,сигналов на шине нет... :(
по жки-выв 5 на минус
прога рабочая,я только переназначил выводы
попытка 2
Вложения
rda5807 (2).rar
(2.77 КБ) 326 скачиваний
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

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

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

Сообщение pavel1979 »

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

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

Сообщение eduardo »

Прошу прощения за путаницу. В проекте,который я выкладывал,мега 32,но они одинаковы. Отличаются только объёмом памяти.Адреса портов тоже одинаковые. У меня программатор старый с LPT-разъёмом и в железо я шью со старого ноутбука. В ноутбуке у меня создан такой же проект,только под мегу 16,в железе тоже мега 16 стоит.

В протеусе 32 мега,но когда загружаю в него прошивку для 16 меги --- работает.

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

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

Сообщение pavel1979 »

да,компиляция под 32-ю,вот 16-я и 16"а",попробуйте
Вложения
16.rar
(5.48 КБ) 367 скачиваний
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

На этот раз оба проекта работают в железе. :music: Большое спасибо за помощь. По крайней мере я хоть убедился в исправности модуля.

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

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

Сообщение pavel1979 »

на всякий случай ложу исходник на баском авр-примерно понятно что идет по I2C,может чем поможет
Спойлер$regfile = "m16def.dat"
$crystal = 8000000
'$sim
$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space

Config Scl = Portc.6
Config Sda = Portc.7
Config I2cdelay = 10
Config Porta.1 = Output
Porta.1 = 0
Config Portc.0 = Input
Config Portc.1 = Input
Portc.0 = 1
Portc.1 = 1
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.2 , Rs = Porta.0
Config Lcd = 16 * 2
Initlcd
Cursor Off
Cls
Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Z As String * 5
Dim Freg As Integer
Dim Pll As Single

Freg = 1011
Declare Sub 123
Call 123
Locate 1 , 2
Lcd "RDA5807 BULAT "
Do

If Pinc.0 = 0 And Pll > 88.1 Then
Freg = Freg - 1
Call 123
End If
If Pinc.1 = 0 Then ' And Pll < 107.9
Freg = Freg + 1
Call 123
End If
Locate 2 , 1
Z = Str(freg)
If Freg > 999 Then Z = Format(z , "000.0") Else Z = Format(z , "00.0")
Lcd Z ; " MHz "
Waitms 200
Loop
End


'описание микросхемы file:///C:/Users/%D0%90%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80/Downloads/RDA5807FP_Catcatcat-electronics.pdf
Sub 123:
I2cinit
I2cstart
I2cwbyte &B00100000 'ЗАПИСЬ В РДА
I2cwbyte &B11010010 '02H байт
I2cwbyte &B00000101 '02L байт
Pll = Freg - 870
Byte0 = Pll / 4
Portb.4 = 0
Waitms 2
I2cwbyte Byte0
Byte1 = Byte0 * 4 '03H байт
Byte1 = Pll - Byte1
Byte1 = Byte1 * 64
Byte1.4 = 1
I2cwbyte Byte1 '03L байт
I2cwbyte &B00000010 '04H байт
I2cwbyte &B00000000 '04L байт
I2cwbyte &B10001000 '05H байт
I2cwbyte &B10001111 '05L байт громкость 1111=мах,0000=минимум
I2cwbyte &B00000000 ' 06H байт
I2cstop

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

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

Сообщение eduardo »

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

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

Сообщение pavel1979 »

да,так меньше шумит,постоянно отправлять одно и то же бессмысленно

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

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

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

Сообщение WiseLord »

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

Мой код 100% рабочий, возможно поможет. Исходник, описание регистров.
Возможно, адаптируете под свой код.

Навскидку, вижу разницу в 02H (у Вас прямой метод ввода частоты - бит 2 - зачем-то задействован), не вникал, с какого потолка берутся data_radio1 и data_radio2 (freq = 10120 = 101.2 МГц, у Вас, судя по всему, просто шаги по сетке, без привязки к частоте).
Также вижу разницу в 04H (не уверен, что на что-то влияет, но у Вас 2 бит - softmute enable - задействован). В остальных регистрах разницы не вижу, но сложно сказать, глядя на "магические числа", мог что-то и пропустить.

Советую взять гарантировано рабочую частоту, посчитать значение chan, жёстко положить его в 2 и 3 байты. Потому что Вы вполне можете плавать где-то в стороне от FM-диапазона. Вряд ли, но всё же.

В общем, сверьте свои данные с моими функциями rda5807Init() и rda5807SetFreq() - больше регистры, по сути, нигде и не используются, кроме управления громкостью.

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

P.S.
В связи с возникншим далее непониманием, речь в этом сообщении о Код на СИ в CV AVR прилагается. Помогите-е-е-е!!! Пожалста-а-а-а!!!!!!
Последний раз редактировалось WiseLord Пн мар 09, 2015 20:30:43, всего редактировалось 2 раза.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Переписал байты в точности как у вас и сделал отправку пока нажаты одна из кнопок---ЗАРАБОТАЛО!!! :music: Только звук слабее немного.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

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

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

добавил-еще при включении мк

Наверное нельзя.. У регистров записи адресов нету.
Ответить

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