Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52e3247f7e | ||
|
|
16ecf486c2 | ||
|
|
aa2fe7b31b | ||
|
|
a40ad665fe |
@@ -1,6 +1,6 @@
|
|||||||
# TS100
|
# TS100
|
||||||
This is a complete re-write of the open source software for the ts100 soldering iron.
|
This is a complete re-write of the open source software for the ts100 soldering iron.
|
||||||
This project is feature complete for use as a soldering iron, but is still open to ideas and suggestions.
|
This project is feature complete for use as a soldering iron, *but is still open to ideas and suggestions.*
|
||||||
|
|
||||||
This project was started to remove the need for USB for changing system settings.
|
This project was started to remove the need for USB for changing system settings.
|
||||||
In the latest official firmware they have also added a settings menu system, so it is still worth comparing the two firmwares to select your preferred option.
|
In the latest official firmware they have also added a settings menu system, so it is still worth comparing the two firmwares to select your preferred option.
|
||||||
@@ -56,7 +56,7 @@ If you leave the unit alone (ie don't press any buttons) on a setting, after 3 s
|
|||||||
* SLTME -> Sleep time, how long it takes before the unit goes to sleep
|
* SLTME -> Sleep time, how long it takes before the unit goes to sleep
|
||||||
* SHTME -> Shutdown Time, how long the unit will wait after movement before shutting down completely
|
* SHTME -> Shutdown Time, how long the unit will wait after movement before shutting down completely
|
||||||
* MOTION -> Wether motion detection is enabled or not
|
* MOTION -> Wether motion detection is enabled or not
|
||||||
* SENSE -> Motion Sensitivity, H is more sensitive. L is lowest sensitivity (ie takes more movement to trigger)
|
* MSENSE -> Motion Sensitivity,1-8, 8 is most sensitive, 1 is least sensitive (ie takes more movement to trigger)
|
||||||
* TMPUNIT -> Temperature unit, C or F
|
* TMPUNIT -> Temperature unit, C or F
|
||||||
* TMPRND -> Temperature Rounding, {1,5,10}
|
* TMPRND -> Temperature Rounding, {1,5,10}
|
||||||
* TMPSPD -> How fast the temperature should update in the soldering status screen.
|
* TMPSPD -> How fast the temperature should update in the soldering status screen.
|
||||||
@@ -77,6 +77,7 @@ The boost temperature is set in the settings menu.
|
|||||||
# Version Changes:
|
# Version Changes:
|
||||||
V1.11
|
V1.11
|
||||||
- Boost mode
|
- Boost mode
|
||||||
|
- Change sensitivity options to be 1-8
|
||||||
|
|
||||||
V1.10
|
V1.10
|
||||||
- Adds help text to settings
|
- Adds help text to settings
|
||||||
@@ -111,3 +112,5 @@ V1.03
|
|||||||
V1.02
|
V1.02
|
||||||
- Adds hold both buttons on IDLE to access the therometer mode.
|
- Adds hold both buttons on IDLE to access the therometer mode.
|
||||||
- Changes the exit soldering mode to be holding both buttons (Like original firmware).
|
- Changes the exit soldering mode to be holding both buttons (Like original firmware).
|
||||||
|
|
||||||
|
If you _really_ loved this firmware and want to continue my caffine addiction, you can do so here (or email me) : https://paypal.me/RalimTek
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ void Init_Oled(uint8_t leftHanded);
|
|||||||
u8* Data_Command(u8 len, u8* ptr);
|
u8* Data_Command(u8 len, u8* ptr);
|
||||||
void Clear_Screen(void);//Clear the screen
|
void Clear_Screen(void);//Clear the screen
|
||||||
/*Functions for writing to the screen*/
|
/*Functions for writing to the screen*/
|
||||||
void OLED_DrawString(char* string, uint8_t length);
|
void OLED_DrawString(const char* string, const uint8_t length);
|
||||||
void OLED_DrawChar(char c, uint8_t x);
|
void OLED_DrawChar(char c, uint8_t x);
|
||||||
void OLED_DrawTwoNumber(uint8_t in, uint8_t x);
|
void OLED_DrawTwoNumber(uint8_t in, uint8_t x);
|
||||||
void OLED_BlankSlot(uint8_t xStart,uint8_t width);
|
void OLED_BlankSlot(uint8_t xStart,uint8_t width);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
#define SETTINGS_H_
|
#define SETTINGS_H_
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "stm32f10x_flash.h"
|
#include "stm32f10x_flash.h"
|
||||||
#define SETTINGSVERSION 10 /*Change this if you change the struct below to prevent people getting out of sync*/
|
#define SETTINGSVERSION 11 /*Change this if you change the struct below to prevent people getting out of sync*/
|
||||||
//Motion Sensitivity
|
//Motion Sensitivity
|
||||||
#define MOTION_HIGH (0x00)
|
#define MOTION_HIGH (0x00)
|
||||||
#define MOTION_MED (0x01)
|
#define MOTION_MED (0x01)
|
||||||
@@ -37,7 +37,7 @@ struct {
|
|||||||
uint8_t movementEnabled:1; //If movement is enabled
|
uint8_t movementEnabled:1; //If movement is enabled
|
||||||
uint8_t displayTempInF:1; //If we need to convert the C reading to F
|
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 flipDisplay:1; //If true we want to invert the display for lefties
|
||||||
uint8_t sensitivity:5; //Sensitivity of accelerometer
|
uint8_t sensitivity:5; //Sensitivity of accelerometer (4 bits)
|
||||||
uint8_t ShutdownTime:6; //Time until unit shuts down if left alone
|
uint8_t ShutdownTime:6; //Time until unit shuts down if left alone
|
||||||
uint8_t displayUpdateSpeed:2; //How fast the display updates / temp showing mode
|
uint8_t displayUpdateSpeed:2; //How fast the display updates / temp showing mode
|
||||||
uint8_t temperatureRounding:2; //Rounding mode for the temperature
|
uint8_t temperatureRounding:2; //Rounding mode for the temperature
|
||||||
|
|||||||
@@ -34,19 +34,8 @@ void StartUp_Accelerometer(uint8_t sensitivity) {
|
|||||||
I2C_RegisterWrite( CTRL_REG2, 0x40); // Reset all registers to POR values
|
I2C_RegisterWrite( CTRL_REG2, 0x40); // Reset all registers to POR values
|
||||||
delayMs(2); // ~1ms delay
|
delayMs(2); // ~1ms delay
|
||||||
I2C_RegisterWrite(FF_MT_CFG_REG, 0x78); // Enable motion detection for X and Y axis, latch enabled
|
I2C_RegisterWrite(FF_MT_CFG_REG, 0x78); // Enable motion detection for X and Y axis, latch enabled
|
||||||
uint8_t sens =0x0F;
|
uint8_t sens = 0x3F;
|
||||||
switch(sensitivity)
|
sens -= 0x08 * sensitivity;
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
sens=0x1A;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
sens=0x20;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
sens=0x2A;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
I2C_RegisterWrite(FF_MT_THS_REG, sens); // Set threshold
|
I2C_RegisterWrite(FF_MT_THS_REG, sens); // Set threshold
|
||||||
I2C_RegisterWrite(FF_MT_COUNT_REG, 0x01); // Set debounce to 100ms
|
I2C_RegisterWrite(FF_MT_COUNT_REG, 0x01); // Set debounce to 100ms
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,13 @@
|
|||||||
const char *SettingsLongNames[] = { " Undervoltage Cutout <V>",
|
const char *SettingsLongNames[] = { " Undervoltage Cutout <V>",
|
||||||
" Sleep Temperature <C>", " Sleep Timeout <Minutes>",
|
" Sleep Temperature <C>", " Sleep Timeout <Minutes>",
|
||||||
" Shutdown Timeout <Minutes>", " Motion Detection",
|
" Shutdown Timeout <Minutes>", " Motion Detection",
|
||||||
" Motion Sensitivity", " Temperature Unit",
|
" Motion Sensitivity <1.least sensitive 8.most sensitive>",
|
||||||
" Temperature Rounding Amount",
|
" Temperature Unit", " Temperature Rounding Amount",
|
||||||
" Temperature Display Update Rate",
|
" Temperature Display Update Rate",
|
||||||
" Flip Display for Left Hand",
|
" Flip Display for Left Hand",
|
||||||
" Enable front key boost 450C mode when soldering",
|
" Enable front key boost 450C mode when soldering",
|
||||||
" Temperature when in boost mode" };
|
" Temperature when in boost mode" };
|
||||||
const uint8_t SettingsLongNamesLengths[] = { 29, 27, 29, 32, 22, 24, 22, 33, 37,
|
const uint8_t SettingsLongNamesLengths[] = { 29, 27, 29, 32, 22, 61, 22, 33, 37,
|
||||||
32, 53, 36 };
|
32, 53, 36 };
|
||||||
uint8_t StatusFlags = 0;
|
uint8_t StatusFlags = 0;
|
||||||
uint32_t temporaryTempStorage = 0;
|
uint32_t temporaryTempStorage = 0;
|
||||||
@@ -37,9 +37,11 @@ void ProcessUI() {
|
|||||||
} else if (Buttons == BUT_A) {
|
} else if (Buttons == BUT_A) {
|
||||||
//A key pressed so we are moving to soldering mode
|
//A key pressed so we are moving to soldering mode
|
||||||
operatingMode = SOLDERING;
|
operatingMode = SOLDERING;
|
||||||
|
Oled_DisplayOn();
|
||||||
} else if (Buttons == BUT_B) {
|
} else if (Buttons == BUT_B) {
|
||||||
//B Button was pressed so we are moving to the Settings menu
|
//B Button was pressed so we are moving to the Settings menu
|
||||||
operatingMode = SETTINGS;
|
operatingMode = SETTINGS;
|
||||||
|
Oled_DisplayOn();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SOLDERING:
|
case SOLDERING:
|
||||||
@@ -177,7 +179,7 @@ void ProcessUI() {
|
|||||||
break;
|
break;
|
||||||
case MOTIONSENSITIVITY:
|
case MOTIONSENSITIVITY:
|
||||||
systemSettings.sensitivity++;
|
systemSettings.sensitivity++;
|
||||||
systemSettings.sensitivity = systemSettings.sensitivity % 3;
|
systemSettings.sensitivity = systemSettings.sensitivity % 8;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case TEMPROUNDING:
|
case TEMPROUNDING:
|
||||||
@@ -217,12 +219,13 @@ void ProcessUI() {
|
|||||||
operatingMode = SOLDERING;
|
operatingMode = SOLDERING;
|
||||||
Oled_DisplayOn();
|
Oled_DisplayOn();
|
||||||
return;
|
return;
|
||||||
} else if (systemSettings.movementEnabled)
|
} else if (systemSettings.movementEnabled) {
|
||||||
if (millis() - getLastMovement() < 1000) {//moved in the last second
|
if (millis() - getLastMovement() < 1000) {//moved in the last second
|
||||||
operatingMode = SOLDERING; //Goto active mode again
|
operatingMode = SOLDERING; //Goto active mode again
|
||||||
Oled_DisplayOn();
|
Oled_DisplayOn();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (systemSettings.movementEnabled) {
|
if (systemSettings.movementEnabled) {
|
||||||
//Check if we should shutdown
|
//Check if we should shutdown
|
||||||
if ((millis() - getLastMovement()
|
if ((millis() - getLastMovement()
|
||||||
@@ -240,13 +243,23 @@ void ProcessUI() {
|
|||||||
case COOLING: {
|
case COOLING: {
|
||||||
setIronTimer(0); //turn off heating
|
setIronTimer(0); //turn off heating
|
||||||
//This mode warns the user the iron is still cooling down
|
//This mode warns the user the iron is still cooling down
|
||||||
uint16_t temp = readIronTemp(0, 1, 0xFFFF); //take a new reading as the heater code is not taking new readings
|
if (Buttons & (BUT_A | BUT_B)) { //we check if the user has pushed a button to exit
|
||||||
if (temp < 400) { //if the temp is < 40C then we can go back to IDLE
|
|
||||||
operatingMode = STARTUP;
|
|
||||||
} else if (Buttons & (BUT_A | BUT_B)) { //we check if the user has pushed a button to ack
|
|
||||||
//Either button was pushed
|
//Either button was pushed
|
||||||
operatingMode = STARTUP;
|
operatingMode = STARTUP;
|
||||||
}
|
}
|
||||||
|
if (systemSettings.movementEnabled) {
|
||||||
|
if (millis() - getLastMovement()
|
||||||
|
> (systemSettings.ShutdownTime * 60000)) {
|
||||||
|
if ((millis() - getLastButtonPress()
|
||||||
|
> systemSettings.ShutdownTime * 60000)) {
|
||||||
|
Oled_DisplayOff();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Oled_DisplayOn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Oled_DisplayOn();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UVLOWARN:
|
case UVLOWARN:
|
||||||
@@ -503,21 +516,8 @@ void DrawUI() {
|
|||||||
OLED_DrawString("FLPDSP F", 8);
|
OLED_DrawString("FLPDSP F", 8);
|
||||||
break;
|
break;
|
||||||
case MOTIONSENSITIVITY:
|
case MOTIONSENSITIVITY:
|
||||||
switch (systemSettings.sensitivity) {
|
OLED_DrawString("MSENSE ", 7);
|
||||||
case MOTION_HIGH:
|
OLED_DrawChar('1' + systemSettings.sensitivity, 7);
|
||||||
OLED_DrawString("SENSE H ", 8);
|
|
||||||
break;
|
|
||||||
case MOTION_MED:
|
|
||||||
OLED_DrawString("SENSE M ", 8);
|
|
||||||
break;
|
|
||||||
case MOTION_LOW:
|
|
||||||
OLED_DrawString("SENSE L ", 8);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
OLED_DrawString("SENSE ", 8);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case TEMPROUNDING:
|
case TEMPROUNDING:
|
||||||
//We are prompting the user about their display mode preferences
|
//We are prompting the user about their display mode preferences
|
||||||
@@ -593,6 +593,7 @@ void DrawUI() {
|
|||||||
case COOLING:
|
case COOLING:
|
||||||
//We are warning the user the tip is cooling
|
//We are warning the user the tip is cooling
|
||||||
OLED_DrawString("COOL ", 5);
|
OLED_DrawString("COOL ", 5);
|
||||||
|
temp = readIronTemp(0, 1, 0xFFFF);//force temp re-reading
|
||||||
drawTemp(temp, 5, systemSettings.temperatureRounding);
|
drawTemp(temp, 5, systemSettings.temperatureRounding);
|
||||||
break;
|
break;
|
||||||
case UVLOWARN:
|
case UVLOWARN:
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ void Clear_Screen(void) {
|
|||||||
/*
|
/*
|
||||||
* Draws a string onto the screen starting at the left
|
* Draws a string onto the screen starting at the left
|
||||||
*/
|
*/
|
||||||
void OLED_DrawString(char* string, uint8_t length) {
|
void OLED_DrawString(const char* string,const uint8_t length) {
|
||||||
for (uint8_t i = 0; i < length; i++) {
|
for (uint8_t i = 0; i < length; i++) {
|
||||||
OLED_DrawChar(string[i], i);
|
OLED_DrawChar(string[i], i);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ void resetSettings() {
|
|||||||
systemSettings.version = SETTINGSVERSION; //Store the version number to allow for easier upgrades
|
systemSettings.version = SETTINGSVERSION; //Store the version number to allow for easier upgrades
|
||||||
systemSettings.displayTempInF =0; //default to C
|
systemSettings.displayTempInF =0; //default to C
|
||||||
systemSettings.flipDisplay=0; //Default to right handed mode
|
systemSettings.flipDisplay=0; //Default to right handed mode
|
||||||
systemSettings.sensitivity=0x00; //Default high sensitivity
|
systemSettings.sensitivity=6; //Default high sensitivity
|
||||||
systemSettings.tempCalibration=239; //Default to their calibration value
|
systemSettings.tempCalibration=239; //Default to their calibration value
|
||||||
systemSettings.voltageDiv=144; //Default divider from schematic
|
systemSettings.voltageDiv=144; //Default divider from schematic
|
||||||
systemSettings.ShutdownTime=30; //How many minutes until the unit turns itself off
|
systemSettings.ShutdownTime=30; //How many minutes until the unit turns itself off
|
||||||
|
|||||||
Reference in New Issue
Block a user