SetOffsetFreq function
This commit is contained in:
parent
be199ef50c
commit
1cb4cdef6e
@ -87,9 +87,32 @@ void initBandscope()
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* This function section handles the fast bandscope sweep
|
* This function section handles the fast bandscope sweep
|
||||||
* The display is split and shows a waterfall
|
* The display is split and shows a waterfall.
|
||||||
* Number of points is reduced, and frequency change is done using an offset to aallow the delay time between
|
* The number of points is reduced, and frequency change is done using an offset to allow the
|
||||||
* changing frequency and taking a reading to be reduced
|
* delay time between changing frequency and taking a reading to be reduced.
|
||||||
|
*
|
||||||
|
* Frequency scheme:
|
||||||
|
* When the LO frequency is < 480MHz the LO can be adjusted +- 80kHz from the
|
||||||
|
* nominal frequency in 156.25Hz steps.
|
||||||
|
* If the LO is above 480MHz the the adjustment is +-160kHz in 312.5Hz steps.
|
||||||
|
* If the IF is 434MHz then 480MHz -> 46Mhz for the signal being analysed, so fine
|
||||||
|
* for most of the HF bands.
|
||||||
|
*
|
||||||
|
* In bandscope mode the RBW is fixed at the minimum 2.6kHz, span at 200kHz and
|
||||||
|
* there are 80 data points
|
||||||
|
*
|
||||||
|
* 200kHz -> 2.5kHz steps between each reading or 16 * 156.25Hz if in low band
|
||||||
|
*
|
||||||
|
* Start by setting the LO to the frequency for the start of the sweep plus 80kHz
|
||||||
|
* and set the offset value at -80kHz.
|
||||||
|
* At each reading increment the offset value by 16 (8 in high band).
|
||||||
|
* In this mode the delay time between reading is set at a shorter value than
|
||||||
|
* normally used by the RBW as the LO does not turn off at each change in offset, unlike
|
||||||
|
* a normal frequency change.
|
||||||
|
* When the offset value reaches +80kHz then we need to reset the LO (using normal delaytime)
|
||||||
|
* and continue until we get to the end of the sweep.
|
||||||
|
*
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
43
si4432.cpp
43
si4432.cpp
@ -444,7 +444,7 @@ uint8_t registerBuf[4]; // Used to send frequency data in burst mode
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "SetOffset" adjusts the frequency from the nominal value set in SetFrequency.
|
* "SetOffsetFreq" adjusts the frequency from the nominal value set in SetFrequency.
|
||||||
* It is intended for use by the SI4432 AFC algorithm to enable more accurate
|
* It is intended for use by the SI4432 AFC algorithm to enable more accurate
|
||||||
* frequency matching of different radios, but we can turn off the AFC and use it
|
* frequency matching of different radios, but we can turn off the AFC and use it
|
||||||
* to adjust the frequency without having the Si4432 go through its TX-RX-TX state machine
|
* to adjust the frequency without having the Si4432 go through its TX-RX-TX state machine
|
||||||
@ -452,6 +452,43 @@ uint8_t registerBuf[4]; // Used to send frequency data in burst mode
|
|||||||
* The offset can vary +- 80kHz in low bands (f<480MHz) and +-160kHz in high bands (480-960MHz)
|
* The offset can vary +- 80kHz in low bands (f<480MHz) and +-160kHz in high bands (480-960MHz)
|
||||||
* negative numbers are twos complement of the positive offset
|
* negative numbers are twos complement of the positive offset
|
||||||
*/
|
*/
|
||||||
|
void Si4432::SetOffsetFreq ( int32_t freq )
|
||||||
|
{
|
||||||
|
uint8_t registerBuf[3]; // Used to send data in burst mode
|
||||||
|
|
||||||
|
uint32_t posFreq;
|
||||||
|
if (freq < 0)
|
||||||
|
posFreq = -freq;
|
||||||
|
else
|
||||||
|
posFreq = freq;
|
||||||
|
|
||||||
|
uint16_t fo = (double)posFreq/(156.25 * (double)(_hbsel + 1));
|
||||||
|
|
||||||
|
if (freq < 0)
|
||||||
|
// do twos complement - invert the bits (0-8) (use XOR) and add one
|
||||||
|
fo = (fo ^ 0x3F) + 1;
|
||||||
|
|
||||||
|
Serial.printf(" offset frequency %i fo=%3x \n", freq, fo);
|
||||||
|
|
||||||
|
// write to the Si4432
|
||||||
|
registerBuf[0] = REG_FOFF1|0x80; // First register in write mode (bit 7 set)
|
||||||
|
registerBuf[1] = fo & 0xFF; // first 8 bits
|
||||||
|
registerBuf[2] = (fo >> 8 ) & 0x03; // last 2 bits
|
||||||
|
|
||||||
|
//_spi->beginTransaction ( SPISettings ( BUS_SPEED, BUS_ORDER, BUS_MODE ));
|
||||||
|
// spiSimpleTransaction(_spi->bus());
|
||||||
|
digitalWrite ( _cs, LOW ); // Select the correct device
|
||||||
|
_spi->transfer ( registerBuf, 3 ); // Send the data
|
||||||
|
digitalWrite ( _cs, HIGH ); // Deselect the device
|
||||||
|
//_spi->endTransaction();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "SetOffset" sets the frequency offset registers to correspond to the number of offset steps
|
||||||
|
*/
|
||||||
void Si4432::SetOffset ( int32_t offset )
|
void Si4432::SetOffset ( int32_t offset )
|
||||||
{
|
{
|
||||||
uint8_t registerBuf[3]; // Used to send data in burst mode
|
uint8_t registerBuf[3]; // Used to send data in burst mode
|
||||||
@ -462,7 +499,7 @@ void Si4432::SetOffset ( int32_t offset )
|
|||||||
else
|
else
|
||||||
posOffset = offset;
|
posOffset = offset;
|
||||||
|
|
||||||
uint16_t fo = (double)offset/(156.25 * (double)(_hbsel + 1));
|
uint16_t fo = posOffset;
|
||||||
|
|
||||||
if (offset < 0)
|
if (offset < 0)
|
||||||
// do twos complement - invert the bits (0-8) (use XOR) and add one
|
// do twos complement - invert the bits (0-8) (use XOR) and add one
|
||||||
@ -485,8 +522,6 @@ void Si4432::SetOffset ( int32_t offset )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "SetRBW" Sets the "Resolution Bandwidth" based on a required value passed in
|
* "SetRBW" Sets the "Resolution Bandwidth" based on a required value passed in
|
||||||
* and returns the actual value chosen as well as the required delay to allow the
|
* and returns the actual value chosen as well as the required delay to allow the
|
||||||
|
3
si4432.h
3
si4432.h
@ -178,7 +178,8 @@ void SetFrequency ( uint32_t Freq ); // Set module's frequency
|
|||||||
uint32_t GetFrequency (); // Get the module's frequency
|
uint32_t GetFrequency (); // Get the module's frequency
|
||||||
uint32_t ReadFrequency (); // Read frequency from SI4432
|
uint32_t ReadFrequency (); // Read frequency from SI4432
|
||||||
|
|
||||||
void SetOffset ( int32_t offset ); // Set a frequency offset from the nominal frequency
|
void SetOffsetFreq ( int32_t freq ); // Set a frequency offset from the nominal frequency
|
||||||
|
void SetOffset ( int32_t offset ); // Offset based on number of offset increments
|
||||||
|
|
||||||
void SetPowerReference ( int freq ); // Set the GPIO output for the LO
|
void SetPowerReference ( int freq ); // Set the GPIO output for the LO
|
||||||
void SetDrive ( uint8_t level ); // Sets the drive level
|
void SetDrive ( uint8_t level ); // Sets the drive level
|
||||||
|
Loading…
Reference in New Issue
Block a user