打印

CC1100 无线模块(弹簧天线)

[复制链接]
1972|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang321|  楼主 | 2008-7-10 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
该模块采用CC1100是一种低成本真正单片的UHF收发器,为低功耗无线应用而设计。电路主要设定为在315、433、868和915MHz的ISM(工业,科学和医学)和SRD(短距离设备)频率波段,也可以容易地设置为300-348 MHz、400-464 MHz和800-928 MHz的其他频率。RF收发器集成了一个高度可配置的调制解调器。这个调制解调器支持不同的调制格式,其数据传输率可达500kbps。通过开启集成在调制解调器上的前向误差校正选项,能使性能得到提升。CC1100为数据包处理、数据缓冲、突发数据传输、清晰信道评估、连接质量指示和电磁波激发提供广泛的硬件支持。CC1100的主要操作参数和64位传输/接收FIFO(先进先出堆栈)可通过SPI接口控制。在一个典型系统里,。CC1100基于0.18微米CMOS晶体的Chipcon的SmartRF04技术。

AVR程序:

/*****************************************************************************************
//函数名:UartInit()
//输入:无
//输出:无
//功能描述:串口初始化程序
/*****************************************************************************************/
void UartInit(void)           //用232串口发数据到PC,收集数据
  {
    UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
    UBRRL= (F_osc/9600/16-1)%256;
    UBRRH= (F_osc/9600/16-1)/256;
    UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
  }


void SpiInit(void)
{
 DDRB|=(1<<SPI_DO);
 DDRB|=(1<<SPI_Clock);
 DDRB|=(1<<Chip_Select);
 
 PORTB|=(1<<SPI_DI);
 
 
 CSN_0;
 SCK_0;
 CSN_1;
}

/*****************************************************************************************
//函数名:CpuInit()
//输入:无
//输出:无
//功能描述:SPI初始化程序
/*****************************************************************************************/
void CpuInit(void)
{
  UartInit();
       
  SpiInit();
  delay(5000);
}
 
//*****************************************************************************************
//函数名:SpisendByte(INT8U dat)
//输入:发送的数据
//输出:无
//功能描述:SPI发送一个字节
//*****************************************************************************************
INT8U SpiTxRxByte(INT8U dat)
{
 INT8U i,temp;
 temp = 0;
 
 SCK_0;
 for(i=0; i<8; i++)
 {
  if(dat & 0x80)
  {
   MOSI_1;
  }
  else MOSI_0;
  dat <<= 1;

  SCK_1;
  _nop_();
  _nop_();

  temp <<= 1;
  if(MISO)temp++;
  SCK_0;
  _nop_();
  _nop_(); 
 }
 return temp;
}

//*****************************************************************************************
//函数名:void RESET_CC1100(void)
//输入:无
//输出:无
//功能描述:复位CC1100
//*****************************************************************************************
void RESET_CC1100(void)
{
 CSN_0;
 while (GDO0);
 SpiTxRxByte(CCxxx0_SRES);   //写入复位命令
 while (GDO0);
 CSN_1;
}

//*****************************************************************************************
//函数名:void POWER_UP_RESET_CC1100(void)
//输入:无
//输出:无
//功能描述:上电复位CC1100
//*****************************************************************************************
void POWER_UP_RESET_CC1100(void)
{
 CSN_1;
 halWait(1);
 CSN_0;
 halWait(1);
 CSN_1;
 halWait(41);
 RESET_CC1100();     //复位CC1100
}

//*****************************************************************************************
//函数名:void halSpiWriteReg(INT8U addr, INT8U value)
//输入:地址和配置字
//输出:无
//功能描述:SPI写寄存器
//*****************************************************************************************
void halSpiWriteReg(INT8U addr, INT8U value)
{
    CSN_0;
    while (GDO0);
    SpiTxRxByte(addr);  //写地址
    SpiTxRxByte(value);  //写入配置
    CSN_1;
}

//*****************************************************************************************
//函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
//输入:地址,写入缓冲区,写入个数
//输出:无
//功能描述:SPI连续写配置寄存器
//*****************************************************************************************
void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
{
    INT8U i, temp;
 temp = addr | WRITE_BURST;
    CSN_0;
    while (GDO0);
    SpiTxRxByte(temp);
    for (i = 0; i < count; i++)
  {
        SpiTxRxByte(buffer);
    }
    CSN_1;
}

//*****************************************************************************************
//函数名:void halSpiStrobe(INT8U strobe)
//输入:命令
//输出:无
//功能描述:SPI写命令
//*****************************************************************************************
void halSpiStrobe(INT8U strobe)
{
    CSN_0;
    while (GDO0);
    SpiTxRxByte(strobe);  //写入命令
    CSN_1;
}

 

 

//*****************************************************************************************
//函数名:INT8U halSpiReadReg(INT8U addr)
//输入:地址
//输出:该寄存器的配置字
//功能描述:SPI读寄存器
//*****************************************************************************************
INT8U halSpiReadReg(INT8U addr)
{
 INT8U temp, value;
       temp = addr|READ_SINGLE;//读寄存器命令
 CSN_0;
 while (GDO0);
 SpiTxRxByte(temp);
 value = SpiTxRxByte(0);
 CSN_1;
 return value;
}


//*****************************************************************************************
//函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
//输入:地址,读出数据后暂存的缓冲区,读出配置个数
//输出:无
//功能描述:SPI连续写配置寄存器
//*****************************************************************************************
void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
{
    INT8U i,temp;
 temp = addr | READ_BURST;  //写入要读的配置寄存器地址和读命令
    CSN_0;
    while (GDO0);
 SpiTxRxByte(temp);  
    for (i = 0; i < count; i++)
 {
        buffer = SpiTxRxByte(0);
    }
    CSN_1;
}


//*****************************************************************************************
//函数名:INT8U halSpiReadReg(INT8U addr)
//输入:地址
//输出:该状态寄存器当前值
//功能描述:SPI读状态寄存器
//*****************************************************************************************
INT8U halSpiReadStatus(INT8U addr)
{
    INT8U value,temp;
 temp = addr | READ_BURST;  //写入要读的状态寄存器的地址同时写入读命令
    CSN_0;
    while (GDO0);
    SpiTxRxByte(temp);
 value = SpiTxRxByte(0);
 CSN_1;
 return value;
}


//*****************************************************************************************
//函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
//输入:无
//输出:无
//功能描述:配置CC1100的寄存器
//*****************************************************************************************
void halRfWriteRfSettings(void)
{
    //halSpiWriteReg(CCxxx0_FIFOTHR,0x09);
    //halSpiWriteReg(CCxxx0_MCSM1,0x00);     //CCA,没有作通
    halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL2);//自已加的
    // Write register settings
    halSpiWriteReg(CCxxx0_FSCTRL1,  rfSettings.FSCTRL1);
    halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL0);
    halSpiWriteReg(CCxxx0_FREQ2,    rfSettings.FREQ2);
    halSpiWriteReg(CCxxx0_FREQ1,    rfSettings.FREQ1);
    halSpiWriteReg(CCxxx0_FREQ0,    rfSettings.FREQ0);
    halSpiWriteReg(CCxxx0_MDMCFG4,  rfSettings.MDMCFG4);
    halSpiWriteReg(CCxxx0_MDMCFG3,  rfSettings.MDMCFG3);
    halSpiWriteReg(CCxxx0_MDMCFG2,  rfSettings.MDMCFG2);
    halSpiWriteReg(CCxxx0_MDMCFG1,  rfSettings.MDMCFG1);
    halSpiWriteReg(CCxxx0_MDMCFG0,  rfSettings.MDMCFG0);
    halSpiWriteReg(CCxxx0_CHANNR,   rfSettings.CHANNR);
    halSpiWriteReg(CCxxx0_FSCAL0,   rfSettings.FSCAL0);
    halSpiWriteReg(CCxxx0_FSTEST,   rfSettings.FSTEST);
    halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
    halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
    halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
    halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
    halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);   
    halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
    halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
    halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
    halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
}

 

 


//*****************************************************************************************
//函数名:
//输入:
//输出:
//功能描述:CC1100发送主叫数据
//*****************************************************************************************
void halRfSendPacket(INT8U *txBuffer, INT8U size)

   
    halSpiWriteReg(CCxxx0_TXFIFO, size+2);
    halSpiWriteReg(CCxxx0_TXFIFO, ID_Opponent);
    halSpiWriteReg(CCxxx0_TXFIFO, ID_Oneself);

    halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
   
   
    halSpiStrobe(CCxxx0_STX);  //进入发送模式发送数据
  
    // Wait for GDO0 to be set - > sync transmitted
    while (!GDO0);
   
    // Wait for GDO0 to be set - > sync transmitted
    while (GDO0);
   
 halSpiStrobe(CCxxx0_SFTX);        //清洗发送缓冲区
 
}

相关链接:http://auction1.taobao.com/auction/item_detail-0db2-139665e24fc8c161b9610a81e910b8e4.jhtml

相关帖子

沙发
wang321|  楼主 | 2008-7-22 14:09 | 只看该作者

800M无线模块

产品说明:
 
    云佳系列无线通信模块采用目前业界领先、应用广泛的最新一代无线射频芯片,是专为工作在2.4G全球免申请频段设计的低功耗无线数字通信模块。
    该系列模块是工业级标准的产品,可以在极恶劣的环境下工作,具有成本低、体积小、工作稳定、产品一致性好等特点。云佳系列无线通信模块根据是否带MCU、是否加功率放大、数据接口和封装方式等划分为多种型号可供选择,同系列内的各种型号模块可以互相通信。全部型号产品设计先进,各项技术指标优良,符合FCC规范的参数要求,可以满足客户的认证需要。
    云佳系列1A型是不带MCU、带放大功能,发射功率在50mW以下的长距离无线通信模块。
 
1.主要特点 
.主要特点

 ·      高效的SPI接口;
 ·      通信距离长、接受灵敏度高,视距可靠传输距离可达800m;
 ·      采用FSK的方式调制,支持OOK/ASK/MSK调制;
 ·      可编程配置载频 2400-2483 MHz;
 ·      可编程控制的数据传输率,最高可达500kbps;
 ·      可编程控制的输出功率,对所有的支持频段可达+17dBm;
 ·      可灵活配置多种通讯信道,快速频点切换的特点可满足跳频系统的需要;
 ·      低功耗:功率<50mw,接收电流<30mA,发射电流<80mA,休眠时电流6uA;
 ·      数据缓冲、突发数据传输,带数字RSSI输出、连接质量指示;
 ·     支持传输前自动清理信道访问(CCA),即载波侦听系统;
 ·      强大的数字特征,可使用廉价的微控制器得到高性能的RF系统;
2.主要技术指标
 
工作频率 2400M  
调制方式 FSK/OOK/ASK/MSK 
发射功率 <17 dBm(<50mW)   
接收灵敏度 -98 dB 
传输速率 0-500 kbps 
发射电流 <80 mA 
接收电流 <30 mA 
待机电流 <6 uA 
工作信道 255个频段选择 
数据接口 SPI接口 
通讯距离 0-800米(20dbm,10k速率,可视距离) 
天线阻抗 50Ω 
工作温度 - 40 -  85 °C 
供电方式 DC 1.8V~3.6V 
尺寸 21 x 12.5 mm (包括PCB天线) 


 
3.引脚定义
 
引脚 名称 方向 描述 
1 +3.3V —— 模块电源,直流3.3v正极输入 
2 MOSI 输入 模块数据输入,符合SPI标准(四线SPI) 
3 SCLK 输入 SPI时钟输入,符合SPI标准(四线SPI) 
4 MISO 输出 模块数据输出,符合SPI标准(四线SPI)  
5 GDO2 输出 模块数据输出,由寄存器配置 
6 GND —— 模块电源,直流3.3v负极输入 
7 GDO0 输出 模块数据输出,由寄存器配置 
8 CS_RF 输入 模块选择输入,符合SPI标准(四线SPI) 


 
4.应用范围
 ·     远程无线遥控、无线防丢器等
 ·     消费类电子无线应用
 ·     物流跟踪、仓库巡检、电子标签等
 ·     长距离遥感勘测
 ·     替代232、485进行无线数据通信
 ·    工业仪器仪表无线数据采集和控制
 ·    住宅、楼宇智能无线数据采集和控制
 ·     无线传感器网络应用
全国促销开始,欢迎咨询!
开发无极限,轻松用无线,
QQ:845524585  
公司主页www.maoyunbin.com.cn
无线模块总汇 http://shop34938326.taobao.com/

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

73

帖子

2

粉丝