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

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

Вс мар 08, 2015 11:13:41

Или может сначала надо прочитать регистры? :dont_know:

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

Вс мар 08, 2015 12:55:21

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

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

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

жаль не умею компилировать-инфы мало и не знаю асм,прогнал бы в протеусе,посмотрел бы

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

Вс мар 08, 2015 13:11:53

Спасибо за отзыв. Это не асм а Си,проект в протеусе есть в архиве,или он неоткрывается увас?Дабы не вводить в заблуждение,
ранее все эти файлы были для пробы ТЕА 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

Вс мар 08, 2015 14:14:26

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Н,в остальном вроде схоже

жаль не умею компилировать-инфы мало и не знаю асм,прогнал бы в протеусе,посмотрел бы


Написал,как вы посоветовали,но всё тоже самое... Может сам модуль неисправен? Я его перепаивал,но контакты вроде целые были...

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

Вс мар 08, 2015 14:52:40

попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)
Вложения
rda5807 .rar
(2.77 KiB) Скачиваний: 365

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

Вс мар 08, 2015 14:59:19

посмотрел код, появились глупые вопросы (под 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

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

Вс мар 08, 2015 16:59:58

pavel1979 писал(а):попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)

Ваш код в моём протеусе работает,а в железе нет. Дисплей не показывет,сигналов на шине нет... :(

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

Вс мар 08, 2015 17:12:07

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...

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

Вс мар 08, 2015 17:28:06

eduardo писал(а):
pavel1979 писал(а):попробуйте этим прошить,кнопки,жки,сцл сда те же что и в протеусе(до того неуглядел что он есть,извините)

Ваш код в моём протеусе работает,а в железе нет. Дисплей не показывет,сигналов на шине нет... :(

по жки-выв 5 на минус
прога рабочая,я только переназначил выводы
попытка 2
Вложения
rda5807 (2).rar
(2.77 KiB) Скачиваний: 268

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

Вс мар 08, 2015 20:39:19

Тоже самое...

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

Вс мар 08, 2015 20:55:54

странно....у меня работает,только на мега16

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

Пн мар 09, 2015 13:00:37

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

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

Вы вероятно переделывали свой пример,который выкладывали под мегу 32?

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

Пн мар 09, 2015 17:12:31

да,компиляция под 32-ю,вот 16-я и 16"а",попробуйте
Вложения
16.rar
(5.48 KiB) Скачиваний: 313

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

Пн мар 09, 2015 18:18:11

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

В своём проекте я только переделал вывод на лсд. Мой упорно не хочет работать...

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

Пн мар 09, 2015 18:31:32

на всякий случай ложу исходник на баском авр-примерно понятно что идет по 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

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

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

Увас происходит отправка данных только тогда,когда нажата одна из кнопок,я правильно понял?

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

Пн мар 09, 2015 19:13:13

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

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

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

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

Пн мар 09, 2015 19:34:36

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

Мой код 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

Пн мар 09, 2015 19:47:52

Переписал байты в точности как у вас и сделал отправку пока нажаты одна из кнопок---ЗАРАБОТАЛО!!! :music: Только звук слабее немного.

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

Пн мар 09, 2015 19:52:22

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

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

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



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