Si4432 RSSI信号强度问题
我做了一个简单的测试程序一个模块发一个数据包,然后另一个模块将另一个数据包放过来。发送方不断检测RSSI值。现发现,无论接收方有无工作,无发出数据,RSSI值都是一样的,大概是80左右。资料上说RSSI值可以冻结,但我找不到怎么冻结。
请问这个RSSI是怎么设定才能得到有效数据? 你测量到50,那是噪声,不是接收的信号 那如何检测到信号呢? 前提是频段一致,工作正常,你如果不停检测并实时观察(比如串口传给PC)就能看到有信号时RSSI会变大,因为发射时个短时间的过程,RSSI也是个动态变的,停止发射RSSI回到噪声电平上 怎么能够直接观测到发射时间那个值呢?这个RSSI应该是接收到的值?难道是发送时候产生的值 在同步字侦测中断时读 楼上的方法可以,还有其他办法吗?这样会占用一些资源跟时间 期待更好的办法出现 RSSI(Received Signal Strength Indicator)测量的是你接収到的信号强度,信号越强,该值就越大。 回复【5楼】wuxinju
-----------------------------------------------------------------------
5楼说的很对哦 我试验了,效果明显。但是RSSI返回的值是怎么算出来的呢,不是说他的值是接收到的信号的强度吗,是dbm,但是我发送端最大是5dbm,但是rssi的值是80 。怎么理解 ,求明白人解答。 回复【9楼】610396783
-----------------------------------------------------------------------
请问rssi值在什么时候读取,接收数据之后吗?谢谢! 我试过了,查询到接收中断后取值已经来不及了,5楼的办法可行!~
1、把06H设置为0X80使能同步子侦测。
2、写个中断查询函数,如果检测到中断,则查询04H是否为0X80(侦测到同步字),如果为真,读26H即可。 one of the following options is recommended: majority polling,
reading the RSSI value within 1 Tb of the RSSI interrupt, or using the RSSI threshold described in the next
paragraph for Clear Channel Assessment (CCA).
IC资料给出两种方式
下面的程序供参考
#define RSSI_SAMPLES 10
U8sampleRSSI (void)
{
U8 i;
U8 sample;
U8 min = 255;
U8 max = 0;
U16 sum = 0;
for(i=0;i<RSSI_SAMPLES;i++)
{
sample = phyRead(0x26);
sum += sample;
if(sample > max)
{
max = sample;
}
if(sample < min)
{
min = sample;
}
}
sum -= min;
sum -= max;
sum /= (RSSI_SAMPLES-2);
return sum;
}
S16 calcInputPower (U8 rssi) //线性计算 根据下面的图可以看成是线性的,得出线性方程
{
S16 value;
value = rssi;
value *= 10;
value /= 19;
value -=127;
if(value< -120)
value = -120;
else if (value > 0)
value = 0;
return value;
}
while(1)
{
rssi = sampleRSSI();
inputPower = calcInputPower (rssi);
}
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_694403RQNXVX.jpg
(原文件名:QQ截图未命名.jpg) 我用的是SI1000芯片,接收程序一直停在等待接收中断状态,读寄存器状态,RSSI位为1,这表示什么?
页:
[1]