搜索
bottom↓
回复: 148

基于CC2500的HID-JoyStick无线飞行模拟器硬件初步制作成功,可以扩展作成无线键盘、鼠

[复制链接]

出0入0汤圆

发表于 2007-12-16 13:20:30 | 显示全部楼层 |阅读模式
PC端采用一个ATmega8 + CC2500模块, 采用网上找到的软件USB驱动,实现为一个标准的HID-JoyStick设备,所以是免驱动的。
取名为RF-Stick,
正面照:

背面照:

插上PC机后,被识别为一个标准的游戏控制器:


RFStick源代码:
点击此处下载ourdev_189095.rar(文件大小:98K)
CC2500部分的控制代码,是参考了前面那位制作无线鼠标的兄弟的,但我改成了硬件SPI方式。

遥控器端是用飞Lama V3的E-SKY ET2040 4通道遥控器改的
安装照:(PPM信号处理板是按原遥控器上的电压指示电路板的大小做的,并用铜柱加螺丝固定在其上面)
点击此处打开ourdev_189096.PNG(文件大小:790K,只有300K以内的图片才能直接显示)
PPM信号处理板正面:
点击此处打开ourdev_189097.PNG(文件大小:858K,只有300K以内的图片才能直接显示)
PPM信号处理板背面:
点击此处打开ourdev_189098.PNG(文件大小:860K,只有300K以内的图片才能直接显示)
与CC2500模块组合后的效果:
点击此处打开ourdev_189099.PNG(文件大小:847K,只有300K以内的图片才能直接显示)

遥控器源代码:
点击此处下载ourdev_189100.rar(文件大小:24K)

出0入0汤圆

发表于 2007-12-16 13:57:37 | 显示全部楼层
哇 好厉害!
这个RFStick都可以拿出来卖了:)

出0入0汤圆

 楼主| 发表于 2007-12-16 14:41:24 | 显示全部楼层
谢谢~

RFStick是另有用途的,这个只是个人爱好,所有找了些网上的资料做了一个。

看来对这个感兴趣的人不多啊

我原来的帖子在这里,也没有几个人回复:

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=865661&bbs_page_no=1&search_mode=3&search_text=rabbitx2006&bbs_id=1000

上面有RF Stick的PCB图

呵呵,共做了30片电路板,只用了一个就成功了。


不知道上次做无线鼠标的兄弟是否感兴趣,作为感谢,我想送你几片空板,这样应该可以做个USB口的无线鼠标了。

出0入0汤圆

发表于 2007-12-16 18:24:21 | 显示全部楼层
我也想要,楼主能否赏两片啊?

呵呵

期待中......

出0入0汤圆

发表于 2007-12-16 19:04:45 | 显示全部楼层
牛~

出0入0汤圆

发表于 2007-12-16 19:10:22 | 显示全部楼层
赠送吗?呵呵

出0入0汤圆

发表于 2007-12-16 19:10:49 | 显示全部楼层
牛,谢谢!

出0入0汤圆

 楼主| 发表于 2007-12-16 19:23:35 | 显示全部楼层
各位,不好意思啊~

我只是想送几片给那位“fox wolf 猩猩”,因为无线模块是看了他的帖子才搞好的

他的帖子:
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=841117&bbs_page_no=1&search_mode=1&search_text=CC2500&bbs_id=1000

出0入0汤圆

 楼主| 发表于 2007-12-17 19:25:06 | 显示全部楼层
贴一张飞FMS模拟器的照片:

出0入0汤圆

发表于 2007-12-17 20:18:50 | 显示全部楼层
强!!!

出0入0汤圆

发表于 2007-12-18 10:25:35 | 显示全部楼层
好东西,我正在找

出0入0汤圆

发表于 2007-12-18 20:24:23 | 显示全部楼层
楼主能公布你的QQ号吗?或者加我的QQ也行,有个问题想请教你.

出0入0汤圆

发表于 2007-12-18 20:49:29 | 显示全部楼层
控改成2.4G了?

出0入0汤圆

 楼主| 发表于 2007-12-18 22:04:01 | 显示全部楼层
QQ很少用,号码不记得了,我的email: rabbitxf@gmail.com。

或者,明天我加你,现在的机器上没有qq。

出10入95汤圆

发表于 2007-12-19 08:40:25 | 显示全部楼层
楼主厉害!

出0入0汤圆

发表于 2007-12-19 10:14:47 | 显示全部楼层
这里有一个单片式无线+USB

出0入0汤圆

发表于 2007-12-19 11:44:53 | 显示全部楼层
// Chipcon
// Product = CC2500
// Chip version = E
// Crystal accuracy = 40 ppm
// X-tal frequency = 26 MHz
// RF output power = 0 dBm
// RX filterbandwidth = 540.000000 kHz
// Deviation = 0.000000
// Datarate = 250.000000 kbps
// Modulation = (7) MSK
// Manchester enable = (0) Manchester disabled
// RF Frequency = 2433.000000 MHz
// Channel spacing = 199.950000 kHz
// Channel number = 0
// Optimization = Sensitivity
// Sync mode = (3) 30/32 sync word bits detected
// Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
// CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
// Forward Error Correction = (0) FEC disabled
// Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
// Packetlength = 255
// Preamble count = (2)  4 bytes
// Append status = 1
// Address check = (0) No address check
// FIFO autoflush = 0
// Device address = 0
// GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
// GDO2 signal selection = (11) Serial Clock
typedef struct
{
    uchar fsctrl1;    // Frequency synthesizer control.
    uchar fsctrl0;    // Frequency synthesizer control.
       
    uchar freq2;      // Frequency control word, high byte.
    uchar freq1;      // Frequency control word, middle byte.
    uchar freq0;      // Frequency control word, low byte.
       
    uchar mdmcfg4;    // Modem configuration.
    uchar mdmcfg3;    // Modem configuration.
    uchar mdmcfg2;    // Modem configuration.
    uchar mdmcfg1;    // Modem configuration.
    uchar mdmcfg0;    // Modem configuration.
       
    uchar channr;     // Channel number.
       
    uchar deviatn;    // Modem deviation setting (when FSK modulation is enabled).
       
    uchar frend1;     // Front end RX configuration.
    uchar frend0;     // Front end RX configuration.
       
    uchar mcsm0;      // Main Radio Control State Machine configuration.
       
    uchar foccfg;     // Frequency Offset Compensation Configuration.
       
    uchar bscfg;      // Bit synchronization Configuration.
       
    uchar agcctrl2;   // AGC control.
    uchar agcctrl1;   // AGC control.
    uchar agcctrl0;   // AGC control.
       
    uchar fscal3;     // Frequency synthesizer calibration.
    uchar fscal2;     // Frequency synthesizer calibration.
    uchar fscal1;     // Frequency synthesizer calibration.
    uchar fscal0;     // Frequency synthesizer calibration.
       
    uchar fstest;     // Frequency synthesizer calibration.
       
    uchar test2;      // Various test settings.
    uchar test1;      // Various test settings.
    uchar test0;      // Various test settings.
       
    uchar iocfg2;     // GDO2 output pin configuration.
    uchar iocfg0d;          // GDO0 output pin configuration. Refer to SmartRF? Studio User Manual for detailed pseudo register explanation.
   
        uchar pktctrl1;   // Packet automation control.
    uchar pktctrl0;   // Packet automation control.
   
        uchar addr;       // Device address.
   
        uchar pktlen;     // Packet length.
} RF_SETTING;


const RF_SETTING rfSetting PROGMEM =
{
    0x07,   // FSCTRL1   Frequency synthesizer control.
    0x00,   // FSCTRL0   Frequency synthesizer control.
       
    0x5D,   // FREQ2     Frequency control word, high byte.
    0x93,   // FREQ1     Frequency control word, middle byte.
    0xB1,   // FREQ0     Frequency control word, low byte.
       
    0x2D,   // MDMCFG4   Modem configuration.
    0x3B,   // MDMCFG3   Modem configuration.
    0x73,   // MDMCFG2   Modem configuration.
    0x22,   // MDMCFG1   Modem configuration.
    0xF8,   // MDMCFG0   Modem configuration.
       
    0x00,   // CHANNR    Channel number.
       
    0x00,   // DEVIATN   Modem deviation setting (when FSK modulation is enabled).
       
    0xB6,   // FREND1    Front end RX configuration.
    0x10,   // FREND0    Front end RX configuration.
       
    0x18,   // MCSM0     Main Radio Control State Machine configuration.
       
    0x1D,   // FOCCFG    Frequency Offset Compensation Configuration.
       
    0x1C,   // BSCFG     Bit synchronization Configuration.
       
    0xC7,   // AGCCTRL2  AGC control.
    0x00,   // AGCCTRL1  AGC control.
    0xB2,   // AGCCTRL0  AGC control.
       
    0xEA,   // FSCAL3    Frequency synthesizer calibration.
    0x0A,   // FSCAL2    Frequency synthesizer calibration.
    0x00,   // FSCAL1    Frequency synthesizer calibration.
    0x11,   // FSCAL0    Frequency synthesizer calibration.
       
    0x59,   // FSTEST    Frequency synthesizer calibration.
       
    0x88,   // TEST2     Various test settings.
    0x31,   // TEST1     Various test settings.
    0x0B,   // TEST0     Various test settings.
       
    0x0B,   // IOCFG2    GDO2 output pin configuration.
    0x06,   // IOCFG0D   GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.
   
        0x04,   // PKTCTRL1  Packet automation control.
    0x05,   // PKTCTRL0  Packet automation control.
   
        0x00,   // ADDR      Device address.
    0x15    // PKTLEN    Packet length.
};

/*
---------------------------------------------------------------------
Function        :        SpiTxRxuchar()
Description        :        发送同时接收数据字节(采用SPI模块的查询方式)
---------------------------------------------------------------------
*/
uchar SpiTxRxuchar(uchar dat)
{
        uchar volatile temp;

        SPDR = dat;                                                // 启动数据传输       
        while(!(SPSR & (1 << SPIF)))
        {
                //asm("wdr");
        }                                                                // 等待传输结束
        temp = SPDR;
       
        return (temp);
}

/*
---------------------------------------------------------------------
Function        :        ResetCCxx00()
Description        :        复位CC2500
---------------------------------------------------------------------
*                                        min 40 us
*                 <------------------>
* CSn      |--|  |--------------------|            |-----
*          |  |  |                    |            |
*              --                      ------------
*
* MISO                                     |----|
*          -----------------------------|  |    |
*                                        --      ---------
*               Unknown / don't care
*                                       SRES     done
---------------------------------------------------------------------
*/
void ResetCCxx00(void)
{
        CSn_EN();                                // 片选
   
        while (GDO1_IN())                //
        {
                //asm("wdr");
        }
    SpiTxRxuchar(SRES);                //写入复位命令
        /*while (GDO1_IN())                //
        {
                //asm("wdr");
        }*/
    CSn_DIS();                                // 取消片选       
}

/*
---------------------------------------------------------------------
Function        :        PowerUpResetCCxx00()
Description        :        上电复位
---------------------------------------------------------------------
*/
void PowerUpResetCCxx00(void)
{
        CSn_DIS();
    _delay_ms(1);
    CSn_EN();
    _delay_ms(1);
    CSn_DIS();
    _delay_ms(41);
    ResetCCxx00();
}

/*
---------------------------------------------------------------------
Function        :        halSpiWriteReg()
Description        :        单字节配置
---------------------------------------------------------------------
*/
void halSpiWriteReg(uchar addr, uchar value)
{
        CSn_EN();                        // 片选

        while(GDO1_IN())
        {
                //asm("wdr");
        }
        SpiTxRxuchar(addr);        // 写地址
    SpiTxRxuchar(value);// 写入配置
    CSn_DIS();                        // 取消片选   
}

/*
---------------------------------------------------------------------
Function        :        halSpiWriteBurstReg()
Description        :        n字节连续配置
---------------------------------------------------------------------
*/
void halSpiWriteBurstReg(uchar addr, uchar * pbuf, uchar n)
{

    uchar i;

    CSn_EN();                                        // 片选
        while(GDO1_IN())
        {
                //asm("wdr");
        }
    SpiTxRxuchar(addr | WRITE_BURST);
    for (i=0; i<n; i++)
        {
        SpiTxRxuchar(pbuf);        // 传送数据
    }

    CSn_DIS();                                        // 取消片选   
}

/*
---------------------------------------------------------------------
Function        :        halSpiStrobe()
Description        :        纯命令
---------------------------------------------------------------------
*/
void halSpiStrobe(uchar strobe)
{
        CSn_EN();                        // 片选

        while(GDO1_IN())        //
        {
                //asm("wdr");
        }
        SpiTxRxuchar(strobe);
        CSn_DIS();                        // 取消片选
}


/*
---------------------------------------------------------------------
Function        :        halSpiReadReg()
Description        :        单寄存器(字节)读取
---------------------------------------------------------------------
*/
uchar halSpiReadReg(uchar addr)
{
        uchar volatile rdat;
       
        CSn_EN();                                        // 片选
        while (GDO1_IN())
        {
                //asm("wdr");
        }
       
        SpiTxRxuchar(addr | READ_SINGLE);//读寄存器命令
        SpiTxRxuchar(0);
        CSn_DIS();                                        // 取消片选
       
        return (rdat);
}

/*
---------------------------------------------------------------------
Function        :        halSpiReadBurstReg()
Description        :        n个寄存器(字节)读取
---------------------------------------------------------------------
*/
void halSpiReadBurstReg(uchar addr, uchar *pbuf, uchar n)
{
    uchar i;

    CSn_EN();                                        // 片选
        while (GDO1_IN())
        {
                //asm("wdr");
        }       
    SpiTxRxuchar(addr | READ_BURST);
        for (i = 0; i < n; i++)
        {        
        pbuf = SpiTxRxuchar(0);
    }

    CSn_DIS();                                        // 取消片选
}

/*
---------------------------------------------------------------------
Function        :        halSpiReadStatus()
Description        :        读取的状态
---------------------------------------------------------------------
*/
uchar halSpiReadStatus(uchar addr)
{
    uchar volatile rdat;
       
        CSn_EN();                                // 片选
        while (GDO1_IN())
        {
                //asm("wdr");
        }
        SpiTxRxuchar(addr | READ_BURST);        //写入要读的状态寄存器的地址同时写入读命令
    rdat = SpiTxRxuchar(0);
        CSn_DIS();                                // 取消片选
       
        return (rdat);
}

/*
---------------------------------------------------------------------
Function        :        CC2500Init()
Description        :        配置CC2500的寄存器
---------------------------------------------------------------------
*/
void CC2500Init(void)
{       
        halSpiWriteReg(FSCTRL1, rfSetting.fsctrl1);    // Frequency synthesizer control.
    halSpiWriteReg(FSCTRL0, rfSetting.fsctrl0);            // Frequency synthesizer control.
       
    halSpiWriteReg(FREQ2, rfSetting.freq2);              // Frequency control word, high byte.
    halSpiWriteReg(FREQ1, rfSetting.freq1);                // Frequency control word, middle byte.
    halSpiWriteReg(FREQ0, rfSetting.freq0);                // Frequency control word, low byte.
       
    halSpiWriteReg(MDMCFG4, rfSetting.mdmcfg4);                // Modem configuration.
    halSpiWriteReg(MDMCFG3, rfSetting.mdmcfg3);                // Modem configuration.
    halSpiWriteReg(MDMCFG2, rfSetting.mdmcfg2);                // Modem configuration.
    halSpiWriteReg(MDMCFG1, rfSetting.mdmcfg1);                // Modem configuration.
    halSpiWriteReg(MDMCFG0, rfSetting.mdmcfg0);                // Modem configuration.
       
    halSpiWriteReg(CHANNR, rfSetting.channr);                // Channel number.
       
    halSpiWriteReg(DEVIATN, rfSetting.deviatn);                // Modem deviation setting (when FSK modulation is enabled).
       
    halSpiWriteReg(FREND1, rfSetting.frend1);                // Front end RX configuration.
    halSpiWriteReg(FREND0, rfSetting.frend0);                // Front end RX configuration.
       
    halSpiWriteReg(MCSM0, rfSetting.mcsm0);                // Main Radio Control State Machine configuration.
       
    halSpiWriteReg(FOCCFG, rfSetting.foccfg);                // Frequency Offset Compensation Configuration.
       
    halSpiWriteReg(BSCFG, rfSetting.bscfg);                // Bit synchronization Configuration.
       
    halSpiWriteReg(AGCCTRL2, rfSetting.agcctrl2);        // AGC control.
    halSpiWriteReg(AGCCTRL1, rfSetting.agcctrl1);        // AGC control.
    halSpiWriteReg(AGCCTRL0, rfSetting.agcctrl0);        // AGC control.
       
    halSpiWriteReg(FSCAL3, rfSetting.fscal3);                // Frequency synthesizer calibration.
    halSpiWriteReg(FSCAL2, rfSetting.fscal2);                // Frequency synthesizer calibration.
    halSpiWriteReg(FSCAL1, rfSetting.fscal1);                // Frequency synthesizer calibration.
    halSpiWriteReg(FSCAL0, rfSetting.fscal0);                // Frequency synthesizer calibration.
       
    halSpiWriteReg(FSTEST, rfSetting.fstest);                // Frequency synthesizer calibration.
       
    halSpiWriteReg(TEST2, rfSetting.test2);                // Various test settings.
    halSpiWriteReg(TEST1, rfSetting.test1);                // Various test settings.
    halSpiWriteReg(TEST0, rfSetting.test0);                // Various test settings.
       
    halSpiWriteReg(IOCFG2, rfSetting.iocfg2);                // GDO2 output pin configuration.
    halSpiWriteReg(IOCFG0D, rfSetting.iocfg0d);                // GDO0 output pin configuration. Refer to SmartRF? Studio User Manual for detailed pseudo register explanation.
   
        halSpiWriteReg(PKTCTRL1, rfSetting.pktctrl1);        // Packet automation control.
    halSpiWriteReg(PKTCTRL0, rfSetting.pktctrl0);        // Packet automation control.
   
        halSpiWriteReg(ADDR, rfSetting.addr);                // Device address.
   
        halSpiWriteReg(PKTLEN, rfSetting.pktlen);        // Packet length.
}

/*
---------------------------------------------------------------------
Function        :        SendPacket()
Description        :        发送主叫数据
---------------------------------------------------------------------
DESCRIPTION        :
        This function can be used to transmit a packet with packet length
up to 63 bytes. To use this function, GD00 must be configured to be
asserted when sync word is sent and de-asserted at the end of the
packet => halSpiWriteReg(IOCFG0, 0x06);The function implements polling
of GDO0. First it waits for GD00 to be set and then it waits for it to
be cleared.  
---------------------------------------------------------------------
ARGUMENTS        :
        uchar *pbuf
                Pointer to a buffer containing the data that are going to be transmitted
        uchar n
                The size of the txBuffer
---------------------------------------------------------------------
*/
void halRfSendPacket(uchar *pbuf, uchar n)
{   
        halSpiWriteBurstReg(TXFIFO, pbuf, n);
    halSpiStrobe(STX);
   
    while (!GDO0_IN())                // Wait for GDO0 to be set -> sync transmitted
        {
                //asm("wdr");
        }
   
    while (GDO0_IN())                // Wait for GDO0 to be cleared -> end of packet
        {
                //asm("wdr");
        }
}

/*
---------------------------------------------------------------------
Function        :        halRfRecivePacket()
Description        :        使用接收数据
---------------------------------------------------------------------
DESCRIPTION        :
        This function can be used to receive a packet of variable packet
length (first byte in the packet must be the length byte). The packet
length should not exceed the RX FIFO size. To use this function, GD00
must be configured to be asserted when sync word is sent and de-asserted
at the end of the packet => halSpiWriteReg(IOCFG0, 0x06); Also,
APPEND_STATUS in the PKTCTRL1 register must be enabled. The function
implements polling of GDO0. First it waits for GD00 to be set and then
it waits for it to be cleared. After the GDO0 pin has been de-asserted,
the RXBYTES register is read to make sure that there are bytes in the
FIFO. This is because the GDO signal will indicate sync received even
if the FIFO is flushed due to address filtering, CRC filtering, or
packet length filtering.
---------------------------------------------------------------------
ARGUMENTS        :
        uchar *pbuf
                Pointer to the buffer where the incoming data should be stored
        uchar *len
                Pointer to a variable containing the size of the buffer where
the incoming data should be stored. After this function returns, that
variable holds the packet length.

RETURN VALUE:
        uchar
        TRUE:   CRC OK
        FALSE:  CRC NOT OK (or no packet was put in the RX FIFO due to filtering)
---------------------------------------------------------------------
*/
uchar halRfRecivePacket(uchar *pbuf, uchar *len)
{
        uchar status[2];
    uchar pktlen;

    halSpiStrobe(SRX);   
    while (!GDO0_IN())
        {
                //asm("wdr");
        }                                                                                                        // Wait for GDO0 to be set -> sync received   
    while (GDO0_IN())
        {
                //asm("wdr");
        }                                                                                                        // Wait for GDO0 to be cleared -> end of packet

    if ((halSpiReadStatus(RXBYTES) & BYTES_IN_RXFIFO))
        {        
        pktlen = halSpiReadReg(RXFIFO);                                        // Read length byte
               
        if (pktlen <= *len)                                                 // Read data from RX FIFO and store in rxBuffer
                {
            halSpiReadBurstReg(RXFIFO, pbuf, pktlen);
            *len = pktlen;            
            halSpiReadBurstReg(RXFIFO, status, 2);                // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
            
            return (status[0] & CRC_OK);                                // MSB of LQI is the CRC_OK bit
                        return TRUE;
        }
                else
                {
            *len = pktlen;
                        halSpiStrobe(SFRX);                                                        // Flush RX FIFO
            return FALSE;
        }
    }
        else
        {
                return FALSE;
        }
}

出0入0汤圆

发表于 2007-12-20 11:22:18 | 显示全部楼层
程序还是有些问题

出0入0汤圆

 楼主| 发表于 2007-12-20 21:47:58 | 显示全部楼层
还不能正常通信吗?

接收部分,我已经改成检测GIO0脚电平方式了。

CC2500文档中指出,用SPI方式读状态来判断是否接收到数据包,可能会降低接收灵敏度。

另外,连续读状态寄存器的值,可能会出错。

出0入0汤圆

发表于 2007-12-21 01:01:59 | 显示全部楼层
哇哇哇,cool 逼! 用来抽极品9超爽啊!!看来rabbitx2006 也是模型爱好者。
喔喔,若果拿来参加AVR2008大赛(如果有AVR2008的话),肯定很大竞争力。嘿,赚到一两千刀 记得请客哦
多谢rabbitx2006 老兄啊!

我的目前地址:广州大学城广东工业大学材料能源学院 模具CAD 0401班 C69信箱
  吴展帆   
邮编:510006
mailbox:razorwu@126.com
send me some gold,send me a girl,but not a bomb :-)

近来找工作忙,可能论坛回复会少点了,包涵~

出0入0汤圆

 楼主| 发表于 2007-12-21 13:28:58 | 显示全部楼层
星期一给你寄去,用邮政的包裹方式寄。

出0入0汤圆

发表于 2007-12-21 18:56:48 | 显示全部楼层
嘻嘻有圣诞礼物收~~

出0入0汤圆

发表于 2007-12-21 20:23:16 | 显示全部楼层
已经改为查询GDO0方式了,可是还是不能通信.郁闷中.还是要感谢rabbitx2006 的大力支持

出0入70汤圆

发表于 2007-12-24 18:44:43 | 显示全部楼层
留个记号,考完试也做来玩玩

出0入0汤圆

发表于 2007-12-24 19:10:16 | 显示全部楼层
楼主,板子有多的吗?刚买了一套天地飞,还不敢飞,要练练手。

出0入0汤圆

发表于 2007-12-24 19:50:29 | 显示全部楼层
上图

点击此处打开ourdev_192872.jpg(文件大小:656K,只有300K以内的图片才能直接显示)

出0入0汤圆

发表于 2007-12-25 10:37:07 | 显示全部楼层
回glen_cao,你试着按以下步骤检查:
0,针脚有没有接错
1,你的spi通讯能运行不;
2,当地址值在0x30~0x3d时,通过设最高“burst”位的值来选择读状态寄存器或是写命令;
3,留心cc2500附带勘误表上的信息,很有用,特别是第3 Cyclic Redundancy Check (CRC)和第8 Reduced Link Performance at certain Frequencies;
另外建议读datasheet时做笔记~~(我个人习惯)

你不妨描述一下你的进展到哪一步就卡住,遇到啥问题~~~

出0入0汤圆

 楼主| 发表于 2007-12-25 12:02:55 | 显示全部楼层
fox wolf:

已通过顺丰速运寄出,预计明天就能收到
单号:025042087859

除了电路板,还有两颗3.3V低压差稳压芯片,请注意查收

出0入0汤圆

发表于 2007-12-26 11:43:53 | 显示全部楼层
今早收到,真是精美的礼物:-)
再次感谢rabbitx2006,祝你早日发掘更多CC2500的潜力,与大家分享~~

出0入0汤圆

发表于 2007-12-26 12:27:02 | 显示全部楼层
无线加油,自由自在,,顶。。。
            可以做一个超级终端。。

出0入0汤圆

发表于 2007-12-26 12:49:10 | 显示全部楼层
谢谢fox wolf 猩猩,按照您的说法,我多次检测.并且又看了一遍datasheet, 收获不小.

公司一共买了4个模块, 其中一个由于不小心被烧了。我只发现一个能够正常发送,所以现在还在查找是不是程序的原因。

出0入0汤圆

发表于 2007-12-26 16:56:43 | 显示全部楼层
回30的,datasheet说那模块是静电敏感器件特易烧,特别现在冬天人体静电不可忽略啊~~我当时玩还要戴我妈洗碗的胶手套来弄的嘻
cc1100的功率达+10dbm,2500才+1dbm(1100也贵过2500)不能说是工作频段不同而导致距离差别吧,我是业余,这只是我推测,有错请更正。

出0入0汤圆

发表于 2007-12-26 20:30:49 | 显示全部楼层
频率每上升一倍距离就下降一倍,从433到2.4G肯定近多了.

出0入0汤圆

发表于 2007-12-26 20:54:36 | 显示全部楼层
牛。。。

出0入0汤圆

 楼主| 发表于 2007-12-27 09:00:26 | 显示全部楼层
实际试验,用CC2500模块比我原来用433MHZ模块要近了不少,室内有效通信距离大概少了一半。

出0入0汤圆

发表于 2007-12-27 13:41:53 | 显示全部楼层
终于搞定了.喘了一口气!
问题出在这个函数
void ResetCCxx00(void)
{
        CSn_EN();                        // 片选
   
        while (GDO1_IN())                //
        {
                //asm("wdr");
        }
        SpiTxRxuchar(SRES);             //写入复位命令
        while (GDO1_IN());              //在这儿等待CC2500复位完成(GDO1出现低电平)------->曾经咨询过厂家, 他说不用这句, 害得我多花一周时间
        CSn_DIS();                      // 取消片选
}

出0入0汤圆

发表于 2007-12-27 16:55:20 | 显示全部楼层
嗯,能再具体点说明为什么吗?要不要很高深的数学推导的?我很菜
我推测是,对于sin(X)与sin(2X)在同一区间内积分,前者的值是后者的二分一,就是说传送相同距离后者要比前者花多一倍能量,对于同分量的能量,那后者要比前者传播得近一半了,是吗,请更改
谢谢扫盲

出0入0汤圆

发表于 2007-12-28 00:58:57 | 显示全部楼层
cc2500 可以加功放增加发射距离吗?

出0入0汤圆

发表于 2008-1-3 13:16:07 | 显示全部楼层
请教rabbitx2006:
1 您送我的稳压芯片是什么型号?我在你的旧贴
http://www.ouravr.com/bbs/bbs_content.jsp?bs_sn=865661&bbs_page_no=1&search_mode=3&search_text=rabbitx2006&bbs_id=1000
里找不到它的型号
2 你的设计使用硬件spi与2500通讯,那么板上的m8还支持isp下载吗?

出0入0汤圆

 楼主| 发表于 2008-1-3 14:13:08 | 显示全部楼层
1 晚上回去找找这个资料,应该是TI的芯片,最多输出100mA,芯片型号LP2985-33


2 可以的,电路板预留的焊盘直接支持AVR Dragon ISP接口

出0入0汤圆

发表于 2008-1-5 12:31:41 | 显示全部楼层
嗯,我还是对共用SPI脚感到困惑,ISP的时候难道不怕2500会误接收指令和产生干扰吗?
是不是在使用ISP下载的时候,必须保证控制2500的SS脚保持高电平,才能顺利下载?

另,楼主有.sch的原理图方便共享吗?

出0入0汤圆

 楼主| 发表于 2008-1-5 12:52:55 | 显示全部楼层
不会干扰的,ISP开始于单片机复位。

原理图没有画,你看一下那个PCB的图,结构很简单的。

出0入0汤圆

发表于 2008-1-23 19:56:43 | 显示全部楼层
LZ,想问下你,你用的LP2985-33好买吗?要多少钱一个?

出0入0汤圆

发表于 2008-1-24 07:52:26 | 显示全部楼层
不错 值得学习一下

出0入0汤圆

发表于 2008-1-24 11:39:04 | 显示全部楼层
好东西,顶

出0入0汤圆

发表于 2008-1-25 15:57:39 | 显示全部楼层
好东西,顶起来

出0入0汤圆

发表于 2008-2-15 22:12:51 | 显示全部楼层
路过,up下!!

出0入0汤圆

发表于 2008-3-17 13:47:30 | 显示全部楼层
按照楼主的电路,isp下载的时候,数据电压应该为5v,这样会损坏cc2500吗??
datasheet写的是数据端口电压最大电压为3.6v哦

出0入0汤圆

 楼主| 发表于 2008-4-10 15:58:09 | 显示全部楼层
好像没有问题

出0入0汤圆

发表于 2008-4-10 18:46:17 | 显示全部楼层
我喜欢

出0入0汤圆

发表于 2008-4-11 16:33:48 | 显示全部楼层
牛,学习学习。

出0入0汤圆

发表于 2008-4-11 19:03:07 | 显示全部楼层
太牛了。。

出0入0汤圆

发表于 2008-4-12 22:15:41 | 显示全部楼层
我做的CC1100的无线测温系统的通讯距离可以到150M左右,使用的是上海桑锐的模块

出0入0汤圆

发表于 2008-4-12 22:47:15 | 显示全部楼层
直接将CC2500换成CC1100应该没有问题,因为CC2500和CC1100的寄存器是一模一样的!通讯速度也一样,这样以来无线通讯频率降到433MHZ而距离可以到100M以上

出0入0汤圆

发表于 2008-4-13 10:12:28 | 显示全部楼层
不是有说433的可以达到一公里么,看来是加了PA了

出0入0汤圆

发表于 2008-6-17 00:34:06 | 显示全部楼层
好东西

出0入0汤圆

发表于 2008-7-2 08:24:39 | 显示全部楼层
很牛的说。

出0入0汤圆

发表于 2008-8-29 14:47:49 | 显示全部楼层
你们两个人的帖子我都看过,确实不错!!唉!!我是学单片机有点晚啊!!不知道楼主还有板吗?我现在也想做个!不知道可否赐教一下!谢谢!!

出0入0汤圆

 楼主| 发表于 2008-8-29 16:03:15 | 显示全部楼层
呵呵,又被挖出来了

板子是有的,但是设计不合理,导致无线通信距离极短。

另外,这个模块也比较贵,最近又发现一个便宜的,并且能够硬件处理较多事情(比如CRC校验)的2.4G无线模块,缺点是速率恒定1Mbps。

http://auction1.taobao.com/auction/trade_detail.htm?tradeID=952134766&itemID=1f231e9c5195234fd8ef70cbc12de568&xID=0db1

我测试了一下,室内可以达到15m左右。

出0入0汤圆

发表于 2008-8-29 21:01:03 | 显示全部楼层
发现自己居然没有标记,太意外了。

强帖留名。

出0入0汤圆

发表于 2008-8-30 11:28:59 | 显示全部楼层
哦!!谢了啊!!

出0入0汤圆

发表于 2008-8-30 15:24:31 | 显示全部楼层
学习了

出0入0汤圆

发表于 2008-8-31 12:16:48 | 显示全部楼层
记号备用

出0入0汤圆

发表于 2008-9-3 14:59:03 | 显示全部楼层
LZ,你的透明热缩管哪里买的?

出0入0汤圆

发表于 2008-9-3 15:09:23 | 显示全部楼层
留名

出0入0汤圆

发表于 2008-9-3 15:11:08 | 显示全部楼层
太牛了。景仰下

出0入0汤圆

发表于 2008-9-3 17:21:30 | 显示全部楼层
rabbitx2006:

http://auction1.taobao.com/auction/trade_detail.htm?tradeID=952134766&itemID=1f231e9c5195234fd8ef70cbc12de568&xID=0db1
这个模块你用过吗,可以发一点相关资料上来马?想了解一下

出0入0汤圆

发表于 2008-9-3 19:09:10 | 显示全部楼层
LZ能不能讲一下软件USB驱动,怎样实现一个标准的HID-JoyStick设备。我也想将游戏手柄改成无线的,但USB那部分开发不知怎样实现。谢谢!

出0入0汤圆

 楼主| 发表于 2008-9-3 19:20:20 | 显示全部楼层
呵呵,看来感兴趣的人还挺多。

【67楼】 godwot

这个芯片我写了个简单的收发驱动代码,是用硬件spi的,M32、M88、ATtiny24(usi方式实现)。

这是代码,两者代码类似,就是引脚有差异,另外还有一个用ATtiny24实现的,区别有点大:
1) for M32:
点击此处下载 ourdev_399813.rar(文件大小:75K) (原文件名:ACI6210S_Test.rar)

2) for M88
点击此处下载 ourdev_399814.rar(文件大小:50K) (原文件名:ACI6210S_Test88.rar)

3) for ATtiny24
点击此处下载 ourdev_399815.rar(文件大小:41K) (原文件名:ACI6210S_Test24.rar)

【68楼】 lzcswy

等我整理一下,我要实现一个能够支持XTR飞行模拟器的游戏遥控器,下次重新发帖。

上次在旺旺上跟一个网友聊了一下,实际上可以加一个航模遥控器接收部分,实现支持不需要修改航模遥控器的无线飞行模拟器硬件。

但无线射频方面的知识匮乏,估计只能买现成的接收器改了。

出0入0汤圆

发表于 2008-9-3 20:40:23 | 显示全部楼层
"【69楼】 rabbitx2006"

能回答一下"64楼"的问题吗?

出0入0汤圆

 楼主| 发表于 2008-9-3 20:50:24 | 显示全部楼层
【70楼】 Oliver

你好~

不好意思,没注意到,热縮管我是在taobao上买的,

http://shop33159636.taobao.com/

我是去年买的,你可以去看看,是否还有你需要的规格。

出0入0汤圆

发表于 2008-9-3 20:52:19 | 显示全部楼层
加PA可以 CC系列是比较便宜跟NRF比,在成都的时候见过无线龙公司加PA的,一个师兄搞的

出0入0汤圆

发表于 2008-9-3 20:55:03 | 显示全部楼层
无线龙http://www.c51rf.com/可以看看他们的资料,在国内算是比较早做CC系列的 01年就开始了,老板的哥哥是美国那边做芯片贸易的,通过这层关系把这个芯片搞到国内的

出0入0汤圆

发表于 2008-9-3 20:58:33 | 显示全部楼层
谢谢LZ的回答和链接!

CC2500注定距离不可能跑远,频率提供,功率下降,灵敏度下降...要远就用CC1101.

出0入0汤圆

发表于 2008-9-9 20:08:37 | 显示全部楼层
楼主的hid设备是如何实现的???

出0入0汤圆

发表于 2008-9-10 01:14:18 | 显示全部楼层
ttp://auction1.taobao.com/auction/trade_detail.htm?tradeID=952134766&itemID=1f231e9c5195234fd8ef70cbc12de568&xID=0db1

哈哈,原来那20片的大单是你下的啊.我还以为是托呢.除了距离之外还有什么问题没?我有个设备需要快速双向通信,每秒钟要交换几十次数据,不知道能不能达到要求?行的话我也去下个大单.邮费太费,下少了不合算.

出0入0汤圆

发表于 2008-9-10 09:13:25 | 显示全部楼层
软件实现USB:http://www.obdev.at/products/avrusb/index.html

出0入0汤圆

 楼主| 发表于 2008-9-10 09:39:15 | 显示全部楼层
【76楼】 rainyss

快速双向通信?

这个模块传输速率是固定的,只有1Mbps,可能达不到你快速的要求。

目前还没有发现其他问题,另外发射功率是可调节的,但最大功率下室内只有15m左右,可以通过调整功率缩短通信距离。

出0入0汤圆

发表于 2008-9-10 09:40:12 | 显示全部楼层
LZ挖到好东西
想问新模块的参数设置怎么生成?用smart@rfsudio的参数兼容吗?
pcb板还是用回第一代的吗?
价钱便这么多我也换新欢咯

出0入0汤圆

 楼主| 发表于 2008-9-10 09:54:21 | 显示全部楼层
【79楼】 fox wolf 猩猩

参数设置,可以参考它的手册,有详细的寄存器描述。

PCB板不兼容,模块的封装不同。

支持你换新欢~

出0入0汤圆

发表于 2008-9-10 16:44:19 | 显示全部楼层
我的CC2430只有0dbm的功率,更短

出0入0汤圆

发表于 2008-9-11 11:05:19 | 显示全部楼层
2.4G的RFIC加一片CC2591,距离远15X

出0入0汤圆

发表于 2008-9-11 13:12:53 | 显示全部楼层
传输速率不成问题,主要是收发状态切换的速度.因为是双向通信,必然会有一个切换时间的问题.不知道能不能在一秒钟内切换几十次.

出0入0汤圆

 楼主| 发表于 2008-9-11 13:33:22 | 显示全部楼层
【83楼】 rainyss

这个参数手册上有的。

你可以看看该芯片的数据手册。

出0入0汤圆

发表于 2009-5-7 09:44:24 | 显示全部楼层
这样可以玩REALFLIGHT G3.5的

出0入0汤圆

发表于 2009-5-7 10:39:03 | 显示全部楼层
顶~MARK~~~~

出0入8汤圆

发表于 2009-5-7 10:51:12 | 显示全部楼层
台湾义隆有款(EM198810)2.4g模块的一对才16元(淘宝上有卖,也是绑定的),我实测在室内距离有20米左右。

出0入0汤圆

发表于 2009-10-23 21:58:50 | 显示全部楼层
有个网友要,顶上来

出0入0汤圆

发表于 2009-10-23 21:59:20 | 显示全部楼层
不错啊,不错啊!

出0入0汤圆

发表于 2009-11-1 08:58:52 | 显示全部楼层
强人中的强人

出0入0汤圆

发表于 2009-11-27 20:04:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-29 09:43:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-29 09:47:02 | 显示全部楼层

出0入0汤圆

发表于 2009-12-16 22:12:17 | 显示全部楼层
太厉害阿里啊

出10入10汤圆

发表于 2009-12-17 11:03:25 | 显示全部楼层
做个遥控车、无线键盘和鼠标。

出0入0汤圆

发表于 2010-1-1 22:54:54 | 显示全部楼层
强帖留名~~

出0入0汤圆

发表于 2010-1-2 21:18:51 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-1-3 14:58:06 | 显示全部楼层
话说无线数据通信还真的很不好搞呢~~~~~~~~~~~~下学期,学校给我们协会的课题就有这个,郁闷~~~~~~~~

出0入0汤圆

发表于 2010-1-3 23:48:50 | 显示全部楼层
mark!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-19 15:57

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

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