Compare commits

..

No commits in common. "a11a75a2c5f7fb11e86c0b8605eed4193fefb3ea" and "0626bce3b3e9ee86a0c189985c8cc8b8dd32d1f0" have entirely different histories.

3 changed files with 153 additions and 155 deletions

View file

@ -210,7 +210,6 @@ void core1_task(void *pvParameters)
{ {
if (stop_change) if (stop_change)
{ {
// TODO the enable function causes an esp32 deadlock
//i2s_adc_enable(I2S_NUM_0); //i2s_adc_enable(I2S_NUM_0);
i2s_zero_dma_buffer(I2S_NUM_0); i2s_zero_dma_buffer(I2S_NUM_0);
stop_change = false; stop_change = false;

View file

@ -78,15 +78,20 @@ void trigger_freq_analog(uint16_t *i2s_buffer,
uint32_t trigger_index = 0; uint32_t trigger_index = 0;
// get initial signal relative to the mean // get initial signal relative to the mean
bool previous_signal_side = (to_voltage(i2s_buffer[0]) > mean); if (to_voltage(i2s_buffer[0]) > mean)
{
signal_side = true;
}
// waveform repetitions calculation + get triggers time // waveform repetitions calculation + get triggers time
uint32_t wave_center = (max_v + min_v) / 2; uint32_t wave_center = (max_v + min_v) / 2;
for (uint32_t i = 1; i < BUFF_SIZE; i++) for (uint32_t i = 1; i < BUFF_SIZE; i++)
{ {
bool current_signal_side = (to_voltage(i2s_buffer[i]) > mean); if (signal_side && i2s_buffer[i] < wave_center - (wave_center - min_v) * 0.2)
{
if (previous_signal_side && !current_signal_side) signal_side = false;
}
else if (!signal_side && i2s_buffer[i] > wave_center + (max_v - wave_center) * 0.2)
{ {
freq++; freq++;
if (trigger_count < trigger_num) if (trigger_count < trigger_num)
@ -94,19 +99,10 @@ void trigger_freq_analog(uint16_t *i2s_buffer,
trigger_temp[trigger_count] = i; trigger_temp[trigger_count] = i;
trigger_count++; trigger_count++;
} }
} else if (!previous_signal_side && current_signal_side) signal_side = true;
{
freq++;
if (trigger_count < trigger_num)
{
trigger_temp[trigger_count] = i;
trigger_count++;
} }
} }
previous_signal_side = current_signal_side;
}
// frequency calculation // frequency calculation
if (trigger_count < 2) if (trigger_count < 2)
{ {
@ -176,6 +172,7 @@ void trigger_freq_digital(uint16_t *i2s_buffer,
float *pt_period, float *pt_period,
uint32_t *pt_trigger0) uint32_t *pt_trigger0)
{ {
float freq = 0; float freq = 0;
float period = 0; float period = 0;
bool signal_side = false; bool signal_side = false;
@ -185,7 +182,10 @@ void trigger_freq_digital(uint16_t *i2s_buffer,
uint32_t trigger_index = 0; uint32_t trigger_index = 0;
// get initial signal relative to the mean // get initial signal relative to the mean
bool previous_signal_side = (to_voltage(i2s_buffer[0]) > mean); if (to_voltage(i2s_buffer[0]) > mean)
{
signal_side = true;
}
// waveform repetitions calculation + get triggers time // waveform repetitions calculation + get triggers time
uint32_t wave_center = (max_v + min_v) / 2; uint32_t wave_center = (max_v + min_v) / 2;
@ -194,37 +194,38 @@ void trigger_freq_digital(uint16_t *i2s_buffer,
{ {
for (uint32_t i = 1; i < BUFF_SIZE; i++) for (uint32_t i = 1; i < BUFF_SIZE; i++)
{ {
bool current_signal_side = (to_voltage(i2s_buffer[i]) > mean); if (signal_side && i2s_buffer[i] < wave_center - (wave_center - min_v) * 0.2)
if (previous_signal_side && !current_signal_side)
{ {
// signal was high, fell -> trigger if normal high // signal was high, fell -> trigger if normal high
if (trigger_count < trigger_num && normal_high) if (trigger_count < trigger_num && normal_high)
{ {
trigger_temp[trigger_count] = i; trigger_temp[trigger_count] = i;
trigger_count++; trigger_count++;
} }
signal_side = false;
} }
else if (!previous_signal_side && current_signal_side) else if (!signal_side && i2s_buffer[i] > wave_center + (max_v - wave_center) * 0.2)
{ {
freq++;
// signal was low, rose -> trigger if normal low // signal was low, rose -> trigger if normal low
if (trigger_count < trigger_num && !normal_high) if (trigger_count < trigger_num && !normal_high)
{ {
trigger_temp[trigger_count] = i; trigger_temp[trigger_count] = i;
trigger_count++; trigger_count++;
} }
signal_side = true;
}
} }
previous_signal_side = current_signal_side;
}
// frequency calculation
if (trigger_count > 1)
{
// simple frequency calculation fair enough for frequencies over 2khz (20hz resolution)
freq = freq * 1000 / 50; freq = freq * 1000 / 50;
period = (float)(sample_rate * 1000.0) / freq; // us period = (float)(sample_rate * 1000.0) / freq; // us
if (trigger_count > 1)
{
// from 2000 to 80 hz -> uses mean of the periods for precision // from 2000 to 80 hz -> uses mean of the periods for precision
if (freq < 2000 && freq > 80) if (freq < 2000 && freq > 80)
{ {

View file

@ -32,11 +32,9 @@ void ADC_Sampling(uint16_t *i2s_buff){
} }
*/ */
void ADC_Sampling(uint16_t *i2s_buff){ void ADC_Sampling(uint16_t *i2s_buff){
size_t bytes_read; size_t bytes_read; for (int i = 0; i < B_MULT; i++) {
for (int i = 0; i < B_MULT; i++) {
i2s_read(I2S_NUM_0, (void*)&i2s_buff[i * NUM_SAMPLES], NUM_SAMPLES * sizeof(uint16_t), &bytes_read, portMAX_DELAY); i2s_read(I2S_NUM_0, (void*)&i2s_buff[i * NUM_SAMPLES], NUM_SAMPLES * sizeof(uint16_t), &bytes_read, portMAX_DELAY);
for(size_t ix = 0; ix < bytes_read/2; ix++) for(size_t ix = 0; ix < bytes_read/2; ix++) i2s_buff[(i * NUM_SAMPLES) + ix] &= 0x0FFF; // 16bit to 12bit conversion 
i2s_buff[(i * NUM_SAMPLES) + ix] &= 0x0FFF; // 16bit to 12bit conversion 
} }
} }