More reorg changes in the DSP code. Working towards creating a separate ADC 'process' that will continually update the applicable variables, and then they'll be reported upon request via I2C or Serial as applicable.
This commit is contained in:
parent
bb31ccfbe4
commit
16b350cb0f
|
@ -232,7 +232,7 @@ void sendCommand1Num(char varIndex, char sendValue)
|
|||
//=======================================================
|
||||
|
||||
int i2cCommand = 0;
|
||||
void CalculateCoeff(uint8_t freqIndex);
|
||||
void calculateCoeff(uint8_t freqIndex);
|
||||
|
||||
char forwardBuff[MAX_FORWARD_BUFF_LENGTH + 1];
|
||||
static int nowBuffIndex = 0;
|
||||
|
@ -249,7 +249,7 @@ char FFTToUartIdleCount = 0;
|
|||
|
||||
elapsedMillis sinceForward = 0;
|
||||
uint8_t responseCommand = 0; //
|
||||
uint8_t TXStatus = 0; //0:RX, 1:TX
|
||||
bool isTX = false;
|
||||
void responseConfig()
|
||||
{
|
||||
if (responseCommand == 2)
|
||||
|
@ -357,7 +357,7 @@ char commandParser(int lastIndex)
|
|||
else if (cmd1 >= 100 && cmd1 <= 145)
|
||||
{
|
||||
cwDecodeHz = cmd1 - 100;
|
||||
CalculateCoeff(cwDecodeHz);
|
||||
calculateCoeff(cwDecodeHz);
|
||||
DSPType = 2;
|
||||
EEPROM.put(EEPROM_DSPTYPE, DSPType);
|
||||
EEPROM.put(EEPROM_CW_FREQ, cwDecodeHz);
|
||||
|
@ -383,12 +383,12 @@ char commandParser(int lastIndex)
|
|||
{
|
||||
if (commandVal == 0) //RX
|
||||
{
|
||||
TXStatus = 0;
|
||||
isTX = false;
|
||||
SMeterToUartIdleCount = 0;
|
||||
}
|
||||
else if (commandVal == 1) //TX
|
||||
{
|
||||
TXStatus = 1;
|
||||
isTX = true;
|
||||
SMeterToUartIdleCount = 0;
|
||||
}
|
||||
}
|
||||
|
@ -462,7 +462,7 @@ void forwardData(void)
|
|||
}
|
||||
}
|
||||
|
||||
void SendMeterData(uint8_t isSend)
|
||||
void sendMeterData(uint8_t isSend)
|
||||
{
|
||||
//basic : 1.5Khz
|
||||
int newScaledSMeter = 0;
|
||||
|
@ -638,10 +638,16 @@ void setup()
|
|||
Serial1.flush();
|
||||
|
||||
SAMPLE_INTERVAL = round(1000000 * (1.0 / SAMPLE_FREQUENCY));
|
||||
//CalculateCoeff(cwDecodeHz); //Set 750Hz //9 * 50 + 300 = 750Hz
|
||||
//calculateCoeff(cwDecodeHz); //Set 750Hz //9 * 50 + 300 = 750Hz
|
||||
//Serial1.println("Start...");
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Receive a command via I2C. The most recent command will be received, which will
|
||||
indicate which data the DSP should be preparing to return.
|
||||
@param numBytes
|
||||
Number of bytes received--not used in this procedure.
|
||||
*/
|
||||
void i2cReceiveEvent(size_t numBytes)
|
||||
{
|
||||
int readCommand = 0;
|
||||
|
@ -649,6 +655,8 @@ void i2cReceiveEvent(size_t numBytes)
|
|||
while (Wire1.available() > 0) // for Last command
|
||||
{
|
||||
readCommand = Wire1.read();
|
||||
// KC4UPR: Note that this looks to be only reading the last command, i.e.
|
||||
// if multiple commands have been queued up, only the last will get executed.
|
||||
}
|
||||
|
||||
if (0x50 <= readCommand && readCommand <= 0x59)
|
||||
|
@ -657,6 +665,10 @@ void i2cReceiveEvent(size_t numBytes)
|
|||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Respond to a request from the I2C Master (Raduino). Returns the appropriate data
|
||||
based on whatever command was previously issued.
|
||||
*/
|
||||
void i2cRequestEvent(void)
|
||||
{
|
||||
int maxValue = 0;
|
||||
|
@ -664,20 +676,16 @@ void i2cRequestEvent(void)
|
|||
int readValue = 0;
|
||||
unsigned long curr = 0;
|
||||
|
||||
//if (nowADCSampling == 1) //Now Sampling ADC's
|
||||
//{
|
||||
// nowADCSampling = 2; //when finished ADC Sampling, response I2CRequest Event
|
||||
// return;
|
||||
//} //end of if
|
||||
|
||||
if (i2cCommand == I2CMETER_CALCS)
|
||||
{
|
||||
switch (i2cCommand) {
|
||||
case I2CMETER_CALCS:
|
||||
// Returns an already-calculated S-meter value.
|
||||
Wire1.write(scaledSMeter);
|
||||
}
|
||||
else if (i2cCommand == I2CMETER_UNCALCS)
|
||||
{
|
||||
//Wire1.write(ADC_DIFF);
|
||||
//8292Hz
|
||||
break;
|
||||
|
||||
case I2CMETER_UNCALCS:
|
||||
// Returns a raw signal strength value.
|
||||
// KC4UPR: I'm going to replace this with a "process" that continually updates the ADC values.
|
||||
// So then this would just grab the current value, and return it.
|
||||
for(int i=0; i < 7; i++)
|
||||
{
|
||||
curr = micros();
|
||||
|
@ -707,23 +715,32 @@ void i2cRequestEvent(void)
|
|||
readValue = 255;
|
||||
}
|
||||
Wire1.write(readValue);
|
||||
}
|
||||
else if (i2cCommand == I2CMETER_CALCP)
|
||||
{
|
||||
break;
|
||||
|
||||
case I2CMETER_CALCP:
|
||||
// Returns a raw forward power value.
|
||||
// KC4UPR: I'm going to replace this with a "process" that continually updates the ADC values.
|
||||
// So then this would just grab the current value, and return it.
|
||||
readValue = analogRead(POWER_METER_ADC); //POWER
|
||||
Wire1.write(readValue);
|
||||
}
|
||||
else if (i2cCommand == I2CMETER_CALCR) //SWR
|
||||
{
|
||||
break;
|
||||
|
||||
case I2CMETER_CALCR:
|
||||
// Returns a raw reverse power value.
|
||||
// KC4UPR: I'm going to replace this with a "process" that continually updates the ADC values.
|
||||
// So then this would just grab the current value, and return it.
|
||||
readValue = analogRead(SWR_METER_ADC);
|
||||
Wire1.write(readValue);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
extern void Decode_Morse(float magnitude);
|
||||
extern double coeff;
|
||||
|
||||
|
||||
#define LAST_TIME_INTERVAL 159
|
||||
|
||||
//int SWRAdcValue = 0;
|
||||
|
@ -759,30 +776,10 @@ void loop()
|
|||
}
|
||||
|
||||
//===========================================
|
||||
//TRANSCEIVER STATUS : RX
|
||||
// TRANSCEIVER STATUS : TX
|
||||
//===========================================
|
||||
if (TXStatus == 1) //TX Mode
|
||||
if (isTX) //TX Mode
|
||||
{
|
||||
/*
|
||||
int readValue = 0;
|
||||
SMeterToUartIdleCount++;
|
||||
if (SMeterToUartIdleCount > 130) //SWR
|
||||
{
|
||||
//SWR Send
|
||||
sendCommandL('m', SWRAdcValue);
|
||||
sendCommand1Num('m', 3);
|
||||
SMeterToUartIdleCount = 0;
|
||||
}
|
||||
else if (SMeterToUartIdleCount == 100) //POWER 500msec interval
|
||||
{
|
||||
readValue = analogRead(POWER_METER_ADC );
|
||||
SWRAdcValue = analogRead(SWR_METER_ADC);
|
||||
sendCommandL('m', readValue);
|
||||
sendCommand1Num('m',2);
|
||||
//PWR Send
|
||||
}
|
||||
*/
|
||||
|
||||
//************************************************
|
||||
//Read FWD and RWD
|
||||
adcFWD = adcFWD * 0.8 + analogRead(A2) * 0.2;
|
||||
|
@ -852,7 +849,7 @@ void loop()
|
|||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
forwardData();
|
||||
if (TXStatus != 1) //if TX -> RX break
|
||||
if (!isTX) //if TX -> RX break
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
@ -911,14 +908,14 @@ void loop()
|
|||
//nowSendingProtocol -> not finished data forward, (not found 0xff, 0xff, 0xff yet)
|
||||
if (nowSendingProtocol == 0 && isProcess == 1) //Complete ADC Sampling and Idle status
|
||||
{
|
||||
SendMeterData(1);
|
||||
sendMeterData(1);
|
||||
SMeterToUartIdleCount = 0;
|
||||
}
|
||||
}
|
||||
} //end of if
|
||||
else
|
||||
{
|
||||
SendMeterData(0); //only calculate Signal Level
|
||||
sendMeterData(0); //only calculate Signal Level
|
||||
}
|
||||
|
||||
forwardData();
|
||||
|
|
|
@ -88,7 +88,7 @@ void FFT(double *x,double *y, int n, long m)
|
|||
|
||||
double coeff;
|
||||
|
||||
void CalculateCoeff(uint8_t freqIndex)
|
||||
void calculateCoeff(uint8_t freqIndex)
|
||||
{
|
||||
float omega;
|
||||
int targetFrequency = freqIndex * 50 + 300;
|
||||
|
|
Loading…
Reference in New Issue
Block a user