搜索
bottom↓
回复: 1

si1000通信,调不通,找不出问题,希望大家帮忙看看程序!!!

[复制链接]

出0入0汤圆

发表于 2011-11-21 14:57:25 | 显示全部楼层 |阅读模式
硬件电路图如下:
(原文件名:si1000无线.jpg)

发送程序:
//初始化部分
void RadioPro()
{
        U8 Status1,Status2;
        //reset
        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1,0x80);
        while(NIRQ==1);
        //设置中心频率434MHz

        WriteReg(EZRADIOPRO_FREQUENCY_BAND_SELECT,0x53);               
        WriteReg(EZRADIOPRO_NOMINAL_CARRIER_FREQUENCY_1,0x64);       
        WriteReg(EZRADIOPRO_NOMINAL_CARRIER_FREQUENCY_0,0x00);
        //发射数据速率(9.6Kbps)
        WriteReg(EZRADIOPRO_TX_DATA_RATE_1,0x4E);
        WriteReg(EZRADIOPRO_TX_DATA_RATE_0,0xA5);
        WriteReg(EZRADIOPRO_MODULATION_MODE_CONTROL_1,0x2C);
        //发射偏差(+ -4.8kHz)
        WriteReg(EZRADIOPRO_FREQUENCY_DEVIATION, 0x08);
        WriteReg(EZRADIOPRO_MODULATION_MODE_CONTROL_2,0x00);
        /*set the packet structure and the modulation type*/

        WriteReg(EZRADIOPRO_PREAMBLE_LENGTH, 0x0A); //前导码长度
        //Disable header bytes; set variable packet length (the length of the payload is defined by the
        //received packet length field of the packet); set the synch word to two bytes long
        WriteReg(EZRADIOPRO_HEADER_CONTROL_2, 0x02);
        //Set the sync word pattern to 0x2DD4
        WriteReg(EZRADIOPRO_SYNC_WORD_3, 0x2D);
        WriteReg(EZRADIOPRO_SYNC_WORD_2, 0xD4);
        //enable the TX & RX packet handler and CRC-16 (IBM) check
        WriteReg(EZRADIOPRO_DATA_ACCESS_CONTROL, 0x8D); //
        //Disable the receive header filters
        WriteReg(EZRADIOPRO_HEADER_CONTROL_1, 0x00 ); //
        //WriteReg(EZRADIOPRO_HEADER_CONTROL_2, 0x04 ); //
        //enable FIFO mode and FSK modulation
        WriteReg(EZRADIOPRO_MODULATION_MODE_CONTROL_2, 0xE2); // FSK Mode,
        //WriteReg(EZRADIOPRO_GPIO1_CONFIGURATION, 0x12); //(set the TX state)//不采用GPIO控制,所以不设置
        //WriteReg(EZRADIOPRO_GPIO2_CONFIGURATION, 0x15); //(set the RX state)
        //set the non-default Si4432 registers
        //set the VCO and PLL
        WriteReg(EZRADIOPRO_VCO_CURRENT_TRIMMING, 0x7F);
        //WriteReg(EZRADIOPRO_CHARGEPUMP_CURRENT_TRIMMING_OVERRIDE, 0x80);
        WriteReg(EZRADIOPRO_DIVIDER_CURRENT_TRIMMING, 0x40);
        //set Crystal Oscillator Load Capacitance register
        WriteReg(EZRADIOPRO_CRYSTAL_OSCILLATOR_LOAD_CAPACITANCE, 0xD7);
        //Enable two interrupts:
        // a) one which shows that a valid packet received: 'ipkval'
        // b) second shows if the packet transmit with incorrect CRC: 'icrcerror'
        WriteReg(EZRADIOPRO_INTERRUPT_ENABLE_1, 0x04);
        WriteReg(EZRADIOPRO_INTERRUPT_ENABLE_2, 0x00);
         
        //read interrupt status registers to release all pending interrupts
        Status1 = ReadReg(EZRADIOPRO_INTERRUPT_STATUS_1);
        Status2 = ReadReg(EZRADIOPRO_INTERRUPT_STATUS_2);
}
//发送数据
void Radiosend()
{
        U8 Status1,Status2;
        //set the length of the payload to 8 bytes
        WriteReg(EZRADIOPRO_TRANSMIT_PACKET_LENGTH,0x08);
        //fill the payload into the transmit FIFO
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x41);        //"A"
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x42);        //"B"
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x43);        //"C"
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x44);        //"D"
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x45);        //"E"
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x46);        //"F"
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x47);        //"G"
        WriteReg(EZRADIOPRO_FIFO_ACCESS,0x0D);  //(CR)
       
        //read interrupt status        and reset NIRQ
        Status1=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_1);
        Status2=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_2);
        //enable transmitter
        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1, 0x09);
        while(NIRQ==1);
        Status1=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_1);
        Status2=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_2);

        LED2=0;
        LED3=0;
        delay(1000);
        LED2=1;
        LED3=1;
        delay(1000);
}
接收程序:
//初始化部分
void RadioPro()
{
        //reset
        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1,0x81);//复位
        //设置中心频率434MHz

        WriteReg(EZRADIOPRO_FREQUENCY_BAND_SELECT,0x53);                //0x53,从240-479.9MHz中选择
        WriteReg(EZRADIOPRO_NOMINAL_CARRIER_FREQUENCY_1,0x64);       
        WriteReg(EZRADIOPRO_NOMINAL_CARRIER_FREQUENCY_0,0x00);
        //频偏(+ -4.8kHz)
        WriteReg(EZRADIOPRO_IF_FILTER_BANDWIDTH, 0x2E); //
        WriteReg(EZRADIOPRO_CLOCK_RECOVERY_OVERSAMPLING_RATIO, 0x68);
        WriteReg(EZRADIOPRO_CLOCK_RECOVERY_OFFSET_2, 0x01);
        WriteReg(EZRADIOPRO_CLOCK_RECOVERY_OFFSET_1, 0x3A);
        WriteReg(EZRADIOPRO_CLOCK_RECOVERY_OFFSET_0, 0x93);
        WriteReg(EZRADIOPRO_CLOCK_RECOVERY_TIMING_LOOP_GAIN_1, 0x02);
        WriteReg(EZRADIOPRO_CLOCK_RECOVERY_TIMING_LOOP_GAIN_0, 0x78);
        WriteReg(EZRADIOPRO_AFC_LOOP_GEARSHIFT_OVERRIDE, 0x01);
        WriteReg(EZRADIOPRO_FREQUENCY_DEVIATION, 0x18);
        /*set the packet structure and the modulation type*/
        //set preamble detection threshold to 20bits
        WriteReg(EZRADIOPRO_PREAMBLE_DETECTION_CONTROL, 0x2A);//前导码侦测控制
        //Disable header bytes; set variable packet length (the length of the payload is defined by the
        //received packet length field of the packet); set the synch word to two bytes long
        WriteReg(EZRADIOPRO_HEADER_CONTROL_2, 0x02);
        //Set the sync word pattern to 0x2DD4
        WriteReg(EZRADIOPRO_SYNC_WORD_3, 0x2D);
        WriteReg(EZRADIOPRO_SYNC_WORD_2, 0xD4);
        //enable the TX & RX packet handler and CRC-16 (IBM) check
        WriteReg(EZRADIOPRO_DATA_ACCESS_CONTROL, 0x8D); //
        //Disable the receive header filters
        WriteReg(EZRADIOPRO_HEADER_CONTROL_1, 0x00 ); //
        //enable FIFO mode and FSK modulation
        WriteReg(EZRADIOPRO_MODULATION_MODE_CONTROL_2, 0x22); // FSK Mode
        //WriteReg(EZRADIOPRO_GPIO1_CONFIGURATION, 0x12); //(set the TX state)//不采用GPIO控制,所以不设置
        //WriteReg(EZRADIOPRO_GPIO2_CONFIGURATION, 0x15); //(set the RX state)
        //set the non-default Si4432 registers
        //set the VCO and PLL
        WriteReg(EZRADIOPRO_VCO_CURRENT_TRIMMING, 0x7F);
        WriteReg(EZRADIOPRO_CHARGEPUMP_CURRENT_TRIMMING_OVERRIDE, 0x80);
        WriteReg(EZRADIOPRO_DIVIDER_CURRENT_TRIMMING, 0x40);
        //set the AGC
        WriteReg(EZRADIOPRO_AGC_OVERRIDE_2, 0x0B);
        //set ADC reference voltage to 0.9V
        WriteReg(EZRADIOPRO_DELTASIGMA_ADC_TUNING_2, 0x04);
        WriteReg(EZRADIOPRO_CLOCK_RECOVERY_GEARSHIFT_OVERRIDE, 0x03);
        //set Crystal Oscillator Load Capacitance register
        WriteReg(EZRADIOPRO_CRYSTAL_OSCILLATOR_LOAD_CAPACITANCE, 0xD7);
               
}
void RadioReceive()
{
        BYTE length;
        BYTE temp;
        BYTE payload[]={0,0,0,0,0,0,0,0};
        U8 status1,status2;
        //clear RX FIFO
        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_2,0x02);
        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_2,0x00);
        //Enable two interrupts
        WriteReg(EZRADIOPRO_INTERRUPT_ENABLE_1,0x03); //ipkval
        WriteReg(EZRADIOPRO_INTERRUPT_ENABLE_2,0x00); //icrerror
        //enable receive chain
        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1, 0x05);

        //read interrupt status reg
        status1=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_1);
        status2=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_2);
        //wait for Receive interrupt
        while(1)
        {
        //read interrupt status reg
        if(NIRQ==0)
        {
                status1=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_1);
                status2=ReadReg(EZRADIOPRO_INTERRUPT_STATUS_2);               
                if((status1&0x01)==0x01)
                {
                        //disable the receive chain
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1,0x01);
                        //reset RX FIFO
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_2,0x02);
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_2,0x00);
                        //blink LED to show error
                        LED2=0;
                        LED3=0;
                        LED4=0;
                        LED5=0;
                        delay(1000);
                        LED2=1;
                        LED3=1;
                        LED4=1;
                        LED5=1;
                        //enable the reecive chain again
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1,0x05);
                }
                if((status1&0x02)==0x02)
                {
                        //disable the receive chain
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1,0x01);
                        //read the length of the received payload
                        length=ReadReg(EZRADIOPRO_RECEIVED_PACKET_LENGTH);
                        if(length<11)
                        {
                                //get the payload from the RX FIFO
                                for(temp=0;temp<length;temp++)
                                {
                                        payload[temp]=ReadReg(EZRADIOPRO_FIFO_ACCESS);
                                }
                                if(length==8)
                                {
                                        if(memcmp(&payload[0],"ABCDEFG1",7)==0)
                                        {
                                                LED2=0;
                                                delay(100);
                                                LED2=1;
                                        }
                                }                       
                        }
                        //reset RX FIFO
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_2,0x02);
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_2,0x00);
                        //enable RX FIFO
                        WriteReg(EZRADIOPRO_OPERATING_AND_FUNCTION_CONTROL_1,0x05);
                }
        }
        }
}
有发射数据包中断,但是没有接收中断,问题在哪?

出0入0汤圆

发表于 2011-12-27 11:13:24 | 显示全部楼层
回复【楼主位】duguchengxin
-----------------------------------------------------------------------

你好:我也是在研究si1000无线通信的,也是发生了不能通信的状况,方便详聊吗?我的QQ316899694
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 15:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表