This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1101 433.92MHz ASK reception, Remote Controlled Switches

Other Parts Discussed in Thread: CC1101

 

I really need help to get the CC1101 receive asynchonous serial data from RF remote controlled switches, 433,92MHz ASK/OOK.

I would like to receive the data from various models of radio controlled switches operating at 433,92MHz ASK/OOK. I follow the DN022 to setup the CC1101. The CC1101 is up and running, calibrated and put in RX. The data is output asynchronous on GDO0 pin connected to an input capture of my MCU. So far so good. It is what I reveive I'm not happy with. Sometimes the received data is perfect, but too many times it's not. Sometimes not all bits are getting through and they are "noisy" and sometimes the GDO0 line is really noisy even with nothing in the air. I believe it's all about the AGC settings. If the cheep remote switches manages to decode the data with no problem, I guess this isn't to much to ask of CC1101 either. I really need help with the correct settings, the DN022 can't help me solve my problems. Would it be better to adjust the gain manually, any DN note on this?

I'll also have to ask:

- For how long can the CC1101 be in RX mode before a new calibation is nessesary?

- What is the correct baudrate setting? Lets say for a protocol where the shortest pulse is 600us and the longest is 1200us. Would 1.66 kBaud work? What is the baudrate really for in async serial mode? Does it control anyting else than the data sample rate. If the underlaying data baudrate match or not doesn't rally matter I assume? Different protocols I would like to receive uses different pulse lengths. As long as I get a resonably resolution of the shortest pulse I'll be ok?

- Different RF remote control systems have different BW, some are 300KHz and some are <100kHz. What is then the correct RX filter BW? I would like to have the same setting for all systems, since I don't know in advance what is coming.

 

  • In asynchronous mode you get the raw data and no data deciscion or synchronization is done-on chip. This needs to be handled by the interfacing MCU. Since the data is oversampled by a factor 8 of the programmed data you will see that the raw data has jitter. One thing to try to reduce the jitter is to program a higher data rate than is actually used. E.g program the data rate to 3.32 kbps instaed of 1.66 kbps.

    When you set CC1101 in RX mode and do not use any of the packet handling features the CC1101 will demodulate noise when there are no RF signal at the antenna. What you will see on the data output will then also be noise.

    If the environment (temperature and supply voltage) does not change significantly there is no need to re-calibrate CC1101. We use in the loop modulation so there is no limit on the maximum RX time (as long as there are no significant changes in the environment). A supply change of 0.5V is acceptable and a temperature change of -40C is acceptable. For a robust system we still recommend that CC1101 is calibrated automatically every time when going from IDLE to RX.

    Baud rate setting: 1.66 kbps is ok, but see also comment above (i.e how to increase oversampling)

    If you want one RX BW setting to accomodate different data rates you need to choose the higher BW. If some are 300 kHz, then this needs to be used. A wide signal cannot fit into a narrow RX bandwidth and will affect reception.

  • Doubling the data rate did the trick! All "noise" dissapeared (even the noise when no data in the air) and the data is nice and clean.  When testing even higher data rates the noise is back and data looks bad again, strange I think.  I guess the AGC is affected by the baud rate settings somehow.

  • Unfortunately, it still doesn't work to my satisfaction. When receiving good data, all of a sudden the following data is corrupt and only occasionally the data is good. I've played around with the AGC settings and found no better settings than those in the DN022. I still believe the AGC is not doing a good job. I need information on how to manually adjust the gain.

     

     

  • Let us know your system parameters (RF frequency, data rate, +/-deviation, Rx filter BW,...) and the settingss you are currently using. We wil run some measurements and provide optimized AGC settigns.

  • Hi

    I looked in one of the remotes I wish to implement and found a SAW filter like this one: http://www.actcrystals.com/_files/franchise/Advanced_Crystal_Technology/datasheets/ACTR433A,433_92,TO39_1_5.pdf

    This would give a RF freq of: 433.92MHz  +-75kHz

    Data rate is calculated from the fact that pulses are either 600us or 1200us to 1.6kbaud x 2=3.2kBaud.

    You asked for deviation, but modulation is simple On-Off Keying (OOK). I guess deviation has no effect?

    Maybe modulated RF bursts of "unfortunate" lengths will make the AGC go nuts. Maybe there are settings to prevent this using the right combination of  HYST_LEVEL, WAIT_TIME, AGC_FREEZE and the AGCCTRL2 registers?

     

  • I'm a litte dissapointed DN022 didn't say anything about changing FOC_LIMIT to 0.

     

  • When does the AGC try to adjust gain when ASK/OOK modulation and async serial mode is selected? Is it during the preamble pattern or is it constantly trying to adjust gain?

    The protocol I'm trying to receive now has a 10101010 preamble pattern (one byte only). and no sync byte. Is this enough for the AGC to set correct gain? I guess CC1101 is not using the preamble byte in async serial mode as I was given the sugestion to double the data rate and then the preamble pattern wouldn't be read correct by the CC1101?

    Other protocols has  different data rates, will I ever be able to use AGC then?

    I would really like to try a fixed gain. Is it possible to read out the gain settings when data is received correct  store them and the next time the CC1101 is configured disable AGC and write back the gain setting that worked before. And then manually slowly rising gain a little until noise is getting through on the async serial pin GDO0 and then back off a little. Woudn't this work. When data is comming the signals might get saturated, but is that a problem when using OOK modulation?

  • The gain is continuously being updated. The AGC reduces the gain much more quickly than it increases the gain. If this was not the case OOK demodulation would not work as the logic 0's and logic  1's would then both be amplified to have the same level internal to CC1101.

    One byte preamble is on the low side, but a high RX filter BW (you need 200 kHz in your application) and a high programmed data rate (3.2 kbps in your case) lowers the AGC settling time. Setting AGCCTRL0.WAIT_TIME to a minimum will have an impact on the AGC settling time (not significantly in this case though).

    The preamble is only used to set the AGC gain in asynchronous serial OOK mode

    There is an option to read the AGC gain and write this back to the chip. Register AGCTESTgives the gain settings ([7:6] first LNA gain where "00b" is max gain and "10b" is min gain, [5:3] second LNA gain where "111b" is max gain and "000b" is mion gain, [2:0] is digital gain). This register can be read from and written to. If you want to set the gain manually through register AGCTEST you need to set AGCCTRL0.AGC_FREEZE to either "10b" or "11b". 

  • I've spent two days trying to receive simple ASK/OOK modulation and I start to belive CC1101 isn't capable of this. But I'll give the manual gain adjust a try, before I give up. To make things right I also need to know the gain of each amplifier at different settings.

    Would it be a good Idea to have CC1101 adjust the digital gain (AGC_FREEZE= "10b"), read out the AGCTEST register and adjust LNA1 and LNA2 so that digital gain read from AGCTEST register is not saturated (anything else than "111b" and "000b")?

     

     

  • We have numerous customers using CC1101 in OOK mode so we know this works. Setting the gain manually is possible as outlined in previous post, but I do not think this is a good idea as I doubt you know the input power level. The purpose of the AGC is to amplify the input signal so that the signal internally does not saturate the ADC. If the input signal varies in strength from one reception to the next you should not use manual gain.

    Attached is an excel spreadsheet with measurement results of PER vs input power level for different AGCCTRL2,1,0 settings. Data rate is 1.67 kbps, RX filter BW is 101 kHz. In these measurements using ACCTRL2,1,0 = 0x04 00 92 gave the best sensitivity. In these measurements the CC1101 is in FIFO mode, but the AGCCTRL settings is not affected if you use (a)synchronous serial mode instead. I know you want to increase the data output oversampling by increasing the programmed data rate and that you probably will use a wider RX filter BW, but the attached results still show that OOK reception at 1.67 kbps is possible with very good sensitivity and without any increased PER for higher input power levels.

    The register settings used are given as hidden comments; e.g cell A5.

    ASK PER vs Level CC_1.xls