diff --git a/ESP32_Oscilloscope/ESP32_Oscilloscope.ino b/ESP32_Oscilloscope/ESP32_Oscilloscope.ino index 89b6499..e54e2c3 100644 --- a/ESP32_Oscilloscope/ESP32_Oscilloscope.ino +++ b/ESP32_Oscilloscope/ESP32_Oscilloscope.ino @@ -12,13 +12,13 @@ #include "esp_adc_cal.h" #include "filters.h" -#define DEBUG_SERIAL +//#define DEBUG_SERIAL #define DEBUG_BUFF -#define DELAY 250 +#define DEBUG_DELAY 250 // Width and height of sprite -#define WIDTH 240 -#define HEIGHT 320 +#define DISPLAY_HEIGHT 240 +#define DISPLAY_WIDTH 320 #define ADC_CHANNEL ADC1_CHANNEL_5 // GPIO33 #define NUM_SAMPLES 1000 // number of samples diff --git a/ESP32_Oscilloscope/debug_routines.ino b/ESP32_Oscilloscope/debug_routines.ino index 71aa956..f9594db 100644 --- a/ESP32_Oscilloscope/debug_routines.ino +++ b/ESP32_Oscilloscope/debug_routines.ino @@ -2,7 +2,7 @@ void debug_buffer() { ADC_Sampling(); i2s_adc_disable(I2S_NUM_0); - delay(1000); + delay(DEBUG_DELAY); for (uint32_t i = 0; i < B_MULT * NUM_SAMPLES; i++) { for (int j = 0; j < 1; j++) { Serial.println(i2s_buff[i]); diff --git a/ESP32_Oscilloscope/screen.ino b/ESP32_Oscilloscope/screen.ino index d373bb7..6148a0e 100644 --- a/ESP32_Oscilloscope/screen.ino +++ b/ESP32_Oscilloscope/screen.ino @@ -7,15 +7,16 @@ void setup_screen() { spr.setColorDepth(8); // Create a sprite of defined size - spr.createSprite(HEIGHT, WIDTH); + spr.createSprite(DISPLAY_WIDTH, DISPLAY_HEIGHT); // Clear the TFT screen to blue tft.fillScreen(TFT_BLACK); } -int data[HEIGHT] = {0}; +int data[DISPLAY_WIDTH] = {0}; +/* float to_scale(float reading) { - float temp = WIDTH - + float temp = DISPLAY_HEIGHT - ( ( ( @@ -26,18 +27,33 @@ float to_scale(float reading) { (v_div * 6) ) ) - * (WIDTH - 1) + * (DISPLAY_HEIGHT - 1) - 1; return temp; } +*/ +float to_scale(float reading) { + float temp = DISPLAY_HEIGHT - (((reading / 4095.0) + (offset / 3.3)) * 3300 / (v_div * 6)) * (DISPLAY_HEIGHT - 1) - 1; + return temp; +} +/* float to_voltage(float reading) { return (reading - 20480.0) / 4095.0 * 3.3; } +*/ +float to_voltage(float reading) { + return reading / 4095.0 * 3.3; +} +/* uint32_t from_voltage(float voltage) { return uint32_t(voltage / 3.3 * 4095 + 20480.0); } +*/ +uint32_t from_voltage(float voltage) { + return ((uint32_t)(voltage / 3.3 * 4095)); +} void update_screen(uint16_t *i2s_buff, float sample_rate) { @@ -149,11 +165,11 @@ void draw_sprite(float freq, draw_channel1(trigger, 0, i2s_buff, sample_rate); } - int shift = HEIGHT - 110; + int shift = DISPLAY_WIDTH - 110; if (menu) { - spr.drawLine( 0, WIDTH/2, HEIGHT, WIDTH/2, TFT_WHITE); //center line - spr.fillRect(shift, 0, (WIDTH/2)-18, (WIDTH/2)+15, TFT_BLACK); - spr.drawRect(shift, 0, (WIDTH/2)-18, (WIDTH/2)+15, TFT_WHITE); + spr.drawLine( 0, DISPLAY_HEIGHT/2, DISPLAY_WIDTH, DISPLAY_HEIGHT/2, TFT_WHITE); //center line + spr.fillRect(shift, 0, (DISPLAY_HEIGHT/2)-18, (DISPLAY_HEIGHT/2)+15, TFT_BLACK); + spr.drawRect(shift, 0, (DISPLAY_HEIGHT/2)-18, (DISPLAY_HEIGHT/2)+15, TFT_WHITE); spr.fillRect(shift + 1, 3 + 10 * (opt - 1), 100, 11, TFT_RED); spr.drawString("AUTOSCALE", shift + 5, 5); @@ -183,27 +199,29 @@ void draw_sprite(float freq, spr.drawString(offset_line, shift + 25, 59); if (set_value) { - spr.fillRect(229, 0, 11, 11, TFT_BLUE); - spr.drawRect(229, 0, 11, 11, TFT_WHITE); - spr.drawLine(231, 5, 238 , 5, TFT_WHITE); - spr.drawLine(234, 2, 234, 8, TFT_WHITE); + uint16_t t_left = shift+161; + // Plus symbols while setting a value + spr.fillRect(t_left, 0, 11, 11, TFT_BLUE); + spr.drawRect(t_left, 0, 11, 11, TFT_WHITE); + spr.drawLine(t_left+2, 5, t_left+9, 5, TFT_WHITE); + spr.drawLine(t_left+5, 2, t_left+5, 8, TFT_WHITE); - - spr.fillRect(229, 124, 11, 11, TFT_BLUE); - spr.drawRect(229, 124, 11, 11, TFT_WHITE); - spr.drawLine(231, 129, 238, 129, TFT_WHITE); + // Minus symbols while setting a value + spr.fillRect(t_left, 124, 11, 11, TFT_BLUE); + spr.drawRect(t_left, 124, 11, 11, TFT_WHITE); + spr.drawLine(t_left+2, 129, t_left+9, 129, TFT_WHITE); } } else if (info) { - spr.drawLine( 0, 120, HEIGHT, 120, TFT_WHITE); //center line - //spr.drawRect(shift + 10, 0, HEIGHT - shift - 20, 30, TFT_WHITE); + spr.drawLine( 0, 120, DISPLAY_WIDTH, 120, TFT_WHITE); //center line + //spr.drawRect(shift + 10, 0, DISPLAY_WIDTH - shift - 20, 30, TFT_WHITE); spr.drawString("P-P: " + String(max_v - min_v) + "V", shift + 15, 5); spr.drawString(frequency, shift + 15, 15); spr.drawString(String(int(v_div)) + "mV/div", shift - 100, 5); spr.drawString(String(int(s_div)) + "uS/div", shift - 100, 15); //String offset_line = String((2.0 * v_div) / 1000.0 - offset) + "V"; String offset_line = String((3.0 * v_div) / 1000.0 - offset) + "V"; - spr.drawString(offset_line, shift + 75, 112); + spr.drawString(offset_line, shift + 75, (DISPLAY_HEIGHT/2) -8); } @@ -215,15 +233,15 @@ void draw_sprite(float freq, void draw_grid() { - for (int i = 0; i < (HEIGHT/10); i++) { + for (int i = 0; i < (DISPLAY_WIDTH/10); i++) { spr.drawPixel(i * 10, 40, TFT_WHITE); spr.drawPixel(i * 10, 80, TFT_WHITE); spr.drawPixel(i * 10, 120, TFT_WHITE); spr.drawPixel(i * 10, 160, TFT_WHITE); spr.drawPixel(i * 10, 200, TFT_WHITE); } - for (int i = 0; i < WIDTH; i += 10) { - for (int j = 0; j < HEIGHT; j += 40) { + for (int i = 0; i < DISPLAY_HEIGHT; i += 10) { + for (int j = 0; j < DISPLAY_WIDTH; j += 40) { spr.drawPixel(j, i, TFT_WHITE); } } @@ -245,7 +263,7 @@ void draw_channel1(uint32_t trigger0, uint32_t trigger1, uint16_t *i2s_buff, flo trigger0 += index_offset; uint32_t old_index = trigger0; float n_data = 0, o_data = to_scale(i2s_buff[trigger0]); - for (uint32_t i = 1; i < HEIGHT; i++) { + for (uint32_t i = 1; i < DISPLAY_WIDTH; i++) { uint32_t index = trigger0 + (uint32_t)((i + 1) * data_per_pixel); if (index < BUFF_SIZE) { if (full_pix && s_div > 40 && current_filter == 0) {