1
0
forked from me/IronOS

Compare commits

..

9 Commits

Author SHA1 Message Date
Ben V. Brown
baa4979a96 V1.14 - Adds battery icon to cell selection
Relivant to #29 and #30
2017-07-22 12:20:36 +10:00
Ben V. Brown
2a5f4e6d89 Updating cutoff voltage to DC/3.5V*cell count
Working on progress for:
#29 #30
2017-07-22 11:19:23 +10:00
Ben V. Brown
c50b33e142 Small font reference 2017-07-22 10:54:47 +10:00
Ben V. Brown
c8f49d173a Add key auto-repeat 2017-07-12 22:18:13 +10:00
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
19 changed files with 775 additions and 95 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

BIN
BatteryIcon.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

View File

@@ -55,8 +55,7 @@ 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
* MSENSE -> Motion Sensitivity,1-8, 8 is most sensitive, 1 is least sensitive (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.
@@ -75,6 +74,10 @@ This allows you to change the front key (one near the tip) to become a boost but
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

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

BIN
sa-720x300.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -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_ */

View File

@@ -9,7 +9,9 @@
#ifndef FONT_H_
#define FONT_H_
/*
* Remember screen is LSB at the top, MSB at the bottom of the strip!
*/
#define FONT_WIDTH 12 /*How many pixels wide the font is*/
const uint8_t FONT[]={
0x00,0xF0,0xFC,0x0E,0x82,0xC2,0x62,0x1E,0xFC,0xF0,0x00,0x00,
@@ -95,8 +97,42 @@ const uint8_t FONT[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,/*.*/
};
};
const uint8_t extendedFont[] = {
0x00,0x00,0xF8,0x08,0x0E,0x02,0x02,0x0E,0x08,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,/*Battery Empty*/
0x00,0x00,0xF8,0x08,0x0E,0x02,0x02,0x0E,0x08,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x00,0x00,/*Battery 1*/
0x00,0x00,0xF8,0x08,0x0E,0x02,0x02,0x0E,0x08,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x70,0x70,0x70,0x70,0x70,0x70,0x7F,0x00,0x00,/*Battery 2*/
0x00,0x00,0xF8,0x08,0x0E,0x02,0x02,0x0E,0x08,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x78,0x78,0x78,0x78,0x78,0x78,0x7F,0x00,0x00,/*Battery 3*/
0x00,0x00,0xF8,0x08,0x0E,0x02,0x02,0x0E,0x08,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7F,0x00,0x00,/*Battery 4*/
0x00,0x00,0xF8,0x08,0x0E,0x02,0x02,0x0E,0x08,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x7F,0x00,0x00,/*Battery 5*/
0x00,0x00,0xF8,0x08,0x0E,0x02,0x02,0x0E,0x08,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,/*Battery 6*/
0x00,0x00,0xF8,0x88,0x8E,0x82,0x82,0x8E,0x88,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,/*Battery 7*/
0x00,0x00,0xF8,0xC8,0xCE,0xC2,0xC2,0xCE,0xC8,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,/*Battery 8*/
0x00,0x00,0xF8,0xE8,0xEE,0xE2,0xE2,0xEE,0xE8,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,/*Battery 9*/
0x00,0x00,0xF8,0xF8,0xFE,0xF2,0xF2,0xFE,0xF8,0xF8,0x00,0x00,
0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,/*Battery 10*/
};
const uint8_t Iron_Base[] ={
0x00,0x20,0x60,0x60,0x60,0x60,0x60,0x60,0x90,0x90,0x90,0x90,
0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,

View File

@@ -26,9 +26,9 @@ inline void resetLastButtonPress() {
}
inline void resetButtons() {
lastKeyPress = millis();
keyState = 0;
}
inline uint32_t getLastMovement() {
return lastMovement;
}
@@ -39,7 +39,10 @@ inline uint16_t getButtons() {
inline uint16_t getRawButtons() {
return rawKeys;
}
inline void restoreButtons()
{
keyState=getRawButtons();
}
/*IRQ prototypes*/
void NMI_Handler(void);

View File

@@ -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
@@ -29,14 +30,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

@@ -14,16 +14,17 @@
void Oled_DisplayOn(void);
void Oled_DisplayOff(void);
u8* Oled_DrawArea(u8 x0, u8 y0, u8 wide, u8 high, u8* ptr);
const u8* Oled_DrawArea(u8 x0, u8 y0, u8 wide, u8 high,const u8* ptr);
void Set_ShowPos(u8 x, u8 y);
void Oled_DisplayFlip();
void GPIO_Init_OLED(void);
void Init_Oled(uint8_t leftHanded);
u8* Data_Command(u8 len, u8* ptr);
const u8* Data_Command(u8 len,const u8* ptr);
void Clear_Screen(void);//Clear the screen
/*Functions for writing to the screen*/
void OLED_DrawString(const char* string, const uint8_t length);
void OLED_DrawChar(char c, uint8_t x);
void OLED_DrawExtendedChar(uint8_t id, uint8_t x);
void OLED_DrawTwoNumber(uint8_t in, uint8_t x);
void OLED_BlankSlot(uint8_t xStart,uint8_t width);
void OLED_DrawThreeNumber(uint16_t in, uint8_t x);

View File

@@ -11,11 +11,7 @@
#define SETTINGS_H_
#include <stdint.h>
#include "stm32f10x_flash.h"
#define SETTINGSVERSION 11 /*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 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)
@@ -33,11 +29,10 @@ 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 movementEnabled:1; //If movement is enabled
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:5; //Sensitivity of accelerometer (4 bits)
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
@@ -49,5 +44,6 @@ struct {
void saveSettings();
void restoreSettings();
uint8_t lookupVoltageLevel(uint8_t level);
void resetSettings();
#endif /* SETTINGS_H_ */

View File

@@ -34,12 +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 = 0x3F;
sens -= 0x08 * sensitivity;
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() {
@@ -30,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.11", 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
}

View File

@@ -5,30 +5,30 @@
* Author: Ralim <ralim@ralimtek.com>
*/
#include "Modes.h"
const char *SettingsLongNames[] = { " Undervoltage Cutout <V>",
const char *SettingsLongNames[] = {
" Power source. Sets cutoff voltage. <DC 10V> <S 3.3V per cell>",
" Sleep Temperature <C>", " Sleep Timeout <Minutes>",
" Shutdown Timeout <Minutes>", " Motion Detection",
" Motion Sensitivity <1.least sensitive 8.most sensitive>",
" 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, 61, 22, 33, 37,
32, 53, 36 };
uint8_t StatusFlags = 0;
uint32_t temporaryTempStorage = 0;
//This does the required processing and state changes
void ProcessUI() {
uint8_t Buttons = getButtons(); //read the buttons status
static uint32_t lastModeChange = 0;
if (millis() - getLastButtonPress() < 30)
if (getRawButtons() && ((millis() - getLastButtonPress()) > 1000)) {
lastKeyPress = millis() - 600;
Buttons = getRawButtons();
} else if (millis() - getLastButtonPress() < 80) {
Buttons = 0;
else if (Buttons != 0) {
resetLastButtonPress();
} else if (Buttons != 0) {
resetButtons();
}
//rough prevention for de-bouncing and allocates settling time
switch (operatingMode) {
case STARTUP:
@@ -84,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()
@@ -94,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();
}
@@ -131,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
@@ -141,14 +141,13 @@ 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:
//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
@@ -158,7 +157,7 @@ void ProcessUI() {
case SLEEP_TIME:
++systemSettings.SleepTime; //Go up 1 minute at a time
if (systemSettings.SleepTime > 30)
systemSettings.SleepTime = 1;//cant set time over 30 mins
systemSettings.SleepTime = 1;//can't set time over 30 mins
//Remember that ^ is the time of no movement
break;
case SHUTDOWN_TIME:
@@ -166,10 +165,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;
@@ -179,7 +174,8 @@ void ProcessUI() {
break;
case MOTIONSENSITIVITY:
systemSettings.sensitivity++;
systemSettings.sensitivity = systemSettings.sensitivity % 8;
systemSettings.sensitivity = systemSettings.sensitivity
% 10;
break;
case TEMPROUNDING:
@@ -219,14 +215,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))
@@ -247,7 +243,7 @@ void ProcessUI() {
//Either button was pushed
operatingMode = STARTUP;
}
if (systemSettings.movementEnabled) {
if (systemSettings.sensitivity) {
if (millis() - getLastMovement()
> (systemSettings.ShutdownTime * 60000)) {
if ((millis() - getLastButtonPress()
@@ -257,8 +253,7 @@ void ProcessUI() {
} else {
Oled_DisplayOn();
}
}
else
} else
Oled_DisplayOn();
}
break;
@@ -416,12 +411,27 @@ void DrawUI() {
lastOLEDDrawTime = millis();
//Now draw symbols
if (StatusFlags == 8)
OLED_DrawChar('B', 3);
else
OLED_DrawChar(' ', 3);
OLED_DrawChar('B', 4);
else {
OLED_DrawChar(' ', 4);
}
//Draw in battery symbol if desired
if (systemSettings.cutoutSetting) {
//User is on a lithium battery
//we need to calculate which of the 10 levels they are on
uint8_t cellCount = systemSettings.cutoutSetting + 2;
uint16_t cellV = readDCVoltage(systemSettings.voltageDiv)
/ cellCount;
//Should give us approx cell voltage X10
//Range is 42 -> 33 = 9 steps therefore we will use battery 1-10
if (cellV < 33)
cellV = 33;
cellV -= 33; //Should leave us a number of 0-9
OLED_DrawExtendedChar(cellV + 1, 5);
} else {
OLED_DrawChar(' ', 5);
}
OLED_BlankSlot(6 * 12 + 16, 24 - 16);//blank out the tail after the arrows
OLED_BlankSlot(4 * 12 + 16, 24 - 16);//blank out the tail after the temp
if (getIronTimer() == 0
&& (temp / 10) > (systemSettings.SolderingTemp / 10)) {
//Cooling
@@ -435,9 +445,9 @@ void DrawUI() {
}
}
if (systemSettings.displayTempInF) {
OLED_DrawSymbol(4, 1);
OLED_DrawChar('F', 3);
} else {
OLED_DrawSymbol(4, 0);
OLED_DrawChar('C', 3);
}
}
@@ -458,7 +468,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;
@@ -479,9 +489,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);
@@ -495,19 +512,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)
@@ -517,7 +527,7 @@ void DrawUI() {
break;
case MOTIONSENSITIVITY:
OLED_DrawString("MSENSE ", 7);
OLED_DrawChar('1' + systemSettings.sensitivity, 7);
OLED_DrawChar('0' + systemSettings.sensitivity, 7);
break;
case TEMPROUNDING:
//We are prompting the user about their display mode preferences
@@ -593,7 +603,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
temp = readIronTemp(0, 1, 0xFFFF); //force temp re-reading
drawTemp(temp, 5, systemSettings.temperatureRounding);
break;
case UVLOWARN:

View File

@@ -77,7 +77,7 @@ void Oled_DisplayFlip() {
Input: number of bytes to write, array to write
Output:
*/
u8* Data_Command(u8 length, u8* data) {
const u8* Data_Command(u8 length,const u8* data) {
int i;
u8 tx_data[129];
//here are are inserting the data write command at the beginning
@@ -107,7 +107,7 @@ void Set_ShowPos(u8 x, u8 y) {
Inputs:(x,y) start point, (width,height) of enclosing rect, pointer to data
Output: pointer to the last byte written out
*******************************************************************************/
u8* Oled_DrawArea(u8 x0, u8 y0, u8 wide, u8 high, u8* ptr) {
const u8* Oled_DrawArea(u8 x0, u8 y0, u8 wide, u8 high,const u8* ptr) {
u8 m, n, y;
n = y0 + high;
@@ -174,7 +174,7 @@ void Clear_Screen(void) {
/*
* Draws a string onto the screen starting at the left
*/
void OLED_DrawString(const char* string,const 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);
}
@@ -209,7 +209,13 @@ void OLED_DrawChar(char c, uint8_t x) {
Oled_DrawArea(x, 0, FONT_WIDTH, 16, (u8*) ptr);
}
void OLED_DrawExtendedChar(uint8_t id, uint8_t x) {
u8* ptr = (u8*) extendedFont;
ptr += (id) * (FONT_WIDTH * 2);
x *= FONT_WIDTH; //convert to a x coordinate
Oled_DrawArea(x, 0, FONT_WIDTH, 16, (u8*) ptr);
}
void OLED_BlankSlot(uint8_t xStart, uint8_t width) {
u8* ptr = (u8*) FONT;
ptr += (36) * (FONT_WIDTH * 2);

View File

@@ -38,24 +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 * 33) + (33 * 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.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=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
}