From: Ole Artz Date: Thu, 23 Jun 2022 13:30:40 +0000 (+0200) Subject: LANTelnetToI2C_Board: power-on read latest change board setting from on-Board EEPROM... X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=baba55f93be261b27924173e528f5d3e2cc6f4ce;p=avr.git LANTelnetToI2C_Board: power-on read latest change board setting from on-Board EEPROM. Quickstart docu was also fixed. --- diff --git a/esp32/EthernetUART/LANTelnetToI2C_Board/LANTelnetToI2C_Board.ino b/esp32/EthernetUART/LANTelnetToI2C_Board/LANTelnetToI2C_Board.ino index ebd1dee..5dd0abd 100644 --- a/esp32/EthernetUART/LANTelnetToI2C_Board/LANTelnetToI2C_Board.ino +++ b/esp32/EthernetUART/LANTelnetToI2C_Board/LANTelnetToI2C_Board.ino @@ -1,15 +1,16 @@ /* ##################################################### # ### ### # -# ### CODE for ESP32 of LANToI2C_Board_264 ### # +# ### CODE for ESP32 of LANToI2C_Board ### # # ### for START TELNET SERVER ### # # ### for LAN to I2C ### # # ### connected to 4 CH ADC ### # # ### connected to 0.91 OLED Display ### # +# ### use EEPROM to save settings ### # # ### ### # # ### author: O.Artz ### # # ### ### # -# ### UPDATE 2022-06-07 ### # +# ### UPDATE 2022-06-21 ### # # ### ### # ##################################################### @@ -27,10 +28,25 @@ ETH Disconnected/stopped -> Orange LED on #include //for external ADC #include //for Telnet Server Connection #include //for I2C Connection +#include //to save settings //__________________________________________ #include //for OLED display driver #include //for display control +// define the number of bytes you want to access +/* + * Address Value + * 0x11 ADC measurment range + * 0x12 Unit + * 0x13, 0x14 Device Transformationfactor + * 0x21, 0x22 Voltage divider + * 0x31, 0x32 Offset CH 0 + * 0x33, 0x34 Offset CH 1 + * 0x35, 0x36 Offset CH 2 + * 0x37, 0x38 Offset CH 3 + */ +#define EEPROM_SIZE 512 + // for screen #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels @@ -109,20 +125,20 @@ volatile static bool eth_connected = false; bool show_connection = true; uint8_t rxcnt = 0, txpoint = 0; uint8_t rxbuf[11], txbuf[12]; -uint8_t val, new_gain, new_unit; +uint8_t new_gain, new_unit; float vol_div_fac, dev_trans_fac; uint16_t new_vol_div_fac, new_dev_trans_fac; +int16_t new_offset_val; int16_t adc0, adc1, adc2, adc3; float fadc0, fadc1, fadc2, fadc3; float offset0, offset1, offset2, offset3; -int16_t new_offset_val; int chan_offset_num, offset_val; uint8_t setGAIN = 0xFFFF; float setADCconversion; float acGAIN[] = {0.1875, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125}; adsGain_t asetGAIN[] = {GAIN_TWOTHIRDS, GAIN_ONE, GAIN_TWO, GAIN_FOUR, GAIN_EIGHT, GAIN_SIXTEEN}; int counter = 0; -String possible_units[] = {"mV", "mA", "mbar", "degC"}; +String possible_units[] = {"mV", "mA", "mbar", "mPa" "degC"}; String unit; void WiFiEvent(WiFiEvent_t event) { @@ -212,6 +228,7 @@ void setup() { connection_screen(); // test_screen(); + EEPROM.begin(EEPROM_SIZE); //Setting for external ADC measurment range // val ADS1015 ADS1115 // ------- ------- @@ -222,39 +239,57 @@ void setup() { // 4 ads.setGain(GAIN_EIGHT); // 8x gain +/- 0.512V 1 bit = 0.25mV 0.015625mV // 5 ads.setGain(GAIN_SIXTEEN); // 16x gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV - val = 2; // chose as default for external adc setting - set_adc_gain(val); +// new_gain = 2; // chose as default for external adc setting + new_gain = EEPROM.read(0x11); + set_adc_gain(new_gain); // Chose right Unit // val Unit // 0 mV // 1 mA // 2 mbar -// 3 degC +// 3 mPa +// 4 degC - new_unit = 0; //default mV +// new_unit = 0; //default + new_unit = EEPROM.read(0x12); set_unit(new_unit); - -// Channel Offset - new_offset_val = 0; //default - chan_offset_num = 5; //default all channels - set_offset(new_offset_val, chan_offset_num); - + // Device Transformationfactor - new_dev_trans_fac = 1000; //default +// new_dev_trans_fac = 1000, //default + new_dev_trans_fac = EEPROM.read(0x13) | EEPROM.read(0x14) << 8; set_device_transformation_factor(new_dev_trans_fac); // Input voltage divider - new_vol_div_fac = 1000; //default w/o voltage devider, 1000 cause will devider by 1000 to sent float by telnet +// new_vol_div_fac = 1000; //default w/o voltage devider, 1000 cause will devider by 1000 to sent float by telnet + new_vol_div_fac = EEPROM.read(0x21) | EEPROM.read(0x22) << 8; set_voltage_divider_factor(new_vol_div_fac); +// Channel Offset +// new_offset_val = 0; //default +// CH 0 + new_offset_val = EEPROM.read(0x31) | EEPROM.read(0x32) << 8; + chan_offset_num = 0; + set_offset(new_offset_val, chan_offset_num); +// CH 1 + new_offset_val = EEPROM.read(0x33) | EEPROM.read(0x34) << 8; + chan_offset_num = 1; + set_offset(new_offset_val, chan_offset_num); +// CH 2 + new_offset_val = EEPROM.read(0x35) | EEPROM.read(0x36) << 8; + chan_offset_num = 2; + set_offset(new_offset_val, chan_offset_num); +// CH 3 + new_offset_val = EEPROM.read(0x37) | EEPROM.read(0x38) << 8; + chan_offset_num = 3; + set_offset(new_offset_val, chan_offset_num); + Serial.print("\nADC Settings"); Serial.print("\nActual Gainfactor: "); - Serial.print(asetGAIN[val]); + Serial.print(asetGAIN[new_gain]); Serial.print("\nConversionfactor: "); Serial.print(setADCconversion); Serial.println(); - } void restart_screen() { @@ -268,13 +303,15 @@ void restart_screen() { // the library initializes this with an Adafruit splash screen. // display.display(); - delay(1000); // Pause for 2 seconds + delay(1000); // Pause for 1 second display.clearDisplay(); } void start_screen() { // show ikf logo and initials of the programmer display.clearDisplay(); + display.ssd1306_command(SSD1306_SETCONTRAST); + display.ssd1306_command(0); // val=0 := 0% up to val = 255 := 100% display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(SSD1306_WHITE); // Draw white text display.cp437(true); // Use full 256 char 'Code Page 437' font @@ -345,6 +382,8 @@ void show_CH(String unit) { display.setTextSize(1); if (unit.length() == 4) { display.setCursor(SCREEN_WIDTH * 10 / 28, SCREEN_HEIGHT * 2 / 5); + } else if (unit.length() == 3) { + display.setCursor(SCREEN_WIDTH * 23 / 56, SCREEN_HEIGHT * 2 / 5); } else if (unit.length() == 2) { display.setCursor(SCREEN_WIDTH * 11 / 28, SCREEN_HEIGHT * 2 / 5); } @@ -371,6 +410,8 @@ void show_VAL(int dadc0, int dadc1, int dadc2, int dadc3, String unit) { display.setTextSize(1); if (unit.length() == 4) { display.setCursor(SCREEN_WIDTH * 10 / 28, SCREEN_HEIGHT * 2 / 5); + } else if (unit.length() == 3) { + display.setCursor(SCREEN_WIDTH * 23 / 56, SCREEN_HEIGHT * 2 / 5); } else if (unit.length() == 2) { display.setCursor(SCREEN_WIDTH * 11 / 28, SCREEN_HEIGHT * 2 / 5); } @@ -450,12 +491,12 @@ void set_offset(int16_t new_offset_val, int chan_offset_num) { } } -void set_voltage_divider_factor(float new_vol_div_fac) { +void set_voltage_divider_factor(uint16_t new_vol_div_fac) { // to set the correct voltage divider factor vol_div_fac = new_vol_div_fac/1000.0; } -void set_device_transformation_factor(float new_dev_trans_fac) { +void set_device_transformation_factor(uint16_t new_dev_trans_fac) { // to transformate adc values in device values (units) dev_trans_fac = new_dev_trans_fac/1000.0; } @@ -645,6 +686,8 @@ void getdata(uint8_t buf) { // (hex_to_int(rxbuf[7])*16+hex_to_int(rxbuf[8]))&0xFF; new_gain = (hex_to_int(rxbuf[9])); set_adc_gain(new_gain); + EEPROM.write(0x11, new_gain); + EEPROM.commit(); send_answer_hex(&rxbuf[0], new_gain); } @@ -654,7 +697,9 @@ void getdata(uint8_t buf) { if (hex_to_int(rxbuf[4]) == 0) { new_unit = (hex_to_int(rxbuf[9])); set_unit(new_unit); - + EEPROM.write(0x12, new_unit); + EEPROM.commit(); + send_answer_hex(&rxbuf[0], new_unit); } @@ -662,6 +707,9 @@ void getdata(uint8_t buf) { if (hex_to_int(rxbuf[4]) == 1) { new_dev_trans_fac = (hex_to_int(rxbuf[6]) * 4096 + hex_to_int(rxbuf[7]) * 256 + hex_to_int(rxbuf[8]) * 16 + hex_to_int(rxbuf[9])); set_device_transformation_factor(new_dev_trans_fac); + EEPROM.write(0x13, new_dev_trans_fac); + EEPROM.write(0x14, new_dev_trans_fac >> 8); + EEPROM.commit(); send_answer_hex(&rxbuf[0], new_dev_trans_fac); } @@ -670,7 +718,9 @@ void getdata(uint8_t buf) { if (hex_to_int(rxbuf[4]) == 2) { new_vol_div_fac = (hex_to_int(rxbuf[6]) * 4096 + hex_to_int(rxbuf[7]) * 256 + hex_to_int(rxbuf[8]) * 16 + hex_to_int(rxbuf[9])); set_voltage_divider_factor(new_vol_div_fac); - + EEPROM.write(0x21, new_vol_div_fac); + EEPROM.write(0x22, new_vol_div_fac >> 8); + EEPROM.commit(); send_answer_hex(&rxbuf[0], new_vol_div_fac); } } @@ -678,7 +728,34 @@ void getdata(uint8_t buf) { //offset new_offset_val = (hex_to_int(rxbuf[6]) * 4096 + hex_to_int(rxbuf[7]) * 256 + hex_to_int(rxbuf[8]) * 16 + hex_to_int(rxbuf[9])); chan_offset_num = (hex_to_int(rxbuf[4])); - set_offset(new_offset_val, chan_offset_num); + set_offset(new_offset_val, chan_offset_num); + if (chan_offset_num == 0) { + EEPROM.write(0x31, new_offset_val); + EEPROM.write(0x32, new_offset_val >> 8); + EEPROM.commit(); + } else if (chan_offset_num == 1) { + EEPROM.write(0x33, new_offset_val); + EEPROM.write(0x34, new_offset_val >> 8); + EEPROM.commit(); + } else if (chan_offset_num == 2) { + EEPROM.write(0x35, new_offset_val); + EEPROM.write(0x36, new_offset_val >> 8); + EEPROM.commit(); + } else if (chan_offset_num == 3) { + EEPROM.write(0x37, new_offset_val); + EEPROM.write(0x38, new_offset_val >> 8); + EEPROM.commit(); + } else if (chan_offset_num == 5) { + EEPROM.write(0x31, new_offset_val); + EEPROM.write(0x32, new_offset_val >> 8); + EEPROM.write(0x33, new_offset_val); + EEPROM.write(0x34, new_offset_val >> 8); + EEPROM.write(0x35, new_offset_val); + EEPROM.write(0x36, new_offset_val >> 8); + EEPROM.write(0x37, new_offset_val); + EEPROM.write(0x38, new_offset_val >> 8); + EEPROM.commit(); + } send_answer_hex(&rxbuf[0], new_offset_val); } diff --git a/esp32/EthernetUART/LANTelnetToI2C_Board/quickstart 4CH ADC_Ethernet Portable Board.pdf b/esp32/EthernetUART/LANTelnetToI2C_Board/quickstart 4CH ADC_Ethernet Portable Board.pdf index a51eb1c..b8558eb 100644 Binary files a/esp32/EthernetUART/LANTelnetToI2C_Board/quickstart 4CH ADC_Ethernet Portable Board.pdf and b/esp32/EthernetUART/LANTelnetToI2C_Board/quickstart 4CH ADC_Ethernet Portable Board.pdf differ