CC1101 Question - Page 1
Forum section: electronics / general

author: docmur
author_rank: Regular Contributor
timestamp: March 05, 2015, 05:20:29 pm
content: Hey GuysI've designed an RF board based around the CC1101. The product this board talks to is used to light up LED's. The problem I'm having is that when we stress testing with my RF board we're only getting results such as 599/600 Successful Transmissions, which is pretty low for this kind of RF chip. Does anyone have suggestions on what I could check to find out why I'm having such a mediocre performance rating?That number is based on single transmissions only, we don't do any kind of repeat on failure of ACK yet. I want to get better success before I implement it.ThanksDocmur

author: Wilksey
author_rank: Super Contributor
timestamp: March 06, 2015, 11:25:18 am
content: Please clarify if that is 599 out of 600 or 599 or 600 out of say 1000?As 599/600 to me indicates you sent 600 and received 599, which, to be honest, is not that bad.In terms of RF, have you tried it anywhere else, could there be something else on the band causing issues (can you scan the frequency), have you tried a different frequency, have you tried proper TI dev kits, could be a timing thing, etc etc, there are so many things that can go awry with RF that you haven't really given much information to go on.

author: docmur
author_rank: Regular Contributor
timestamp: March 06, 2015, 03:43:50 pm
content: Thanks for the suggestions guys!The 599 / 600 means we sent 600 packets to the end device and 599 of those it received, transmitted an ACK and carried out the required function.We've done longer runs during testing and produced results such as 998 / 1000, 607/610 and etc... I think I'm going to have to implement a retransmission state.The system runs at 915 MHz, We have no tried a different frequency yet.Currently the way the system is setup is that receives a packet from the serial UART, check's if it's in a valid form, if it is then moves to a transmit state and sends it and goes into a RX state, where it sits until it gets another UART message. We don't use any kind of interrupts, everything is pulled. We are running the UART at 19200 baud and have the RF chip running at 10kBaud with the attenuation set to +12 dBm.

author: Wilksey
author_rank: Super Contributor
timestamp: March 06, 2015, 06:12:31 pm
content: Do you know if you are getting losses at the beginning, end or somewhere in the middle of the transmission?Do you need to send a pre-amble with those chips?

author: docmur
author_rank: Regular Contributor
timestamp: March 06, 2015, 09:30:18 pm
content: You don't have to send a preamble with the CC1101, but you can.Determining where the failure is, is difficult. On the RF transmitter I currently send characters from the board to the PC at each state, so that my PC software can track the states and report them. When we see a failure we know that the end point doesn't respond but we do see the TX state of the RF transmitter complete, aka I see a 'T' come back over the UART, so it's logical to assume that at least something got transmitted.We have no way to detect if that packet got transmitted correctly, although in 599/600 cases it is getting transmitted correctly, so it's also logical to assume that the transmission isn't getting garbled. I don't know of any way that I can test what is transmitted between the RF board and the end point.I'm going to try enabling FEC and Preamble and see if that fixes the issue. Apart from that I also still have to build in retransmission.

author: Wilksey
author_rank: Super Contributor
timestamp: March 08, 2015, 12:05:39 am
content: You will just have to try different things.I set up a few modules and sent 1000 packets, and had to do a bit of faffing around to get it to get 100% transmission, I had to send a pre-amble, I didn't implement any re-transmission, I was missing one packet at the end at one point and it turned out I needed to keep the transmitter active a bit longer before turning it to receive mode, This was a module rather than a chip so I guess less things to check on a module, I was also sending data @ 19200.

author: TerminalJack505
author_rank: Super Contributor
timestamp: March 08, 2015, 12:43:51 am
content: We use this chip at work. During production we have to calculate the frequency offset of each device and store it in non-volatile memory. We then use this offset when we initialize the chip. (This is controlled by one of the chip's many registers.)Doing this compensates for the various factors that can affect the tx/rx frequency--crystal/capacitor variance, etc.If you're receiving 599 out of 600 packets then I'd say you're doing pretty good but setting the offset can only help with the sensitivity, obviously. It is also something that you will likely have to do once you go into production so you might as well start doing it now, during development. It can keep you from unnecessarily banging your head against the wall and wasting time looking for non-existent issues in your code, for example, when the real problem is that the two endpoints are just using two slightly different frequencies.

author: TerminalJack505
author_rank: Super Contributor
timestamp: March 10, 2015, 12:24:46 am
content: Quote from: mojo-chan on March 09, 2015, 01:44:40 pmWe use them on our own boards and not modules.Once built they're usually pretty close to the nominal frequency but we've found that if you don't account for the offset then you can wind up having communication issues when two units are at either end of the distribution.

author: docmur
author_rank: Regular Contributor
timestamp: March 10, 2015, 07:04:01 pm
content: All good ideas guys :-)I just ran a test in an isolated environment as was able to get 3249/3250 which is 99.96%, which is tolerable. Now that I'm sure the chip is working as far as settings, I'm going to do multiple transmissions through ACK tracking.ThanksDocmur

author: Mechatrommer
author_rank: Super Contributor
timestamp: March 11, 2015, 02:35:10 am
content: can someone give me a very simple code example on how to send something with this c1101? because my last attempt was a failure like 0/600, and 4 of them now are collecting dust...