[FH] Hopping questions for Andre and Hal, part two
Terry Fox
tfox at knology.net
Wed Nov 19 18:45:33 CST 2014
Hey again guys,
I'd like to get some more info on your frequency hopping plans. I'm hoping
that Sandy will forward this, and my previous email, to Hal, since that's
what Hal said that he wanted on the last Tuesday night tech-net. I can be
reached directly via wb4jfi at knology.net if you prefer.
There was some discussion about the accuracy and stability of the DDS master
oscillator. However, that only controls the RF carrier frequency. To me,
at least as important is the accuracy and stability of the Arduino, or other
controller, clock. The Arduino will be controlling WHEN the hopper changes
frequency, and how long it dwells on any particular frequency. If the hop
rate is anything significant (more than about ten hops per second),
variances in the Arduino clock frequency between devices will cause a slow
divergence and eventual unlocking between devices. The Arduino uses a cheap
crystal or ceramic resonator for its clock by default. I might suggest that
the Arduino be driven by a divided version of the DDS clock, but that
complicates the hardware, probably too much, as dividers that work to 125MHz
are not easily found in DIP packages. All the Arduino timing standards
would also need to be adjusted. 125MHz is not evenly divisible to 16MHz.
Careful attention must also be used to make sure that there is NO variation
in the hop programming. In other words, conditional executions must be
matched up with nop delays if the conditional is not met.
I'm not sure how to fix the Arduino clock issue mentioned above.
What type of mode/modulation is planned to be used? AM would be one of the
easiest, as one can AM modulate the DDS voltage reference input with a D/A,
or even an I2C programmable pot/rheostat. FM might be possible with the
DDS, but the Arduino will not be fast enough to accomplish that with
real-time audio. CW is possible as well. SSB would add complexity.
I heard Hal suggesting that Ten Meters is the target band, with AMRAD
possibility requesting an STA for experimenting. If that's not an option, I
assume that the 420MHz band would be the target? There are a lot of ways to
get there, but mixing up to the target would probably be better than
multiplying the signal.
Is there a target hop rate? I assume that more than 10 hops/second are
wanted. The AD9850 can change frequency far quicker than the Arduino can
push it (with a 16MHz clock). As the hop rate approaches audio frequency
rates, will some sort of audio gating or ramping up/down be required?
Otherwise, won't artifacts of the hop rate show up in the demodulated audio?
Controlling the hop frequencies can be done either by pre-calculating the
DDS FTWs and storing them in a look-up table (LUT), or calculating them on
the fly. Either way, you probably need 32-bit unsigned longs to store each
frequency/FTW in the table. If your sequence is derived by an eight-bit
number, that leaves 256 table entries. Multiplying those two together will
require 1k bytes of storage for any single LUT. The Arduino Uno has only 2k
bytes of RAM available, so you are tying up half the total RAM storage if
that's where the LUT is stored.
A couple alternatives would be to:
1. Store the LUT in Program memory instead of RAM. Downside is the Arduino
must be reprogrammed to change the LUT.
2. Store the LUT in an external EEPROM connected to the ARduino via I2C. I
do this for other LUTs in other projects. The down side is the time it
takes to read data via I2C.
3. Cut back the amount of storage by using only ONE 32-bit value for a base
frequency FTW, then use 16-bit storage values to hold only differences from
that base frequency.
4. Other ideas?
This doesn't get into how to choose a start (home) frequency, hopping start,
hopping rate, maintaining sync, or other frequency hopping issues.
I'm interested to help out with the project, as it's good to see some
experimentation happening.
73, Terry, WB4JFI
More information about the Tacos
mailing list