LoRa modules tend to have cheap and cheerful crystals that aren’t particularly accurate, resulting in any given 434MHz module being up to about 5kHz off the nominal frequency, any given pair of modules could disagree by to 10kHz.
For the bandwidth setting most often used in HAB, the total offset between transmitting and receiving modules has to be no more than 5kHz otherwise no packets will be received, so it’s entirely possible for 2 modules not to work when set to the same nominal frequency.
The result then is some frustration till the user tries adjusting the receive frequency till it works. To make this easier, I’ve added some new functions to help with finding a signal. These are currently in my Windows LoRa Gateway, but will soon make their way to my Android apps. These functions are:
- Band Scan – Scan the entire 434MHz band for a signal, and show the results on a chart.
- Local Search – Adjust the set frequency up and down by up to 10kHz till packets are received.
- AFC – Automatic Frequency Control – To keep the receiver and transmitter locked in case either drift (possible during flight if the transmitter gets cold).
Click on the new “Band Scan” tab at the bottom, then click the “Scan Band For Signal” button.
The scan range is currently fixed at 434MHz to 434.7MHz. The chart shows the RSSI across the band, sampled at 12.5kHz intervals. It’s best to have the LoRa mode set to 1 for this test.
Clearly, there’s a strong local signal at about 434.45MHz.
Ensure that you’ve set the LoRa mode correctly, and the nominal frequency that the transmitter is set to, then click on the new “Search +/- 1kHz” button. The program will search near that frequency until it starts to find packets.
This should be used for Mode 1 only: Mode 0 is too slow for this search, and other modes do not need searching anyway (they have wider acceptable frequency offsets).
Once the receiver is receiving packets OK, check the AFC box to keep it locked in to the transmitter.
The executable is here.
Or you can download the source and build yourself. It’s written with in Delphi and uses the TMS Async library.