Compare commits

..

10 Commits

Author SHA1 Message Date
Ben V. Brown
e6f343c8c3 Include rough schematic I started on 2017-07-12 20:18:51 +10:00
Ben V. Brown
f844200b1b 1.13 alpha, testing new sensitivity & alternate button layout 2017-07-12 20:18:20 +10:00
Ben V. Brown
5802a254d0 Rename Flash Backup.hex to DO NOT FLASH_Flash Backup.hex 2017-07-11 19:59:29 +10:00
Ben V. Brown
615912836a Update README.md 2017-07-11 19:58:49 +10:00
Ben V. Brown
b793b61bb6 V1.12 - decreased step size for sensitivity
Collapsed motion being enabled into the motion sensitivity menu. Fixing
#20
More options for the sensitivity as well.
2017-07-11 19:52:29 +10:00
Ben V. Brown
52e3247f7e Fix #19
Prevent skipping from cool straight to soldering without turning oled
back on.
2017-07-11 18:22:49 +10:00
Ben V. Brown
16ecf486c2 Update README.md 2017-07-10 19:51:55 +10:00
Ben V. Brown
aa2fe7b31b Update README.md 2017-07-10 19:41:13 +10:00
Ben V. Brown
a40ad665fe Bugfix sensitivity options typo + add more options
Changes sensitivity scale to be more precise.
Fixes #17
2017-07-10 19:31:48 +10:00
Ben V. Brown
54356d53a9 Update README.md 2017-07-08 23:26:41 +10:00
14 changed files with 674 additions and 75 deletions

1
.gitignore vendored
View File

@@ -37,3 +37,4 @@ workspace/.metadata/*
workspace/ts100/.settings/language.settings.xml
workspace/ts100/.cproject
TS100/KiCad/TS100.bak

View File

@@ -1,6 +1,6 @@
# TS100
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.
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.
@@ -17,6 +17,7 @@ In the latest official firmware they have also added a settings menu system, so
* Use hardware features to improve reliability
* Can disable movement detection if desired
* Calibration of the temperature offset
* Boost mode lets you temporarily change the temperature when soldering
# Upgrading your ts100 iron
This is completely safe, if it goes wrong just put the .hex file from the official website onto the unit and your back to the old firmware. Downloads for the hex files to flash are available on the [releases page.](https://github.com/Ralim/ts100/releases)
@@ -54,12 +55,13 @@ If you leave the unit alone (ie don't press any buttons) on a setting, after 3 s
* STMP -> The temperature the unit drops to in sleep mode
* 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
* 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,0-9,0 means motion sensing is turned off, 9 is most sensitive, 1 is least sensitive (ie takes more movement to trigger)
* TMPUNIT -> Temperature unit, C or F
* TMPRND -> Temperature Rounding, {1,5,10}
* TMPSPD -> How fast the temperature should update in the soldering status screen.
* FLPDSP -> Flip display for left handed users
* BOOST -> Enable boost mode
* BTMP -> Set the temperature for the boost mode
Temperature rounding means that the unit will round off the temperature before displaying. This can helpt to reduce the flickering of the temperature when the unit oscillates between two temperatures.
## Extras Menu
@@ -67,10 +69,21 @@ This menu defaults to showing the current temperature on the tip.
Pressing the button near the iron tip will show the current input voltage. Pressing the other button while this is show will allow you to calibrate the reading if your iron is like mine and is not overly accurate out of the factory. (Press buttons to change measurement up and down, press both to exit and save).
Pressing the button near the usb enters the temperature offset setting menu, when the iron is cold, pressing the other button will start the unit calibrating for any offset in the tip temperature.
## Boost mode
This allows you to change the front key (one near the tip) to become a boost button instead of going to temperature editing when in soldering mode. This allows you to set this button to change the soldering temperature for short periods. For example when soldering a big joint and you want to boost the temperature a bit.
The boost temperature is set in the settings menu.
# Version Changes:
V1.12
- Increases sensitivity options to be 1-9 with 0 off state
- Fixes issue where going from COOL -> soldering can leave screen off.
V1.11
- Boost mode
- Change sensitivity options to be 1-8
V1.10
-Adds help text to settings
- Adds help text to settings
- Improves settings for the display update rate
V1.09
@@ -102,3 +115,5 @@ V1.03
V1.02
- Adds hold both buttons on IDLE to access the therometer mode.
- 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

View File

@@ -0,0 +1,392 @@
EESchema Schematic File Version 2
LIBS:power
LIBS:device
LIBS:transistors
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:microcontrollers
LIBS:dsp
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:texas
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:opto
LIBS:atmel
LIBS:contrib
LIBS:valves
LIBS:stm32
LIBS:mma8652fc
LIBS:switches
LIBS:TS100-cache
EELAYER 25 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 2 2
Title "TS100 Soldering Iron Schematic"
Date ""
Rev "2.46"
Comp ""
Comment1 ""
Comment2 ""
Comment3 "Converted by Ben V. Brown"
Comment4 "KiCad port of published schematic"
$EndDescr
$Comp
L STM32F103T8Ux U4
U 1 1 591D59BB
P 5600 3550
F 0 "U4" H 3200 4675 50 0000 L BNN
F 1 "STM32F103T8Ux" H 8000 4675 50 0000 R BNN
F 2 "Housings_DFN_QFN:QFN-36-1EP_6x6mm_Pitch0.5mm" H 8000 4625 50 0001 R TNN
F 3 "" H 5600 3550 50 0001 C CNN
F 4 "-" H 5600 3550 60 0001 C CNN "bom_partno"
1 5600 3550
1 0 0 -1
$EndComp
$Comp
L GND #PWR206
U 1 1 591D5AD3
P 5600 4850
F 0 "#PWR206" H 5600 4600 50 0001 C CNN
F 1 "GND" H 5600 4700 50 0000 C CNN
F 2 "" H 5600 4850 50 0001 C CNN
F 3 "" H 5600 4850 50 0001 C CNN
1 5600 4850
1 0 0 -1
$EndComp
$Comp
L C C30
U 1 1 591D5BA8
P 1450 4700
F 0 "C30" H 1475 4800 50 0000 L CNN
F 1 "103" H 1475 4600 50 0000 L CNN
F 2 "" H 1488 4550 50 0001 C CNN
F 3 "" H 1450 4700 50 0001 C CNN
1 1450 4700
1 0 0 -1
$EndComp
$Comp
L R R23
U 1 1 591D5BDF
P 1700 4700
F 0 "R23" V 1780 4700 50 0000 C CNN
F 1 "15K" V 1700 4700 50 0000 C CNN
F 2 "" V 1630 4700 50 0001 C CNN
F 3 "" H 1700 4700 50 0001 C CNN
1 1700 4700
1 0 0 -1
$EndComp
Wire Wire Line
5800 4850 5800 4650
Wire Wire Line
5600 4850 5600 4650
Wire Wire Line
5700 4650 5700 4850
Connection ~ 5700 4850
Wire Wire Line
5500 4850 5500 4650
Connection ~ 5600 4850
Wire Wire Line
5400 4850 5400 4650
Connection ~ 5500 4850
Wire Wire Line
3100 2950 1350 2950
Wire Wire Line
1350 2950 1350 4850
Connection ~ 5400 4850
Wire Wire Line
1450 4550 1450 3550
Wire Wire Line
1450 3550 3100 3550
Wire Wire Line
1350 4850 9000 4850
Connection ~ 1450 4850
Text HLabel 8100 4050 2 60 Input ~ 0
SWDIO
Text HLabel 8100 4150 2 60 Input ~ 0
SWCLK
Text HLabel 8100 3850 2 60 Input ~ 0
USB_D-
Text HLabel 8100 3950 2 60 Input ~ 0
USB_D+
Wire Wire Line
1700 4550 1700 3750
Wire Wire Line
1700 3750 3100 3750
Connection ~ 1700 4850
Text HLabel 8100 3650 2 60 Input ~ 0
K1
Text HLabel 8100 3550 2 60 Input ~ 0
nCR
Text HLabel 9000 3450 2 60 Input ~ 0
TMP36
Wire Wire Line
5400 2350 5700 2350
Connection ~ 5500 2350
Connection ~ 5600 2350
$Comp
L VDD #PWR205
U 1 1 591D5F85
P 5550 2350
F 0 "#PWR205" H 5550 2200 50 0001 C CNN
F 1 "VDD" H 5550 2500 50 0000 C CNN
F 2 "" H 5550 2350 50 0001 C CNN
F 3 "" H 5550 2350 50 0001 C CNN
1 5550 2350
1 0 0 -1
$EndComp
Connection ~ 5550 2350
Text HLabel 8100 3350 2 60 Input ~ 0
K2
$Comp
L C C29
U 1 1 591D61F5
P 9000 4700
F 0 "C29" H 9025 4800 50 0000 L CNN
F 1 "103" H 9025 4600 50 0000 L CNN
F 2 "" H 9038 4550 50 0001 C CNN
F 3 "" H 9000 4700 50 0001 C CNN
1 9000 4700
1 0 0 -1
$EndComp
Connection ~ 5800 4850
Wire Wire Line
9000 4550 9000 3450
Wire Wire Line
9000 3450 8100 3450
Text HLabel 3100 4150 0 60 Input ~ 0
SCL
Text HLabel 3100 4250 0 60 Input ~ 0
SDA
Text HLabel 3100 3950 0 60 Input ~ 0
Po
Text HLabel 3100 3650 0 60 Input ~ 0
Vb
$Comp
L R R25
U 1 1 591D65E3
P 1950 2600
F 0 "R25" V 2030 2600 50 0000 C CNN
F 1 "15K" V 1950 2600 50 0000 C CNN
F 2 "" V 1880 2600 50 0001 C CNN
F 3 "" H 1950 2600 50 0001 C CNN
1 1950 2600
1 0 0 -1
$EndComp
$Comp
L C C17
U 1 1 591D663E
P 1950 4700
F 0 "C17" H 1975 4800 50 0000 L CNN
F 1 "105" H 1975 4600 50 0000 L CNN
F 2 "" H 1988 4550 50 0001 C CNN
F 3 "" H 1950 4700 50 0001 C CNN
1 1950 4700
1 0 0 -1
$EndComp
Wire Wire Line
1950 4550 1950 2750
Wire Wire Line
1950 2750 3100 2750
$Comp
L VDD #PWR201
U 1 1 591D66BF
P 1950 2450
F 0 "#PWR201" H 1950 2300 50 0001 C CNN
F 1 "VDD" H 1950 2600 50 0000 C CNN
F 2 "" H 1950 2450 50 0001 C CNN
F 3 "" H 1950 2450 50 0001 C CNN
1 1950 2450
1 0 0 -1
$EndComp
$Comp
L MMA8652FC U3
U 1 1 591D6A94
P 3750 6350
F 0 "U3" H 3400 5950 60 0000 C CNN
F 1 "MMA8652FC" H 3950 5950 60 0000 C CNN
F 2 "" H 3550 6100 60 0001 C CNN
F 3 "" H 3550 6100 60 0000 C CNN
1 3750 6350
1 0 0 -1
$EndComp
$Comp
L GND #PWR204
U 1 1 591D6B9E
P 4650 6700
F 0 "#PWR204" H 4650 6450 50 0001 C CNN
F 1 "GND" H 4650 6550 50 0000 C CNN
F 2 "" H 4650 6700 50 0001 C CNN
F 3 "" H 4650 6700 50 0001 C CNN
1 4650 6700
1 0 0 -1
$EndComp
Wire Wire Line
4500 6600 4650 6600
Wire Wire Line
4650 6400 4650 6700
Wire Wire Line
4500 6400 4650 6400
Connection ~ 4650 6600
Wire Wire Line
4500 6500 4650 6500
Connection ~ 4650 6500
$Comp
L VDD #PWR203
U 1 1 591D6DA1
P 4650 5900
F 0 "#PWR203" H 4650 5750 50 0001 C CNN
F 1 "VDD" H 4650 6050 50 0000 C CNN
F 2 "" H 4650 5900 50 0001 C CNN
F 3 "" H 4650 5900 50 0001 C CNN
1 4650 5900
1 0 0 -1
$EndComp
Wire Wire Line
4650 5900 4650 6200
Wire Wire Line
4650 6100 4500 6100
Wire Wire Line
4650 6200 4500 6200
Connection ~ 4650 6100
$Comp
L C C22
U 1 1 591D70DB
P 2250 6550
F 0 "C22" H 2275 6650 50 0000 L CNN
F 1 "104" H 2275 6450 50 0000 L CNN
F 2 "" H 2288 6400 50 0001 C CNN
F 3 "" H 2250 6550 50 0001 C CNN
1 2250 6550
1 0 0 -1
$EndComp
Text HLabel 3050 6350 0 60 Input ~ 0
SDA
Text HLabel 3050 6250 0 60 Input ~ 0
SCL
Wire Wire Line
2250 6400 2250 6100
Wire Wire Line
2250 6100 3050 6100
$Comp
L GND #PWR202
U 1 1 591D735E
P 2250 6700
F 0 "#PWR202" H 2250 6450 50 0001 C CNN
F 1 "GND" H 2250 6550 50 0000 C CNN
F 2 "" H 2250 6700 50 0001 C CNN
F 3 "" H 2250 6700 50 0001 C CNN
1 2250 6700
1 0 0 -1
$EndComp
$Comp
L C C18
U 1 1 591D7528
P 8200 5800
F 0 "C18" H 8225 5900 50 0000 L CNN
F 1 "105" H 8225 5700 50 0000 L CNN
F 2 "" H 8238 5650 50 0001 C CNN
F 3 "" H 8200 5800 50 0001 C CNN
1 8200 5800
1 0 0 -1
$EndComp
$Comp
L C C19
U 1 1 591D75B9
P 8500 5800
F 0 "C19" H 8525 5900 50 0000 L CNN
F 1 "105" H 8525 5700 50 0000 L CNN
F 2 "" H 8538 5650 50 0001 C CNN
F 3 "" H 8500 5800 50 0001 C CNN
1 8500 5800
1 0 0 -1
$EndComp
$Comp
L C C20
U 1 1 591D75EF
P 8800 5800
F 0 "C20" H 8825 5900 50 0000 L CNN
F 1 "105" H 8825 5700 50 0000 L CNN
F 2 "" H 8838 5650 50 0001 C CNN
F 3 "" H 8800 5800 50 0001 C CNN
1 8800 5800
1 0 0 -1
$EndComp
$Comp
L C C25
U 1 1 591D7626
P 9100 5800
F 0 "C25" H 9125 5900 50 0000 L CNN
F 1 "104" H 9125 5700 50 0000 L CNN
F 2 "" H 9138 5650 50 0001 C CNN
F 3 "" H 9100 5800 50 0001 C CNN
1 9100 5800
1 0 0 -1
$EndComp
$Comp
L C C21
U 1 1 591D7668
P 9400 5800
F 0 "C21" H 9425 5900 50 0000 L CNN
F 1 "105" H 9425 5700 50 0000 L CNN
F 2 "" H 9438 5650 50 0001 C CNN
F 3 "" H 9400 5800 50 0001 C CNN
1 9400 5800
1 0 0 -1
$EndComp
Wire Wire Line
8200 5950 9400 5950
Connection ~ 8500 5950
Connection ~ 8800 5950
Connection ~ 9100 5950
Wire Wire Line
8200 5650 9400 5650
Connection ~ 9100 5650
Connection ~ 8800 5650
Connection ~ 8500 5650
$Comp
L GND #PWR208
U 1 1 591D78AD
P 8800 5950
F 0 "#PWR208" H 8800 5700 50 0001 C CNN
F 1 "GND" H 8800 5800 50 0000 C CNN
F 2 "" H 8800 5950 50 0001 C CNN
F 3 "" H 8800 5950 50 0001 C CNN
1 8800 5950
1 0 0 -1
$EndComp
$Comp
L VDD #PWR207
U 1 1 591D78DF
P 8800 5650
F 0 "#PWR207" H 8800 5500 50 0001 C CNN
F 1 "VDD" H 8800 5800 50 0000 C CNN
F 2 "" H 8800 5650 50 0001 C CNN
F 3 "" H 8800 5650 50 0001 C CNN
1 8800 5650
1 0 0 -1
$EndComp
Text Label 3050 6600 2 60 ~ 0
ACC_INT2
Text Label 3050 6500 2 60 ~ 0
ACC_INT1
Text Label 3100 3850 2 60 ~ 0
ACC_INT2
Text Label 3100 4050 2 60 ~ 0
ACC_INT1
$EndSCHEMATC

63
TS100/KiCad/TS100.pro Normal file
View File

@@ -0,0 +1,63 @@
update=18/05/2017 9:29:06 PM
version=1
last_client=kicad
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[general]
version=1
[eeschema]
version=1
LibDir=
[eeschema/libraries]
LibName1=power
LibName2=device
LibName3=transistors
LibName4=conn
LibName5=linear
LibName6=regul
LibName7=74xx
LibName8=cmos4000
LibName9=adc-dac
LibName10=memory
LibName11=xilinx
LibName12=microcontrollers
LibName13=dsp
LibName14=microchip
LibName15=analog_switches
LibName16=motorola
LibName17=texas
LibName18=intel
LibName19=audio
LibName20=interface
LibName21=digital-audio
LibName22=philips
LibName23=display
LibName24=cypress
LibName25=siliconi
LibName26=opto
LibName27=atmel
LibName28=contrib
LibName29=valves
LibName30=stm32
LibName31=mma8652fc
LibName32=switches

151
TS100/KiCad/TS100.sch Normal file
View File

@@ -0,0 +1,151 @@
EESchema Schematic File Version 2
LIBS:power
LIBS:device
LIBS:transistors
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:microcontrollers
LIBS:dsp
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:texas
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:opto
LIBS:atmel
LIBS:contrib
LIBS:valves
LIBS:stm32
LIBS:mma8652fc
LIBS:switches
LIBS:TS100-cache
EELAYER 25 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 2
Title "TS100 Soldering Iron Schematic"
Date "2017-05-18"
Rev "2.46"
Comp ""
Comment1 ""
Comment2 ""
Comment3 "Converted by Ben V. Brown"
Comment4 "KiCad port of published schematic"
$EndDescr
$Sheet
S 1450 1000 1450 1850
U 591D5966
F0 "STM32 & Accel Sub Board" 60
F1 "MCU_SubBoard.sch" 60
F2 "SWDIO" I R 2900 1100 60
F3 "SWCLK" I R 2900 1200 60
F4 "USB_D-" I R 2900 1350 60
F5 "USB_D+" I R 2900 1450 60
F6 "K1" I R 2900 1650 60
F7 "nCR" I R 2900 2150 60
F8 "TMP36" I R 2900 2250 60
F9 "K2" I R 2900 1750 60
F10 "SCL" I R 2900 2550 60
F11 "SDA" I R 2900 2650 60
F12 "Po" I R 2900 2050 60
F13 "Vb" I R 2900 1950 60
$EndSheet
$Comp
L BARREL_JACK J101
U 1 1 591D8B75
P 1600 3600
F 0 "J101" H 1600 3795 50 0000 C CNN
F 1 "BARREL_JACK" H 1600 3445 50 0000 C CNN
F 2 "" H 1600 3600 50 0001 C CNN
F 3 "" H 1600 3600 50 0001 C CNN
1 1600 3600
1 0 0 -1
$EndComp
Text Label 1900 3500 0 60 ~ 0
VIN
$Comp
L GND #PWR103
U 1 1 591D8F24
P 2000 3800
F 0 "#PWR103" H 2000 3550 50 0001 C CNN
F 1 "GND" H 2000 3650 50 0000 C CNN
F 2 "" H 2000 3800 50 0001 C CNN
F 3 "" H 2000 3800 50 0001 C CNN
1 2000 3800
1 0 0 -1
$EndComp
Wire Wire Line
1900 3600 2000 3600
Wire Wire Line
2000 3600 2000 3800
Wire Wire Line
1900 3700 2000 3700
Connection ~ 2000 3700
$Comp
L SW_Push SW1
U 1 1 591D9BC6
P 1400 4550
F 0 "SW1" H 1450 4650 50 0000 L CNN
F 1 "SW_Push" H 1400 4490 50 0000 C CNN
F 2 "" H 1400 4750 50 0001 C CNN
F 3 "" H 1400 4750 50 0001 C CNN
F 4 "-" H 1400 4550 60 0001 C CNN "bom_partno"
1 1400 4550
0 1 1 0
$EndComp
$Comp
L SW_Push SW101
U 1 1 591DA371
P 1700 4550
F 0 "SW101" H 1750 4650 50 0000 L CNN
F 1 "SW_Push" H 1700 4490 50 0000 C CNN
F 2 "" H 1700 4750 50 0001 C CNN
F 3 "" H 1700 4750 50 0001 C CNN
1 1700 4550
0 1 1 0
$EndComp
$Comp
L GND #PWR102
U 1 1 591DA3DA
P 1700 4750
F 0 "#PWR102" H 1700 4500 50 0001 C CNN
F 1 "GND" H 1700 4600 50 0000 C CNN
F 2 "" H 1700 4750 50 0001 C CNN
F 3 "" H 1700 4750 50 0001 C CNN
1 1700 4750
1 0 0 -1
$EndComp
$Comp
L GND #PWR101
U 1 1 591DA436
P 1400 4750
F 0 "#PWR101" H 1400 4500 50 0001 C CNN
F 1 "GND" H 1400 4600 50 0000 C CNN
F 2 "" H 1400 4750 50 0001 C CNN
F 3 "" H 1400 4750 50 0001 C CNN
1 1400 4750
1 0 0 -1
$EndComp
Text Label 1400 4350 0 60 ~ 0
K1
Text Label 1700 4350 0 60 ~ 0
K2
Text Label 2900 1750 0 60 ~ 0
K2
Text Label 2900 1650 0 60 ~ 0
K1
$EndSCHEMATC

View File

@@ -29,14 +29,13 @@ enum {
TEMPCAL, //Cal tip temp offset
} operatingMode;
#define SETTINGSOPTIONSCOUNT 11 /*Number of settings in the settings menu*/
#define SETTINGSOPTIONSCOUNT 10 /*Number of settings in the settings menu*/
enum {
UVCO = 0,
SLEEP_TEMP,
SLEEP_TIME,
SHUTDOWN_TIME,
MOTIONDETECT,
MOTIONSENSITIVITY,
TEMPDISPLAY,
TEMPROUNDING,

View File

@@ -22,7 +22,7 @@ void Init_Oled(uint8_t leftHanded);
u8* Data_Command(u8 len, u8* ptr);
void Clear_Screen(void);//Clear 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_DrawTwoNumber(uint8_t in, uint8_t x);
void OLED_BlankSlot(uint8_t xStart,uint8_t width);

View File

@@ -11,11 +11,7 @@
#define SETTINGS_H_
#include <stdint.h>
#include "stm32f10x_flash.h"
#define SETTINGSVERSION 10 /*Change this if you change the struct below to prevent people getting out of sync*/
//Motion Sensitivity
#define MOTION_HIGH (0x00)
#define MOTION_MED (0x01)
#define MOTION_LOW (0x02)
#define SETTINGSVERSION 12 /*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)
@@ -34,10 +30,9 @@ struct {
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 movementEnabled:1; //If movement is enabled
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:5; //Sensitivity of accelerometer
uint8_t sensitivity:6; //Sensitivity of accelerometer (5 bits)
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 temperatureRounding:2; //Rounding mode for the temperature

View File

@@ -34,23 +34,13 @@ void StartUp_Accelerometer(uint8_t sensitivity) {
I2C_RegisterWrite( CTRL_REG2, 0x40); // Reset all registers to POR values
delayMs(2); // ~1ms delay
I2C_RegisterWrite(FF_MT_CFG_REG, 0x78); // Enable motion detection for X and Y axis, latch enabled
uint8_t sens =0x0F;
switch(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_COUNT_REG, 0x01); // Set debounce to 100ms
uint8_t sens = 9 * 7 + 5;
sens -= 7 * sensitivity;
I2C_RegisterWrite(FF_MT_THS_REG, 0x80 | sens); // Set threshold
I2C_RegisterWrite(FF_MT_COUNT_REG, 0x02); // Set debounce to 100ms
I2C_RegisterWrite( CTRL_REG4, 0x04); // Enable motion interrupt
I2C_RegisterWrite( CTRL_REG5, 0x04);// Route motion interrupts to INT1 ->PB5 ->EXTI5
I2C_RegisterWrite( CTRL_REG1, 0x19); // ODR=100 Hz, Active mode
I2C_RegisterWrite( CTRL_REG1, 0x11); // ODR=800 Hz, Active mode
}

View File

@@ -18,6 +18,10 @@ int main(void) {
ProcessUI();
DrawUI();
delayMs(50); //Slow the system down a little bit
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)
{
lastMovement = millis();
}
}
}
void setup() {
@@ -37,7 +41,7 @@ void setup() {
readIronTemp(systemSettings.tempCalibration, 0,0); //load the default calibration value
Init_Oled(systemSettings.flipDisplay); //Init the OLED display
OLED_DrawString("VER 1.11", 8); //Version Number
OLED_DrawString("VER 1.13", 8); //Version Number
delayMs(500); //Pause to show version number
Start_Watchdog(1000); //start the system watch dog as 1 second timeout
}

View File

@@ -7,15 +7,15 @@
#include "Modes.h"
const char *SettingsLongNames[] = { " Undervoltage Cutout <V>",
" Sleep Temperature <C>", " Sleep Timeout <Minutes>",
" Shutdown Timeout <Minutes>", " Motion Detection",
" Motion Sensitivity", " Temperature Unit",
" Temperature Rounding Amount",
" Shutdown Timeout <Minutes>",
" Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>",
" Temperature Unit", " Temperature Rounding Amount",
" Temperature Display Update Rate",
" 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, 22, 24, 22, 33, 37,
32, 53, 36 };
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
@@ -37,9 +37,11 @@ void ProcessUI() {
} else if (Buttons == BUT_A) {
//A key pressed so we are moving to soldering mode
operatingMode = SOLDERING;
Oled_DisplayOn();
} else if (Buttons == BUT_B) {
//B Button was pressed so we are moving to the Settings menu
operatingMode = SETTINGS;
Oled_DisplayOn();
}
break;
case SOLDERING:
@@ -82,7 +84,7 @@ void ProcessUI() {
StatusFlags = 0;
}
//We need to check the timer for movement in case we need to goto idle
if (systemSettings.movementEnabled)
if (systemSettings.sensitivity)
if (millis() - getLastMovement()
> (systemSettings.SleepTime * 60000)) {
if (millis() - getLastButtonPress()
@@ -129,7 +131,7 @@ void ProcessUI() {
//The user pressed the button to breakout of the settings help prompt
StatusFlags = 0;
} else {
if (Buttons & BUT_A) {
if (Buttons & BUT_B) {
//A key iterates through the menu
if (settingsPage == SETTINGSOPTIONSCOUNT) {
//Roll off the end
@@ -139,7 +141,7 @@ void ProcessUI() {
} else {
++settingsPage; //move to the next option
}
} else if (Buttons & BUT_B) {
} else if (Buttons & BUT_A) {
//B changes the value selected
switch (settingsPage) {
case UVCO:
@@ -164,10 +166,6 @@ void ProcessUI() {
if (systemSettings.ShutdownTime > 60)
systemSettings.ShutdownTime = 0; //wrap to off
break;
case MOTIONDETECT:
systemSettings.movementEnabled =
!systemSettings.movementEnabled;
break;
case TEMPDISPLAY:
systemSettings.displayTempInF =
!systemSettings.displayTempInF;
@@ -177,7 +175,8 @@ void ProcessUI() {
break;
case MOTIONSENSITIVITY:
systemSettings.sensitivity++;
systemSettings.sensitivity = systemSettings.sensitivity % 3;
systemSettings.sensitivity = systemSettings.sensitivity
% 10;
break;
case TEMPROUNDING:
@@ -217,13 +216,14 @@ void ProcessUI() {
operatingMode = SOLDERING;
Oled_DisplayOn();
return;
} else if (systemSettings.movementEnabled)
} else if (systemSettings.sensitivity) {
if (millis() - getLastMovement() < 1000) {//moved in the last second
operatingMode = SOLDERING; //Goto active mode again
Oled_DisplayOn();
return;
}
if (systemSettings.movementEnabled) {
}
if (systemSettings.sensitivity) {
//Check if we should shutdown
if ((millis() - getLastMovement()
> (systemSettings.ShutdownTime * 60000))
@@ -240,13 +240,22 @@ void ProcessUI() {
case COOLING: {
setIronTimer(0); //turn off heating
//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 (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
if (Buttons & (BUT_A | BUT_B)) { //we check if the user has pushed a button to exit
//Either button was pushed
operatingMode = STARTUP;
}
if (systemSettings.sensitivity) {
if (millis() - getLastMovement()
> (systemSettings.ShutdownTime * 60000)) {
if ((millis() - getLastButtonPress()
> systemSettings.ShutdownTime * 60000)) {
Oled_DisplayOff();
}
} else {
Oled_DisplayOn();
}
} else
Oled_DisplayOn();
}
break;
case UVLOWARN:
@@ -482,19 +491,12 @@ void DrawUI() {
OLED_DrawString("SHTME ", 6);
OLED_DrawTwoNumber(systemSettings.ShutdownTime, 6);
break;
case MOTIONDETECT:/*Toggle the mode*/
if (systemSettings.movementEnabled)
OLED_DrawString("MOTION T", 8);
else
OLED_DrawString("MOTION F", 8);
break;
case TEMPDISPLAY:/*Are we showing in C or F ?*/
if (systemSettings.displayTempInF)
OLED_DrawString("TMPUNT F", 8);
else
OLED_DrawString("TMPUNT C", 8);
break;
case LEFTY:
if (systemSettings.flipDisplay)
@@ -503,21 +505,8 @@ void DrawUI() {
OLED_DrawString("FLPDSP F", 8);
break;
case MOTIONSENSITIVITY:
switch (systemSettings.sensitivity) {
case MOTION_HIGH:
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;
}
OLED_DrawString("MSENSE ", 7);
OLED_DrawChar('0' + systemSettings.sensitivity, 7);
break;
case TEMPROUNDING:
//We are prompting the user about their display mode preferences
@@ -593,6 +582,7 @@ void DrawUI() {
case COOLING:
//We are warning the user the tip is cooling
OLED_DrawString("COOL ", 5);
temp = readIronTemp(0, 1, 0xFFFF); //force temp re-reading
drawTemp(temp, 5, systemSettings.temperatureRounding);
break;
case UVLOWARN:

View File

@@ -174,7 +174,7 @@ void Clear_Screen(void) {
/*
* 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++) {
OLED_DrawChar(string[i], i);
}

View File

@@ -44,12 +44,11 @@ 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.movementEnabled = 1; //we use movement detection by default
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=0x00; //Default high sensitivity
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