I have redesigned a client's legacy rf system to maintain compatibility with an older system.The transmitter is a Microchip rfPIC12F675 with a short preamble (14-bits) and then transmit 16-bits data at a data rate of 4.055K using OOK and Manchester Encoding. The transmitter has a small loop antenna on the PCB and is worn on the wrist or ankle. This message is transmitted approximately every second.I have a msp430F2618/CC1101 receiver located at doors to prevent the person wearing the transmitter from exiting. I use GDO0 as Carrier Sense (CS) to call my isr when the CS goes from low to high. I then read the incoming data on GDO2 as Manchester encoded and translate to a binary ID.I need to set a user-defined distance where the transmitter is ignored if outside the defined boundary of typically 4 - 20 feet.. I accomplish this by configuring the CC110x at a constant AGCCTRL2, AGCCTRL1, and AGCCTRL0 and then using a SkyWorks SKY12329-350LF to attenuate the rf signal entering the CC1101 0dB - 30dB. There will be times during the night when there will be no rf transmissions being read and times in the afternoon when it will be reading several transmitters simultaneously. As a person approaches the door the power level read at the receiver will increase so there is really never a constant power level of transmitter to work with as there would be with two fixed locations.The ProblemThe receiver reads the transmitter erratically. Can set the distance at 9 feet on Thursday and everything working great at the end of the day. Get a call on Saturday morning the receiver is somehow now reading transmitters at 50 feet. Then get a call on Monday afternoon that a person wearing a transmitter is standing 4 feet in front of the door and not being read at all. Sometimes get calls from the field that the receiver has "gone to sleep" and is not reading any transmitter at any distance after it has worked fine for weeks.I understand at some level that the CC1101 RSSI is not a precise variable but my personal opinion is that most of my problems stem from the internal workings of the CC110x operating in OOK mode. By this I mean the problem is not primarily in my code interfacing with the CC110x with the possible exception of my configuring of the CC1101 (that admittedly could be less than optimal, it is a complex part). The msp430 periodically monitors the CC1101 state and will reset it if the CC1101 seems to be operating in an unexpected manner. It also periodically manually calibrates the CC1101.
Part of what leads me to this conclusion is the Design Note DN022 devoted entirely to overcoming the CC1101 being unstable in OOK mode. I have also spent hours with a logic analyzer and can see that sometimes the CC1101 just stops sending data to the msp430. It is not that the CC1101 is sending data and my code is fumbling it somehow.
The QuestionIt did not really hit me until I read a E2E entry recently that my receiver board design is the same regardless of my using OOK (as I am doing) or FSK. I could create a second series of transmitters that work using FSK and continue to supply the OOK transmitters for replacement parts for the older system. The receiver board could be programmed as either OOK or FSK to support old or new configurations. Would changing to FSK solve some of my problems?Thanks
With FSK you get register settings through SmartRF Studio. In your case you can simply use the 4.8 kbps settings and just change the data rate.
When using OOK mode you need to do a lot of measurements to find the optimum settings that ensures good reception across the full dynamic range. It is doable as outlined in DN022, but if you have the option to change modulation format I would suggest a move to FSK.