diff options
author | Ben V. Brown <[email protected]> | 2017-07-22 11:19:23 +1000 |
---|---|---|
committer | Ben V. Brown <[email protected]> | 2017-07-22 11:19:23 +1000 |
commit | 2a5f4e6d8964653fa8f93ff87272fae1ff4c7e86 (patch) | |
tree | abc49ee0809c6ca602e405a66f6bce7357a5e597 | |
parent | c50b33e14242ad8166e7ff87ef8df3f776b438c0 (diff) | |
download | IronOS-2a5f4e6d8964653fa8f93ff87272fae1ff4c7e86.tar.gz IronOS-2a5f4e6d8964653fa8f93ff87272fae1ff4c7e86.zip |
Updating cutoff voltage to DC/3.5V*cell count
Working on progress for:
#29 #30
-rw-r--r-- | workspace/ts100/inc/Analog.h | 5 | ||||
-rw-r--r-- | workspace/ts100/inc/Modes.h | 1 | ||||
-rw-r--r-- | workspace/ts100/inc/Settings.h | 5 | ||||
-rw-r--r-- | workspace/ts100/src/Main.c | 6 | ||||
-rw-r--r-- | workspace/ts100/src/Modes.c | 27 | ||||
-rw-r--r-- | workspace/ts100/src/Settings.c | 45 |
6 files changed, 55 insertions, 34 deletions
diff --git a/workspace/ts100/inc/Analog.h b/workspace/ts100/inc/Analog.h index a81e6871..1365f756 100644 --- a/workspace/ts100/inc/Analog.h +++ b/workspace/ts100/inc/Analog.h @@ -15,6 +15,9 @@ extern volatile uint16_t ADC1ConvertedValue[2]; uint16_t Get_ADC1Value(uint8_t i); -uint16_t readIronTemp(uint16_t calibration_temp, uint8_t read,uint16_t setPointTemp); //read the iron temp in C X10 +uint16_t readIronTemp(uint16_t calibration_temp, uint8_t read, + uint16_t setPointTemp); //read the iron temp in C X10 uint16_t readDCVoltage(uint16_t divFactor);/*Get the system voltage X10*/ +int16_t readTipTemp(); +int readSensorTemp(void); #endif /* ANALOG_H_ */ diff --git a/workspace/ts100/inc/Modes.h b/workspace/ts100/inc/Modes.h index 42441463..5bee11c3 100644 --- a/workspace/ts100/inc/Modes.h +++ b/workspace/ts100/inc/Modes.h @@ -16,6 +16,7 @@ #include "PID.h" #include "Settings.h" #include "Analog.h" +#include <string.h> enum { STARTUP, //we are sitting on the prompt to push a button SOLDERING, //Normal operating mode diff --git a/workspace/ts100/inc/Settings.h b/workspace/ts100/inc/Settings.h index cbbbed96..3c16125b 100644 --- a/workspace/ts100/inc/Settings.h +++ b/workspace/ts100/inc/Settings.h @@ -11,7 +11,7 @@ #define SETTINGS_H_ #include <stdint.h> #include "stm32f10x_flash.h" -#define SETTINGSVERSION 12 /*Change this if you change the struct below to prevent people getting out of sync*/ +#define SETTINGSVERSION 13 /*Change this if you change the struct below to prevent people getting out of sync*/ //Display Speeds #define DISPLAYMODE_FAST (0x00) #define DISPLAYMODE_MEDIUM (0x01) @@ -29,7 +29,7 @@ struct { uint32_t SleepTemp; //temp to drop to in sleep uint8_t version; //Used to track if a reset is needed on firmware upgrade uint8_t SleepTime; //minutes timeout to sleep - uint8_t cutoutVoltage:5; //The voltage we cut out at for under voltage + uint8_t cutoutSetting:5; //(3 bits) The voltage we cut out at for under voltage uint8_t displayTempInF:1; //If we need to convert the C reading to F uint8_t flipDisplay:1; //If true we want to invert the display for lefties uint8_t sensitivity:6; //Sensitivity of accelerometer (5 bits) @@ -44,5 +44,6 @@ struct { void saveSettings(); void restoreSettings(); +uint8_t lookupVoltageLevel(uint8_t level); void resetSettings(); #endif /* SETTINGS_H_ */ diff --git a/workspace/ts100/src/Main.c b/workspace/ts100/src/Main.c index cd99dbe4..87ac5567 100644 --- a/workspace/ts100/src/Main.c +++ b/workspace/ts100/src/Main.c @@ -34,14 +34,12 @@ void setup() { I2C_Configuration(); //Start the I2C hardware
GPIO_Init_OLED(); //Init the GPIO ports for the OLED
restoreSettings(); //Load settings
-
- StartUp_Accelerometer(systemSettings.sensitivity); //start the accelerometer
-
+ StartUp_Accelerometer(systemSettings.sensitivity); //Start the accelerometer
setupPID(); //Init the PID values
readIronTemp(systemSettings.tempCalibration, 0,0); //load the default calibration value
Init_Oled(systemSettings.flipDisplay); //Init the OLED display
- OLED_DrawString("VER 1.13", 8); //Version Number
+ OLED_DrawString("VER 1.14", 8); //Version Number
delayMs(500); //Pause to show version number
Start_Watchdog(1000); //start the system watch dog as 1 second timeout
}
diff --git a/workspace/ts100/src/Modes.c b/workspace/ts100/src/Modes.c index 8fba445c..c673d3c9 100644 --- a/workspace/ts100/src/Modes.c +++ b/workspace/ts100/src/Modes.c @@ -5,7 +5,8 @@ * Author: Ralim <[email protected]> */ #include "Modes.h" -const char *SettingsLongNames[] = { " Undervoltage Cutout <V>", +const char *SettingsLongNames[] = { + " Power source. Sets cutoff voltage. <DC 10V> <S 3.5V per cell>", " Sleep Temperature <C>", " Sleep Timeout <Minutes>", " Shutdown Timeout <Minutes>", " Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>", @@ -14,8 +15,6 @@ const char *SettingsLongNames[] = { " Undervoltage Cutout <V>", " Flip Display for Left Hand", " Enable front key boost 450C mode when soldering", " Temperature when in boost mode" }; -const uint8_t SettingsLongNamesLengths[] = { 29, 27, 29, 32, 67, 22, 33, 37, 32, - 53, 36 }; uint8_t StatusFlags = 0; uint32_t temporaryTempStorage = 0; //This does the required processing and state changes @@ -95,7 +94,7 @@ void ProcessUI() { } } uint16_t voltage = readDCVoltage(systemSettings.voltageDiv); //get X10 voltage - if ((voltage / 10) < systemSettings.cutoutVoltage) { + if ((voltage) < lookupVoltageLevel(systemSettings.cutoutSetting)) { operatingMode = UVLOWARN; lastModeChange = millis(); } @@ -147,9 +146,8 @@ void ProcessUI() { switch (settingsPage) { case UVCO: //we are incrementing the cutout voltage - systemSettings.cutoutVoltage += 1; //Go up 1V at a jump - if (systemSettings.cutoutVoltage > 24) - systemSettings.cutoutVoltage = 10; + systemSettings.cutoutSetting += 1; //Go up 1V at a jump + systemSettings.cutoutSetting %= 5; //wrap 0->4 break; case SLEEP_TEMP: systemSettings.SleepTemp += 100; //Go up 10C at a time @@ -455,7 +453,7 @@ void DrawUI() { StatusFlags = 4; //If the user has idled for > 3 seconds, show the long name for the selected setting instead //draw from settingsLongTestScrollPos through to end of screen - uint8_t lengthLeft = SettingsLongNamesLengths[settingsPage] + uint8_t lengthLeft = strlen(SettingsLongNames[settingsPage]) - settingsLongTestScrollPos; if (lengthLeft < 1) settingsLongTestScrollPos = 0; @@ -476,9 +474,16 @@ void DrawUI() { settingsLongTestScrollPos = 0; switch (settingsPage) { case UVCO: - OLED_DrawString("UVCO ", 5); - OLED_DrawTwoNumber(systemSettings.cutoutVoltage, 5); - OLED_DrawChar('V', 7); + OLED_DrawString("PWRSC ", 6); + if (systemSettings.cutoutSetting == 0) { + //DC + OLED_DrawChar('D', 6); + OLED_DrawChar('C', 7); + } else { + //S count + OLED_DrawChar('2' + systemSettings.cutoutSetting, 6); + OLED_DrawChar('S', 7); + } break; case SLEEP_TEMP: OLED_DrawString("STMP ", 5); diff --git a/workspace/ts100/src/Settings.c b/workspace/ts100/src/Settings.c index 40fd4d46..38e7b008 100644 --- a/workspace/ts100/src/Settings.c +++ b/workspace/ts100/src/Settings.c @@ -38,23 +38,36 @@ void restoreSettings() { } } - +//Lookup function for cutoff setting -> X10 voltage +/* + * 0=DC + * 1=3S + * 2=4S + * 3=5S + * 4=6S + */ +uint8_t lookupVoltageLevel(uint8_t level) { + if (level == 0) + return 100; //10V since iron does not function below this + else + return (level * 35) + (35 * 2); +} void resetSettings() { - systemSettings.SleepTemp = 1500; //Temperature the iron sleeps at - default 150.0 C - systemSettings.SleepTime = 1; //How many minutes we wait until going to sleep - default 1 min - systemSettings.SolderingTemp = 3200; //Default soldering temp is 320.0 C - systemSettings.cutoutVoltage = 10; //10V is the minium cutout voltage as the unit V measurement is unstable below 9.5V - systemSettings.version = SETTINGSVERSION; //Store the version number to allow for easier upgrades - systemSettings.displayTempInF =0; //default to C - systemSettings.flipDisplay=0; //Default to right handed mode - systemSettings.sensitivity=6; //Default high sensitivity - systemSettings.tempCalibration=239; //Default to their calibration value - systemSettings.voltageDiv=144; //Default divider from schematic - systemSettings.ShutdownTime=30; //How many minutes until the unit turns itself off - systemSettings.displayUpdateSpeed=1; //How fast the LCD updates - systemSettings.temperatureRounding=0; //How the temperature is rounded off - systemSettings.boostModeEnabled=0; //Default to safe, with no boost mode - systemSettings.BoostTemp=4000; //default to 400C + systemSettings.SleepTemp = 1500;//Temperature the iron sleeps at - default 150.0 C + systemSettings.SleepTime = 1;//How many minutes we wait until going to sleep - default 1 min + systemSettings.SolderingTemp = 3200; //Default soldering temp is 320.0 C + systemSettings.cutoutSetting = 0; //default to no cut-off voltage + systemSettings.version = SETTINGSVERSION;//Store the version number to allow for easier upgrades + systemSettings.displayTempInF = 0; //default to C + systemSettings.flipDisplay = 0; //Default to right handed mode + systemSettings.sensitivity = 6; //Default high sensitivity + systemSettings.tempCalibration = 239; //Default to their calibration value + systemSettings.voltageDiv = 144; //Default divider from schematic + systemSettings.ShutdownTime = 30;//How many minutes until the unit turns itself off + systemSettings.displayUpdateSpeed = 1; //How fast the LCD updates + systemSettings.temperatureRounding = 0; //How the temperature is rounded off + systemSettings.boostModeEnabled = 0;//Default to safe, with no boost mode + systemSettings.BoostTemp = 4000; //default to 400C } |