Compare commits
2 commits
22a3b5e795
...
bd79be6eac
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bd79be6eac | ||
![]() |
d3abffa13d |
1 changed files with 13 additions and 7 deletions
20
main.c
20
main.c
|
@ -59,12 +59,14 @@ static kiss_fft_cpx in[FFT_BUF_LEN], out[FFT_BUF_LEN];
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
bool fft;
|
||||||
uint8_t voltage_scale;
|
uint8_t voltage_scale;
|
||||||
uint8_t time_scale;
|
uint8_t time_scale;
|
||||||
uint8_t trigger_mode;
|
uint8_t trigger_mode;
|
||||||
} Options;
|
} Options;
|
||||||
|
|
||||||
Options options = {
|
Options options = {
|
||||||
|
.fft = false, // oscilloscope mode
|
||||||
.voltage_scale = 4, // 2v
|
.voltage_scale = 4, // 2v
|
||||||
.time_scale = 5, // 20us
|
.time_scale = 5, // 20us
|
||||||
.trigger_mode = 1, // rising
|
.trigger_mode = 1, // rising
|
||||||
|
@ -185,12 +187,11 @@ void capture_waveform(UArg arg1, UArg arg2)
|
||||||
int32_t adc_current_index;
|
int32_t adc_current_index;
|
||||||
int32_t i;
|
int32_t i;
|
||||||
|
|
||||||
if (true) {
|
if (options.fft) {
|
||||||
adc_current_index = gADCBufferIndex;
|
adc_current_index = gADCBufferIndex;
|
||||||
|
int32_t j = 0;
|
||||||
for(i=adc_current_index-FFT_BUF_LEN; i<adc_current_index; i++) {
|
for(i=adc_current_index-FFT_BUF_LEN; i<adc_current_index; i++) {
|
||||||
//in[i].r = sinf(20*PI*i/FFT_BUF_LEN);
|
adc_buffer_fft_sample[j++] = gADCBuffer[ADC_BUFFER_WRAP(adc_current_index + i)];
|
||||||
in[i].r = (float) gADCBuffer[ADC_BUFFER_WRAP(adc_current_index + i)];
|
|
||||||
in[i].i = 0;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// single read of options is atomic
|
// single read of options is atomic
|
||||||
|
@ -229,9 +230,11 @@ void process_waveform(UArg arg1, UArg arg2) {
|
||||||
#define MAX(a,b) (((a)>(b))?(a):(b))
|
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||||||
#define CONSTRAIN(x) MAX(MIN(HEIGHT - 1, x), 0)
|
#define CONSTRAIN(x) MAX(MIN(HEIGHT - 1, x), 0)
|
||||||
|
|
||||||
if(true) { // fft
|
if(options.fft) { // fft
|
||||||
for(i=0; i<FFT_BUF_LEN; i++) {
|
for(i=0; i<FFT_BUF_LEN; i++) {
|
||||||
in[i].r *= w[i];
|
//in[i].r = sinf(20*PI*i/FFT_BUF_LEN);
|
||||||
|
in[i].r = (float) adc_buffer_fft_sample[i] * w[i];
|
||||||
|
in[i].i = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
kiss_fft(cfg, in, out);
|
kiss_fft(cfg, in, out);
|
||||||
|
@ -240,7 +243,7 @@ void process_waveform(UArg arg1, UArg arg2) {
|
||||||
#define DB(out) 10 * log10f(out.r * out.r + out.i * out.i)
|
#define DB(out) 10 * log10f(out.r * out.r + out.i * out.i)
|
||||||
|
|
||||||
//adc_buffer_processed[i] = CONSTRAIN(HEIGHT- (int)roundf(0.5 * DB(out[i])));
|
//adc_buffer_processed[i] = CONSTRAIN(HEIGHT- (int)roundf(0.5 * DB(out[i])));
|
||||||
adc_buffer_processed[i] = CONSTRAIN(HEIGHT- (int) (DB(out[i])) + 64);
|
adc_buffer_processed[i] = CONSTRAIN(HEIGHT- (int) (DB(out[i])) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,6 +274,9 @@ void handle_user_input() {
|
||||||
case S1: // toggle edge
|
case S1: // toggle edge
|
||||||
local_options.trigger_mode = (local_options.trigger_mode + 1) % 3;
|
local_options.trigger_mode = (local_options.trigger_mode + 1) % 3;
|
||||||
break;
|
break;
|
||||||
|
case S2: // toggle fft
|
||||||
|
local_options.fft ^= 1;
|
||||||
|
break;
|
||||||
case Up: // next scale
|
case Up: // next scale
|
||||||
local_options.voltage_scale = (local_options.voltage_scale + 1) % VOLTAGE_SCALES;
|
local_options.voltage_scale = (local_options.voltage_scale + 1) % VOLTAGE_SCALES;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue