bulat943

Приемник на RDA5807 и семисегментнике

323 сообщения в этой теме

resd1981    13

Проводками тоже не айс. Помню подключал две разные платы, на одной  приемник, на второй управление. Прием упал ниже плинтуса. Подключил РДА прямо на плату, появился нормальный прием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bulat943    39

не получается скачать ваш архив,пишет битый...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andrusha152    41

Пробую еще раз. Если убрать регулировку громкости, то влазит спящий режим.

Проект.zip

Изменено пользователем andrusha152
дополнение
  • Лайк 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bulat943    39

А это моя новая программа приемника-теперь при вкл радио частота вкл как надо-ввел задержку 1 сек

Скрытый текст

$Regfile = "attiny2313a.dat"
$Crystal = 4000000
'$hwstack = 40
'$swstack = 16
'$framesize = 32
'i2c                             09.01.2018
Config Scl = Porta.1
Config Sda = Porta.0
Config I2cdelay = 40
I2cinit
dim bit_02h as byte , bit_02l as byte
bit_02h = &B11000011       'dhiz dmute (1=mono.2=stereo) (1=bass)  rclk  rclk seekup  seek
bit_02l = &B10000101
' настраиваем порты  к индикатору
segmentj alias portb : config portb = output
dig1 alias portd.6 : config dig1 = output
dig2 alias portd.3 : config dig2 = output
dig3 alias portd.5 : config dig3 = output
dig4 alias portd.4 : config dig4 = output
button alias pind.2 : config portd.2 = input : portd.2 = 0
dim buttons as byte
dim flag as byte
' таймеры
const const_t0 = 0       '128
Config Timer0 = Timer , Prescale = 64       ' 256
'Timer0 = const_t0
On Timer0 Pulse       '4000000/256/64=244   4.1 msec
Config Timer1 = Timer , Prescale = 256       '256
 On Timer1 индикация       '4.19 sec
Config Int0 = LOW LEVEL
dim freg as Integer
dim a as Integer
dim digit as Byte
dim stereo as bit
dim volume as byte
dim dane as byte
'начальные настройки
Waitms 250
Readeeprom dane , 10
waitms 1000
volume = 5
  'I2cinit
  I2cstart
  I2cwbyte &H20       '      20
  '02
  I2cwbyte &B11000010       'dhiz dmute mono bass  rclk  rclk seekup  seek    D2=11010010
  I2cwbyte &b00001101       '    85= 10000101
  '03
  'dane = freg - 870
  'dane = dane / 4
  I2cwbyte dane / 4       '
  'dane = freg - 870
  dane = dane mod 4
  dane = dane * 64
  set dane.4
  I2cwbyte dane       '
  '04
  I2cwbyte &B00010000       ' 000000000
  I2cwbyte &B00000000       '
  '05
  I2cwbyte &B10001000       ' 0000 4 бита-порог поиска
  dane = &B10000000 + volume
  I2cwbyte dane
  '06
  'I2cwbyte &B00010000       ' 000000000
  'I2cwbyte &B00000000
  '07
  'I2cwbyte &B00000000       ' 000000000
  'I2cwbyte &B00000000

  I2cstop
gosub Readword
'*******************************************************************************
' flag.0=1  переключение по частоте
' flag.1=1  громкость
' flag.1=0  rda on  flag.2=1  rda off
'
'
' flag.7=1сон
'*******************************************************************************
main:
  'gosub rda5807_init
  Enable Interrupts
  gosub enable_timer


  'buttons=16
do
  'если нажата кнопка(стоит флаг нажатия кнопки)
 if buttons < 15 then

    'если скан+ или скан-
    if buttons.0 = 0 OR buttons.1 = 0 then
         'ставим флаг автосканирования  для индикатора-отображать частоту
         flag.1 = 0
         bit_02h.1 = buttons.0       'end if       'направление скани рования 1=вверх,0=вниз
         bit_02h.0 = 1
         gosub rda5807_init
         bit_02h.0 = 0       'сброс бита автосканирования
         gosub Readword
    end if


    if buttons.2 = 0 OR buttons.3 = 0 then
         flag.1 = 1       'ставим флаг громкости для индикатора-отображать громкость
         if buttons.2 = 0 then incr volume
         if buttons.3 = 0 and volume > 0 then decr volume
         'volume = volume mod 16
         'if volume > 200 then volume = 0
         if volume > 15 then volume = 15
         gosub rda_volume
    end if


 waitms 100
 timer1 = 0
 flag.0 = 0       'сброс  флага нажатия кнопки
 end if
 'flag = 0
 if timer1 > 16000 then flag.1 = 0       'если прошло 16000*256/4000000= 1 сек то из индикации громкости переход на индикацию частоты
 if flag.7 = 1 then       'таймер сна,если не нажата ни одна из кнопок и прошло 65536*256/4000000= 4 сек то
   radio_sleep:
     'Writeeeprom dane , 10
     gosub disable_timer       'гасим индикацию
     Enable Int0       'ждем нажатия любой кнопки
     powerdown       'баиньки,аттини в сон
     disable Int0       'нажата кнопка,просыпаемся
     gosub enable_timer       ' вкл индикации,запуск таймера сна
     gosub Readword1
     end if
loop

goto main
'выкл таймеов,индикации
disable_timer:
   TIMSK = &B00000000
   dig1 = 0 : dig2 = 0 : dig3 = 0 : dig4 = 0
   portb = 0

return
'запуск таймеров,индикации
enable_timer:
   flag = 0
   TIMSK = &B10000010
   waitms 250
   Timer1 = 0
   flag = 0
return


'подпрограмма таймера сна,как прошло 4 сек то ставим флаг
индикация:
  flag.7 = 1
return

'чтение частоты
Readword:
  gosub disable_timer
  portb = 128
Readword1:
    'I2cinit
    I2cstart
    I2cwbyte &B00100000       'read
    I2cwbyte &h0a       ' b  Regno = &B00001010
    Waitms 50
    I2cstart
    I2cwbyte &B00100001       'adressread
    I2crbyte freg , Ack       ' RDSR STC  SF RDSS  BLK_E  ST  READCHAN[9:8]
    I2crbyte dane , nack       'READCHAN[7:0]
    I2cstop
 while freg.6 = 0       'ждем установки флага STC-стопа сканиования=найдена несущая
             timer1 = 0
             waitms 40
             goto Readword
             wend
             stereo = freg.2
             freg = dane + 870
             Writeeeprom dane , 10

    gosub enable_timer
  Return
' скан +/-
rda5807_init:
I2cinit
         I2cstart
         I2cwbyte &H20       '      20
  '02
         I2cwbyte bit_02h       'dhiz dmute mono bass  rclk  rclk seekup  seek    D2=11010010
         I2cwbyte bit_02l       '    85= 10000101
         I2cstop
  'Writeeeprom volume , 11
  return
'громкость
rda_volume:
      I2cstart
      I2cwbyte &h22
      I2cwbyte &h05       'H02
      I2cwbyte &B10001000       'H08
      dane = &B10000000 + volume
      I2cwbyte dane
      I2cstop
      return

'подпрограмма индикации
Pulse:
  'Timer0 = const_t0
  stop timer0
  incr digit
     if digit > 3 then digit = 0
  dig1 = 1 : dig2 = 1 : dig3 = 1 : dig4 = 1


  if digit = 0 then
      a = freg / 1000
      if a = 0 then a = 10
      if flag.1 = 1 then a = 11
      dig1 = 0
      'waitus 10
      buttons.3 = button
      end if
  if digit = 1 then
      a = freg / 100
      a = a mod 10
      if flag.1 = 1 then a = 12
      dig2 = 0
      'waitus 10
      buttons.2 = button
      end if
  if digit = 2 then
      a = freg / 10
      a = a mod 10
      if flag.1 = 1 then
            a = volume / 10
            if a = 0 then a = 10
            end if
      dig3 = 0
      'waitus 10
      buttons.1 = button
      end if
  if digit = 3 then
      a = freg mod 10
      if flag.1 = 1 then a = volume mod 10
      dig4 = 0
      'waitus 10
      buttons.0 = button
      end if
  portb = Lookup(a , Dta)       ' segmentj
  if flag.1 = 0 then
      if digit = 2 then portb.4 = 1
      if digit = 3 then portb.4 = stereo
      end if
  'if timer1 < 50000 then
   '   waitus 500
   '   else
      waitms 2
      portb = 0
   '   end if

   'portb = 0

  start timer0

return

Dta:
'таблица с данными о цифрах зажигает по порядку : 0123456789(10=пробел)

'таблица версии proekt3
'       GCB*FDAE
 Data &b01101111
 Data &b01100000
 Data &b10100111
 Data &b11100110
 Data &b11101000
 Data &b11001110
 Data &b11001111
 Data &b01100010
 Data &b11101111
 Data &b11101110
 Data &b00000000
 Data &b00001011       ' Г
 Data &b10101011       ' Р

 '(
'таблица версии proekt2
'       ed*cgbfa
 Data &b11010111
 Data &b00010100
 Data &b11001101
 Data &b01011101
 Data &b00011110
 Data &b01011011
 Data &b11011011
 Data &b00010101
 Data &b11011111
 Data &b01011111
 Data &b00000000
 Data &b10000011       ' Г
 Data &b10001111       ' Р
')

 

видосик старого варианта ,на первых секундах видно что частота "не загрузилась",вот это и исправил 

а здесь кнопки имеют двойное назначение,и откл радио есть (при громкости=0),проект на аттини13,исходник где то есть-надо порыться в ноутбуке

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
resd1981    13

Добрый день bulat943. Собрал уже второй приемник .На этот раз без резистора регулятора громкости. Возможно как то при громкости 0, отправлять RDA в сон, как вы делали на аттини 13. Сильно громко играет на нуле. Если сделаете, то в этой прошивке. Заранее спасибо за любой ответ.

http://forum.cxem.net/applications/core/interface/file/attachment.php?id=543544

http://forum.cxem.net/applications/core/interface/file/attachment.php?id=543545

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andrusha152    41

Продолжаю мучить модуль. Вторая версия приемника - для дачи. Код занимает 100%. Неделю мучился, но добил. Схема та же. Питание приемника 3 вольта. Отключение индикации. Режим STEREO отключен,  BASS включен. Частоту камня снизил до 1 МГц. Фьюзы заводские. При включении с зажатой кнопкой MINUS переход в
режим сканирования, и записи частоты в память. Убрал почти все Bitwait'ы ( много места в памяти занимают).
Теперь настройка частоты происходит при удержании кнопок PLUS или MINUS. При записи частоты в память (кнопка MEM)  на полсекунды гаснет индикатор. Хотел сделать, чтобы высвечивалось CH № , но не влезло. При достижении частоты 108,1 МГц переход в режим прослушивания радио. Включается первая сохраненная станция. Индикатор гаcнет через 5-6 секунд.  Хотел сделать Powerdown, но INT0 очень много памяти кушает. Поэтому, просто останавливаю TIMER0. Специально измерил  ток потребления ( китайским мультиметром ) в режиме сна и при остановке таймера. Ток абсолютно одинаковый - 21 mA. Когда индикатор погашен, доступна только кнопка MEM, для включения индикации. В этом режиме возможно переключение каналов, а при нажатии кнопки MEM, регулировка громкости. При повторном нажатии кнопки MEM, запись громкости в память и переход к отображению частоты. Громкость приемника изменится только после записи ее в память. По другому никак не получилось. Тинька оказывается не резиновая.  Да, при настройке станций и громкости индикация не отключается. Индикатор лучше использовать яркий.Обычный, при 3х вольтах светит тускло.
 В архиве прошивки ОА и ОК, схема, исходник (Bascom avr).

Проект 2.zip

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bulat943    39
В 11.03.2018 в 18:01, resd1981 сказал:

Добрый день bulat943. Собрал уже второй приемник .На этот раз без резистора регулятора громкости. Возможно как то при громкости 0, отправлять RDA в сон, как вы делали на аттини 13. Сильно громко играет на нуле. Если сделаете, то в этой прошивке. Заранее спасибо за любой ответ.

 

 

 

Если откл приемник при громкости=0 то приемник выключится вообще,хозяин-барин-пробуйте

 

programm 88-108 oa ok 04 ST ER 04 01.hex

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bulat943    39

del...

Изменено пользователем bulat943

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
risov    17

Уважаемый @bulat943 ! Пытаюсь повторить Вашу конструкцию с часами и сразу просьба- не могли бы Вы таким образом сообразить прошивку, что бы часы работали всегда, независимо от того, работает радио или нет, а частота либо громкость появлялась лишь в том случае, когда непосредственно менялась настройка. А термометр... Что им мерить-температуру внутри корпуса?  Ну его...

      Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
jn79    4

можно добавить укв диапазон и адаптировать прошивку под транзисторы в катоды индикатора ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bulat943    39

укв добавить не сложно,модуль принимает от 50 МГц

жду от вас желаемый точный диапазон и шаг

с транзисторами сложнее-не на чем тестировать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
jn79    4

как схему нарисуете с транзисторами так и буду тестировать :)  !

диапазон от 65,9 до 108

а вот шаг идеально было бы 10кгц в диапазоне частот от 65,9 МГц до 74 МГц но судя по даташиту модуль может только от  25 кГц ? 

25 кГц тогда и оставить в этом диапазоне

ну а в ФМ 87,5 МГц до 108,0 МГц  там стандартные 100кгц

поправьте если что не так 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bulat943    39

я и не собираюсь схему рисовать-схема на 1 странице первый пост,там транзисторы дорисовать и паяйте,как спаяете дайте знать

Шаг можно и 1 кгц сделать при ручном вводе частоты,вообще стандарт 30 кгц,но сканирования не будет и чтения частоты из регистров (это есть в даташите)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
jn79    4

а какая кнопка бас и стерео ?

часы и температура задействованы ?

Изменено пользователем jn79

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bulat943    39

моно/стерео portc.1

басс portc.0

***********************************************************************************************************************************

Есть желающие проверить у себя?
Прошивка 50-108 МГц,шаг в диапазоне укв 50-76 МГц 50 кгц,в фм-100 кгц
Индикация в укв в формате ХХ.ХХ(например 50.00 69.65) ,в фм-ХХХ.Х(например 98.3 101.1)
Управление по старому,но есть отличия-
Из органов управления энкодер (скнопкой) и еще 2 кнопки (STEREO и BASS)

При первом включении частота 88,0 МГц,вращение энкодера=перестройка частоты с шагом 100 кгц

Короткое нажатие на кнопку энкодера-переходим в регулировку громкости,на экране ГР08(громкость=8)

Еще одно нажатие-переход обратно на перестройку по частоте

Кнопки-

1) кнопка BASS
1.1-в режиме громкость
-включение/выключение басов
1.2-при перестройке по частоте и каналам
-короткое нажатие=скан-,
-длинное нажатие(более 2 сек)-переход из режима перестройки частоты в режим перестройки по каналам (если хоть одна частота записана в память),на экране CHAN,крутим энкодер-перестраиваемся по записанным в память каналам,короткое нажатие на энкодер-регулировка громкости,еще короткое нажатие на энкодер-обратно перестройка по каналам,короткое нажатие BASS=вкл/выкл басов,нажатие более 2 сек-переход из режима перестройки по каналам в режим перестройки по частоте

2) кнопка STEREO
2.1-в режиме громкость-включение/выключение стерео
2.2-при перестройке по частоте и каналам
-короткое нажатие=скан+,
-длинное нажатие(более 2 сек)-в зависимости от того в каком режиме (перестройка по частотам/по каналам) находимся-
если в режиме перестройки по частотам то запись частоты в память
если в режиме перестройки по каналам то стирание частоты из памяти

включение приемника (когда приемник выключен) коротким нажатием энкодера,выкл приемника длинным нажатием энкодера

поддержка индикаторов с ОК и ОА,выбор -если PORTC.3 никуда не подключен то общий анод,если подключен к минусу то общий катод

Программа базовая,мк ATMEGA8 (HIGH FUSE= C9 LOW FUSE=83 )
Индикатор-любой с общим катодом или анодом
Энкодер-с кнопкой любой,RDA5807M,Стаб 3,3 в-xc6206p332mr

 

proteus_encoder oa oc.DSN

схема.spl7

схема.JPG

50_108MHZ_50 khz_01.hex

Изменено пользователем bulat943
  • Одобряю 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
resd1981    13

Все работает, проверил. Единственное , как то непонятно переход из одного диапазона в другой.  Автосканирование работает только в пределах  одного диапазона, для перехода в другой приходится крутить энкодер. Может сделать переход между диапазонами, при нажатии обоих кнопок вместе. Раз нажали, УКВ, второй раз  ФМ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GROMA    0

Вопрос к авторам а не рассматривался ли вариант использования индикатора управляемого по i2c ?

HTB18iAyf8DH8KJjSspnq6zNAVXaM__74687.1520181588.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andrusha152    41

А смысл? Зачем городить огород. Чем он лучше обычного?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dr. West    3 416

Смысл появится только если необходимо применить более простой МК и ног будет катастрофически не хватать.
К тому же, заявлено питание модуля 5 Вольт, что вызовет дополнительные неудобства в батарейных приёмниках. Работает ли он при 3 Вольтах - неизвестно.
Ну и прошивку почти всю перепахивать надо под него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andrusha152    41

И скорее всего будет фон от I2C. Так что шкурка вычинки не стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
jn79    4

связи и тем более в железе не проверял ещё

new.lay6.zip

Поделиться сообщением


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

image.png.336451c2fbe76bcc8067605455718393.png

Вот по этой схеме собрал приемник. Не могу настроить преобразователь напряжения. При подаче напряжения 8в выдает 2.45в что для работы мало. Помогите советами!:wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andrusha152    41

Скорее всего в этой схеме неправильно рассчитаны номиналы резисторов. Попробуйте вместо верхнего по схеме резистора на 1КОм поставить подстроечник, и немного увеличить сопротивление. Здесь есть калькулятор, можете сами посчитать.

  • Лайк 1

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас