|
本帖最后由 ka2209 于 2018-9-22 23:06 编辑
之前在淘宝上见过用RDA5807和KT0803的调频对讲机,是用普通单片机控制的。
我在网上搜索国内外网站,都没有发现用前面说的两种芯片做的ARDUINO对讲机。
网上找到了这两种芯片的ARDUINO库函数(见附件)。我先是把两个芯片的库函数合在同一ino文件里面,然后测试不同的IDE,发现用ARDUINO1.5.7可以编译通过。
通过了编译,还有一个问题,就是收发切换的问题,因为这两种芯片都是IIC控制的,都要接IIC总线。这就存在问题了
经过这两天的反复修改程序,调试,现在效果还比较理想。
由程序可知,目前可以实现一个频点的通信,例如这里收发频率都是108.0MHZ。收发频率是分开控制的,因为库函数的差异,一个是浮点型,一个是整形。因此也可以改变程序和电路连接,做成异频全双工对讲机。
这里由于KT0803芯片的限制,编程时,注意收发频率一般是在70-108MHZ之间。注意不能够与当地广播电台频率重合。
这里用的是RDA5807M模块,到时候如果有人需要,我就会把这个电路做成收发模块出售,接上ARDUINO就可以用。
这里暂时没有增加发射部分的功率放大电路,除了不能发射功率太大,其它原因大家都知道。不过,我这里没有接上接收部分的高放电路来提高灵敏度,有兴趣的可以自己增加一个合适的高频放大电路。
程序如下
#include <Arduino.h>
#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
#include <FMTX.h>
RDA5807M radio; // Create an instance of Class for RDA5807M Chip
RADIO_INFO ri;//rssi
float fm_freq =108.0;//tx freuqency
int i=0;
int k=0;
int ptt=3;
void setup()
{pinMode(ptt, INPUT);
//PTT
pinMode(4,OUTPUT);
i2c_init();
radio.init();
radio.setFrequency(10800);//rx frequency radio.setVolume(5);//set volume,max=15 radio.setMono(false);
radio.setMute(false);
digitalWrite(4,LOW); i=0;}
void loop() { if(digitalRead(ptt)==HIGH)
{ radio.setMute(true);
while(k==0)
{ i2c_init();
delay(200);
fmtx_set_freq(fm_freq);
digitalWrite(4,HIGH);
k=1; }
i=1;}
delay(100);
if (i==1&&digitalRead(ptt)==LOW) { radio.setFrequency(10800);
radio.setVolume(5);
radio.setMono(false);
radio.setMute(false);
digitalWrite(4,LOW);
k=i=0; }
radio.getRadioInfo(&ri);//mute control
if((ri.rssi)>=7) radio.setMute(false);
else if((ri.rssi)<7)
radio.setMute(true);
delay(100);} |
评分
-
1
查看全部评分
-
|