I’m intrigued by the wixel (nice work!) and have been going through the radio libraries to see how they are constructed.
An interesting app would be a spectrum analyzer to warn of local interference before deciding on channels. I think the RSSI indicator is all that is needed. However, the app would require on-the-fly channel changes, and I don’t see an elementary function to do so. I also note from the docs that recalibration of the radio’s phase locked loop setting the TX/RX frequency needs to be done fairly often.
The radio channel number is currently set in high level library routines, which is a bit of a pain, but in some cases such that it can be externally set by the wixel configuration utility. How does the configuration utility accomplish that?
What would be involved in putting together a low-level function to change the channel and recalibrate the PLL? Or has that been done already? In “wireless-serial.c” I noted the “TODO” which suggests that in the future, setting Baud=0 to 255 would instead set the channel.
Thanks for any insight you can offer,
I’m glad you like the Wixel!
To change the channel, I think you would need to send the SIDLE strobe to the radio (RFST = SIDLE), wait for a few microseconds or poll MARCSTATE to be sure the radio reaches the idle state (see Table 71 of the datasheet), change the CHANNR register, and then start the radio again by sending the appropriate strobe (RFST = SRX in your case). By default, our libraries configure the radio so that recalibration is done whenever the radio starts up from the idle state (MCSM0’s FS_AUTOCAL bits are set to 01), so doing the procedure above would cause it to recalibrate the frequency synthesizer for the new channel.
The Wixel App File Format contains the name and location of all the variables in the program that are defined like this:
int32 CODE param_NAME = DEFAULT_VALUE;
The Wixel Configuration reads that information and uses it to allow the users to edit these parameters. You can define your own parameters in your app or in your libraries if you follow the pattern above. For example, the line of code that defines the radio_channel parameter in some of our libraries is:
int32 CODE param_radio_channel = 128;
If you’re curious, you can look at a Wixel App File in any text editor that can handle Unix line endings (not notepad).
We were thinking that a spectrum analyzer would be a nice app to have, so if you want to make it that would be great. I think that adding any features to radio_mac.lib could be relatively hard because it uses interrupts and contains lots of code to work around odd behavior of the CC2511’s radio. But I don’t think you need to use radio interrupts or radio_mac.lib for this application. I would start the spectrum analyzer app by copying the test_radio_signal_rx app which only uses the radio_registers.lib library and does the rest of the radio handling by itself.
Let us know if you want more advice!
Thanks for the quick response and the suggestions!
I hadn’t noticed the test_radio_signal_rx app and will start there.