|
楼主 |
发表于 2010-7-15 08:12:29
|
显示全部楼层
7021 400M和900M都用过了,晶体用的是20M的,就是普通晶振(中关村市场买的,估计不会低于20ppm),通信允许的频率误差和设置的中频滤波器的带宽以及频偏都有关系,没具体测试。AFC功能没具体测试,只是使能了。相对来说,7021的频谱和频道选择性要优于1020,窄带时,相邻信道间隔25K即可互不干扰,而1020则非常差,相邻几M都不能确保没有邻道干扰。而且外围器件要比1020少些,但比4432要多,这也是为什么选择4432的原因之一
另外请教下,你们做的4432没有发现接收不到数据,然后启动一下发射,然后就可以接收数据了吗?附上我的4432的寄存器设置程序
void SI4432Init(void){
uint8 temp;
//设置中心频率433MHz
SI4432WriteRegister(0x75,0x53);
SI4432WriteRegister(0x76,0x4b);
SI4432WriteRegister(0x77,0x00);
SI4432WriteRegister(0x79,0x00);
SI4432WriteRegister(0x7a,0x00);
/*
//设置中心频率915MHz
SI4432WriteRegister(SI4432_FREQUENCY_BAND_SELECT,0x75);
SI4432WriteRegister(SI4432_NOMINAL_CARRIER_FREQUENCY_1,0xbb);
SI4432WriteRegister(SI4432_NOMINAL_CARRIER_FREQUENCY_0,0x80);
*/
//设置无线发射速率20kbps
SI4432WriteRegister(0x6E,0xa3);
SI4432WriteRegister(0x6f,0xd7);
SI4432WriteRegister(0x70,0x25);//////25
SI4432WriteRegister(0x58,0x80);
//设置晶体的负载电容
SI4432WriteRegister(0x09,0x00);
//设置发射频偏12khz,经测试20kbps时最小频偏可设置为7~8khz
SI4432WriteRegister(0x72,0x13);
SI4432WriteRegister(0x71,0x43); //0x23是FIFO模式,0x43是direct模式
//设置发射功率
SI4432WriteRegister(0x6d,0x0f); //输出功率为20dbm
//GFSK/FSK rx modem settings
SI4432WriteRegister(0x1c,0x2d);
SI4432WriteRegister(0x20,0x32);
SI4432WriteRegister(0x21,0x02);
SI4432WriteRegister(0x22,0x8f);
SI4432WriteRegister(0x23,0x5c);
SI4432WriteRegister(0x24,0x07);
SI4432WriteRegister(0x25,0xff);
//使能AFC
SI4432WriteRegister(0x1d,0x40);
SI4432WriteRegister(0x1e,0x0a);
SI4432WriteRegister(0x2a,0x11);
//禁止AFC
// SI4432WriteRegister(0x1d,0x3c);
// SI4432WriteRegister(0x1e,0x02);
// SI4432WriteRegister(0x2a,0xff);
SI4432WriteRegister(0x1f,0x03);
SI4432WriteRegister(0x69,0x60);
SI4432WriteRegister(0x33,0x80); //禁止射频芯片的码同步检测
//设置GPIO口的功能
SI4432WriteRegister(0x0c,0x0f); //GPIO1设置为数据同步时钟
SI4432WriteRegister(0x0b,0x1f); //GPIO0设置为GND
SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x01);//射频芯片置为IDLE模式
do{
temp = SI4432ReadRegister(0x02);
}while(!((temp & 0x03) == 0x00));
}
//*****************************************************************
//函数功能:设置CC1020进入发射状态
//入口参数:无
//出口参数:无
//*****************************************************************
void SetupToTx(void){
uint8 temp;
SI4432WriteRegister(0x0b,0x1d); //GPIO0设置为VDD
SI4432WriteRegister(0x0d,0x10); //GPIO2设置为数据入
//射频芯片置为IDLE模式
SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x01);
do{
temp = SI4432ReadRegister(0x02);
}while(!((temp & 0x03) == 0x00));
//wake up device to tx
SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x08);
do{
temp = SI4432ReadRegister(0x02);
}while(!((temp & 0x03) == 0x02));
//SendOneByte(SI4432ReadRegister(0x02));
}
//*****************************************************************
//函数功能:设置CC1020进入接收状态
//入口参数:无
//出口参数:无
//*****************************************************************
void SetupToRx(void){
uint8 temp;
SI4432WriteRegister(0x0b,0x1f); //GPIO0设置为GND
SI4432WriteRegister(0x0d,0x34); //GPIO2设置为数据输出,并连接上拉电阻
//SI4432WriteRegister(0x0d,0x00);
//SI4432WriteRegister(0x0a,0x00);//30mhz输出
//射频芯片置为IDLE模式
SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x01);
do{
temp = SI4432ReadRegister(0x02);
}while(!((temp & 0x03) == 0x00));
//wake up device to rx
SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x05);
do{
temp = SI4432ReadRegister(0x02);
}while(!((temp & 0x03) == 0x01));
//SendOneByte(SI4432ReadRegister(0x02));
} |
|