Перейти к содержанию

Радиоприемник на RDA5807P в режиме совместимости с TEA5767


Рекомендуемые сообщения

...Прикольно, ловит даже УКВ станции, хотя по даташиту заявлена поддержка только от 76 МГц.

Это в режиме TEA? потому что в режиме RDA он работает от 50мГц

 

В схемах включения предлагается ввести L3 C3, "первичный фильтр" который только "обозначит" диапазон приёма.

Стоит такой фильтр, чуть чище ловит

Ссылка на комментарий
Поделиться на другие сайты

... Это в режиме TEA? потому что в режиме RDA он работает от 50мГц ...

 

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

У вас наверно модуль на микросхеме с другой буквой. Для RDA5807P нижняя граница по даташиту заявлена 76МГц (японский диапазон)

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Сергей, нужна помощь. На макетке собрал схему используя atmega 328p. Атмеге8 у меня нет. В программе microPaskal выставил в проекте Atmega328p, и при компиляции выдает ошибку

post-21610-0-36824300-1460148769_thumb.png

И еще, у меня индикатор с общим катодом.

Ссылка на комментарий
Поделиться на другие сайты

GICR это регистр, в котором описываются настройки прерываний.

GICR.6 := 1;  //Разрешаем прерывания по INT0
GICR.7 := 1;  //Разрешаем прерывания по INT1

У атмега328 по всей видимости этот регистр как-то иначе называется. Если вы поищите описания прерываний именно этой модели контроллера, обязательно найдёте нужную информацию.

Хорошо ещё, что компилятор сам знает адреса векторов прерываний у разных контроллеров, иначе портирование под другую модель было бы гораздо геморройнее.

 

Вообще mega328 сложнее в плане прерываний, чем mega8, у ней кроме прерываний по int0 и int1 на 3 и 4 ногах есть прерывания pcint** (1-23) на всех ногах портов. Вот что о них пишут:

PCINTx-прерывания обслуживают сразу целый порт, поэтому в обработчике необходимо смотреть на записанное и текущее состояние выводов и выискивать, какой же из пинов изменил свое состояние (и в какую сторону). Ну а потом уже решать, реагировать ли на это изменение или проигнорировать.

Вот, например, у ATMega328 есть три соответствующих вектора обработки прерываний PCINT: 4-й (PCINT0_vect), 5-й (PCINT0_vec1) и 6-й (PCINT2_vect). 4-й вектор обслуживает ноги PCINT7...0 (порт B), 5-й - PCINT8...14 (порт C - в нем только 7 выводов), 6-й - PCINT16...23 (порт D).

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

 

И еще, у меня индикатор с общим катодом.

В составе микропаскаль есть утилита, которая вычисляет коды символов 7сегментного индикатора для обоих вариантов, воспользуйтесь ей.

 

Коды символов было бы наглянее представить в двоичном виде.

Восемь сегментов, восемь бит. Каждая единица в соответствующем разряде включает соответствующий сегмент. Значит можно просто взять код символа в двоичном виде и нули заменить на единицы, а единицы на нули.

 

PORTC:=%0000000;
PORTC.1:=1;
PORTB:=DIGIT(A3) and %01111111;
Delay_ms(5);

Вот на эту строчку обратите внимание. Операцией and мы записываем нолик в самый старший бит, а остальные биты не трогаем. Этот бит включает точку на индикаторе.

В вашем случае надо сделать наоборот, записать в самый старший бит единицу, а остальные не трогать, это делается с помощью операции or

PORTB:=DIGIT(A3) or %10000000;

 

 

Кусок кода, который загоняет коды символов в переменную с помощью оператора case, мне категорически не нравится. Очевидно, что достаточно загнать коды символов в массив и потом брать его из ячейки под соответствующим номером. Как дойдут руки, перепишу.

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

Ербол, спасибо за предложение помощи, но это для меня вызов :biggrin: Буду переваривать, пищу для размышления мне дали. Если совсем никак, то буду просить помощь зала :sad:

Ссылка на комментарий
Поделиться на другие сайты

Так, скомпилировал, прошил, но циферки таки не кажет, значит не работает :biggrin:

Вот участок кода который переделал:

 SREG.7 := 1;
 EIMSK.6 := 1;
 EIMSK.7 := 1;  

Еще раз проверю правильность соединения на макетке, но это чуть позже, я еще проснутся не успел, а полез МК прошивать)

Изменено пользователем Allroy
Ссылка на комментарий
Поделиться на другие сайты

Александр, индикация это одно, а прерывания - совсем другое, они только кнопки обрабатывают. Вы всегда можете упростить программу донельзя, закомментировав все лишнее. Я когда взял тот пример, там наворочено было очень много всего, некоторые куски кода откровенно глючные, да и оно было под другую атмегу. В итоге всё пришлось с нуля переделать. Сначала отдельно код для индикатора, потом заливка конфига, потом обработка кнопок. По частям как-то удобнее все это для понимания.

Ссылка на комментарий
Поделиться на другие сайты

... SREG.7 := 1; EIMSK.6 := 1; EIMSK.7 := 1 ...

 

Биты 6, 7 регистра EIMSK зарезервированы и работать не могут

 

Проект позволяет использовать пины PD2 или PD2?

 

Они завязаны на прерывания INT0 и INT1 и код был бы чуть проще

 

Если нет, то можно и так попробовать сделать)

Ссылка на комментарий
Поделиться на другие сайты

Кнопки, кстати, это полный отстой. Перестроиться на 10 MГц при шаге 0,1 это сотня нажатий.

Попробовал прицепить энкодер на шаговом двигателе от пятидюймового дисковода.

Щщщикарно! Он очень быстрый и точный, перестроиться на нужную частоту очень легко. По сравнению со стареньким механическим энкодером проблем гораздо меньше, никакого дребезга, все четко и сверхнадёжно. Сплошной восторг.

 

Он пока по упрощенному алгоритму работает, только каждый четвертый шаг видит. На практике так даже удобнее, но при смене направления вращения первый шаг не всегда корректно обрабатывается.

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...