
Bug remains in attenuation calc Formatting of buttons on web page to do Add track Gen to signal generator web page if present (need to send a config state in settings) Add track gen level control
318 lines
12 KiB
C
318 lines
12 KiB
C
/*
|
|
* "My_SA.h"
|
|
*
|
|
* Added in Version 2.2 by John Price (WA2FZW):
|
|
*
|
|
* This file contains all the user settable parameters for the TinySA spectrum
|
|
* analyzer software. If tou change anything in any of the header files, you've
|
|
* just become a test pilot!
|
|
*/
|
|
|
|
#ifndef _MY_SA_H_
|
|
#define _MY_SA_H_ // Prevent double inclusion
|
|
|
|
|
|
/*
|
|
* The following definitions are all related to the WiFi interface. If you don't want
|
|
* to use the WiFi interface, set the "USE_WIFI" definition to 'false'.
|
|
*
|
|
* If you are going to use the WiFi interface, you'll need to set the "WIFI_SSID"
|
|
* and "WIFI_PASSWORD" symbols to the appropriate values for your network.
|
|
*
|
|
* Don't comment out the SSID and password definitions. Doing so will cause compiler
|
|
* errors.
|
|
*/
|
|
|
|
#define USE_WIFI true // Changed in Version 2.6 to true/false
|
|
// #define USE_ACCESS_POINT // Comment out if want to connect to SSID, leave in to use access point
|
|
// #define AP_PASSWORD "none"
|
|
|
|
#define WIFI_SSID ":)" // SSID of your WiFi if not using access point
|
|
#define WIFI_PASSWORD "S0ftR0ckRXTX" // Password for your WiFi
|
|
|
|
|
|
#define MAX_WIFI_POINTS 75 // was 150 Number of sample points to send to clients in each wifi chunk
|
|
// Some clients cannot handle too few (too frequent chart refresh)
|
|
// ** IMPORTANT ** Must be less than or equal to DISPLAY_POINTS (290)
|
|
|
|
#define WIFI_UPDATE_TARGET_TIME 500000 // No of microseconds to target chart updates.
|
|
#define WEBSOCKET_INTERVAL 2000 // Microseconds between check for websocket events if no client connected
|
|
/*
|
|
* You can set your own colors for the various traces, but you can only choose
|
|
* from the following colors:
|
|
*
|
|
* WHITE YELLOW ORANGE GREEN RED BLUE PINK LT_BLUE MAGENTA
|
|
*/
|
|
|
|
#define DB_COLOR YELLOW
|
|
#define GAIN_COLOR GREEN
|
|
#define AVG_COLOR MAGENTA
|
|
#define STORAGE_COLOR LT_BLUE
|
|
|
|
|
|
#define SIG_BACKGROUND_COLOR TFT_DARKGREY
|
|
#define SLIDER_BOX_HEIGHT 8
|
|
#define SLIDER_BOX_COLOR TFT_LIGHTGREY
|
|
#define SLIDER_FILL_COLOR TFT_ORANGE
|
|
#define SLIDER_KNOB_RADIUS 15 // Sprite is twice this high
|
|
#define SLIDER_WIDTH 200 // Sprite width is this plus twice knob radius
|
|
#define SLIDER_KNOB_COLOR TFT_WHITE
|
|
#define SLIDER_X 10
|
|
#define SLIDER_Y 195
|
|
//#define SHOW_FREQ_UP_DOWN_BUTTONS // Comment out if you don't like them!
|
|
|
|
// #define SLIDER_MIN_POWER -43.0 // in dBm
|
|
// #define SLIDER_MAX_POWER -13.0
|
|
#define ATTENUATOR_RANGE 30 // in dB
|
|
|
|
// the B3555 SAW filter has max power rating of 10dBm.
|
|
// Drive of 4 = 11dBm but 1 dB pad in my build. If you have a larger attenuator pad you can try higher powers
|
|
#define RX_SI4432_MAX_DRIVE 4 // corresponds to 11dBm
|
|
|
|
/*
|
|
* These definitions control the values that get set when you select "AUTO SETTINGS" from
|
|
* the main touch screen menu; feel free to change them as you wish, but the legal values
|
|
* for some of them won't be obvious, so do your research first!
|
|
*/
|
|
|
|
#define AUTO_SWEEP_START 0 // Default sewwp start is 0Hz
|
|
#define AUTO_SWEEP_STOP 100000000 // Default stop is 100MHz
|
|
#define AUTO_PWR_GRID 10 // 10 dB per horizontal division
|
|
#define AUTO_LNA 0x60 // Receiver Si4432 AGC on
|
|
#define AUTO_REF_LEVEL -10 // Top line of the grid is at -10dB
|
|
#define AUTO_REF_OUTPUT 1 // Transmitter GPIO2 is 15MHz
|
|
#define AUTO_ATTEN 0 // No attenuation
|
|
#define AUTO_RBW 0 // Automatic RBW
|
|
|
|
|
|
/*
|
|
* Some definitions for IF-Sweep to test the internal SAW filters
|
|
*/
|
|
|
|
#define IF_SWEEP_START 432000000
|
|
#define IF_SWEEP_STOP 435000000
|
|
|
|
// Limits for keypad entry of IF sweep frequency start/stop
|
|
#define IF_STOP_MAX 500000000 // 500MHz
|
|
#define IF_START_MIN 400000000 // 400MHz
|
|
|
|
|
|
/*
|
|
* Some definitions for RX-Sweep to test the internal FIR filters
|
|
*/
|
|
|
|
#define RX_SWEEP_START 432000000
|
|
#define RX_SWEEP_STOP 436000000
|
|
|
|
// Limits for keypad entry of IF sweep frequency start/stop
|
|
#define RX_STOP_MAX 440000000 // 500MHz
|
|
#define RX_START_MIN 430000000 // 400MHz
|
|
|
|
|
|
/*
|
|
* Spur reduction shifts the IF down from its normal setting every other scan
|
|
* Set MAX_IF_SHIFT so that the IF cannot go outside the flat top of the SAW filter passband
|
|
*/
|
|
#define MAX_IF_SHIFT 300000 // Maximum shift of IF (Hz) in spur reduction mode
|
|
|
|
#define PAST_PEAK_LIMIT 3 // number of consecutive lower values to detect a peak
|
|
#define MARKER_NOISE_LIMIT 20 // Don't display marker if its RSSI value is < (min for sweep + this)
|
|
#define MARKER_MIN_FREQUENCY 750000 // Ignore values at lower frequencies as probably IF bleed through.
|
|
|
|
/*
|
|
* There are three possible implementations for the PE4302 attenuator:
|
|
*
|
|
* The parallel version using a PCF8574 I2C GPIO expander interface to the processor
|
|
* The parallel version using six separate GPIO pins to interface with the processor
|
|
* The serial version.
|
|
*
|
|
* Change the following definition to select the version you are using. The options are:
|
|
*
|
|
* PE4302_PCF
|
|
* PE4302_GPIO
|
|
* PE4302_SERIAL
|
|
*/
|
|
|
|
#define PE4302_TYPE PE4302_SERIAL
|
|
|
|
/*
|
|
* If you're using the "PE4302_PCF" mode, you need to define the I2C address for
|
|
* the PCF8574:
|
|
*/
|
|
|
|
// #define PCF8574_ADDRESS 0x38 // Change for your device if necessary
|
|
|
|
|
|
/*
|
|
* If you're using the "PE4302_SERIAL" mode, you need to define the chip select (LE)
|
|
* pin number:
|
|
*/
|
|
|
|
#define PE4302_LE 21 // Chip Select for the serial attenuator
|
|
|
|
|
|
/*
|
|
* If you're using the "PE4302_GPIO" mode, you need to define the GPIO pins used for
|
|
* the six data inputs to the PE4302:
|
|
*/
|
|
|
|
// #define DATA_0 nn // Replace the "nn" with real pin numbers
|
|
// #define DATA_1 nn
|
|
// #define DATA_2 nn
|
|
// #define DATA_3 nn
|
|
// #define DATA_4 nn
|
|
// #define DATA_5 nn
|
|
|
|
|
|
/*
|
|
* If you're using the PE4302 attenuator, the 'ATTEN' command will set the attenuation.
|
|
* The maximum setting for the PE4302 is 31dB. If you have some other attenuator arrangement
|
|
* you can change this value appropriately so that the software can take into account
|
|
* a higher attenuation; but note only the PE4302 will actually be congigured by the code.
|
|
*/
|
|
|
|
#define PE4302_MAX 31
|
|
|
|
|
|
/*
|
|
* The Si4432 is an SPI device and we have it set up to use the ESP32's VSPI bus.
|
|
*
|
|
* Here, we define the chip select GPIO pins for the two Si4432 modules and the GPIO
|
|
* pins for the clock and data lines.
|
|
*/
|
|
|
|
#define SI_RX_CS 4 // Receiver chip select pin
|
|
#define SI_TX_CS 5 // Transmitter chip select pin
|
|
|
|
#define V_SCLK 18 // VSPI clock pin
|
|
#define V_SDI 23 // VSPI SDI (aka MOSI) pin
|
|
#define V_SDO 19 // VSPI SDO (aka MISO) pin
|
|
|
|
|
|
/*
|
|
* An option is add more SI4432 devices to make a tracking generator
|
|
* Options for a single one where the LO is tapped off from the TinySA LO
|
|
* or two where the track gen LO is generated with another SI4432 to give improved
|
|
* isolation and therefore better dynamic range.
|
|
*
|
|
* Fit a pull down resistor to the TinySa and and pull up to the track gen
|
|
* During power up if the pin is low then TinySA knows the track gen is not connected
|
|
* if the pin is pulled high the the trackin gen is present and the TinySA will initialise it
|
|
* and set the appropriate frequency.
|
|
*
|
|
* Comment both lines out if you will never use the tracking generator or have not fitted
|
|
* the pull down resistors
|
|
*/
|
|
#define SI_TG_IF_CS 2 // pin to use for tracking gen IF SI4432
|
|
#define SI_TG_LO_CS 25 // pin to use for tracking gen LO SI4432
|
|
|
|
|
|
/*
|
|
* These two definitions are used to tune the Si4432 module frequencies. Once you have
|
|
* performed the frequency calibration as explained in the documentation, you should
|
|
* change the values defined here to the values you determined appropriate in the
|
|
* calibration procedure or they may be lost when new software versions are released.
|
|
*
|
|
* The values here were Erik's original values
|
|
*/
|
|
|
|
#define TX_CAPACITANCE 0x65 // Transmitter (LO) crystal load capacitance
|
|
#define RX_CAPACITANCE 0x59 // Receiver crystal load capacitance
|
|
|
|
#define TG_LO_CAPACITANCE 0x64 // Tracking generator LO crystal load capacitance
|
|
#define TG_IF_CAPACITANCE 0x62 // Tracking generator IF crystal load capacitance
|
|
|
|
#define RX_PASSBAND_OFFSET 1300 // RX bandpass filters are offset from nominal IF by this
|
|
|
|
/*
|
|
* "CAL_POWER" is the calibrated power level determined when doing the calibration
|
|
* procedure. As is the case with the crystal capacitances, you should change the
|
|
* value here to prevent the calibration from being lost when new versions of the
|
|
* code are released.
|
|
*/
|
|
|
|
#define CAL_POWER -30 // Si4432 GPIO2 normal reference level
|
|
|
|
|
|
/*
|
|
* The default transmitter Si4432 power output is based on the type of mixer being used.
|
|
* For the ADE-1 mixer should be +7dBm and +17dBm for the ADE-25H mixer.
|
|
*
|
|
* The definition of "MIXER" can be set to one of the following symbols, or you can
|
|
* define a power setting numerically (refer to A440).
|
|
*
|
|
* MIX_ADE_1 // For the ADE-1 mixer module
|
|
* MIX_ADE_25H // For the ADE-25H mixer module
|
|
* MIX_MINIMUM // Minimum power for testing
|
|
*/
|
|
|
|
#define MIXER MIX_ADE_25H // High power
|
|
|
|
|
|
/*
|
|
* These define the sweep range limits. The unit is capable of sweeping up to 430MHz,
|
|
* but if you're using Glenn's PCBx, there is a 200MHz LPF on the input, so anyone
|
|
* using that (or some other input LPF) might want to change the maximum frequency
|
|
* accordingly.
|
|
*/
|
|
|
|
#define STOP_MAX 250000000 // 250MHz
|
|
#define START_MIN 0 // 0MHz
|
|
|
|
|
|
/*
|
|
* The "FOCUS_FACTOR" is used in conjunction with the "FOCUS" command (from either
|
|
* the serial interface or touch screen). The requested focus frequency is divided
|
|
* by the "FOCUS_FACTOR" to set the frequency span.
|
|
*
|
|
* So for example, if you request a focus frequency of 50MHz, and the "FOCUS_FACTOR"
|
|
* is set to 1000, 50MHz / 1000 = 25KHz which would be the total span. In other words,
|
|
* the sweep frequency range would be from 49.975MHz to 50.025MHz. But since the
|
|
* readings on the grid are only good to 2 decimal places, the display may not indicate
|
|
* the exact span.
|
|
*/
|
|
|
|
#define FOCUS_FACTOR 1000UL
|
|
|
|
|
|
/*
|
|
* "TS_MINIMUM_Z" is the minimum touch pressure that will be considered to indicate a
|
|
* valid touch screen touch. It was originally hard-coded in the "ui.cpp" module as
|
|
* '600', but that proved to be too much for some displays, so now you can set it to
|
|
* see what works for your particular display.
|
|
*/
|
|
|
|
#define TS_MINIMUM_Z 600 // The original setting
|
|
|
|
|
|
/*
|
|
* The "BACKLIGHT_LEVEL" setting can be used to control the brightness of the backlight
|
|
* of the TFT display. Presently, there is no place in the menu system where this can be
|
|
* adjusted, so if using the adjustable option, you have to set the symbol appropriately
|
|
*
|
|
* Glenn's PCB provides the option to simply connect the backlight to 3V3 through an
|
|
* appropriate resistor.
|
|
* Comment out if not using the PWM backlight (uses GPIO25 which can then be used for
|
|
* a tracking generator, but not both)
|
|
*/
|
|
|
|
// #define BACKLIGHT_LEVEL 50 // Level setting
|
|
|
|
|
|
/*
|
|
* We haven't implemented the use of a rotary encoder to control the menu selections
|
|
* yet, but if we ever do, the GPIO pins that it uses need to be defined. The ones
|
|
* defined here are based on Glenn's PCB design.
|
|
*/
|
|
|
|
#ifdef USE_ROTARY // Not defined anywhere!
|
|
|
|
#define ENC_PB 32 // Encoder pushbutton switch
|
|
#define ENC_BB 33 // Back button pushbutton switch (or TS_INT)
|
|
#define ENC_B 34 // Encoder pin "B" (input only pin)
|
|
#define ENC_A 35 // Encoder pin "A" (input only pin)
|
|
|
|
#endif
|
|
|
|
#endif // #ifndef _MY_SA_H_
|