Расчет частоты приема для RDA5807M
Re: Расчет частоты приема для RDA5807M
Или может сначала надо прочитать регистры? 
- Реклама
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: Расчет частоты приема для RDA5807M
eduardo буду посмотреть
чтото мне не нравится в тих сторках
data_radio2=data_radio1<<6;
l=data_radio2;
l=l+(char)0b00010000,там пока просто тупо напишите
l=0b00010000
и попробуй во второй строчке
i2c_write(0b11010100);// байт 02Н заменить на i2c_write(0b11010010);// байт 02Н,в остальном вроде схоже
жаль не умею компилировать-инфы мало и не знаю асм,прогнал бы в протеусе,посмотрел бы
чтото мне не нравится в тих сторках
data_radio2=data_radio1<<6;
l=data_radio2;
l=l+(char)0b00010000,там пока просто тупо напишите
l=0b00010000
и попробуй во второй строчке
i2c_write(0b11010100);// байт 02Н заменить на i2c_write(0b11010010);// байт 02Н,в остальном вроде схоже
жаль не умею компилировать-инфы мало и не знаю асм,прогнал бы в протеусе,посмотрел бы
Re: Расчет частоты приема для RDA5807M
Спасибо за отзыв. Это не асм а Си,проект в протеусе есть в архиве,или он неоткрывается увас?Дабы не вводить в заблуждение,
ранее все эти файлы были для пробы ТЕА 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
ранее все эти файлы были для пробы ТЕА 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 раз.
Re: Расчет частоты приема для RDA5807M
Написал,как вы посоветовали,но всё тоже самое... Может сам модуль неисправен? Я его перепаивал,но контакты вроде целые были...pavel1979 писал(а):eduardo буду посмотреть![]()
чтото мне не нравится в тих сторках
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
попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)
- Вложения
-
- rda5807 .rar
- (2.77 КБ) 424 скачивания
- Реклама
Re: Расчет частоты приема для RDA5807M
посмотрел код, появились глупые вопросы (под AVR не писал):
int data_radio1,data_radio2,data_lcd=870;
data_radio1 - не инициализируется?
у меня делается так
freq = 0..200
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
}
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Re: Расчет частоты приема для RDA5807M
Ваш код в моём протеусе работает,а в железе нет. Дисплей не показывет,сигналов на шине нет...pavel1979 писал(а):попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)
Re: Расчет частоты приема для RDA5807M
А зачем? Там изначально 0...cahek80 писал(а):посмотрел код, появились глупые вопросы (под AVR не писал):
int data_radio1,data_radio2,data_lcd=870;
data_radio1 - не инициализируется?
у меня делается такfreq = 0..200Код: Выделить всё
// 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 }
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: Расчет частоты приема для RDA5807M
по жки-выв 5 на минусeduardo писал(а):Ваш код в моём протеусе работает,а в железе нет. Дисплей не показывет,сигналов на шине нет...pavel1979 писал(а):попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)
прога рабочая,я только переназначил выводы
попытка 2
- Вложения
-
- rda5807 (2).rar
- (2.77 КБ) 326 скачиваний
Re: Расчет частоты приема для RDA5807M
Тоже самое...
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: Расчет частоты приема для RDA5807M
странно....у меня работает,только на мега16
Re: Расчет частоты приема для RDA5807M
Прошу прощения за путаницу. В проекте,который я выкладывал,мега 32,но они одинаковы. Отличаются только объёмом памяти.Адреса портов тоже одинаковые. У меня программатор старый с LPT-разъёмом и в железо я шью со старого ноутбука. В ноутбуке у меня создан такой же проект,только под мегу 16,в железе тоже мега 16 стоит.
В протеусе 32 мега,но когда загружаю в него прошивку для 16 меги --- работает.
Вы вероятно переделывали свой пример,который выкладывали под мегу 32?
В протеусе 32 мега,но когда загружаю в него прошивку для 16 меги --- работает.
Вы вероятно переделывали свой пример,который выкладывали под мегу 32?
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: Расчет частоты приема для RDA5807M
да,компиляция под 32-ю,вот 16-я и 16"а",попробуйте
- Вложения
-
- 16.rar
- (5.48 КБ) 367 скачиваний
Re: Расчет частоты приема для RDA5807M
На этот раз оба проекта работают в железе.
Большое спасибо за помощь. По крайней мере я хоть убедился в исправности модуля.
В своём проекте я только переделал вывод на лсд. Мой упорно не хочет работать...
В своём проекте я только переделал вывод на лсд. Мой упорно не хочет работать...
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: Расчет частоты приема для RDA5807M
на всякий случай ложу исходник на баском авр-примерно понятно что идет по I2C,может чем поможет
$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
Спойлер
$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
Re: Расчет частоты приема для RDA5807M
Увас происходит отправка данных только тогда,когда нажата одна из кнопок,я правильно понял?
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: Расчет частоты приема для RDA5807M
да,так меньше шумит,постоянно отправлять одно и то же бессмысленно
вот можно ли както обратиться именно к какомуто регистру ?например-вкл/выкл приемника,регулировка громкости....надо рыть...
добавил-еще при включении мк
вот можно ли както обратиться именно к какомуто регистру ?например-вкл/выкл приемника,регулировка громкости....надо рыть...
добавил-еще при включении мк
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Код нечитабелен, сплошные "магические числа".
Мой код 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 прилагается. Помогите-е-е-е!!! Пожалста-а-а-а!!!!!!
Мой код 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 раза.
Re: Расчет частоты приема для RDA5807M
Переписал байты в точности как у вас и сделал отправку пока нажаты одна из кнопок---ЗАРАБОТАЛО!!!
Только звук слабее немного.
Re: Расчет частоты приема для RDA5807M
pavel1979 писал(а):да,так меньше шумит,постоянно отправлять одно и то же бессмысленно
вот можно ли както обратиться именно к какомуто регистру ?например-вкл/выкл приемника,регулировка громкости....надо рыть...
добавил-еще при включении мк
Наверное нельзя.. У регистров записи адресов нету.


