打印
[其他]

RDA5807做了一个DIY收音机,可以收到17个电台

[复制链接]
2650|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2023-10-28 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
南京地区收到如下17个频道
You are tuned on 88.5 MHz | RSSI: 045 dbUv | Vol: 02 | Yes 
You are tuned on 89.2 MHz | RSSI: 038 dbUv | Vol: 02 | Yes
You are tuned on 89.7 MHz | RSSI: 047 dbUv | Vol: 02 | Yes
You are tuned on 93.7 MHz | RSSI: 044 dbUv | Vol: 02 | Yes
You are tuned on 95.2 MHz | RSSI: 043 dbUv | Vol: 02 | Yes
You are tuned on 96.6 MHz | RSSI: 042 dbUv | Vol: 02 | Yes
You are tuned on 97.5 MHz | RSSI: 059 dbUv | Vol: 02 | Yes
You are tuned on 98.1 MHz | RSSI: 045 dbUv | Vol: 02 | Yes  
You are tuned on  99.7 MHz | RSSI: 050 dbUv | Vol: 02 | Yes
You are tuned on 100.5 MHz | RSSI: 044 dbUv | Vol: 02 | Yes
You are tuned on 101.1 MHz | RSSI: 054 dbUv | Vol: 02 | Yes
You are tuned on 102.4 MHz | RSSI: 045 dbUv | Vol: 02 | Yes
You are tuned on 103.5 MHz | RSSI: 040 dbUv | Vol: 02 | Yes
You are tuned on 104.3 MHz | RSSI: 051 dbUv | Vol: 02 | Yes
You are tuned on 104.9 MHz | RSSI: 042 dbUv | Vol: 02 | Yes  
You are tuned on 105.8 MHz | RSSI: 045 dbUv | Vol: 02 | Yes
You are tuned on 106.9 MHz | RSSI: 041 dbUv | Vol: 02 | Yes
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
#include <RDA5807.h>
#include <math.h>

RDA5807 rx;

#define TFT_CS         2
#define TFT_RST        3
#define TFT_DC         10
#define TFT_SCLK       4
#define TFT_MOSI       6

/*     默认的SPI接口为
static const uint8_t SS    = 7;
static const uint8_t MOSI  = 6;---SDA
static const uint8_t MISO  = 5;
static const uint8_t SCK   = 4;---SCL
*/
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

// color definitions
const uint16_t  Display_Color_Black        = 0x0000;
const uint16_t  Display_Color_Blue         = 0x001F;
const uint16_t  Display_Color_Red          = 0xF800;
const uint16_t  Display_Color_Green        = 0x07E0;
const uint16_t  Display_Color_Cyan         = 0x07FF;
const uint16_t  Display_Color_Magenta      = 0xF81F;
const uint16_t  Display_Color_Yellow       = 0xFFE0;
const uint16_t  Display_Color_White        = 0xFFFF;

// The colors we actually want to use
uint16_t        Display_Text_Color         = Display_Color_White;
uint16_t        Display_Backround_Color    = Display_Color_Black;

const size_t MaxString = 32;
char oldTimeString[MaxString]           = "4 14:29:30";
char oldFre[6]="97.5";
void displayUpTime()
{
    unsigned long upSeconds = millis() / 1000;
    unsigned long days = upSeconds / 86400;
    upSeconds = upSeconds % 86400;
    unsigned long hours = upSeconds / 3600;
    upSeconds = upSeconds % 3600;
    unsigned long minutes = upSeconds / 60;
    upSeconds = upSeconds % 60;
    char newTimeString[MaxString] = { 0 };
    sprintf(newTimeString,"%lu %02lu:%02lu:%02lu",days, hours, minutes, upSeconds);
    if (strcmp(newTimeString,oldTimeString) != 0) {
        tft.setTextSize(2);
        tft.setCursor(0,0);
        tft.setTextColor(Display_Backround_Color);
        tft.print(oldTimeString);
        tft.setCursor(0,0);
        tft.setTextColor(Display_Text_Color);
        tft.print(newTimeString);
        strcpy(oldTimeString,newTimeString);
    }
}

// Show current frequency
void showStatus()
{
  char aux[80];
  sprintf(aux,"\nYou are tuned on %.1f MHz | RSSI: %3.3u dbUv | Vol: %2.2u | %s ",rx.getFrequency()/100.0, rx.getRssi(), rx.getVolume(), (rx.isStereo()) ? "Yes" : "No" );
  Serial.print(aux);

  tft.setTextSize(1);
  tft.setTextColor(Display_Backround_Color);
  tft.setCursor(70, 79);
  tft.print(oldFre);

  tft.setTextColor(Display_Text_Color);
  tft.setCursor(70, 79);
  sprintf(oldFre,"%.1f",rx.getFrequency()/100.0);
  tft.print(oldFre);
}

void showHelp()
{
  Serial.println(F("Type U to increase and D to decrease the frequency"));
  Serial.println(F("     S or s to seek station Up or Down"));
  Serial.println(F("     + or - to volume Up or Down"));
  Serial.println(F("     B or b to  Bass  On or Off"));
  Serial.println(F("     0 to use 87-108 MHz (US/Europe)"));
  Serial.println(F("     1 to use 76-91 MHz (Japan)"));
  Serial.println(F("     2 to use 76-108 MHz (world wide)"));
  Serial.println(F("     3 to use 65-76 MHz (East Europe) or 50-65MHz (see bit 9 of gegister 0x06)"));
  Serial.println(F("     4 to use 50-65 MHz"));
  Serial.println(F("     ? to this help."));
  Serial.println(F("=================================================="));
  delay(1000);
}



void setup() {

  Serial.begin(115200);
  while (!Serial);
  Serial.println();

  Wire.begin();  // 初始化I2C总线  
  rx.setup();
  rx.setVolume(2);
  // Select a station with RDS service in your place
  Serial.print("\nEstacao 97.50MHz");
  rx.setFrequency(9750); // It is the frequency you want to select in MHz multiplied by 100.
  delay(250);
//  rx.setLnaPortSel(3); // Trying improve sensitivity.
//  rx.setLnaIcSel(0);
  rx.setAFC(true);    // Sets Automatic Frequency Control
  showHelp();

  tft.initR(INITR_BLACKTAB);  //初始化屏幕
  tft.setFont();//初始化字体
  tft.fillScreen(Display_Backround_Color);
  tft.setTextColor(Display_Text_Color);
  tft.setTextSize(2);
  Serial.println("Hello");
    // a single pixel
  delay(500);
  for(uint8_t i=0;i<128;i++)
  {
    tft.drawPixel(i, 30+(sin(3.14159*i/32.0)*10), ST77XX_GREEN);
  }
  delay(500);
  tft.fillRect( 2,45,30,10,ST77XX_GREEN);
  delay(500);
  tft.drawRect(40,45,30,10,ST77XX_GREEN);
  delay(500);
  tft.fillCircle( 90, 50, 5, ST77XX_GREEN);
  tft.drawCircle(110, 50, 5, ST77XX_GREEN);
  delay(500);
  tft.drawFastHLine(0, 65, tft.width(), ST77XX_RED);
  delay(500);
  for(uint8_t x=4;x<128;x=x+12)
  {
    tft.drawFastVLine(x, 65, 5, ST77XX_BLUE);
  }
  delay(500);
  tft.drawRect(2,75,tft.width()-(2*2),15,ST77XX_GREEN);
  tft.drawRect(4,77,18,11,ST77XX_BLUE);
  tft.drawRect(67,77,58,11,ST77XX_BLUE);
  tft.setTextSize(1);
  tft.setCursor(7, 77+2);
  tft.print("FM");
  tft.setCursor(70, 79);
  tft.print(oldFre);
  tft.setCursor(104, 77+2);
  tft.print("MHz");
}

void loop() {
  // put your main code here, to run repeatedly:
  displayUpTime();
  delay(100);
    if (Serial.available() > 0)
  {
    char key = Serial.read();
    switch (key)
    {
    case '+':
      rx.setVolumeUp();
      break;
    case '-':
      rx.setVolumeDown();
      break;
    case 'B':
      rx.setBass(true);
      break;
    case 'b':
      rx.setBass(false);
      break;      
    case 'U':
    case 'u':
      rx.setFrequencyUp();
      break;
    case 'D':
    case 'd':
      rx.setFrequencyDown();
      break;
    case 'S':
      rx.seek(RDA_SEEK_WRAP, RDA_SEEK_UP, showStatus);
      break;
    case 's':
      rx.seek(RDA_SEEK_WRAP, RDA_SEEK_DOWN, showStatus);
      break;
    case '0':  
    case '1':
    case '2':
    case '3':
      rx.setBand( key - 48 );
      rx.setBand3_50_65_Mode(1); // Band 3 will work from  65 to 76 MHz;
      rx.setFrequencyToBeginBand();
      Serial.print(F("\n**** Switching to band: "));
      Serial.print(rx.getBand());
      break;
    case '4':
      // ATTENTION: The functions setFrequencyToBeginBand and setFrequencyToEnBand do not work for 50-65MHz setup. You have to control it by yourself.
      //            Also, you must control the band limits from 50 to 65 MHz. The setFrequencyUp and setFrequencyDown do not work properly.
      rx.setBand(3);
      rx.setBand3_50_65_Mode(0); // Band 3 will work from  50 to 65 MHz;
      rx.setFrequency(5500); // 55 Mhz; rx.setFrequencyDown and rx.setFrequencyUP, rx.setFrequencyToBeginBand() and rx.setFrequencyToEndBand() do not work properly for this setup;
      Serial.print(F("\n**** Switching to band: 3 from 50 to 65 MHz) "));
      break;  
      break;
    case '?':
      showHelp();
      break;
    default:
      break;
    }
    delay(200);
    showStatus();
  }
  delay(5);

}


使用特权

评论回复
评论
gaoyang9992006 2023-11-16 16:42 回复TA
晒图地址 https://bbs.21ic.com/icview-3339954-1-1.html 

相关帖子

沙发
gaoyang9992006|  楼主 | 2023-10-28 11:39 | 只看该作者
另外可以在搜索的回调打印状态函数先判断信号强度,确定是电台再打印。

使用特权

评论回复
板凳
gaoyang9992006|  楼主 | 2023-10-28 11:40 | 只看该作者
又多收到一个台
You are tuned on 101.7 MHz | RSSI: 042 dbUv | Vol: 02 | Yes

使用特权

评论回复
地板
gaoyang9992006|  楼主 | 2023-10-28 11:51 | 只看该作者
// Show current frequency
void showStatus()
{
  char aux[80];
  if(rx.getRssi()>15)
  {
    sprintf(aux,"\nYou are tuned on %.1f MHz | RSSI: %3.3u dbUv | Vol: %2.2u | %s ",rx.getFrequency()/100.0, rx.getRssi(), rx.getVolume(), (rx.isStereo()) ? "Yes" : "No" );
    Serial.print(aux);

    tft.setTextSize(1);
    tft.setTextColor(Display_Backround_Color);
    tft.setCursor(70, 79);
    tft.print(oldFre);

    tft.setTextColor(Display_Text_Color);
    tft.setCursor(70, 79);
    sprintf(oldFre,"%.1f",rx.getFrequency()/100.0);
    tft.print(oldFre);
  }

}

使用特权

评论回复
5
gaoyang9992006|  楼主 | 2023-10-28 11:55 | 只看该作者
本帖最后由 gaoyang9992006 于 2023-10-28 11:58 编辑

也可以多重条件判断再确定显示
// Show current frequency
void showStatus()
{
  char aux[80];
  if(rx.isStereo()&&(rx.getRssi()>15))
  {
    sprintf(aux,"\nYou are tuned on %.1f MHz | RSSI: %3.3u dbUv | Vol: %2.2u | %s ",rx.getFrequency()/100.0, rx.getRssi(), rx.getVolume(), (rx.isStereo()) ? "Yes" : "No" );
    Serial.print(aux);

    tft.setTextSize(1);
    tft.setTextColor(Display_Backround_Color);
    tft.setCursor(70, 79);
    tft.print(oldFre);

    tft.setTextColor(Display_Text_Color);
    tft.setCursor(70, 79);
    sprintf(oldFre,"%.1f",rx.getFrequency()/100.0);
    tft.print(oldFre);
  }

}

使用特权

评论回复
6
coody| | 2023-10-30 13:45 | 只看该作者
RDA5807还是不错的,几年前做过不少,其电路简单,带耳放,带音量,立体声分离度高,关键还很便宜。
还做了不少手调DSP全波段收音机也很好。最简单调幅收音机TA7642也玩过。

使用特权

评论回复
7
gaoyang9992006|  楼主 | 2023-10-30 19:13 | 只看该作者
coody 发表于 2023-10-30 13:45
RDA5807还是不错的,几年前做过不少,其电路简单,带耳放,带音量,立体声分离度高,关键还很便宜。
还做了 ...

嗯,还在优化中。
准备打个板子,现在飞线的,不方便。板子画好了,再检查一下。
另外准备用国产的BK1088做一个全波段的。芯片到手了,现在还差测试模块的PCB。过几天就可以测试了。

使用特权

评论回复
8
coody| | 2023-10-31 18:56 | 只看该作者
gaoyang9992006 发表于 2023-10-30 19:13
嗯,还在优化中。
准备打个板子,现在飞线的,不方便。板子画好了,再检查一下。
另外准备用国产的BK1088 ...

都可以做得很小,3cmx3cm就行了。

使用特权

评论回复
9
gaoyang9992006|  楼主 | 2023-11-1 08:46 | 只看该作者
coody 发表于 2023-10-31 18:56
都可以做得很小,3cmx3cm就行了。

比这还小,13mm*15.5mm
方便插面包板测试就行了。

使用特权

评论回复
10
coody| | 2023-11-1 14:09 | 只看该作者
gaoyang9992006 发表于 2023-11-1 08:46
比这还小,13mm*15.5mm
方便插面包板测试就行了。

我的带显示,还有多个按键,所以不能太小了。不带显示的则可以做这么小。

使用特权

评论回复
11
gaoyang9992006|  楼主 | 2023-11-1 14:30 | 只看该作者
coody 发表于 2023-11-1 14:09
我的带显示,还有多个按键,所以不能太小了。不带显示的则可以做这么小。 ...

挺好,晒晒看看,欣赏一下。

使用特权

评论回复
12
zhuls| | 2023-11-2 16:41 | 只看该作者
你这个有加高放吗?RSSI这么好!我做的没有加高放直接复用3.5音频线当天线,在城郊的室内,最好的才23.

使用特权

评论回复
13
gaoyang9992006|  楼主 | 2023-11-2 22:39 | 只看该作者
zhuls 发表于 2023-11-2 16:41
你这个有加高放吗?RSSI这么好!我做的没有加高放直接复用3.5音频线当天线,在城郊的室内,最好的才23.[em: ...

没直接一段电线当天线。

使用特权

评论回复
14
fangsir1996| | 2023-11-16 12:13 | 只看该作者
zhuls 发表于 2023-11-2 16:41
你这个有加高放吗?RSSI这么好!我做的没有加高放直接复用3.5音频线当天线,在城郊的室内,最好的才23.[em: ...

用耳机地线当天线的电路搞不清楚,厂家的电路太复杂,网上的电路很多不一样,不知道哪种好。

使用特权

评论回复
15
springvirus| | 2023-11-16 15:25 | 只看该作者
晒下硬件看看啊

使用特权

评论回复
16
gaoyang9992006|  楼主 | 2023-11-16 16:42 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1971

主题

15978

帖子

210

粉丝