TS80 Support Stage 1 (#365)
* Estimated pinout into the ioc file * Fix Atollic paths to be somewhat more portable * Add make command * Add rough calls to ADC2 [untested] * Using dual ADC injected modes * Start both ADCs * Move some IRQ's to ram exec * Stabilize PID a bit more * Add in ideas for tip type selection * Update peripheral setup to support TS80 * Add tiptype formula / settings struct * Add function ids to the settings menu * Rough tip selection * Rough out new cal routine for simple tips * Hardware test is fairly close for first pass * Add Simple calibration case [UNTESTED] This adds the calibration option that uses boiling water to the calibration menu. This is untested, and may need gain adjustments before use. * [Feat] Add some QC testing code * Typo fix * Add double button press handler for different rising times * Add hook for jump to sleep mode * QC for 9V Works! * Rough out QC handler, trim out old menu help text thats useless * QC 9V working... Static all the things (Low on ROM)! * Static all I2C to save space * Move QC negotiation into background task so it doesnt block the UI * Input V display works, tune ADC * QC 3 steps working * Start tip R measurements * Impliment tip resistance * Fix up the accel position, link in auto QC stages * Fix tip title * Tip type settings, Static OLED * Revert I2C callbacks * Misc Cleanup * Better Gain value, need to investiate offset * Add model warning * Add TS80 Boot Logo (#367) * Add TS80 Boot Logo * Refined * Moved down by 1px * Add in power selection 18/24W * Clean up accelerometer, fix TS100 builds, Fix voltage div cal
This commit is contained in:
258
Bootup Logo/Logos/001_TS80.hex
Normal file
258
Bootup Logo/Logos/001_TS80.hex
Normal file
@@ -0,0 +1,258 @@
|
||||
:020000040800F2
|
||||
:10F8000055AA0DF07FFFD5AB7DEA7F7E7F7FFF7F1E
|
||||
:10F81000FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF78
|
||||
:10F820007F7FBFBFDFBFEFDF0FEFEF0FAFAFAFAF38
|
||||
:10F83000EFEFAFAFAFAFAFAF0FEF6FEFAFAFAFAFB8
|
||||
:10F84000AFAF2FAFAFAFAFAFAFAF6FAF6FEFAFAF88
|
||||
:10F85000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFB8
|
||||
:10F86000EF6FFF1FFDFFFAFDF7FAF7F7F7F7FAF76B
|
||||
:10F87000FAFAFAFAFAFAFAFAFAFAFAFAFAFAF0FAF2
|
||||
:10F88000F7F7EFEFDFEFBFDF80BFBF80AAAAAAAA1A
|
||||
:10F89000BFBFAAAAAAAAAAAA80BFB0BFADAFAAAA90
|
||||
:10F8A000ADAFA2AAADAAAAAFADAAB0AFB0BFAFAF7D
|
||||
:10F8B000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF58
|
||||
:10F8C000BFB0FFC00000000000000000000000000A
|
||||
:10F8D0000000000000000000000000000000000028
|
||||
:10F8E0000000000000000000000000000000000018
|
||||
:10F8F0000000000000000000000000000000000008
|
||||
:10F9000000000000000000000000000000000000F7
|
||||
:10F9100000000000000000000000000000000000E7
|
||||
:10F9200000000000000000000000000000000000D7
|
||||
:10F9300000000000000000000000000000000000C7
|
||||
:10F9400000000000000000000000000000000000B7
|
||||
:10F9500000000000000000000000000000000000A7
|
||||
:10F960000000000000000000000000000000000097
|
||||
:10F970000000000000000000000000000000000087
|
||||
:10F980000000000000000000000000000000000077
|
||||
:10F990000000000000000000000000000000000067
|
||||
:10F9A0000000000000000000000000000000000057
|
||||
:10F9B0000000000000000000000000000000000047
|
||||
:10F9C0000000000000000000000000000000000037
|
||||
:10F9D0000000000000000000000000000000000027
|
||||
:10F9E0000000000000000000000000000000000017
|
||||
:10F9F0000000000000000000000000000000000007
|
||||
:10FA000000000000000000000000000000000000F6
|
||||
:10FA100000000000000000000000000000000000E6
|
||||
:10FA200000000000000000000000000000000000D6
|
||||
:10FA300000000000000000000000000000000000C6
|
||||
:10FA400000000000000000000000000000000000B6
|
||||
:10FA500000000000000000000000000000000000A6
|
||||
:10FA60000000000000000000000000000000000096
|
||||
:10FA70000000000000000000000000000000000086
|
||||
:10FA80000000000000000000000000000000000076
|
||||
:10FA90000000000000000000000000000000000066
|
||||
:10FAA0000000000000000000000000000000000056
|
||||
:10FAB0000000000000000000000000000000000046
|
||||
:10FAC0000000000000000000000000000000000036
|
||||
:10FAD0000000000000000000000000000000000026
|
||||
:10FAE0000000000000000000000000000000000016
|
||||
:10FAF0000000000000000000000000000000000006
|
||||
:10FB000000000000000000000000000000000000F5
|
||||
:10FB100000000000000000000000000000000000E5
|
||||
:10FB200000000000000000000000000000000000D5
|
||||
:10FB300000000000000000000000000000000000C5
|
||||
:10FB400000000000000000000000000000000000B5
|
||||
:10FB500000000000000000000000000000000000A5
|
||||
:10FB60000000000000000000000000000000000095
|
||||
:10FB70000000000000000000000000000000000085
|
||||
:10FB80000000000000000000000000000000000075
|
||||
:10FB90000000000000000000000000000000000065
|
||||
:10FBA0000000000000000000000000000000000055
|
||||
:10FBB0000000000000000000000000000000000045
|
||||
:10FBC0000000000000000000000000000000000035
|
||||
:10FBD0000000000000000000000000000000000025
|
||||
:10FBE0000000000000000000000000000000000015
|
||||
:10FBF0000000000000000000000000000000000005
|
||||
:10F8000055AA0DF07FFFD5AB7DEA7F7E7F7FFF7F1E
|
||||
:10F81000FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF78
|
||||
:10F820007F7FBFBFDFBFEFDF0FEFEF0FAFAFAFAF38
|
||||
:10F83000EFEFAFAFAFAFAFAF0FEF6FEFAFAFAFAFB8
|
||||
:10F84000AFAF2FAFAFAFAFAFAFAF6FAF6FEFAFAF88
|
||||
:10F85000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFB8
|
||||
:10F86000EF6FFF1FFDFFFAFDF7FAF7F7F7F7FAF76B
|
||||
:10F87000FAFAFAFAFAFAFAFAFAFAFAFAFAFAF0FAF2
|
||||
:10F88000F7F7EFEFDFEFBFDF80BFBF80AAAAAAAA1A
|
||||
:10F89000BFBFAAAAAAAAAAAA80BFB0BFADAFAAAA90
|
||||
:10F8A000ADAFA2AAADAAAAAFADAAB0AFB0BFAFAF7D
|
||||
:10F8B000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF58
|
||||
:10F8C000BFB0FFC00000000000000000000000000A
|
||||
:10F8D0000000000000000000000000000000000028
|
||||
:10F8E0000000000000000000000000000000000018
|
||||
:10F8F0000000000000000000000000000000000008
|
||||
:10F9000000000000000000000000000000000000F7
|
||||
:10F9100000000000000000000000000000000000E7
|
||||
:10F9200000000000000000000000000000000000D7
|
||||
:10F9300000000000000000000000000000000000C7
|
||||
:10F9400000000000000000000000000000000000B7
|
||||
:10F9500000000000000000000000000000000000A7
|
||||
:10F960000000000000000000000000000000000097
|
||||
:10F970000000000000000000000000000000000087
|
||||
:10F980000000000000000000000000000000000077
|
||||
:10F990000000000000000000000000000000000067
|
||||
:10F9A0000000000000000000000000000000000057
|
||||
:10F9B0000000000000000000000000000000000047
|
||||
:10F9C0000000000000000000000000000000000037
|
||||
:10F9D0000000000000000000000000000000000027
|
||||
:10F9E0000000000000000000000000000000000017
|
||||
:10F9F0000000000000000000000000000000000007
|
||||
:10FA000000000000000000000000000000000000F6
|
||||
:10FA100000000000000000000000000000000000E6
|
||||
:10FA200000000000000000000000000000000000D6
|
||||
:10FA300000000000000000000000000000000000C6
|
||||
:10FA400000000000000000000000000000000000B6
|
||||
:10FA500000000000000000000000000000000000A6
|
||||
:10FA60000000000000000000000000000000000096
|
||||
:10FA70000000000000000000000000000000000086
|
||||
:10FA80000000000000000000000000000000000076
|
||||
:10FA90000000000000000000000000000000000066
|
||||
:10FAA0000000000000000000000000000000000056
|
||||
:10FAB0000000000000000000000000000000000046
|
||||
:10FAC0000000000000000000000000000000000036
|
||||
:10FAD0000000000000000000000000000000000026
|
||||
:10FAE0000000000000000000000000000000000016
|
||||
:10FAF0000000000000000000000000000000000006
|
||||
:10FB000000000000000000000000000000000000F5
|
||||
:10FB100000000000000000000000000000000000E5
|
||||
:10FB200000000000000000000000000000000000D5
|
||||
:10FB300000000000000000000000000000000000C5
|
||||
:10FB400000000000000000000000000000000000B5
|
||||
:10FB500000000000000000000000000000000000A5
|
||||
:10FB60000000000000000000000000000000000095
|
||||
:10FB70000000000000000000000000000000000085
|
||||
:10FB80000000000000000000000000000000000075
|
||||
:10FB90000000000000000000000000000000000065
|
||||
:10FBA0000000000000000000000000000000000055
|
||||
:10FBB0000000000000000000000000000000000045
|
||||
:10FBC0000000000000000000000000000000000035
|
||||
:10FBD0000000000000000000000000000000000025
|
||||
:10FBE0000000000000000000000000000000000015
|
||||
:10FBF0000000000000000000000000000000000005
|
||||
:10F8000055AA0DF07FFFD5AB7DEA7F7E7F7FFF7F1E
|
||||
:10F81000FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF78
|
||||
:10F820007F7FBFBFDFBFEFDF0FEFEF0FAFAFAFAF38
|
||||
:10F83000EFEFAFAFAFAFAFAF0FEF6FEFAFAFAFAFB8
|
||||
:10F84000AFAF2FAFAFAFAFAFAFAF6FAF6FEFAFAF88
|
||||
:10F85000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFB8
|
||||
:10F86000EF6FFF1FFDFFFAFDF7FAF7F7F7F7FAF76B
|
||||
:10F87000FAFAFAFAFAFAFAFAFAFAFAFAFAFAF0FAF2
|
||||
:10F88000F7F7EFEFDFEFBFDF80BFBF80AAAAAAAA1A
|
||||
:10F89000BFBFAAAAAAAAAAAA80BFB0BFADAFAAAA90
|
||||
:10F8A000ADAFA2AAADAAAAAFADAAB0AFB0BFAFAF7D
|
||||
:10F8B000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF58
|
||||
:10F8C000BFB0FFC00000000000000000000000000A
|
||||
:10F8D0000000000000000000000000000000000028
|
||||
:10F8E0000000000000000000000000000000000018
|
||||
:10F8F0000000000000000000000000000000000008
|
||||
:10F9000000000000000000000000000000000000F7
|
||||
:10F9100000000000000000000000000000000000E7
|
||||
:10F9200000000000000000000000000000000000D7
|
||||
:10F9300000000000000000000000000000000000C7
|
||||
:10F9400000000000000000000000000000000000B7
|
||||
:10F9500000000000000000000000000000000000A7
|
||||
:10F960000000000000000000000000000000000097
|
||||
:10F970000000000000000000000000000000000087
|
||||
:10F980000000000000000000000000000000000077
|
||||
:10F990000000000000000000000000000000000067
|
||||
:10F9A0000000000000000000000000000000000057
|
||||
:10F9B0000000000000000000000000000000000047
|
||||
:10F9C0000000000000000000000000000000000037
|
||||
:10F9D0000000000000000000000000000000000027
|
||||
:10F9E0000000000000000000000000000000000017
|
||||
:10F9F0000000000000000000000000000000000007
|
||||
:10FA000000000000000000000000000000000000F6
|
||||
:10FA100000000000000000000000000000000000E6
|
||||
:10FA200000000000000000000000000000000000D6
|
||||
:10FA300000000000000000000000000000000000C6
|
||||
:10FA400000000000000000000000000000000000B6
|
||||
:10FA500000000000000000000000000000000000A6
|
||||
:10FA60000000000000000000000000000000000096
|
||||
:10FA70000000000000000000000000000000000086
|
||||
:10FA80000000000000000000000000000000000076
|
||||
:10FA90000000000000000000000000000000000066
|
||||
:10FAA0000000000000000000000000000000000056
|
||||
:10FAB0000000000000000000000000000000000046
|
||||
:10FAC0000000000000000000000000000000000036
|
||||
:10FAD0000000000000000000000000000000000026
|
||||
:10FAE0000000000000000000000000000000000016
|
||||
:10FAF0000000000000000000000000000000000006
|
||||
:10FB000000000000000000000000000000000000F5
|
||||
:10FB100000000000000000000000000000000000E5
|
||||
:10FB200000000000000000000000000000000000D5
|
||||
:10FB300000000000000000000000000000000000C5
|
||||
:10FB400000000000000000000000000000000000B5
|
||||
:10FB500000000000000000000000000000000000A5
|
||||
:10FB60000000000000000000000000000000000095
|
||||
:10FB70000000000000000000000000000000000085
|
||||
:10FB80000000000000000000000000000000000075
|
||||
:10FB90000000000000000000000000000000000065
|
||||
:10FBA0000000000000000000000000000000000055
|
||||
:10FBB0000000000000000000000000000000000045
|
||||
:10FBC0000000000000000000000000000000000035
|
||||
:10FBD0000000000000000000000000000000000025
|
||||
:10FBE0000000000000000000000000000000000015
|
||||
:10FBF0000000000000000000000000000000000005
|
||||
:10F8000055AA0DF07FFFD5AB7DEA7F7E7F7FFF7F1E
|
||||
:10F81000FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF78
|
||||
:10F820007F7FBFBFDFBFEFDF0FEFEF0FAFAFAFAF38
|
||||
:10F83000EFEFAFAFAFAFAFAF0FEF6FEFAFAFAFAFB8
|
||||
:10F84000AFAF2FAFAFAFAFAFAFAF6FAF6FEFAFAF88
|
||||
:10F85000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFB8
|
||||
:10F86000EF6FFF1FFDFFFAFDF7FAF7F7F7F7FAF76B
|
||||
:10F87000FAFAFAFAFAFAFAFAFAFAFAFAFAFAF0FAF2
|
||||
:10F88000F7F7EFEFDFEFBFDF80BFBF80AAAAAAAA1A
|
||||
:10F89000BFBFAAAAAAAAAAAA80BFB0BFADAFAAAA90
|
||||
:10F8A000ADAFA2AAADAAAAAFADAAB0AFB0BFAFAF7D
|
||||
:10F8B000AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF58
|
||||
:10F8C000BFB0FFC00000000000000000000000000A
|
||||
:10F8D0000000000000000000000000000000000028
|
||||
:10F8E0000000000000000000000000000000000018
|
||||
:10F8F0000000000000000000000000000000000008
|
||||
:10F9000000000000000000000000000000000000F7
|
||||
:10F9100000000000000000000000000000000000E7
|
||||
:10F9200000000000000000000000000000000000D7
|
||||
:10F9300000000000000000000000000000000000C7
|
||||
:10F9400000000000000000000000000000000000B7
|
||||
:10F9500000000000000000000000000000000000A7
|
||||
:10F960000000000000000000000000000000000097
|
||||
:10F970000000000000000000000000000000000087
|
||||
:10F980000000000000000000000000000000000077
|
||||
:10F990000000000000000000000000000000000067
|
||||
:10F9A0000000000000000000000000000000000057
|
||||
:10F9B0000000000000000000000000000000000047
|
||||
:10F9C0000000000000000000000000000000000037
|
||||
:10F9D0000000000000000000000000000000000027
|
||||
:10F9E0000000000000000000000000000000000017
|
||||
:10F9F0000000000000000000000000000000000007
|
||||
:10FA000000000000000000000000000000000000F6
|
||||
:10FA100000000000000000000000000000000000E6
|
||||
:10FA200000000000000000000000000000000000D6
|
||||
:10FA300000000000000000000000000000000000C6
|
||||
:10FA400000000000000000000000000000000000B6
|
||||
:10FA500000000000000000000000000000000000A6
|
||||
:10FA60000000000000000000000000000000000096
|
||||
:10FA70000000000000000000000000000000000086
|
||||
:10FA80000000000000000000000000000000000076
|
||||
:10FA90000000000000000000000000000000000066
|
||||
:10FAA0000000000000000000000000000000000056
|
||||
:10FAB0000000000000000000000000000000000046
|
||||
:10FAC0000000000000000000000000000000000036
|
||||
:10FAD0000000000000000000000000000000000026
|
||||
:10FAE0000000000000000000000000000000000016
|
||||
:10FAF0000000000000000000000000000000000006
|
||||
:10FB000000000000000000000000000000000000F5
|
||||
:10FB100000000000000000000000000000000000E5
|
||||
:10FB200000000000000000000000000000000000D5
|
||||
:10FB300000000000000000000000000000000000C5
|
||||
:10FB400000000000000000000000000000000000B5
|
||||
:10FB500000000000000000000000000000000000A5
|
||||
:10FB60000000000000000000000000000000000095
|
||||
:10FB70000000000000000000000000000000000085
|
||||
:10FB80000000000000000000000000000000000075
|
||||
:10FB90000000000000000000000000000000000065
|
||||
:10FBA0000000000000000000000000000000000055
|
||||
:10FBB0000000000000000000000000000000000045
|
||||
:10FBC0000000000000000000000000000000000035
|
||||
:10FBD0000000000000000000000000000000000025
|
||||
:10FBE0000000000000000000000000000000000015
|
||||
:10FBF0000000000000000000000000000000000005
|
||||
:00000001FF
|
||||
BIN
Bootup Logo/Logos/001_TS80.png
Normal file
BIN
Bootup Logo/Logos/001_TS80.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
515
Development Resources/TS80-Bootloader.hex
Normal file
515
Development Resources/TS80-Bootloader.hex
Normal file
@@ -0,0 +1,515 @@
|
||||
:020000040800F2
|
||||
:2000000020310020E52E00088D2E00088F2E0008912E0008932E0008952E00080000000071
|
||||
:20002000000000000000000000000000972E0008992E0008000000009B2E00089D2E000880
|
||||
:20004000252F0008292F00082D2F0008312F0008352F0008392F00083D2F0008412F000850
|
||||
:20006000452F0008492F00084D2F0008512F0008552F0008592F00085D2F0008612F000830
|
||||
:20008000652F0008692F00086D2F0008712F00089F2E0008792F00087D2F0008812F0008E7
|
||||
:2000A000852F0008892F00088D2F0008912F0008952F0008992F00089D2F0008A12F0008F0
|
||||
:2000C000A52F0008A92F0008AD2F0008B12F0008B52F0008B92F0008BD2F0008C12F0008D0
|
||||
:2000E000C52F0008C92F0008CD2F0008D12F0008D52F0008D92F0008DD2F0008E12F0008B0
|
||||
:20010000E52F0008E92F0008ED2F0008F12F0008F52F0008F92F0008FD2F0008013000088E
|
||||
:2001200005300008093000080D3000081130000870B500F08FFEDFF8144804F510553C350F
|
||||
:200140000146284600F016FC4FF40051204600F0D1FE04F200464FF4B0720FF650213046A2
|
||||
:2001600000F0F2FE0B222946304600F0EDFE0FF6CC4518222946204600F0E6FE1822294610
|
||||
:2001800004F5007000F0E0FEDFF8C407C4F81604A0220FF6783104F5C06000F0D5FE5022F2
|
||||
:2001A0000FF6084104F5006000F0CEFE40220FF64C4104F5206000F0C7FE42F20C20011940
|
||||
:2001C0000022CA760A774A7602518A600A61CA6070BD70B50C46DFF87467B4F5805F03D1F8
|
||||
:2001E00000F044F830460EE0B4F5205F04D100F03DF806F5007006E0B4F5804F07D100F0BC
|
||||
:2002000035F806F58060BDE8704000F08DBEB4F51A4F2AD300F02AF806F5C06000F084FE98
|
||||
:200220004FF40072314606F508503C3000F08CFE42F2272085196978B9B9DFF81817098856
|
||||
:20024000825D32B9B4F52A4F00D271B100F0A2F90AE0012A09D111B1B4F51C4F02D2B4F5F1
|
||||
:200260002C4F02D300F08BFA687070BD4FF400720146704710B50446080004D14FF4007260
|
||||
:200280000FF228713DE0DFF8C416B0F5805F08BF4FF4007235D0B0F5205F04D14FF4007243
|
||||
:2002A00001F500712DE0B0F5804F04D14FF4007201F5806125E0B0F5004F05D100F02DF811
|
||||
:2002C000A0220FF648211CE0B0F5024F05D100F024F850220FF6D42113E06FF402421218EA
|
||||
:2002E00041F2FF739A4205D200F017F840220FF60C3106E0B0F51A4F08D34FF4007201F589
|
||||
:20030000C0612046BDE8104000F00EBE4FF400712046BDE8104000F053BE4FF4007120467B
|
||||
:2003200000F04EBE2DE9F84F4FF02008DFF81C5642F227277C194FF4085908EB050000F20F
|
||||
:200340000046002030733078E52818BF002800F0E580F07A202840F0E180307A482826D137
|
||||
:20036000707A452804BFB07A582840F0D08000F0DDF800207855607820B102280DD00428AB
|
||||
:2003800006D010E05220307244207072592009E0452030725220707204E04E2030724F201D
|
||||
:2003A00070725420B072F07D401CF075B4E041285AD1707A442804BFB07A52285BD100F096
|
||||
:2003C000B5F800207855607049F805004FF0020A95F80006302804BF95F8010678281ED151
|
||||
:2003E0000AEB050090F80006A0F13001C9B20A2922BFA0F14101C9B2062922BFA0F16101D3
|
||||
:20040000C9B206290BD259F805104FEA011B49F805B000F0DAF9584449F8050003E0607844
|
||||
:2004200040F0040060700AF1010ABAF10A0FCFDB6078A0B959F80500DFF81C15884202D316
|
||||
:2004400000F00FFD18B94E2030724F2004E001207855532030724520707254205BE045200E
|
||||
:2004600030725220707256E0422820D1707A492804BFB07A4E284AD100F058F8785D28B926
|
||||
:200480004E2030724F207072542004E052203072442070725920B072785D022804BF0020CC
|
||||
:2004A0007855785D012837D10220785534E053280DD1707A452804BFB07A542827D1785D80
|
||||
:2004C00060BB5520307253207072452023E0522805D1707A44281AD1B07A59280EE0552886
|
||||
:2004E00005D1707A532812D1B07A452806E0452806D1707A52280AD1B07A522807D10DE075
|
||||
:200500004E2801BF707A4F28B07A542806D04520307252207072B0720320607008F1200837
|
||||
:20052000B8F5007FFFF609AFBDE8F18FB07EF17E00EB01200005000DDFF8181408804FF434
|
||||
:200540007A7000F041BD70B542F20C25DFF8FC63AC19207F03281BD100F0F5FD0028FBD1B2
|
||||
:2005600000F03FFD4FF4C87000F02EFD012000F038FD00F0F5FD002020776076A060A8510B
|
||||
:20058000DFF8D00300210180E07E022808BFE17670BD00002DE9F04742F20424DFF8AC53BD
|
||||
:2005A00066190020F060306900EB0509F068401942F2242A0AEB050742F2292879780E29D9
|
||||
:2005C00056D8DFE801F0080C131B1F2C324146595F757B838A0090F800063A2874E000F006
|
||||
:2005E000CBF80001B0770020306173E096F81E8000F0C2F84044B077B07F5DE000F0BCF87B
|
||||
:2006000000010AE054F8058000F0B6F8404460516059F17F4118F177000260515AE000F084
|
||||
:20062000ABF800010AF8050054E01AF8058000F0A3F840440AF8050060591AF8051008182E
|
||||
:200640006051F07F081837E000F096F80001707740E096F81D8000F08FF840447077F07F41
|
||||
:20066000717F0818F0777878401C7870B07F002876D17878801C72E000F07EF8000108F8EC
|
||||
:20068000090027E018F809A000F076F8504408F809003069F17F421918F802205118F1772F
|
||||
:2006A000401C3061B17F884214D27878401E56E000F060F808EB0010F0770BE000F05AF80A
|
||||
:2006C0004044F077F07F002846D103E090F800060D2841D17878401C41E090F800060A289C
|
||||
:2006E0003AD10020F870707F042805D17879B979090401EB00607060707F012837D068BBE8
|
||||
:2007000060597168081860519349884201D202202EE0002001E03069801C30613069B17F3D
|
||||
:2007200088421BD26159401800F03BFD31694A1960590818491CB37F994218F8021008BF97
|
||||
:2007400041F47F4104D04244527801EB022189B200F016FD0428DED0042009E00020787044
|
||||
:20076000F068401CF060B0F5007FFFF41CAF0020BDE8F08796F81F8090F8000625E0F8B5EA
|
||||
:200780000024724D05F508564FF408577859F168081800F006FD601990F8001690F8010699
|
||||
:2007A00001EB002189B27859F268101800F0E8FCF168891CF160042801D00420F2BDA41CEB
|
||||
:2007C000B4F5007FE2D30020F2BD10B585B0044600A80FF2C411112200F0B6FBA4F16100E1
|
||||
:2007E000C0B21A2838BF203C002000A9415CE4B2A14204D0401CC0B21028F6D3002005B09B
|
||||
:2008000010BD2DE9F04142F21824504D6619534F327A2AB940023860480278600120307248
|
||||
:20082000307A012831D1605978B905F5005839684046FFF71FFD40229821404600F0C6FC1B
|
||||
:200840004FF4E070605140200CE040229821B868401900F5005000F0B9FC605940386051A8
|
||||
:20086000B8684030B8604021012000F05AFD3021012000F0E0FC38684030386078684038C9
|
||||
:2008800078603748816840398160786838B96051B860386033480321017000203072BDE815
|
||||
:2008A000F0812DE9F04142F21C24284D6259403266192D4F33792BB94002386048027860E3
|
||||
:2008C00001203071307901282FD1002027490AE05B1903F5005310F801C083F800C0401CEB
|
||||
:2008E00063595B1C635163599342F1D3DFF88080B8F800003968411839607A68101A7860BE
|
||||
:20090000C00507D100206051A1F5007105F50050FFF75FFC12488168B8F80020891A816030
|
||||
:200920004FF44051022000F097FC786800281EBF0C480078042806D100206051012100F0A7
|
||||
:2009400057FE00203071BDE8F0810000EC010020188DDD40102D002000400008D82C0020D3
|
||||
:20096000C82C0020942C0020E42C0020342C0020962C00201C2221FA02F303F00F030A2B69
|
||||
:20098000ACBF3733303300F8013B121F53B2002BF1D50021017070473031323334353637DF
|
||||
:2009A000383941424344454600000000EB3C904D53444F53352E3000020108000200020052
|
||||
:2009C00010F80C00010001000000000000000000000029A298E46C4E4F204E414D45202030
|
||||
:2009E0002020464154313220202033C98ED1BCF07B8ED9B800208EC0FCBD007C384E247DAE
|
||||
:200A0000248BC199E83C01721C83EB3A66A11C7C26663B07268A57FC750680CA028856025B
|
||||
:200A200080C31073EB33C98A461098F7661603461C13561E03460E13D18B7611608946FCBA
|
||||
:200A40008956FEB82000F7E68B5E0B03C348F7F30146FC114EFE61BF0000E8E600723926B9
|
||||
:200A6000382D741760B10BBEA17DF3A66174324E740983C7203BFB72E6EBDCA0FB7DB47D1B
|
||||
:200A80008BF0AC9840740C487413B40EBB0700CD10EBEFA0FD7DEBE6A0FC7DEBE1CD16CD4D
|
||||
:200AA00019268B551A52B001BB0000E83B0072E85B8A5624BE0B7C8BFCC746F03D7DC746D3
|
||||
:200AC000F4297D8CD9894EF2894EF6C606967DCBEA030000200FB6C8668B46F86603461C43
|
||||
:200AE000668BD066C1EA10EB5E0FB6C84A4A8A460D32E4F7E20346FC1356FEEB4A52500655
|
||||
:200B0000536A016A10918B4618969233D2F7F691F7F64287CAF7761A8AF28AE8C0CC020AEB
|
||||
:200B2000CCB80102807E020E7504B4428BF48A5624CD136161720B40750142035E0B4975ED
|
||||
:200B400006F8C341BB000060666A00EBB04E544C44522020202020200D0A52656D6F766544
|
||||
:200B6000206469736B73206F72206F74686572206D656469612EFF0D0A4469736B2065720E
|
||||
:200B8000726F72FF0D0A507265737320616E79206B657920746F20726573746172740D0ACF
|
||||
:200BA00000000000000000ACCBD855AA4446552056335F34325F44080000000000000000EF
|
||||
:200BC00000008A5A794500000000000042200049006E0066006F000F007272006D006100C4
|
||||
:200BE000740069006F0000006E00000001530079007300740065000F00726D0020005600BE
|
||||
:200C00006F006C00750000006D00650053595354454D7E3120202016005E63705D455D4533
|
||||
:200C2000000064705D45020000000000412E005F002E00540072000F007F610073006800B0
|
||||
:200C40006500730000000000FFFFFFFF7E3120202020202054524122004A8A5A794579459E
|
||||
:200C600000008A5A7945050000100000E552415348457E3145464D1200478A5A7945794525
|
||||
:200C800000008A5A7945040000000000412E0054007200610073000F002568006500730031
|
||||
:200CA0000000FFFFFFFF0000FFFFFFFF5452415348457E312020201200478A5A79457945AD
|
||||
:200CC00000008A5A7945040000000000412E0066007300650076000F00DA65006E0074001B
|
||||
:200CE0007300640000000000FFFFFFFF46534556454E7E3120202012004D8A5A794579458C
|
||||
:200D000000008A5A79450D00000000002E2020202020202020202010005E63705D455D4531
|
||||
:200D2000000064705D450200000000002E2E20202020202020202010005E63705D455D453A
|
||||
:200D4000000064705D4500000000000042470075006900640000000F00FFFFFFFFFFFFFF4A
|
||||
:200D6000FFFFFFFFFFFF0000FFFFFFFF0149006E006400650078000F00FF65007200560049
|
||||
:200D80006F006C00750000006D006500494E444558457E3120202020007263705D455D45BC
|
||||
:200DA000000064705D4503004C0000007B00380031004200320031003700330033002D001B
|
||||
:200DC00036003800440039002D0034003000350039002D0041003500370033002D004500AA
|
||||
:200DE000410030004400320033003200450039003300320031007D00000000002E20202088
|
||||
:200E0000202020202020203200478A5A7945794500008A5A79450400000000002E2E2020D7
|
||||
:200E2000202020202020201000478A5A7945794500008A5A7945000000000000F8FFFFFF84
|
||||
:200E4000FFFFFF6F0007800009A0000BC000FFFFFFFF0F00234801684268511880684018F9
|
||||
:200E6000704710B5FFF7F6FF1F490C6800F006F8844201D1012010BD002010BD0A231B4A3C
|
||||
:200E800001461B48FFE7F0B503F11506C3F14304C3F151050A330EE0C0EB40105F1003EB86
|
||||
:200EA00097774FEAA70CA3EB8C07FF0021FA07F7FFB238185B1C1BB2B342EDDB0DE0C0EB65
|
||||
:200EC0004010631004EB93739B10A4EB8301C90022FA01F1C9B20818641C24B2AC42EEDB1D
|
||||
:200EE000F0BD0000E8F7FF1FFC3F0008011020D502DEC0DE002200F0BDBB10B450F8041BCC
|
||||
:200F000081B102681218001D50F8043BDC0744BFA9F10104E31852F8044B43F8044B091F9C
|
||||
:200F2000F9D1EBE710BC704762B38B0708D0521E11F8013B00F8013B00F024808B07F6D13D
|
||||
:200F4000830740F0208000BF103A07D330B4B1E83810103AA0E83810F9D230BC530724BF81
|
||||
:200F6000B1E80810A0E8081044BF51F8043B40F8043BD20724BF31F8022B20F8022B44BFC4
|
||||
:200F80000B7803707047083A07D3B1E80810083A40F8043B40F804CBF7D25307E4E750F8E1
|
||||
:200FA000041B61B150F8042BD30744BFA9F101039A18002342F8043B091FFAD1EFE7704740
|
||||
:200FC000002200F071BB000000214FF6FF7302E04D4A1360491C40F2DC5242439142F7D328
|
||||
:200FE00070474A494FF400620A614FF480520A61002808680AD120F4404040F440500860E4
|
||||
:20100000086820F4402040F4403009E020F4804040F430400860086820F4802040F43020D7
|
||||
:201020000860704780F308887047704738B500F06BFB102000F0E0FB354C207820B10220D6
|
||||
:2010400000F0D4FB082502E000F0D0FB002531484168314A11434160016841F08071016064
|
||||
:20106000012000F06AFB012000F06AFB392000F094FB0028FAD0207800B1022000F063FB01
|
||||
:2010800000F068FBA842FBD10121142000F06AFB012140F20C6000F06EFB01214FF400001E
|
||||
:2010A00000F072FB207820B10120BDE8324000F056BB31BD80B501464FF0006000F047FCF5
|
||||
:2010C0004FF4A06000F012FC14208DF8000002208DF8010000208DF8020001208DF803001E
|
||||
:2010E00000A800F008FC01BD0C484FF6FF71C1600B4A02600B4A42600B48C1600B49016095
|
||||
:201100004FF08831416070470C10014004080140E8010020001002400A846800000801403B
|
||||
:201120008888880884B4BB8B000C0140884883440948012101600021016041604FF4E05142
|
||||
:20114000064A118005E0044801210160002141600321016000207047405C0040142D00209F
|
||||
:201160000448C0610221017203490162034A426208680047A02C0020D800002030010020E0
|
||||
:2011800038B504460D46104800F0A0FB05281CBF342000F07AFB29462046BDE8344000F043
|
||||
:2011A0005BBB10B50446A0050CD1074800F08EFB05281CBF342000F068FB2046BDE81040B6
|
||||
:2011C00000F02EBB10BD0000A086010010B5490001F1804101F5C041521C521009E010F8C9
|
||||
:2011E000013B10F8014B43EA042321F8023B891C521EF4D110BD490001F1804101F5C0411B
|
||||
:20120000521C521004E051F8043B20F8023B521EF9D170474FF6F8710840DFF89011086076
|
||||
:20122000704710B5DFF8882152F8203048F68F142340194324E010B5DFF8742152F82030A9
|
||||
:2012400048F6BF742340CC0648BF83F01003890648BF83F020030FE010B5DFF8542152F8E5
|
||||
:2012600020304BF68F742340CC0448BF83F48053890448BF83F4005343F4004141F08001CE
|
||||
:2012800042F8201010BDDFF8281151F820204BF68F731A4082F4405242F4004209E0DFF8A1
|
||||
:2012A000101151F8202048F68F631A4042F40042FFE742F0800241F820207047DFF8F010E1
|
||||
:2012C00051F8202052040AD551F8202048F68F731A4042F4404242F0800241F82020704791
|
||||
:2012E000334951F8202052060AD551F8202048F68F731A4042F4004242F0C00241F82020AA
|
||||
:20130000704738E0294A126892B202EBC000294A37E03BE02549096889B201EBC000254947
|
||||
:201320003AE0224A126892B202EBC000224A2AE01E4A126892B202EBC000204A02EB4000DC
|
||||
:201340003F2909D34A091F23194208BF521E1204910941F4004105E04A08C90748BF521C80
|
||||
:2013600012049109016070471049096889B201EBC000124914E00D4A126892B202EBC000E3
|
||||
:201380000F4A4908490042F8101070470749096889B201EBC0000A4951F8100080B270470C
|
||||
:2013A00051F810008005800D70470000505C0040005C004008600040046000400C6000408B
|
||||
:2013C000006000400106090C41EA10207047000080B5964890F82010022909D018D3042958
|
||||
:2013E00002D00ED3052913D1002180F820100CE0C17B28290CD1816A406ABDE8044000F09B
|
||||
:20140000FEBA0121002000F0F3F84FF440512BE101BD38B5854CE57B0220FFF7A5FF60849B
|
||||
:201420000246D8218248FFF7E6FE94F8200010B1012803D00AE0BDE8314013E02A2D06D13D
|
||||
:20144000A16A606ABDE8344000F003BB022000F0F9F82421052000F0CDFA00210220BDE8E4
|
||||
:201460003440C5E010B5714C628C1AB170492046FFF76AFD6F4861684160A1688160608CA5
|
||||
:201480001F2806D0022000F0DDF8002020601A218DE0E27B282A18BF2A2A0FD1607CA17C4D
|
||||
:2014A000090441EA0060E17C40EA0120217D08436062A07DE17D41EA0020A06220685E494A
|
||||
:2014C000884270D15D480068617B884204D3A07B401EC0B2102804D3022000F0B3F824217B
|
||||
:2014E00065E0606AA16A002A49D0032A2BD0082A18BF0A2A53D0122A29D0152A4FD01A2A30
|
||||
:201500002DD01B2A27D01D2A49D01E2A23D0232A2DD0252A2FD0282A35D02A2A37D02F2A54
|
||||
:2015200039D0552A3BD05A2A1DD0882A18BF8A2A35D08F2A18BF9E2A31D0A82A1CBFAA2A8B
|
||||
:20154000AF2A2CD02FE0BDE8104000F04BBABDE8104000F011BABDE8104000F04FBABDE87A
|
||||
:20156000104000F037BABDE8104000F037BABDE8104000F010BABDE8104000F01BBABDE856
|
||||
:20158000104000F0A5BABDE8104000F038BABDE8104000F05EBABDE8104000F083BABDE811
|
||||
:2015A000104000F09ABA022000F04CF82021052000F020FA00210120BDE8104018E010B5DD
|
||||
:2015C0000C4622469821FFF701FE21460120FFF7A8FE30210120FFF72EFE1448032180F8F3
|
||||
:2015E000201014488168091B81600021017310BD10B50C460F4B1249196018730D22982157
|
||||
:201600001846FFF7E3FD0D210120FFF78AFE0748052180F8201044B1042180F82010302199
|
||||
:201620000120BDE81040FFF706BE10BD742C0020342C0020C82C002055534243002D00203F
|
||||
:201640005553425380B518B1022807D00AD301BD10210120BDE80440FFF7EDBD1021012086
|
||||
:20166000FFF7E9FD4FF480510220BDE80440FFF7F3BD000000B500BF130096469446103943
|
||||
:2016800028BFA0E80C50FAD85FEA417C28BF0CC048BF40F8042BC90728BF20F8022B48BF83
|
||||
:2016A00000F8012B00BD0000401810F0030308D0C91A1FD3DB0748BF00F8012D28BF20F830
|
||||
:2016C000022D130030B414461546103928BF20E93C00FAD8490728BF20E90C0048BF40F85D
|
||||
:2016E000042D890028BF20F8022D48BF00F8012D30BC7047C91818BF00F8012DCB0728BF9B
|
||||
:2017000000F8012D704700002E48016841F00101016041682C4A1140416001682B4A114039
|
||||
:201720000160016821F480210160416821F4FE0141604FF41F0181607047254908607047E2
|
||||
:2017400025490860704723490A68920850EA8200086070471F48006800F00C0070471F49BF
|
||||
:20176000086070471E4A0029116814BF084321EA0000106070471B4A0029116814BF0843CB
|
||||
:2017800021EA000010607047174A0029116814BF084321EA00001060704700214209094B04
|
||||
:2017A000012A08BF1A6803D0022A0CBF1A6A5A6A012300F01F0003FA00F0024218BF012146
|
||||
:2017C00008467047001002400000FFF8FFFFF6FE000042420410024060004242D8004242AF
|
||||
:2017E00014100240181002401C100240DFF8C4100A6802F0380206E0DFF8B8100A6822F059
|
||||
:2018000010020A600A68104308607047FFE7DFF8A800DFF8A8100160DFF8A4100160704770
|
||||
:2018200038B5054600F015F804280DD1DFF89440206840F002002060656000F006F8216848
|
||||
:2018400041F6FD721140216032BD206840F0400020604FF4302039E070B504460D4600F04B
|
||||
:2018600011F804280CD1174E306840F001003060258000F007F8316841F6FE7211403160E2
|
||||
:2018800070BD08804FF4005020E00F490860704704200D490A68D20701D5012070470A68A4
|
||||
:2018A000520701D5022070470968C90648BF03207047000000200240042002402301674567
|
||||
:2018C000AB89EFCD102002400C20024010B5FFE70446FFF7DDFF03E02CB1FFF7D9FF641E61
|
||||
:2018E0000128F9D004B9052010BD00001B4908431B490860704770B503781A460121C478B7
|
||||
:20190000ECB1174B1B6803F4E063C3F5E0631B0A4478C3F10405AC4085780F2626FA03F33E
|
||||
:201920002B4023431B010F4C1355007842110E4B00F01F0001FA00F043F8220070BD5011EE
|
||||
:201940000A4A03F01F03994042F8201070BD084A1140084307490860704700000000FA0552
|
||||
:201960000CED00E000E400E000E100E080E100E080FFFF1F08ED00E07449087CC00702D577
|
||||
:201980007348052105E00FF2E410C97C252928BF2421FFF714BE6F48002181800221817117
|
||||
:2019A0000021C1714172022181720021C1720C21FFF705BE6848002101800F218170FF213E
|
||||
:2019C000C17000218180022181710021C1710821FFF7F5BD04216148FFF7F1BD0821604838
|
||||
:2019E000FFF7EDBD5948C17C132928BF12215D48FFF7E5BD5B4A90701173704769E070B588
|
||||
:201A000004460D46584E3078C0B92A462146282000F076F8C8B14D48007B000603D502205C
|
||||
:201A2000307029460CE00220FFF70CFE00F00EF801210120BDE87040FFF7DABD022804D16F
|
||||
:201A40002046BDE87040FEF7DCBE70BD24210520D0E710B5444C2278EAB90A4601462A207B
|
||||
:201A600000F04EF8E8B13948007B000608D4012020704FF440510220BDE81040FFF7ECBB80
|
||||
:201A80000020FFF7DFFDFFF7E1FF00210120BDE81040FFF7ADBD012A04BFBDE81040FEF70F
|
||||
:201AA00000BF10BD80B52948816829B9007C400702D40121002006E00220FFF7C3FDFFF79A
|
||||
:201AC000C5FF00210120FFE7BDE80440FFF790BD00BF01210020FFF78BBD80B51B4881682E
|
||||
:201AE00009B9002004E0007B00064CBF00200220FFF7A8FD2021FFF7AAFF00210120E3E7CB
|
||||
:201B000080B55118B1F5805F09D92A2804BF0220FFF798FD0020FFF795FD21210BE00B49D5
|
||||
:201B20008968B1EB422F0ED02A280CBF02200020FFF788FD2421FFF78AFF00210120FFF7F3
|
||||
:201B400057FD002002BD012002BD0000742C0020EC2C0020BC010020F42C0020E401002058
|
||||
:201B6000D8010020A8010020942C002000800202200000005669727475616C204446552019
|
||||
:201B80004469736B20202020202020202020202010B5DFF8884700B92BE000F096F8006825
|
||||
:201BA000804720680A3010BD80B5DFF870070068C178DFF86C2752788A420CD38278002AA8
|
||||
:201BC00004BF8288002A06D1817200F07EF840688047002002BD022002BD10B5DFF83C4790
|
||||
:201BE00000B906E000F071F88068804720680C3010BD206801210182002010BD10B5DFF8F7
|
||||
:201C00001C472068C1784079DFF8182712689269904721688A7A92B1002804BF0879002821
|
||||
:201C20000DD1887858B900F050F8C068804720684179C1722068C1780173002010BD0220D5
|
||||
:201C400010BD1CB5DFF8D416096810B90220088239E0DFF8D44600202080087800227F2331
|
||||
:201C6000184215D1487A81064CBF42F0020102F0FD0121702178400654BF01F0FE0041F008
|
||||
:201C80000100207000F021F800698047204616BD00F07F03012BF9D000F07F00022812D15E
|
||||
:201CA000487900F00F0142F0010200F088FA05D500F030001028E5D12270E3E700F44050F4
|
||||
:201CC000B0F5805FF7E7002016BDDFF8600600687047F8B5DFF844060068017811F07F0123
|
||||
:201CE00004D1417A01F0DF0141724FE0022901BF41880029017900294AD1417921F08005B6
|
||||
:201D0000DFF82C460A0654F825204CBF02F0300202F44052DFF808361B789D4238D2002A67
|
||||
:201D20001CBF807A002833D0080654F825000BD500F03000102825D12846FFF7D1FA302176
|
||||
:201D40002846FFF778FA1DE000F44050B0F5805F18D148F280064BF68F7745B900F0BDFA13
|
||||
:201D60002068384080F44050304320600AE02846FFF7A4FA54F82500384080F44050304320
|
||||
:201D800044F82500FFF7A1FF406980470020F2BD0220F2BD38B5DFF884050268537923F0A6
|
||||
:201DA0008000DFF88C151C0651F820404CBF04F0300404F44054DFF868552D78A84206D2A6
|
||||
:201DC000558825B9002C1CBF927A002A01D1022032BD48F280021B0651F8203005D548F69A
|
||||
:201DE000BF74234083F0100304E04BF68F74234083F480531A4341F82020FFF766FF8069D8
|
||||
:201E00008047002032BD80B5DFF810050068417A41F020014172FFF758FFC0698047002046
|
||||
:201E200002BDDFF8F8241268538A20B98888C01A108200207047086818187047F8B5DFF892
|
||||
:201E4000DC54286800F110042688A168080018BF002E14D0A088864288BF0646304688474D
|
||||
:201E600007462088801B20806088301860800020FFF750FA324601463846FFF7BCF9DFF803
|
||||
:201E8000B464208850B1DFF8B0044FF44051018000210020FFF745FA3020308028682188F2
|
||||
:201EA000A288914228BF032101D211B105210172F1BD06210172DFF88404006880B2DFF8D4
|
||||
:201EC0008014002241F8102030203080F1BD2DE9F843DFF84844206800F110063188DFF862
|
||||
:201EE0005454002904BF007A042816D1DFF85404017801290DD1DFF84414096889B2DFF85F
|
||||
:201F00004024002342F8113030212980042703702CE007271020288028E0B6F8048088450E
|
||||
:201F200005D30427414588BF4146884600E002274046B168884781460020FFF7EAF94246BD
|
||||
:201F400001464846FFF742F941460020FFF7E9F93088A0EB08003080708840447080302045
|
||||
:201F60002880DFF8D4034FF44051018020680772BDE8F18338B5DFF8A44320684578017833
|
||||
:201F80007F22114238D1092D02D1FFF70DFE47E0052D1BD1C17880294FD28178002901BF10
|
||||
:201FA00081880029807A002847D10620DFF88C13096889B2DFF88823002342F81130DFF876
|
||||
:201FC000741330220A802168087231BD032D08D1C178012904BF8088002823D1FFF713FF52
|
||||
:201FE0001EE0012D04BFC17801291BD18188C9B9407A80060DD415E001F07F00012804D194
|
||||
:020000040800F2
|
||||
:202000000B2D0FD1FFF7FAFD0AE002280AD1012D02D1FFF75EFE03E0032D03D1FFF7BAFEE4
|
||||
:202020000028C2D02846BF49096849698847032808BF0920C7D00028B7D00820C3E738B55E
|
||||
:20204000B64D28684178B74C062913D101787F2211422AD18078012802D12068C16968E0C8
|
||||
:20206000022802D12068016A63E003281DD12068416A5EE000293DD14188002904BFC1886E
|
||||
:20208000022912D1017981B901787F22114204BF8288002A2CD001F07F02012A10D100F0B0
|
||||
:2020A00089F810B92868807A10BB28684078216809698847032845D128680921017231BD13
|
||||
:2020C00001F07F010229F0D1407900F00F0100F0700200F074F84CBF00F0300000F440507D
|
||||
:2020E0008F4B1B789942E0D2002ADED10028DCD095491EE0082905D100787F210842D4D14F
|
||||
:20210000924916E00A2902BF017801F07F010129CBD1817A0029C8D04188002901BF017962
|
||||
:202120000029C1880129C0D100F044F80028BCD187490800B9D028680022428281610020B8
|
||||
:202140008847002029680A8A4FF6FF739A4208BF092004D0022818BF002A02D10820087274
|
||||
:2021600031BD087800061ED5C88800902368009C944202D2009808820FE082420DD293F808
|
||||
:202180002C00704C824238BF002005D392FBF0F500FB152008B90120207093F82C008882CF
|
||||
:2021A000BDE8314093E60320087263484FF44051018031BD002140792268926910475C4BA8
|
||||
:2021C000000653F82100704738B55C48006880B2604931F81000400000F1804000F5C040E3
|
||||
:2021E0004E4C21680A7A092A14D010F8012B0A70216810F8012B4A70851C35F8040BFFF729
|
||||
:20220000E1F8216848802888FFF7DCF821688880A888C8802068012101722068C08810B95B
|
||||
:20222000FFF7A8FE01E0FFF70AFFBDE831403EE010B53A4C2068017A022918BF042904D19C
|
||||
:20224000FFF745FE2068007A14E0062911D14178052902BF01787F22114206D1C07800F02A
|
||||
:2022600042F8FFF732FD006A80472E48006880688047082017E010B5284C2068007A0228BD
|
||||
:2022800018BF04280ED0032818BF052804D1FFF7D5FD2068007A06E0072803D121480068D5
|
||||
:2022A000C0688047082021680872BDE8104080B500F013F819480068017A082906D11E492C
|
||||
:2022C0004FF480520A801B4910220A80007A092801D1012002BD002002BD1F4890F82C10D8
|
||||
:2022E0000020FFF725B870B50D4909780022104B48F68F760BE0D4B253F824503540254322
|
||||
:2023000045F4004545F0800543F82450521C8A42F1D340F080001149086070BDBC2C002031
|
||||
:20232000E0010020C02C0020082D0020C42C0020005C00400E2D00200C2D0020505C0040EF
|
||||
:2023400004600040172D0020431C0008911B0008DB1B000808600040D80000204C5C0040D4
|
||||
:2023600070470000F8B58478303CE4B20A2C38BF2246C478303CE4B20A2C38BF234600781A
|
||||
:202380003038C0B20A2838BF01460024534818250FF2A016271805FB014C1CF806C087F85B
|
||||
:2023A00060C005FB024C1CF806C087F890C005FB034C1CF806C087F8A8C0641C182CE9DB6E
|
||||
:2023C00000240C2201460C206043C0B200F004F8641C082CF5DBF1BD70B504460D461646E7
|
||||
:2023E000002100F04BF8761C2946F0B200F035F805460121204600F041F82946F0B2BDE817
|
||||
:2024000070402AE03749086037483C2202700968C9B2334800F09AB910B58CB000A80FF277
|
||||
:20242000DC013022FEF790FD2E2200F03CF82F4C4FF48071204600F006FA0220FEF7C4FD9A
|
||||
:202440004FF48071204600F0FCF90220FEF7BCFD2E20FFF7D7FF0CB010BD10B50C4620490A
|
||||
:2024600040220A70012203E014F8013B5354521C8242F9DBFFF7C6FF204610BD30B583B07F
|
||||
:2024800000AA0FF2A80330CB30C28DF80500012904BFB1208DF80100082200F004F80820ED
|
||||
:2024A000FFF7B0FF37BD00A90D48FEF73DBD10B500212020FFF7E2FF094C00F019F88020A3
|
||||
:2024C000FFF7A0FF01212020FFF7D8FF00F010F88020BDE8104095E700000000000000200F
|
||||
:2024E00034260020FC2C0020162D002000080140402020707F21601CFEF762BD80AE80D5CB
|
||||
:20250000805280A8800F80C880D38000804080A1808D801480DA8002808180E080D980F18E
|
||||
:2025200080DB803080A480A680AF000080B080218020807F00E010080810E00000000000B7
|
||||
:20254000000F102020100F0000000000001010F800000000000000000020203F2020000026
|
||||
:2025600000000000007008080888700000000000003028242221300000000000003008882C
|
||||
:2025800088483000000000000018202020110E00000000000000C02010F8000000000000BC
|
||||
:2025A00000070424243F24000000000000F8088888080800000000000019212020110E00AC
|
||||
:2025C0000000000000E010888818000000000000000F112020110E0000000000003808081C
|
||||
:2025E000C8380800000000000000003F000000000000000000708808088870000000000094
|
||||
:20260000001C222121221C000000000000E010080810E000000000000000312222110F0077
|
||||
:20262000000000000000000000000000000000000030300000000000000000007047424AF7
|
||||
:20264000012903D10146104600F0FBB819B90146104600F0F8B8704780B501210820FFF701
|
||||
:202660008AF8C020ADF8000014208DF8030003208DF8020000A9344800F07EF800F00EF86C
|
||||
:2026800000F055F800F056F800F057F8002100F04FF800F052F800F001F801BD00214020C6
|
||||
:2026A000CDE780B5FFF7FAFF002100F041F800F044F800F03FF800F040F800F038F800F06D
|
||||
:2026C0003CF8FFF7EBFF0520BDE80240B6E738B50446082508E000F02BF800F02EF800F0D8
|
||||
:2026E00029F800F02AF864002846451EC0B230B1FFF7D4FF20064CBF01210021EBE7FFF71A
|
||||
:20270000CDFF00F014F8FF2400F017F800F017F848B900F00FF800F010F8FFF7BFFF00F03C
|
||||
:202720000CF8012032BD641EEED1002032BD0121802084E70121402081E705207EE78021F3
|
||||
:20274000014800F077B80000000C014070B504460D461646FFF780FF7000C0B201E014F862
|
||||
:20276000010BFFF7B4FF2846451EC0B20028F6D1BDE8704095E700002DE9F0410022CC78F4
|
||||
:2027800004F00F03E40644BF8C7823430C8801250F26E7B217B3D0F800C005FA02F7BE4606
|
||||
:2027A0000EEA0408F04514D14FEA820E06FA0EF82CEA080C03FA0EFE4EEA0C0C91F803E03D
|
||||
:2027C000BEF1280F08BF476103D0BEF1480F08BF0761521C082AE0D3C0F800C0B4F5807F29
|
||||
:2027E00026D3D0F804C0002202F1080705FA07F7BE460EEA0408F04515D14FEA820E06FA47
|
||||
:202800000EF82CEA080C03FA0EFE4EEA0C0C91F803E0BEF1280F08BF476191F803E0BEF153
|
||||
:20282000480F08BF0761521C082ADDD3C0F804C0BDE8F08100228068084218BF012210468C
|
||||
:2028400070470161704741617047000080B500F0F8F88B48006800218172FEF769FC8948C0
|
||||
:20286000002141604FF40441874A1180016087480021016001BD10B58548002181728048CE
|
||||
:2028800000688449C97941720020FEF7C3FC4FF400710020FEF7C5FC20210020FEF7CBFC93
|
||||
:2028A00018210020FEF72EFD7B4C00F042F858210020FEF726FD0020FEF7F1FC0020FEF7E6
|
||||
:2028C000E2FC00210120FEF7ACFC98210120FEF718FD20210120FEF7AEFC00210120FEF71F
|
||||
:2028E000BBFC00210220FEF79CFCD8210220FEF709FD94F82C100220FEF71AFD4FF4405171
|
||||
:202900000220FEF7A9FC00210220FEF794FC00F010F80020FEF7B7FC0020FFF7E4FC5B48DA
|
||||
:20292000012101605D485E4901605E480021017010BD94F82C100020FEF7FABC50480068CF
|
||||
:20294000807A00B9704780B55048052101600120FEF7C6FC0220FEF7B1FC524800210170F1
|
||||
:2029600001BD4E4800684E4988421CBF0220FEF769BE704745480421016070477047704732
|
||||
:2029800080B53F4909680A7802F07F02212A08BFFE280BD14888002801BF88880028C888C0
|
||||
:2029A000012803D10FF28900020001D1022002BD88610020488200F03BF8002002BD80B5D1
|
||||
:2029C0002F4909680A7802F07F02212A08BFFF2815D14888002804BF888800280FD1C888D7
|
||||
:2029E00068B90120FEF77CFC0220FEF767FC2B482B4901602B4800210170002002BD022060
|
||||
:202A000002BD00290CBF0028022070472649FFF708BA2649FFF705BA19490968C978062974
|
||||
:202A200001DB00207047224A02EBC101FFF7F9B928B91348006801210182002070471D489B
|
||||
:202A400070471D4801684268806801B9704710B51A4B99700C0A1C710C0C9C71090E197251
|
||||
:202A60009A72110A1973110C9973110E19749874010A1975010C9975000E187610BD0000A5
|
||||
:202A8000BC2C0020405C0040142D0020042D0020A02C0020E42C0008D8000020742C0020E4
|
||||
:202AA00055534243942C0020C8010020D001002008010020002D0020E8F7FF1F5401002047
|
||||
:202AC0002DE9F84F0020ADF8000040F68F7848F60F7B48F28006444F444CDFF81491DFF899
|
||||
:202AE00014A14BF6BF7525E054F82010ADF80010BDF8001009040BD554F8201008EA010154
|
||||
:202B000044F820103C4901EB800050F8040C8047BDF8000000060DD599F8000054F820108F
|
||||
:202B20000BEA010144F82010344901EB800050F8040C8047606CAAF80000000452D5BAF8DF
|
||||
:202B4000000010F00F0089F80000CDD120683880388800F030007880388800F44050388033
|
||||
:202B60002068284080F4005080F0200030432060BAF80000C006206805D40BEA00002060D0
|
||||
:202B8000FFF756FB16E0ADF80000BDF80000000506D5206808EA00002060FFF715FB09E0D5
|
||||
:202BA000BDF800000004C5D5206808EA00002060FFF761FB206828403988C90448BF80F47D
|
||||
:202BC00080503988890448BF80F400507988C90648BF80F010007988890648BF80F020008E
|
||||
:202BE00030432060BDE8F18F0C2D0020005C0040182D0020122D00208C01002070010020C6
|
||||
:202C00002E48016841F00101016041682C4A1140416001682B4A11400160016821F4802181
|
||||
:202C20000160416821F4FE0141604FF41F0181600021026842F4803202600268491C920358
|
||||
:202C400002D4B1F5A06FF8D10168890330D51E490A6842F010020A600A68920892000A6097
|
||||
:202C60000A6842F002020A604168416041684160416841F480614160416821F47C11416062
|
||||
:202C8000416841F4E8114160016841F08071016001688901FCD541688908890041604168FF
|
||||
:202CA00041F002014160416801F00C010829FAD106484FF000610160704700000010024044
|
||||
:202CC0000000FFF8FFFFF6FE0020024008ED00E0120100020000004083042057000201027C
|
||||
:202CE0000301000009022000010100C0320904000002080650040705810240000007050263
|
||||
:202D000002400000040309042603530054004D006900630072006F0065006C0065006300FA
|
||||
:202D2000740072006F006E0069006300730000002603530054004D003300320020004D00A2
|
||||
:202D40006100730073002000530074006F007200610067006500000010035300540020005D
|
||||
:202D60004D00610073007300FEF760F9FEF7BCF91A48006880070ED5FEF773F8184801686A
|
||||
:202D8000184A1140B1F1005F04D144680068FEF749F9A047FEE70A20FEF716F90020FEF750
|
||||
:202DA00020F9C820FEF710F90120FEF71AF90020FEF780F9FEF7D4F9FDF7BAF9FFF72CFBD7
|
||||
:202DC000FFF775FB0FF22000FFF7CCFAFEF71EFDFDF7A8FAFDF7B7FBF8E70000080C014030
|
||||
:202DE000004000080000FF2F332E34350000000070B50D4C0D4D286820800D4E20883188CF
|
||||
:202E00000840400505D50B48406880474FF6FF302860208831880840000444BFBDE8704088
|
||||
:202E2000FFF74EBE70BD0000122D0020445C0040142D0020D8000020FEF7CABAFEF7E9BABA
|
||||
:202E400010B5074979441831064C7C44163404E0081D0A68511888470146A142F8D110BD88
|
||||
:202E6000080000002800000037E1FFFF302B0000EC0100200000000083E0FFFFEC01000056
|
||||
:202E80009401000000000020000000007047FEE7FEE7FEE7FEE77047704770477047FFF760
|
||||
:202EA000A7BF000000F009F8002801D0FFF7C8FF0020FFF759FF00F002F80120704700F0E5
|
||||
:202EC00001B800000746384600F002F8FBE70000C046C046024A11001820ABBEFBE700BFF7
|
||||
:202EE000260002000148804701480047012C0008F52E0008C046C046C046C046FFF7D2FFCB
|
||||
:202F0000FFF7C4BFFFF7C3BFFFF7C2BFFFF7C1BFFFF7C0BFFFF7BFBFFFF7BEBFFFF7BDBF05
|
||||
:202F2000FFF7BCBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF3B
|
||||
:202F4000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD9
|
||||
:202F6000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF793BFFFF7FEBFFFF7FEBF24
|
||||
:202F8000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF99
|
||||
:202FA000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF79
|
||||
:202FC000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF59
|
||||
:202FE000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF39
|
||||
:20300000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF04FC040404040C0810E000001D
|
||||
:20302000407F404040406020180F000004FC8484848484E40C100000407F40000000000394
|
||||
:203040000000000004FC04000000000004FC0400001F204040404040201F000000000000AA
|
||||
:20306000606000000000000000000000606000000000000000780404040404887800000044
|
||||
:20308000006050484442414070000000000000000000000000000000006060000000000001
|
||||
:2030A0000000000000E018080404040818E00000000F302040404020300F0000000000087E
|
||||
:2030C00008FC00000000000000000040407F4040400000000000000000000000000000002D
|
||||
:2030E0000000000000000000000000004D280008772800087D2900087F290008812900089C
|
||||
:20310000BF290008032A00080D2A0008132A0008192A00080000000040000000042D000842
|
||||
:2031200004000000082D000826000000302D000826000000540100201A000000582D000881
|
||||
:2031400010000000612300083D2900086123000861230008612300086329000861230008A1
|
||||
:2031600061230008752900081A03530054004D003300320031003000000000000000000046
|
||||
:2031800000000000392E000861230008612300086123000861230008612300086123000878
|
||||
:2031A000612300083D2E0008612300086123000861230008612300086123000870000000E4
|
||||
:2031C0000000000A000000000000000000000000000000080000000002000000D02C0008D7
|
||||
:2031E00012000000E42C000820000000000600000000000003010000030000000100000077
|
||||
:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE
|
||||
:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE
|
||||
:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E
|
||||
:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E
|
||||
:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E
|
||||
:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E
|
||||
:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E
|
||||
:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE
|
||||
:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD
|
||||
:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD
|
||||
:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D
|
||||
:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D
|
||||
:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D
|
||||
:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D
|
||||
:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D
|
||||
:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED
|
||||
:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC
|
||||
:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC
|
||||
:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C
|
||||
:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C
|
||||
:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C
|
||||
:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C
|
||||
:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C
|
||||
:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC
|
||||
:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB
|
||||
:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB
|
||||
:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B
|
||||
:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B
|
||||
:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B
|
||||
:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B
|
||||
:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B
|
||||
:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB
|
||||
:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA
|
||||
:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA
|
||||
:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A
|
||||
:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A
|
||||
:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A
|
||||
:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A
|
||||
:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A
|
||||
:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA
|
||||
:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9
|
||||
:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9
|
||||
:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89
|
||||
:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69
|
||||
:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49
|
||||
:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29
|
||||
:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09
|
||||
:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9
|
||||
:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8
|
||||
:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8
|
||||
:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88
|
||||
:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68
|
||||
:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48
|
||||
:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28
|
||||
:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08
|
||||
:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8
|
||||
:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7
|
||||
:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7
|
||||
:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87
|
||||
:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67
|
||||
:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47
|
||||
:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27
|
||||
:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07
|
||||
:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7
|
||||
:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6
|
||||
:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6
|
||||
:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86
|
||||
:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66
|
||||
:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46
|
||||
:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26
|
||||
:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06
|
||||
:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6
|
||||
:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5
|
||||
:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5
|
||||
:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85
|
||||
:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65
|
||||
:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45
|
||||
:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25
|
||||
:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05
|
||||
:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5
|
||||
:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4
|
||||
:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4
|
||||
:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84
|
||||
:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64
|
||||
:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44
|
||||
:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24
|
||||
:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04
|
||||
:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4
|
||||
:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3
|
||||
:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3
|
||||
:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83
|
||||
:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63
|
||||
:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43
|
||||
:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23
|
||||
:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03
|
||||
:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3
|
||||
:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2
|
||||
:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2
|
||||
:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82
|
||||
:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62
|
||||
:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42
|
||||
:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22
|
||||
:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02
|
||||
:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2
|
||||
:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1
|
||||
:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1
|
||||
:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81
|
||||
:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61
|
||||
:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41
|
||||
:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21
|
||||
:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01
|
||||
:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1
|
||||
:00000001FF
|
||||
348
Development Resources/TS80/TS80.ioc
Normal file
348
Development Resources/TS80/TS80.ioc
Normal file
@@ -0,0 +1,348 @@
|
||||
#MicroXplorer Configuration settings - do not modify
|
||||
ADC1.Channel-31\#ChannelRegularConversion=ADC_CHANNEL_4
|
||||
ADC1.Channel-32\#ChannelInjectedConversion=ADC_CHANNEL_2
|
||||
ADC1.Channel-33\#ChannelInjectedConversion=ADC_CHANNEL_2
|
||||
ADC1.Channel-34\#ChannelInjectedConversion=ADC_CHANNEL_2
|
||||
ADC1.Channel-35\#ChannelInjectedConversion=ADC_CHANNEL_2
|
||||
ADC1.ContinuousConvMode=DISABLE
|
||||
ADC1.DataAlign=ADC_DATAALIGN_RIGHT
|
||||
ADC1.DiscontinuousConvMode=DISABLE
|
||||
ADC1.EnableAnalogWatchDog=false
|
||||
ADC1.EnableRegularConversion=ENABLE
|
||||
ADC1.ExternalTrigConv=ADC_SOFTWARE_START
|
||||
ADC1.ExternalTrigInjecConv=ADC_INJECTED_SOFTWARE_START
|
||||
ADC1.IPParameters=Rank-31\#ChannelRegularConversion,Channel-31\#ChannelRegularConversion,SamplingTime-31\#ChannelRegularConversion,NbrOfConversionFlag,master,Rank-32\#ChannelInjectedConversion,Channel-32\#ChannelInjectedConversion,SamplingTime-32\#ChannelInjectedConversion,InjectedOffset-32\#ChannelInjectedConversion,Rank-33\#ChannelInjectedConversion,Channel-33\#ChannelInjectedConversion,SamplingTime-33\#ChannelInjectedConversion,InjectedOffset-33\#ChannelInjectedConversion,Rank-34\#ChannelInjectedConversion,Channel-34\#ChannelInjectedConversion,SamplingTime-34\#ChannelInjectedConversion,InjectedOffset-34\#ChannelInjectedConversion,Rank-35\#ChannelInjectedConversion,Channel-35\#ChannelInjectedConversion,SamplingTime-35\#ChannelInjectedConversion,InjectedOffset-35\#ChannelInjectedConversion,InjNumberOfConversion,DataAlign,ScanConvMode,ContinuousConvMode,DiscontinuousConvMode,EnableRegularConversion,NbrOfConversion,ExternalTrigConv,ExternalTrigInjecConv,InjectedConvMode,EnableAnalogWatchDog
|
||||
ADC1.InjNumberOfConversion=4
|
||||
ADC1.InjectedConvMode=None
|
||||
ADC1.InjectedOffset-32\#ChannelInjectedConversion=0
|
||||
ADC1.InjectedOffset-33\#ChannelInjectedConversion=0
|
||||
ADC1.InjectedOffset-34\#ChannelInjectedConversion=0
|
||||
ADC1.InjectedOffset-35\#ChannelInjectedConversion=0
|
||||
ADC1.NbrOfConversion=1
|
||||
ADC1.NbrOfConversionFlag=1
|
||||
ADC1.Rank-31\#ChannelRegularConversion=1
|
||||
ADC1.Rank-32\#ChannelInjectedConversion=1
|
||||
ADC1.Rank-33\#ChannelInjectedConversion=2
|
||||
ADC1.Rank-34\#ChannelInjectedConversion=3
|
||||
ADC1.Rank-35\#ChannelInjectedConversion=4
|
||||
ADC1.SamplingTime-31\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC1.SamplingTime-32\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC1.SamplingTime-33\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC1.SamplingTime-34\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC1.SamplingTime-35\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC1.ScanConvMode=ADC_SCAN_ENABLE
|
||||
ADC1.master=1
|
||||
ADC2.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_3
|
||||
ADC2.Channel-1\#ChannelInjectedConversion=ADC_CHANNEL_3
|
||||
ADC2.Channel-2\#ChannelInjectedConversion=ADC_CHANNEL_3
|
||||
ADC2.Channel-3\#ChannelInjectedConversion=ADC_CHANNEL_3
|
||||
ADC2.Channel-4\#ChannelInjectedConversion=ADC_CHANNEL_3
|
||||
ADC2.ContinuousConvMode=DISABLE
|
||||
ADC2.DataAlign=ADC_DATAALIGN_RIGHT
|
||||
ADC2.DiscontinuousConvMode=DISABLE
|
||||
ADC2.EnableAnalogWatchDog=false
|
||||
ADC2.EnableRegularConversion=ENABLE
|
||||
ADC2.ExternalTrigConv=ADC_SOFTWARE_START
|
||||
ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,Rank-1\#ChannelInjectedConversion,Channel-1\#ChannelInjectedConversion,SamplingTime-1\#ChannelInjectedConversion,InjectedOffset-1\#ChannelInjectedConversion,Rank-2\#ChannelInjectedConversion,Channel-2\#ChannelInjectedConversion,SamplingTime-2\#ChannelInjectedConversion,InjectedOffset-2\#ChannelInjectedConversion,Rank-3\#ChannelInjectedConversion,Channel-3\#ChannelInjectedConversion,SamplingTime-3\#ChannelInjectedConversion,InjectedOffset-3\#ChannelInjectedConversion,Rank-4\#ChannelInjectedConversion,Channel-4\#ChannelInjectedConversion,SamplingTime-4\#ChannelInjectedConversion,InjectedOffset-4\#ChannelInjectedConversion,InjNumberOfConversion,DataAlign,ScanConvMode,ContinuousConvMode,DiscontinuousConvMode,EnableRegularConversion,NbrOfConversion,ExternalTrigConv,EnableAnalogWatchDog
|
||||
ADC2.InjNumberOfConversion=0
|
||||
ADC2.InjectedOffset-1\#ChannelInjectedConversion=0
|
||||
ADC2.InjectedOffset-2\#ChannelInjectedConversion=0
|
||||
ADC2.InjectedOffset-3\#ChannelInjectedConversion=0
|
||||
ADC2.InjectedOffset-4\#ChannelInjectedConversion=0
|
||||
ADC2.NbrOfConversion=1
|
||||
ADC2.NbrOfConversionFlag=1
|
||||
ADC2.Rank-0\#ChannelRegularConversion=1
|
||||
ADC2.Rank-1\#ChannelInjectedConversion=1
|
||||
ADC2.Rank-2\#ChannelInjectedConversion=2
|
||||
ADC2.Rank-3\#ChannelInjectedConversion=3
|
||||
ADC2.Rank-4\#ChannelInjectedConversion=4
|
||||
ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC2.SamplingTime-1\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC2.SamplingTime-2\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC2.SamplingTime-3\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC2.SamplingTime-4\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC2.ScanConvMode=ADC_SCAN_DISABLE
|
||||
Dma.I2C1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
|
||||
Dma.I2C1_RX.0.Instance=DMA1_Channel7
|
||||
Dma.I2C1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.I2C1_RX.0.MemInc=DMA_MINC_ENABLE
|
||||
Dma.I2C1_RX.0.Mode=DMA_NORMAL
|
||||
Dma.I2C1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||
Dma.I2C1_RX.0.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.I2C1_RX.0.Priority=DMA_PRIORITY_MEDIUM
|
||||
Dma.I2C1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
||||
Dma.I2C1_TX.1.Direction=DMA_MEMORY_TO_PERIPH
|
||||
Dma.I2C1_TX.1.Instance=DMA1_Channel6
|
||||
Dma.I2C1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.I2C1_TX.1.MemInc=DMA_MINC_ENABLE
|
||||
Dma.I2C1_TX.1.Mode=DMA_NORMAL
|
||||
Dma.I2C1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||
Dma.I2C1_TX.1.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.I2C1_TX.1.Priority=DMA_PRIORITY_MEDIUM
|
||||
Dma.I2C1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
||||
Dma.Request0=I2C1_RX
|
||||
Dma.Request1=I2C1_TX
|
||||
Dma.RequestsNb=2
|
||||
FREERTOS.FootprintOK=true
|
||||
FREERTOS.INCLUDE_vTaskDelete=0
|
||||
FREERTOS.IPParameters=Tasks01,configTICK_RATE_HZ,configMAX_PRIORITIES,configMINIMAL_STACK_SIZE,configTOTAL_HEAP_SIZE,INCLUDE_vTaskDelete,FootprintOK
|
||||
FREERTOS.Tasks01=GUITask,0,512,StartGUITask,Default,NULL,Dynamic,NULL,NULL;PIDTask,0,256,StartPIDTask,Default,NULL,Dynamic,NULL,NULL;ROTTask,-2,256,StartRotationTask,Default,NULL,Dynamic,NULL,NULL
|
||||
FREERTOS.configMAX_PRIORITIES=4
|
||||
FREERTOS.configMINIMAL_STACK_SIZE=256
|
||||
FREERTOS.configTICK_RATE_HZ=100
|
||||
FREERTOS.configTOTAL_HEAP_SIZE=10240
|
||||
File.Version=6
|
||||
I2C1.DutyCycle=I2C_DUTYCYCLE_2
|
||||
I2C1.I2C_Mode=I2C_Fast
|
||||
I2C1.IPParameters=I2C_Mode,DutyCycle
|
||||
IWDG.IPParameters=Prescaler
|
||||
IWDG.Prescaler=IWDG_PRESCALER_256
|
||||
KeepUserPlacement=false
|
||||
Mcu.Family=STM32F1
|
||||
Mcu.IP0=ADC1
|
||||
Mcu.IP1=ADC2
|
||||
Mcu.IP10=TIM3
|
||||
Mcu.IP2=DMA
|
||||
Mcu.IP3=FREERTOS
|
||||
Mcu.IP4=I2C1
|
||||
Mcu.IP5=IWDG
|
||||
Mcu.IP6=NVIC
|
||||
Mcu.IP7=RCC
|
||||
Mcu.IP8=SYS
|
||||
Mcu.IP9=TIM2
|
||||
Mcu.IPNb=11
|
||||
Mcu.Name=STM32F103T(8-B)Ux
|
||||
Mcu.Package=VFQFPN36
|
||||
Mcu.Pin0=PA0-WKUP
|
||||
Mcu.Pin1=PA2
|
||||
Mcu.Pin10=PA11
|
||||
Mcu.Pin11=PA12
|
||||
Mcu.Pin12=PA13
|
||||
Mcu.Pin13=PA14
|
||||
Mcu.Pin14=PA15
|
||||
Mcu.Pin15=PB3
|
||||
Mcu.Pin16=PB4
|
||||
Mcu.Pin17=PB5
|
||||
Mcu.Pin18=PB6
|
||||
Mcu.Pin19=PB7
|
||||
Mcu.Pin2=PA3
|
||||
Mcu.Pin20=VP_FREERTOS_VS_ENABLE
|
||||
Mcu.Pin21=VP_IWDG_VS_IWDG
|
||||
Mcu.Pin22=VP_SYS_VS_ND
|
||||
Mcu.Pin23=VP_SYS_VS_tim1
|
||||
Mcu.Pin24=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin25=VP_TIM2_VS_no_output1
|
||||
Mcu.Pin26=VP_TIM2_VS_no_output3
|
||||
Mcu.Pin27=VP_TIM3_VS_ClockSourceINT
|
||||
Mcu.Pin28=VP_TIM3_VS_no_output4
|
||||
Mcu.Pin3=PA4
|
||||
Mcu.Pin4=PA6
|
||||
Mcu.Pin5=PB0
|
||||
Mcu.Pin6=PB1
|
||||
Mcu.Pin7=PA8
|
||||
Mcu.Pin8=PA9
|
||||
Mcu.Pin9=PA10
|
||||
Mcu.PinsNb=29
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
Mcu.UserName=STM32F103T8Ux
|
||||
MxCube.Version=4.26.0
|
||||
MxDb.Version=DB.4.0.260
|
||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:true
|
||||
NVIC.DMA1_Channel6_IRQn=true\:5\:0\:false\:false\:true\:true\:true
|
||||
NVIC.DMA1_Channel7_IRQn=true\:5\:0\:false\:false\:true\:true\:true
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:true
|
||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:true
|
||||
NVIC.I2C1_ER_IRQn=true\:5\:0\:false\:false\:true\:true\:true
|
||||
NVIC.I2C1_EV_IRQn=true\:5\:0\:false\:false\:true\:true\:true
|
||||
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:true
|
||||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:true
|
||||
NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:true
|
||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:true
|
||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:true\:true
|
||||
NVIC.TIM1_UP_IRQn=true\:0\:0\:false\:false\:true\:false\:true
|
||||
NVIC.TimeBase=TIM1_UP_IRQn
|
||||
NVIC.TimeBaseIP=TIM1
|
||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:true
|
||||
PA0-WKUP.GPIOParameters=GPIO_Label
|
||||
PA0-WKUP.GPIO_Label=RM
|
||||
PA0-WKUP.Locked=true
|
||||
PA0-WKUP.Signal=GPIO_Output
|
||||
PA10.GPIOParameters=GPIO_Label
|
||||
PA10.GPIO_Label=QC_DM_11K
|
||||
PA10.Locked=true
|
||||
PA10.Signal=GPIO_Output
|
||||
PA11.GPIOParameters=GPIO_Label
|
||||
PA11.GPIO_Label=USB_DM
|
||||
PA11.Locked=true
|
||||
PA11.Signal=GPIO_Analog
|
||||
PA12.GPIOParameters=GPIO_Label
|
||||
PA12.GPIO_Label=USB_DP
|
||||
PA12.Locked=true
|
||||
PA12.Signal=GPIO_Analog
|
||||
PA13.GPIOParameters=GPIO_Label
|
||||
PA13.GPIO_Label=QC_DP_SENSE
|
||||
PA13.Locked=true
|
||||
PA13.Signal=GPIO_Input
|
||||
PA14.GPIOParameters=GPIO_Label
|
||||
PA14.GPIO_Label=QC_DM_SENSE
|
||||
PA14.Locked=true
|
||||
PA14.Signal=GPIO_Input
|
||||
PA15.GPIOParameters=GPIO_Label
|
||||
PA15.GPIO_Label=OLED_RESET
|
||||
PA15.Locked=true
|
||||
PA15.Signal=GPIO_Output
|
||||
PA2.GPIOParameters=GPIO_Label
|
||||
PA2.GPIO_Label=ADC_VIN
|
||||
PA2.Locked=true
|
||||
PA2.Signal=ADCx_IN2
|
||||
PA3.GPIOParameters=GPIO_Label
|
||||
PA3.GPIO_Label=ADC_TIP
|
||||
PA3.Locked=true
|
||||
PA3.Signal=ADCx_IN3
|
||||
PA4.GPIOParameters=GPIO_Label
|
||||
PA4.GPIO_Label=ADC_TMP36
|
||||
PA4.Locked=true
|
||||
PA4.Signal=ADCx_IN4
|
||||
PA6.GPIOParameters=GPIO_Label
|
||||
PA6.GPIO_Label=PWM Out
|
||||
PA6.Locked=true
|
||||
PA6.Signal=S_TIM3_CH1
|
||||
PA8.GPIOParameters=GPIO_Label
|
||||
PA8.GPIO_Label=QC_DM_3K
|
||||
PA8.Locked=true
|
||||
PA8.Signal=GPIO_Output
|
||||
PA9.GPIOParameters=GPIO_Label
|
||||
PA9.GPIO_Label=MODEL_SEL
|
||||
PA9.Locked=true
|
||||
PA9.Signal=GPIO_Input
|
||||
PB0.GPIOParameters=GPIO_Label
|
||||
PB0.GPIO_Label=KEY_A
|
||||
PB0.Locked=true
|
||||
PB0.Signal=GPIO_Input
|
||||
PB1.GPIOParameters=GPIO_Label
|
||||
PB1.GPIO_Label=KEY_B
|
||||
PB1.Locked=true
|
||||
PB1.Signal=GPIO_Input
|
||||
PB3.GPIOParameters=GPIO_Label
|
||||
PB3.GPIO_Label=QC_DP_3K
|
||||
PB3.Locked=true
|
||||
PB3.Signal=GPIO_Output
|
||||
PB4.GPIOParameters=GPIO_Label
|
||||
PB4.GPIO_Label=IMU_INT2
|
||||
PB4.Locked=true
|
||||
PB4.Signal=GPXTI4
|
||||
PB5.GPIOParameters=GPIO_Label
|
||||
PB5.GPIO_Label=IMU_INT1
|
||||
PB5.Locked=true
|
||||
PB5.Signal=GPXTI5
|
||||
PB6.GPIOParameters=GPIO_Label
|
||||
PB6.GPIO_Label=SCL
|
||||
PB6.Mode=I2C
|
||||
PB6.Signal=I2C1_SCL
|
||||
PB7.GPIOParameters=GPIO_Label
|
||||
PB7.GPIO_Label=SDA
|
||||
PB7.Mode=I2C
|
||||
PB7.Signal=I2C1_SDA
|
||||
PCC.Checker=false
|
||||
PCC.Line=STM32F103
|
||||
PCC.MCU=STM32F103T(8-B)Ux
|
||||
PCC.PartNumber=STM32F103T8Ux
|
||||
PCC.Seq0=0
|
||||
PCC.Series=STM32F1
|
||||
PCC.Temperature=25
|
||||
PCC.Vdd=3.3
|
||||
PinOutPanel.RotationAngle=0
|
||||
ProjectManager.AskForMigrate=true
|
||||
ProjectManager.BackupPrevious=false
|
||||
ProjectManager.CompilerOptimize=3
|
||||
ProjectManager.ComputerToolchain=false
|
||||
ProjectManager.CoupleFile=false
|
||||
ProjectManager.CustomerFirmwarePackage=
|
||||
ProjectManager.DefaultFWLocation=true
|
||||
ProjectManager.DeletePrevious=true
|
||||
ProjectManager.DeviceId=STM32F103T8Ux
|
||||
ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.6.1
|
||||
ProjectManager.FreePins=true
|
||||
ProjectManager.HalAssertFull=false
|
||||
ProjectManager.HeapSize=0x200
|
||||
ProjectManager.KeepUserCode=true
|
||||
ProjectManager.LastFirmware=true
|
||||
ProjectManager.LibraryCopy=1
|
||||
ProjectManager.MainLocation=Src
|
||||
ProjectManager.PreviousToolchain=SW4STM32
|
||||
ProjectManager.ProjectBuild=false
|
||||
ProjectManager.ProjectFileName=TS80.ioc
|
||||
ProjectManager.ProjectName=TS80
|
||||
ProjectManager.StackSize=0x400
|
||||
ProjectManager.TargetToolchain=SW4STM32
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UnderRoot=false
|
||||
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_I2C1_Init-I2C1-false-HAL-true,4-SystemClock_Config-RCC-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_IWDG_Init-IWDG-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_ADC1_Init-ADC1-false-HAL-true,9-MX_ADC2_Init-ADC2-false-HAL-true
|
||||
RCC.ADCFreqValue=8000000
|
||||
RCC.ADCPresc=RCC_ADCPCLK2_DIV8
|
||||
RCC.AHBFreq_Value=64000000
|
||||
RCC.APB1CLKDivider=RCC_HCLK_DIV16
|
||||
RCC.APB1Freq_Value=4000000
|
||||
RCC.APB1TimFreq_Value=8000000
|
||||
RCC.APB2Freq_Value=64000000
|
||||
RCC.APB2TimFreq_Value=64000000
|
||||
RCC.FCLKCortexFreq_Value=64000000
|
||||
RCC.FamilyName=M
|
||||
RCC.HCLKFreq_Value=64000000
|
||||
RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler
|
||||
RCC.MCOFreq_Value=64000000
|
||||
RCC.PLLCLKFreq_Value=64000000
|
||||
RCC.PLLMCOFreq_Value=32000000
|
||||
RCC.PLLMUL=RCC_PLL_MUL16
|
||||
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSI_DIV2
|
||||
RCC.SYSCLKFreq_VALUE=64000000
|
||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||
RCC.TimSysFreq_Value=64000000
|
||||
RCC.USBFreq_Value=42666666.666666664
|
||||
RCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5
|
||||
SH.ADCx_IN2.0=ADC1_IN2,IN2
|
||||
SH.ADCx_IN2.ConfNb=1
|
||||
SH.ADCx_IN3.0=ADC1_IN3,IN3
|
||||
SH.ADCx_IN3.1=ADC2_IN3,IN3
|
||||
SH.ADCx_IN3.ConfNb=2
|
||||
SH.ADCx_IN4.0=ADC1_IN4,IN4
|
||||
SH.ADCx_IN4.ConfNb=1
|
||||
SH.GPXTI4.0=GPIO_EXTI4
|
||||
SH.GPXTI4.ConfNb=1
|
||||
SH.GPXTI5.0=GPIO_EXTI5
|
||||
SH.GPXTI5.ConfNb=1
|
||||
SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1
|
||||
SH.S_TIM3_CH1.ConfNb=1
|
||||
TIM2.Channel-PWM\ Generation1\ No\ Output=TIM_CHANNEL_1
|
||||
TIM2.Channel-PWM\ Generation3\ No\ Output=TIM_CHANNEL_3
|
||||
TIM2.IPParameters=Channel-PWM Generation1 No Output,Channel-PWM Generation3 No Output
|
||||
TIM3.Channel-Output\ Compare4\ No\ Output=TIM_CHANNEL_4
|
||||
TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||
TIM3.ClockDivision=TIM_CLOCKDIVISION_DIV4
|
||||
TIM3.IPParameters=Channel-PWM Generation1 CH1,OCFastMode_PWM-PWM Generation1 CH1,ClockDivision,Prescaler,Period,Channel-Output Compare4 No Output,OCMode_4,Pulse-Output Compare4 No Output
|
||||
TIM3.OCFastMode_PWM-PWM\ Generation1\ CH1=TIM_OCFAST_ENABLE
|
||||
TIM3.OCMode_4=TIM_OCMODE_ACTIVE
|
||||
TIM3.Period=65535
|
||||
TIM3.Prescaler=2000
|
||||
TIM3.Pulse-Output\ Compare4\ No\ Output=65000
|
||||
VP_FREERTOS_VS_ENABLE.Mode=Enabled
|
||||
VP_FREERTOS_VS_ENABLE.Signal=FREERTOS_VS_ENABLE
|
||||
VP_IWDG_VS_IWDG.Mode=IWDG_Activate
|
||||
VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG
|
||||
VP_SYS_VS_ND.Mode=No_Debug
|
||||
VP_SYS_VS_ND.Signal=SYS_VS_ND
|
||||
VP_SYS_VS_tim1.Mode=TIM1
|
||||
VP_SYS_VS_tim1.Signal=SYS_VS_tim1
|
||||
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||
VP_TIM2_VS_no_output1.Mode=PWM Generation1 No Output
|
||||
VP_TIM2_VS_no_output1.Signal=TIM2_VS_no_output1
|
||||
VP_TIM2_VS_no_output3.Mode=PWM Generation3 No Output
|
||||
VP_TIM2_VS_no_output3.Signal=TIM2_VS_no_output3
|
||||
VP_TIM3_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
|
||||
VP_TIM3_VS_no_output4.Mode=Output Compare4 No Output
|
||||
VP_TIM3_VS_no_output4.Signal=TIM3_VS_no_output4
|
||||
board=TS100
|
||||
0
Translation Editor/make_translation.py
Executable file → Normal file
0
Translation Editor/make_translation.py
Executable file → Normal file
@@ -220,5 +220,13 @@
|
||||
],
|
||||
"desc": "Advanced calibration using thermocouple on the tip"
|
||||
}
|
||||
"PowerInput": {
|
||||
"text": "PWRW",
|
||||
"text2": [
|
||||
"Power",
|
||||
"Wattage"
|
||||
],
|
||||
"desc": "Power Wattage of the power adapter used"
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,227 +1,232 @@
|
||||
var def =
|
||||
{
|
||||
"messages": [
|
||||
{
|
||||
"id": "SettingsCalibrationDone"
|
||||
},
|
||||
{
|
||||
"id": "SettingsCalibrationWarning"
|
||||
},
|
||||
{
|
||||
"id": "SettingsResetWarning"
|
||||
},
|
||||
{
|
||||
"id": "UVLOWarningString",
|
||||
"maxLen": 8
|
||||
},
|
||||
{
|
||||
"id": "UndervoltageString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id": "InputVoltageString",
|
||||
"maxLen": 11,
|
||||
"note": "Preferably end with a space"
|
||||
},
|
||||
{
|
||||
"id": "WarningTipTempString",
|
||||
"maxLen": 12,
|
||||
"note": "Preferably end with a space"
|
||||
},
|
||||
{
|
||||
"id": "BadTipString",
|
||||
"maxLen": 8
|
||||
},
|
||||
{
|
||||
"id": "SleepingSimpleString",
|
||||
"maxLen": 4
|
||||
},
|
||||
{
|
||||
"id": "SleepingAdvancedString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id": "WarningSimpleString",
|
||||
"maxLen": 4
|
||||
},
|
||||
{
|
||||
"id": "WarningAdvancedString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id": "SleepingTipAdvancedString",
|
||||
"maxLen": 6
|
||||
},
|
||||
{
|
||||
"id": "IdleTipString",
|
||||
"lenSum":
|
||||
{
|
||||
"fields": ["IdleTipString", "IdleSetString"],
|
||||
"maxLen": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "IdleSetString",
|
||||
"lenSum":
|
||||
{
|
||||
"fields": ["IdleTipString", "IdleSetString"],
|
||||
"maxLen": 10
|
||||
},
|
||||
"note": "Preferably start with a space"
|
||||
},
|
||||
{
|
||||
"id": "TipDisconnectedString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id" :"SolderingAdvancedPowerPrompt",
|
||||
"maxLen": null
|
||||
},
|
||||
{
|
||||
"id" :"OffString",
|
||||
"maxLen": 3
|
||||
}
|
||||
],
|
||||
"characters": [
|
||||
{
|
||||
"id": "SettingRightChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingLeftChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingAutoChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingFastChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingSlowChar",
|
||||
"len": 1
|
||||
}
|
||||
],
|
||||
"menuGroups": [
|
||||
{
|
||||
"id": "SolderingMenu",
|
||||
"maxLen": 11
|
||||
},
|
||||
{
|
||||
"id": "PowerSavingMenu",
|
||||
"maxLen": 11
|
||||
},
|
||||
{
|
||||
"id": "UIMenu",
|
||||
"maxLen": 11
|
||||
},
|
||||
{
|
||||
"id": "AdvancedMenu",
|
||||
"maxLen": 11
|
||||
}
|
||||
],
|
||||
"menuOptions": [
|
||||
{
|
||||
"id": "PowerSource",
|
||||
"maxLen": 5,
|
||||
"maxLen2": 11
|
||||
},
|
||||
{
|
||||
"id": "SleepTemperature",
|
||||
"maxLen": 4,
|
||||
"maxLen2": 9
|
||||
},
|
||||
{
|
||||
"id": "SleepTimeout",
|
||||
"maxLen": 4,
|
||||
"maxLen2": 9
|
||||
},
|
||||
{
|
||||
"id": "ShutdownTimeout",
|
||||
"maxLen": 5,
|
||||
"maxLen2": 11
|
||||
},
|
||||
{
|
||||
"id": "MotionSensitivity",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "TemperatureUnit",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "AdvancedIdle",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "DisplayRotation",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "BoostEnabled",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "BoostTemperature",
|
||||
"maxLen": 4,
|
||||
"maxLen2": 9
|
||||
},
|
||||
{
|
||||
"id": "AutoStart",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "CooldownBlink",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "TemperatureCalibration",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "SettingsReset",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "VoltageCalibration",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "AdvancedSoldering",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "ScrollingSpeed",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 11
|
||||
},
|
||||
{
|
||||
"id": "TipModel",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "SimpleCalibrationMode",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "AdvancedCalibrationMode",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
}
|
||||
]
|
||||
}
|
||||
var def =
|
||||
{
|
||||
"messages": [
|
||||
{
|
||||
"id": "SettingsCalibrationDone"
|
||||
},
|
||||
{
|
||||
"id": "SettingsCalibrationWarning"
|
||||
},
|
||||
{
|
||||
"id": "SettingsResetWarning"
|
||||
},
|
||||
{
|
||||
"id": "UVLOWarningString",
|
||||
"maxLen": 8
|
||||
},
|
||||
{
|
||||
"id": "UndervoltageString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id": "InputVoltageString",
|
||||
"maxLen": 11,
|
||||
"note": "Preferably end with a space"
|
||||
},
|
||||
{
|
||||
"id": "WarningTipTempString",
|
||||
"maxLen": 12,
|
||||
"note": "Preferably end with a space"
|
||||
},
|
||||
{
|
||||
"id": "BadTipString",
|
||||
"maxLen": 8
|
||||
},
|
||||
{
|
||||
"id": "SleepingSimpleString",
|
||||
"maxLen": 4
|
||||
},
|
||||
{
|
||||
"id": "SleepingAdvancedString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id": "WarningSimpleString",
|
||||
"maxLen": 4
|
||||
},
|
||||
{
|
||||
"id": "WarningAdvancedString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id": "SleepingTipAdvancedString",
|
||||
"maxLen": 6
|
||||
},
|
||||
{
|
||||
"id": "IdleTipString",
|
||||
"lenSum":
|
||||
{
|
||||
"fields": ["IdleTipString", "IdleSetString"],
|
||||
"maxLen": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "IdleSetString",
|
||||
"lenSum":
|
||||
{
|
||||
"fields": ["IdleTipString", "IdleSetString"],
|
||||
"maxLen": 10
|
||||
},
|
||||
"note": "Preferably start with a space"
|
||||
},
|
||||
{
|
||||
"id": "TipDisconnectedString",
|
||||
"maxLen": 16
|
||||
},
|
||||
{
|
||||
"id": "SolderingAdvancedPowerPrompt",
|
||||
"maxLen": null
|
||||
},
|
||||
{
|
||||
"id": "OffString",
|
||||
"maxLen": 3
|
||||
}
|
||||
],
|
||||
"characters": [
|
||||
{
|
||||
"id": "SettingRightChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingLeftChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingAutoChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingFastChar",
|
||||
"len": 1
|
||||
},
|
||||
{
|
||||
"id": "SettingSlowChar",
|
||||
"len": 1
|
||||
}
|
||||
],
|
||||
"menuGroups": [
|
||||
{
|
||||
"id": "SolderingMenu",
|
||||
"maxLen": 11
|
||||
},
|
||||
{
|
||||
"id": "PowerSavingMenu",
|
||||
"maxLen": 11
|
||||
},
|
||||
{
|
||||
"id": "UIMenu",
|
||||
"maxLen": 11
|
||||
},
|
||||
{
|
||||
"id": "AdvancedMenu",
|
||||
"maxLen": 11
|
||||
}
|
||||
],
|
||||
"menuOptions": [
|
||||
{
|
||||
"id": "PowerSource",
|
||||
"maxLen": 5,
|
||||
"maxLen2": 11
|
||||
},
|
||||
{
|
||||
"id": "SleepTemperature",
|
||||
"maxLen": 4,
|
||||
"maxLen2": 9
|
||||
},
|
||||
{
|
||||
"id": "SleepTimeout",
|
||||
"maxLen": 4,
|
||||
"maxLen2": 9
|
||||
},
|
||||
{
|
||||
"id": "ShutdownTimeout",
|
||||
"maxLen": 5,
|
||||
"maxLen2": 11
|
||||
},
|
||||
{
|
||||
"id": "MotionSensitivity",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "TemperatureUnit",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "AdvancedIdle",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "DisplayRotation",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "BoostEnabled",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "BoostTemperature",
|
||||
"maxLen": 4,
|
||||
"maxLen2": 9
|
||||
},
|
||||
{
|
||||
"id": "AutoStart",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "CooldownBlink",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "TemperatureCalibration",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "SettingsReset",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "VoltageCalibration",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "AdvancedSoldering",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 13
|
||||
},
|
||||
{
|
||||
"id": "ScrollingSpeed",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 11
|
||||
},
|
||||
{
|
||||
"id": "TipModel",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "SimpleCalibrationMode",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "AdvancedCalibrationMode",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
},
|
||||
{
|
||||
"id": "PowerInput",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 16
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -250,7 +250,18 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
|
||||
*/
|
||||
/* IO operation functions *****************************************************/
|
||||
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
|
||||
inline void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
|
||||
{
|
||||
|
||||
if(PinState != GPIO_PIN_RESET)
|
||||
{
|
||||
GPIOx->BSRR = GPIO_Pin;
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
|
||||
}
|
||||
}
|
||||
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
||||
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
|
||||
|
||||
@@ -479,21 +479,8 @@ GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
|
||||
* @arg GPIO_BIT_SET: to set the port pin
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
assert_param(IS_GPIO_PIN_ACTION(PinState));
|
||||
//void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
|
||||
|
||||
if(PinState != GPIO_PIN_RESET)
|
||||
{
|
||||
GPIOx->BSRR = GPIO_Pin;
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Toggles the specified GPIO pin
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,8 @@
|
||||
|
||||
OUTPUT_EXE=TS100_$(lang)
|
||||
ifndef model
|
||||
model:=TS100
|
||||
endif
|
||||
OUTPUT_EXE=$(model)_$(lang)
|
||||
ifndef lang
|
||||
lang:= EN
|
||||
endif
|
||||
@@ -36,7 +39,7 @@ OPTIM=-Os -flto -finline-small-functions -findirect-inlining -fdiagnostics-color
|
||||
|
||||
|
||||
# global defines ---------------------------------------------------------------
|
||||
GLOBAL_DEFINES += -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D LANG_$(lang) -D LANG
|
||||
GLOBAL_DEFINES += -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D LANG_$(lang) -D LANG -D MODEL_$(model)
|
||||
|
||||
# Enable debug code generation
|
||||
DEBUG=-g
|
||||
|
||||
@@ -11,29 +11,30 @@
|
||||
#include "cmsis_os.h"
|
||||
|
||||
class FRToSI2C {
|
||||
public:
|
||||
public:
|
||||
|
||||
FRToSI2C(I2C_HandleTypeDef *i2chandle) : i2c(i2chandle),
|
||||
I2CSemaphore(nullptr) {
|
||||
}
|
||||
static void init(I2C_HandleTypeDef *i2chandle) {i2c=i2chandle;
|
||||
I2CSemaphore=nullptr;}
|
||||
|
||||
void FRToSInit() {
|
||||
static void FRToSInit() {
|
||||
I2CSemaphore = xSemaphoreCreateBinary();
|
||||
xSemaphoreGive(I2CSemaphore);
|
||||
}
|
||||
|
||||
void CpltCallback(); //Normal Tx Callback
|
||||
static void CpltCallback(); //Normal Tx Callback
|
||||
|
||||
void Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize,
|
||||
uint8_t *pData, uint16_t Size);
|
||||
void Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
|
||||
uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
|
||||
static void Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize,
|
||||
uint8_t *pData, uint16_t Size);
|
||||
static void Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
|
||||
uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
|
||||
|
||||
void Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
||||
static void Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
||||
static void I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data);
|
||||
static uint8_t I2C_RegisterRead(uint8_t address, uint8_t reg);
|
||||
|
||||
private:
|
||||
I2C_HandleTypeDef *i2c;
|
||||
SemaphoreHandle_t I2CSemaphore;
|
||||
private:
|
||||
static I2C_HandleTypeDef *i2c;
|
||||
static SemaphoreHandle_t I2CSemaphore;
|
||||
};
|
||||
|
||||
#endif /* FRTOSI2C_HPP_ */
|
||||
|
||||
@@ -102,12 +102,12 @@
|
||||
#define configMAX_PRIORITIES ( 4 )
|
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)10240) /*Currently use about 9000*/
|
||||
#define configMAX_TASK_NAME_LEN ( 48 )
|
||||
#define configMAX_TASK_NAME_LEN ( 24 )
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 8
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 0 /*Bump this to 2 during development and bug hunting*/
|
||||
|
||||
|
||||
/* Co-routine definitions. */
|
||||
@@ -117,10 +117,10 @@
|
||||
/* Set the following definitions to 1 to include the API function, or zero
|
||||
to exclude the API function. */
|
||||
#define INCLUDE_vTaskPrioritySet 1
|
||||
#define INCLUDE_uxTaskPriorityGet 1
|
||||
#define INCLUDE_uxTaskPriorityGet 0
|
||||
#define INCLUDE_vTaskDelete 0
|
||||
#define INCLUDE_vTaskCleanUpResources 0
|
||||
#define INCLUDE_vTaskSuspend 1
|
||||
#define INCLUDE_vTaskSuspend 0
|
||||
#define INCLUDE_vTaskDelayUntil 0
|
||||
#define INCLUDE_vTaskDelay 1
|
||||
#define INCLUDE_xTaskGetSchedulerState 1
|
||||
|
||||
@@ -14,15 +14,29 @@
|
||||
|
||||
class LIS2DH12 {
|
||||
public:
|
||||
LIS2DH12(FRToSI2C* i2cHandle) : i2c(i2cHandle) {}
|
||||
void initalize();
|
||||
Orientation getOrientation() { return static_cast<Orientation>((I2C_RegisterRead(LIS_INT2_SRC) >> 2) - 1); }
|
||||
void getAxisReadings(int16_t *x, int16_t *y, int16_t *z);
|
||||
static void initalize();
|
||||
//1 = rh, 2,=lh, 8=flat
|
||||
static Orientation getOrientation() {
|
||||
#ifdef MODEL_TS80
|
||||
uint8_t val = (FRToSI2C::I2C_RegisterRead(LIS2DH_I2C_ADDRESS,
|
||||
LIS_INT2_SRC) >> 2);
|
||||
if (val == 8)
|
||||
val = 3;
|
||||
else if (val==1)
|
||||
val=0;
|
||||
else if(val==2)
|
||||
val=1;
|
||||
else
|
||||
val=3;
|
||||
return static_cast<Orientation>(val);
|
||||
#endif
|
||||
#ifdef MODEL_TS100
|
||||
return static_cast<Orientation>((FRToSI2C::I2C_RegisterRead(LIS2DH_I2C_ADDRESS,LIS_INT2_SRC) >> 2) - 1);
|
||||
#endif
|
||||
}
|
||||
static void getAxisReadings(int16_t *x, int16_t *y, int16_t *z);
|
||||
|
||||
private:
|
||||
void I2C_RegisterWrite(uint8_t reg, uint8_t data);
|
||||
uint8_t I2C_RegisterRead(uint8_t reg);
|
||||
FRToSI2C* i2c;
|
||||
};
|
||||
|
||||
#endif /* LIS2DH12_HPP_ */
|
||||
|
||||
@@ -16,17 +16,12 @@ class MMA8652FC {
|
||||
|
||||
public:
|
||||
|
||||
MMA8652FC(FRToSI2C* i2cHandle) : i2c(i2cHandle) {}
|
||||
void initalize(); // Initalize the system
|
||||
Orientation getOrientation();// Reads the I2C register and returns the orientation (true == left)
|
||||
void getAxisReadings(int16_t *x, int16_t *y, int16_t *z);
|
||||
|
||||
static void initalize(); // Initalize the system
|
||||
static Orientation getOrientation();// Reads the I2C register and returns the orientation (true == left)
|
||||
static void getAxisReadings(int16_t *x, int16_t *y, int16_t *z);
|
||||
|
||||
private:
|
||||
|
||||
void I2C_RegisterWrite(uint8_t reg, uint8_t data);
|
||||
uint8_t I2C_RegisterRead(uint8_t reg);
|
||||
FRToSI2C* i2c;
|
||||
|
||||
};
|
||||
|
||||
#endif /* MMA8652FC_HPP_ */
|
||||
|
||||
@@ -26,79 +26,83 @@ extern "C" {
|
||||
#define OLED_WIDTH 96
|
||||
#define FRAMEBUFFER_START 17
|
||||
|
||||
|
||||
class OLED {
|
||||
public:
|
||||
OLED(FRToSI2C* i2cHandle); // Initialize Driver and store I2C pointer
|
||||
void initialize(); // Startup the I2C coms (brings screen out of reset etc)
|
||||
|
||||
static void initialize(); // Startup the I2C coms (brings screen out of reset etc)
|
||||
|
||||
// Draw the buffer out to the LCD using the DMA Channel
|
||||
void refresh() {
|
||||
i2c->Transmit( DEVICEADDR_OLED, screenBuffer, FRAMEBUFFER_START + (OLED_WIDTH * 2));
|
||||
static void refresh() {
|
||||
FRToSI2C::Transmit( DEVICEADDR_OLED, screenBuffer,
|
||||
FRAMEBUFFER_START + (OLED_WIDTH * 2));
|
||||
//DMA tx time is ~ 20mS Ensure after calling this you delay for at least 25ms
|
||||
//or we need to goto double buffering
|
||||
}
|
||||
|
||||
void drawChar(char c, char preCursorCommand = '\0'); // Draw a character to a specific location
|
||||
static void drawChar(char c, char preCursorCommand = '\0'); // Draw a character to a specific location
|
||||
// Turn the screen on or not
|
||||
void displayOnOff(bool on) {
|
||||
static void displayOnOff(bool on) {
|
||||
displayOnOffState = on;
|
||||
screenBuffer[1] = on ? 0xAF : 0xAE;
|
||||
}
|
||||
void setRotation(bool leftHanded); // Set the rotation for the screen
|
||||
}
|
||||
static void setRotation(bool leftHanded); // Set the rotation for the screen
|
||||
// Get the current rotation of the LCD
|
||||
bool getRotation() const {
|
||||
static bool getRotation() {
|
||||
return inLeftHandedMode;
|
||||
}
|
||||
void print(const char* string); // Draw a string to the current location, with current font
|
||||
}
|
||||
static int16_t getCursorX() {
|
||||
return cursor_x;
|
||||
}
|
||||
static void print(const char* string);// Draw a string to the current location, with current font
|
||||
// Set the cursor location by pixels
|
||||
void setCursor(int16_t x, int16_t y) {
|
||||
static void setCursor(int16_t x, int16_t y) {
|
||||
cursor_x = x;
|
||||
cursor_y = y;
|
||||
}
|
||||
cursor_y = y;
|
||||
}
|
||||
//Set cursor location by chars in current font
|
||||
void setCharCursor(int16_t x, int16_t y) {
|
||||
static void setCharCursor(int16_t x, int16_t y) {
|
||||
cursor_x = x * fontWidth;
|
||||
cursor_y = y * fontHeight;
|
||||
}
|
||||
void setFont(uint8_t fontNumber); // (Future) Set the font that is being used
|
||||
void drawImage(const uint8_t* buffer, uint8_t x, uint8_t width) {
|
||||
static void setFont(uint8_t fontNumber); // (Future) Set the font that is being used
|
||||
static void drawImage(const uint8_t* buffer, uint8_t x, uint8_t width) {
|
||||
drawArea(x, 0, width, 16, buffer);
|
||||
}
|
||||
// Draws an image to the buffer, at x offset from top to bottom (fixed height renders)
|
||||
void printNumber(uint16_t number, uint8_t places);
|
||||
static void printNumber(uint16_t number, uint8_t places);
|
||||
// Draws a number at the current cursor location
|
||||
// Clears the buffer
|
||||
void clearScreen() {
|
||||
static void clearScreen() {
|
||||
memset(&screenBuffer[FRAMEBUFFER_START], 0, OLED_WIDTH * 2);
|
||||
}
|
||||
}
|
||||
// Draws the battery level symbol
|
||||
void drawBattery(uint8_t state) {
|
||||
static void drawBattery(uint8_t state) {
|
||||
drawSymbol(3 + (state > 10 ? 10 : state));
|
||||
}
|
||||
}
|
||||
// Draws a checkbox
|
||||
void drawCheckbox(bool state) {
|
||||
static void drawCheckbox(bool state) {
|
||||
drawSymbol((state) ? 16 : 17);
|
||||
}
|
||||
void drawSymbol(uint8_t symbolID);//Used for drawing symbols of a predictable width
|
||||
void drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t* ptr); //Draw an area, but y must be aligned on 0/8 offset
|
||||
void fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t value); //Fill an area, but y must be aligned on 0/8 offset
|
||||
void drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1,bool clear);
|
||||
void drawHeatSymbol(uint8_t state);
|
||||
static void drawSymbol(uint8_t symbolID);//Used for drawing symbols of a predictable width
|
||||
static void drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
|
||||
const uint8_t* ptr); //Draw an area, but y must be aligned on 0/8 offset
|
||||
static void fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
|
||||
const uint8_t value); //Fill an area, but y must be aligned on 0/8 offset
|
||||
static void drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1,
|
||||
bool clear);
|
||||
static void drawHeatSymbol(uint8_t state);
|
||||
private:
|
||||
|
||||
//Draw a buffer to the screen buffer
|
||||
|
||||
FRToSI2C* i2c; //i2c Pointer
|
||||
const uint8_t* currentFont; // Pointer to the current font used for rendering to the buffer
|
||||
uint8_t* firstStripPtr; // Pointers to the strips to allow for buffer having extra content
|
||||
uint8_t* secondStripPtr; //Pointers to the strips
|
||||
bool inLeftHandedMode; // Whether the screen is in left or not (used for offsets in GRAM)
|
||||
bool displayOnOffState; // If the display is on or not
|
||||
uint8_t fontWidth, fontHeight;
|
||||
int16_t cursor_x, cursor_y;
|
||||
uint8_t displayOffset;
|
||||
uint8_t screenBuffer[16 + (OLED_WIDTH * 2) + 10]; // The data buffer
|
||||
static const uint8_t* currentFont;// Pointer to the current font used for rendering to the buffer
|
||||
static uint8_t* firstStripPtr; // Pointers to the strips to allow for buffer having extra content
|
||||
static uint8_t* secondStripPtr; //Pointers to the strips
|
||||
static bool inLeftHandedMode; // Whether the screen is in left or not (used for offsets in GRAM)
|
||||
static bool displayOnOffState; // If the display is on or not
|
||||
static uint8_t fontWidth, fontHeight;
|
||||
static int16_t cursor_x, cursor_y;
|
||||
static uint8_t displayOffset;
|
||||
static uint8_t screenBuffer[16 + (OLED_WIDTH * 2) + 10]; // The data buffer
|
||||
};
|
||||
|
||||
#endif /* OLED_HPP_ */
|
||||
|
||||
@@ -11,36 +11,45 @@
|
||||
#define SETTINGS_H_
|
||||
#include <stdint.h>
|
||||
#include "stm32f1xx_hal.h"
|
||||
#define SETTINGSVERSION 0x15 /*Change this if you change the struct below to prevent people getting out of sync*/
|
||||
#define SETTINGSVERSION \
|
||||
0x16 /*Change this if you change the struct below to prevent people getting \
|
||||
out of sync*/
|
||||
|
||||
/*
|
||||
* This struct must be a multiple of 2 bytes as it is saved / restored from flash in uint16_t chunks
|
||||
* This struct must be a multiple of 2 bytes as it is saved / restored from
|
||||
* flash in uint16_t chunks
|
||||
*/
|
||||
typedef struct {
|
||||
uint16_t SolderingTemp; //current set point for the iron
|
||||
uint16_t SleepTemp; //temp to drop to in sleep
|
||||
uint8_t SleepTime; //minutes timeout to sleep
|
||||
uint8_t cutoutSetting; // The voltage we cut out at for under voltage
|
||||
uint8_t OrientationMode:2; //If true we want to invert the display for lefties
|
||||
uint8_t sensitivity :4; //Sensitivity of accelerometer (5 bits)
|
||||
uint8_t autoStartMode :2; //Should the unit automatically jump straight into soldering mode when power is applied
|
||||
uint8_t ShutdownTime; //Time until unit shuts down if left alone
|
||||
uint8_t boostModeEnabled :1; //Boost mode swaps BUT_A in soldering mode to temporary soldering temp over-ride
|
||||
uint8_t coolingTempBlink :1; //Should the temperature blink on the cool down screen until its <50C
|
||||
uint8_t detailedIDLE :1; //Detailed idle screen
|
||||
uint8_t detailedSoldering :1; //Detailed soldering screens
|
||||
uint8_t temperatureInF; //Should the temp be in F or C (true is F)
|
||||
uint8_t descriptionScrollSpeed:1; // Description scroll speed
|
||||
uint16_t voltageDiv; //Voltage divisor factor
|
||||
uint16_t BoostTemp; //Boost mode set point for the iron
|
||||
int16_t CalibrationOffset; //This stores the temperature offset for this tip in the iron.
|
||||
uint8_t PID_P; //PID P Term
|
||||
uint8_t PID_I; //PID I Term
|
||||
uint8_t PID_D; //PID D Term
|
||||
uint8_t version; //Used to track if a reset is needed on firmware upgrade
|
||||
uint8_t customTipGain; // Tip gain value if custom tuned, or 0 if using a tipType param
|
||||
uint16_t SolderingTemp; // current set point for the iron
|
||||
uint16_t SleepTemp; // temp to drop to in sleep
|
||||
uint8_t SleepTime; // minutes timeout to sleep
|
||||
uint8_t cutoutSetting; // The voltage we cut out at for under voltage OR Power level for TS80
|
||||
uint8_t OrientationMode :2; // If true we want to invert the display for lefties
|
||||
uint8_t sensitivity :4; // Sensitivity of accelerometer (5 bits)
|
||||
uint8_t autoStartMode :2; // Should the unit automatically jump straight
|
||||
// into soldering mode when power is applied
|
||||
uint8_t ShutdownTime; // Time until unit shuts down if left alone
|
||||
uint8_t boostModeEnabled :1; // Boost mode swaps BUT_A in soldering mode to
|
||||
// temporary soldering temp over-ride
|
||||
uint8_t coolingTempBlink :1; // Should the temperature blink on the cool
|
||||
// down screen until its <50C
|
||||
uint8_t detailedIDLE :1; // Detailed idle screen
|
||||
uint8_t detailedSoldering :1; // Detailed soldering screens
|
||||
uint8_t temperatureInF; // Should the temp be in F or C (true is F)
|
||||
uint8_t descriptionScrollSpeed :1; // Description scroll speed
|
||||
uint16_t voltageDiv; // Voltage divisor factor
|
||||
uint16_t BoostTemp; // Boost mode set point for the iron
|
||||
int16_t CalibrationOffset; // This stores the temperature offset for this tip
|
||||
// in the iron.
|
||||
uint8_t PID_P; // PID P Term
|
||||
uint8_t PID_I; // PID I Term
|
||||
uint8_t PID_D; // PID D Term
|
||||
uint8_t version; // Used to track if a reset is needed on firmware upgrade
|
||||
uint8_t customTipGain; // Tip gain value if custom tuned, or 0 if using a
|
||||
// tipType param
|
||||
uint8_t tipType;
|
||||
uint32_t padding; //This is here for in case we are not an even divisor so that nothing gets cut off
|
||||
uint32_t padding; // This is here for in case we are not an even divisor so
|
||||
// that nothing gets cut off
|
||||
} systemSettingsType;
|
||||
|
||||
extern volatile systemSettingsType systemSettings;
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
#define TRANSLATION_H_
|
||||
|
||||
enum ShortNameType {
|
||||
SHORT_NAME_SINGLE_LINE = 1, SHORT_NAME_DOUBLE_LINE = 2,
|
||||
SHORT_NAME_SINGLE_LINE = 1,
|
||||
SHORT_NAME_DOUBLE_LINE = 2,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -17,10 +18,9 @@ enum ShortNameType {
|
||||
* use SettingsShortNames as SettingsShortNames[16][1].. second column undefined
|
||||
*/
|
||||
extern const enum ShortNameType SettingsShortNameType;
|
||||
extern const char* SettingsShortNames[][2];
|
||||
extern const char* SettingsDescriptions[];
|
||||
extern const char* SettingsShortNames[21][2];
|
||||
extern const char* SettingsDescriptions[21];
|
||||
extern const char* SettingsMenuEntries[4];
|
||||
extern const char* SettingsMenuEntriesDescriptions[4];
|
||||
|
||||
extern const char* SettingsCalibrationDone;
|
||||
extern const char* SettingsCalibrationWarning;
|
||||
|
||||
@@ -7,36 +7,38 @@
|
||||
|
||||
#ifndef HARDWARE_H_
|
||||
#define HARDWARE_H_
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include "Setup.h"
|
||||
#include "stm32f1xx_hal.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum Orientation {
|
||||
ORIENTATION_LEFT_HAND = 0, ORIENTATION_RIGHT_HAND = 1, ORIENTATION_FLAT = 3
|
||||
};
|
||||
/*
|
||||
* Keep in a uint8_t range for the ID's
|
||||
*/
|
||||
enum TipType {
|
||||
TS_B2 = 0,
|
||||
TS_D24 = 1,
|
||||
TS_BC2 = 2,
|
||||
TS_C1 = 3,
|
||||
Tip_MiniWare=4,
|
||||
HAKKO_BC2=4,
|
||||
Tip_Hakko=5,
|
||||
Tip_Custom=5,
|
||||
ORIENTATION_LEFT_HAND = 0,
|
||||
ORIENTATION_RIGHT_HAND = 1,
|
||||
ORIENTATION_FLAT = 3
|
||||
};
|
||||
#ifndef MODEL_TS100
|
||||
#ifndef MODEL_TS80
|
||||
#error "Please Define the model you are building for! MODEL=TS100 or MODEL=TS80"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MODEL_TS100
|
||||
|
||||
#define KEY_B_Pin GPIO_PIN_6
|
||||
#define KEY_B_GPIO_Port GPIOA
|
||||
#define TMP36_INPUT_Pin GPIO_PIN_7
|
||||
#define TMP36_INPUT_GPIO_Port GPIOA
|
||||
#define TMP36_ADC1_CHANNEL ADC_CHANNEL_7
|
||||
#define TIP_TEMP_Pin GPIO_PIN_0
|
||||
#define TIP_TEMP_GPIO_Port GPIOB
|
||||
#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_8
|
||||
#define TIP_TEMP_ADC2_CHANNEL ADC_CHANNEL_8
|
||||
#define VIN_Pin GPIO_PIN_1
|
||||
#define VIN_GPIO_Port GPIOB
|
||||
#define VIN_ADC1_CHANNEL ADC_CHANNEL_9
|
||||
#define VIN_ADC2_CHANNEL ADC_CHANNEL_9
|
||||
#define OLED_RESET_Pin GPIO_PIN_8
|
||||
#define OLED_RESET_GPIO_Port GPIOA
|
||||
#define KEY_A_Pin GPIO_PIN_9
|
||||
@@ -45,6 +47,8 @@ enum TipType {
|
||||
#define INT_Orientation_GPIO_Port GPIOB
|
||||
#define PWM_Out_Pin GPIO_PIN_4
|
||||
#define PWM_Out_GPIO_Port GPIOB
|
||||
#define PWM_Out_CHANNEL TIM_CHANNEL_1
|
||||
#define PWM_Out_CCR
|
||||
#define INT_Movement_Pin GPIO_PIN_5
|
||||
#define INT_Movement_GPIO_Port GPIOB
|
||||
#define SCL_Pin GPIO_PIN_6
|
||||
@@ -52,6 +56,64 @@ enum TipType {
|
||||
#define SDA_Pin GPIO_PIN_7
|
||||
#define SDA_GPIO_Port GPIOB
|
||||
|
||||
#else
|
||||
// TS80 pin map
|
||||
#define KEY_B_Pin GPIO_PIN_0
|
||||
#define KEY_B_GPIO_Port GPIOB
|
||||
#define TMP36_INPUT_Pin GPIO_PIN_4
|
||||
#define TMP36_INPUT_GPIO_Port GPIOA
|
||||
#define TMP36_ADC1_CHANNEL ADC_CHANNEL_4
|
||||
#define TIP_TEMP_Pin GPIO_PIN_3
|
||||
#define TIP_TEMP_GPIO_Port GPIOA
|
||||
#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_3
|
||||
#define TIP_TEMP_ADC2_CHANNEL ADC_CHANNEL_3
|
||||
|
||||
#define VIN_Pin GPIO_PIN_2
|
||||
#define VIN_GPIO_Port GPIOA
|
||||
#define VIN_ADC1_CHANNEL ADC_CHANNEL_2
|
||||
#define VIN_ADC2_CHANNEL ADC_CHANNEL_2
|
||||
#define OLED_RESET_Pin GPIO_PIN_15
|
||||
#define OLED_RESET_GPIO_Port GPIOA
|
||||
#define KEY_A_Pin GPIO_PIN_1
|
||||
#define KEY_A_GPIO_Port GPIOB
|
||||
#define INT_Orientation_Pin GPIO_PIN_4
|
||||
#define INT_Orientation_GPIO_Port GPIOB
|
||||
#define PWM_Out_Pin GPIO_PIN_6
|
||||
#define PWM_Out_GPIO_Port GPIOA
|
||||
#define PWM_Out_CHANNEL TIM_CHANNEL_1
|
||||
#define INT_Movement_Pin GPIO_PIN_5
|
||||
#define INT_Movement_GPIO_Port GPIOB
|
||||
#define SCL_Pin GPIO_PIN_6
|
||||
#define SCL_GPIO_Port GPIOB
|
||||
#define SDA_Pin GPIO_PIN_7
|
||||
#define SDA_GPIO_Port GPIOB
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Keep in a uint8_t range for the ID's
|
||||
*/
|
||||
#ifdef MODEL_TS100
|
||||
enum TipType {
|
||||
TS_B2 = 0,
|
||||
TS_D24 = 1,
|
||||
TS_BC2 = 2,
|
||||
TS_C1 = 3,
|
||||
Tip_MiniWare = 4,
|
||||
HAKKO_BC2 = 4,
|
||||
Tip_Hakko = 5,
|
||||
Tip_Custom = 5,
|
||||
};
|
||||
#endif
|
||||
#ifdef MODEL_TS80
|
||||
enum TipType {
|
||||
TS_B02 = 0,
|
||||
TS_D25 = 1,
|
||||
Tip_MiniWare = 2,
|
||||
Tip_Custom = 2,
|
||||
};
|
||||
#endif
|
||||
|
||||
uint16_t getHandleTemperature();
|
||||
uint16_t getTipRawTemp(uint8_t instant);
|
||||
uint16_t getInputVoltageX10(uint16_t divisor);
|
||||
@@ -62,9 +124,17 @@ uint16_t ctoTipMeasurement(uint16_t temp);
|
||||
uint16_t tipMeasurementToC(uint16_t raw);
|
||||
uint16_t ftoTipMeasurement(uint16_t temp);
|
||||
uint16_t tipMeasurementToF(uint16_t raw);
|
||||
|
||||
void seekQC(int16_t Vx10);
|
||||
void setCalibrationOffset(int16_t offSet);
|
||||
void setTipType(enum TipType tipType, uint8_t manualCalGain);
|
||||
uint32_t calculateTipR(uint8_t useFilter);
|
||||
int16_t calculateMaxVoltage(uint8_t useFilter, uint8_t useHP);
|
||||
void startQC(); // Tries to negotiate QC for highest voltage, must be run after
|
||||
// RToS
|
||||
// This will try for 12V, failing that 9V, failing that 5V
|
||||
// If input is over 12V returns -1
|
||||
// If the input is [5-12] Will return the value.
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2,25 +2,23 @@
|
||||
#define __MAIN_H
|
||||
|
||||
#include <MMA8652FC.hpp>
|
||||
#include "Setup.h"
|
||||
#include "OLED.hpp"
|
||||
extern uint16_t currentlyActiveTemperatureTarget;
|
||||
extern OLED lcd;
|
||||
extern MMA8652FC accel;
|
||||
#include "Setup.h"
|
||||
extern uint8_t PCBVersion;
|
||||
extern uint16_t currentlyActiveTemperatureTarget;
|
||||
enum ButtonState {
|
||||
BUTTON_NONE = 0, /* No buttons pressed / < filter time*/
|
||||
BUTTON_F_SHORT = 1, /* User has pressed the front button*/
|
||||
BUTTON_B_SHORT = 2, /* User has pressed the back button*/
|
||||
BUTTON_F_LONG = 4, /* User is holding the front button*/
|
||||
BUTTON_B_LONG = 8, /* User is holding the back button*/
|
||||
BUTTON_BOTH = 16, /* User has pressed both buttons*/
|
||||
BUTTON_NONE = 0, /* No buttons pressed / < filter time*/
|
||||
BUTTON_F_SHORT = 1, /* User has pressed the front button*/
|
||||
BUTTON_B_SHORT = 2, /* User has pressed the back button*/
|
||||
BUTTON_F_LONG = 4, /* User is holding the front button*/
|
||||
BUTTON_B_LONG = 8, /* User is holding the back button*/
|
||||
BUTTON_BOTH = 16, /* User has pressed both buttons*/
|
||||
|
||||
/*
|
||||
* Note:
|
||||
* Pressed means press + release, we trigger on a full \__/ pulse
|
||||
* holding means it has gone low, and been low for longer than filter time
|
||||
*/
|
||||
/*
|
||||
* Note:
|
||||
* Pressed means press + release, we trigger on a full \__/ pulse
|
||||
* holding means it has gone low, and been low for longer than filter time
|
||||
*/
|
||||
};
|
||||
|
||||
ButtonState getButtonState();
|
||||
@@ -31,15 +29,15 @@ void GUIDelay();
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc);
|
||||
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc);
|
||||
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||
void vApplicationStackOverflowHook( xTaskHandle *pxTask,
|
||||
signed portCHAR *pcTaskName);
|
||||
void vApplicationStackOverflowHook(xTaskHandle *pxTask,
|
||||
signed portCHAR *pcTaskName);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -7,82 +7,85 @@
|
||||
|
||||
#include "FRToSI2C.hpp"
|
||||
|
||||
void __attribute__ ((long_call, section (".data.ramfuncs"))) FRToSI2C::CpltCallback() {
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
i2c->State = HAL_I2C_STATE_READY;//Force state reset
|
||||
if (I2CSemaphore) {
|
||||
xSemaphoreGiveFromISR(I2CSemaphore, &xHigherPriorityTaskWoken);
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
}
|
||||
I2C_HandleTypeDef* FRToSI2C::i2c;
|
||||
SemaphoreHandle_t FRToSI2C::I2CSemaphore;
|
||||
void FRToSI2C::CpltCallback() {
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
i2c->State = HAL_I2C_STATE_READY; // Force state reset (even if tx error)
|
||||
if (I2CSemaphore) {
|
||||
xSemaphoreGiveFromISR(I2CSemaphore, &xHigherPriorityTaskWoken);
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
}
|
||||
}
|
||||
|
||||
void FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
|
||||
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
||||
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
||||
|| I2CSemaphore == NULL) {
|
||||
//no RToS, run blocking code
|
||||
HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
||||
5000);
|
||||
} else {
|
||||
//RToS is active, run threading
|
||||
//Get the mutex so we can use the I2C port
|
||||
//Wait up to 1 second for the mutex
|
||||
if ( xSemaphoreTake( I2CSemaphore, ( TickType_t ) 5000 ) == pdTRUE) {
|
||||
if (HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize, pData,
|
||||
Size, 5000) != HAL_OK) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
xSemaphoreGive(I2CSemaphore);
|
||||
} else {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
||||
if (I2CSemaphore == NULL) {
|
||||
// no RToS, run blocking code
|
||||
HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
||||
5000);
|
||||
} else {
|
||||
// RToS is active, run threading
|
||||
// Get the mutex so we can use the I2C port
|
||||
// Wait up to 1 second for the mutex
|
||||
if (xSemaphoreTake(I2CSemaphore, (TickType_t)5000) == pdTRUE) {
|
||||
if (HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
||||
5000) != HAL_OK) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
xSemaphoreGive(I2CSemaphore);
|
||||
} else {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
}
|
||||
}
|
||||
void FRToSI2C::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data) {
|
||||
Mem_Write(address, reg, I2C_MEMADD_SIZE_8BIT, &data, 1);
|
||||
}
|
||||
|
||||
uint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg) {
|
||||
uint8_t tx_data[1];
|
||||
Mem_Read(add, reg, I2C_MEMADD_SIZE_8BIT, tx_data, 1);
|
||||
return tx_data[0];
|
||||
}
|
||||
void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
|
||||
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
||||
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
||||
|| I2CSemaphore == NULL) {
|
||||
//no RToS, run blocking code
|
||||
HAL_I2C_Mem_Write(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
||||
5000);
|
||||
} else {
|
||||
//RToS is active, run threading
|
||||
//Get the mutex so we can use the I2C port
|
||||
//Wait up to 1 second for the mutex
|
||||
if ( xSemaphoreTake( I2CSemaphore, ( TickType_t ) 5000 ) == pdTRUE) {
|
||||
if (HAL_I2C_Mem_Write(i2c, DevAddress, MemAddress, MemAddSize,
|
||||
pData, Size, 5000) != HAL_OK) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
xSemaphoreGive(I2CSemaphore);
|
||||
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
||||
if (I2CSemaphore == NULL) {
|
||||
// no RToS, run blocking code
|
||||
HAL_I2C_Mem_Write(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
||||
5000);
|
||||
} else {
|
||||
// RToS is active, run threading
|
||||
// Get the mutex so we can use the I2C port
|
||||
// Wait up to 1 second for the mutex
|
||||
if (xSemaphoreTake(I2CSemaphore, (TickType_t)5000) == pdTRUE) {
|
||||
if (HAL_I2C_Mem_Write(i2c, DevAddress, MemAddress, MemAddSize, pData,
|
||||
Size, 5000) != HAL_OK) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
xSemaphoreGive(I2CSemaphore);
|
||||
|
||||
} else {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t* pData, uint16_t Size) {
|
||||
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
||||
|| I2CSemaphore == NULL) {
|
||||
//no RToS, run blocking code
|
||||
HAL_I2C_Master_Transmit(i2c, DevAddress, pData, Size, 5000);
|
||||
} else {
|
||||
//RToS is active, run threading
|
||||
//Get the mutex so we can use the I2C port
|
||||
//Wait up to 1 second for the mutex
|
||||
if ( xSemaphoreTake( I2CSemaphore, ( TickType_t ) 5000 ) == pdTRUE) {
|
||||
if (HAL_I2C_Master_Transmit_DMA(i2c, DevAddress, pData, Size)
|
||||
!= HAL_OK) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
//xSemaphoreGive(I2CSemaphore);
|
||||
} else {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
}
|
||||
|
||||
if (I2CSemaphore == NULL) {
|
||||
// no RToS, run blocking code
|
||||
HAL_I2C_Master_Transmit(i2c, DevAddress, pData, Size, 5000);
|
||||
} else {
|
||||
// RToS is active, run threading
|
||||
// Get the mutex so we can use the I2C port
|
||||
// Wait up to 1 second for the mutex
|
||||
if (xSemaphoreTake(I2CSemaphore, (TickType_t)5000) == pdTRUE) {
|
||||
if (HAL_I2C_Master_Transmit_DMA(i2c, DevAddress, pData, Size) != HAL_OK) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// xSemaphoreGive(I2CSemaphore);
|
||||
} else {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <LIS2DH12.hpp>
|
||||
#include "cmsis_os.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
const uint8_t reg;
|
||||
const uint8_t value;
|
||||
@@ -31,13 +32,13 @@ static const LIS_REG i2c_registers[] = {
|
||||
|
||||
void LIS2DH12::initalize() {
|
||||
for (size_t index = 0; index < (sizeof(i2c_registers) / sizeof(i2c_registers[0])); index++) {
|
||||
I2C_RegisterWrite(i2c_registers[index].reg, i2c_registers[index].value);
|
||||
FRToSI2C::I2C_RegisterWrite(LIS2DH_I2C_ADDRESS,i2c_registers[index].reg, i2c_registers[index].value);
|
||||
}
|
||||
}
|
||||
|
||||
void LIS2DH12::getAxisReadings(int16_t* x, int16_t* y, int16_t* z) {
|
||||
uint8_t tempArr[6];
|
||||
i2c->Mem_Read(LIS2DH_I2C_ADDRESS, 0xA8, I2C_MEMADD_SIZE_8BIT,
|
||||
FRToSI2C::Mem_Read(LIS2DH_I2C_ADDRESS, 0xA8, I2C_MEMADD_SIZE_8BIT,
|
||||
(uint8_t*) tempArr, 6);
|
||||
|
||||
(*x) = ((uint16_t) (tempArr[1] << 8 | tempArr[0]));
|
||||
@@ -45,13 +46,4 @@ void LIS2DH12::getAxisReadings(int16_t* x, int16_t* y, int16_t* z) {
|
||||
(*z) = ((uint16_t) (tempArr[5] << 8 | tempArr[4]));
|
||||
}
|
||||
|
||||
void LIS2DH12::I2C_RegisterWrite(uint8_t reg, uint8_t data) {
|
||||
i2c->Mem_Write(LIS2DH_I2C_ADDRESS, reg, I2C_MEMADD_SIZE_8BIT, &data, 1);
|
||||
|
||||
}
|
||||
|
||||
uint8_t LIS2DH12::I2C_RegisterRead(uint8_t reg) {
|
||||
uint8_t tx_data[1];
|
||||
i2c->Mem_Read( LIS2DH_I2C_ADDRESS, reg, I2C_MEMADD_SIZE_8BIT, tx_data, 1);
|
||||
return tx_data[0];
|
||||
}
|
||||
|
||||
@@ -9,55 +9,47 @@
|
||||
#include "cmsis_os.h"
|
||||
|
||||
typedef struct {
|
||||
const uint8_t reg;
|
||||
const uint8_t val;
|
||||
const uint8_t reg;
|
||||
const uint8_t val;
|
||||
} MMA_REG;
|
||||
|
||||
static const MMA_REG i2c_registers[] = {
|
||||
{CTRL_REG2, 0}, //Normal mode
|
||||
{CTRL_REG2, 0x40}, // Reset all registers to POR values
|
||||
{FF_MT_CFG_REG, 0x78}, // Enable motion detection for X, Y, Z axis, latch disabled
|
||||
{PL_CFG_REG, 0x40}, //Enable the orientation detection
|
||||
{PL_COUNT_REG, 200}, //200 count debounce
|
||||
{PL_BF_ZCOMP_REG, 0b01000111}, //Set the threshold to 42 degrees
|
||||
{P_L_THS_REG, 0b10011100}, //Up the trip angles
|
||||
{CTRL_REG4, 0x01 | (1 << 4)}, // Enable dataready interrupt & orientation interrupt
|
||||
{CTRL_REG5, 0x01}, // Route data ready interrupts to INT1 ->PB5 ->EXTI5, leaving orientation routed to INT2
|
||||
{CTRL_REG2, 0x12}, //Set maximum resolution oversampling
|
||||
{XYZ_DATA_CFG_REG, (1 << 4)}, //select high pass filtered data
|
||||
{HP_FILTER_CUTOFF_REG, 0x03}, //select high pass filtered data
|
||||
{CTRL_REG1, 0x19} // ODR=12 Hz, Active mode
|
||||
static const MMA_REG i2c_registers[] = { { CTRL_REG2, 0 }, //Normal mode
|
||||
{ CTRL_REG2, 0x40 }, // Reset all registers to POR values
|
||||
{ FF_MT_CFG_REG, 0x78 }, // Enable motion detection for X, Y, Z axis, latch disabled
|
||||
{ PL_CFG_REG, 0x40 }, //Enable the orientation detection
|
||||
{ PL_COUNT_REG, 200 }, //200 count debounce
|
||||
{ PL_BF_ZCOMP_REG, 0b01000111 }, //Set the threshold to 42 degrees
|
||||
{ P_L_THS_REG, 0b10011100 }, //Up the trip angles
|
||||
{ CTRL_REG4, 0x01 | (1 << 4) }, // Enable dataready interrupt & orientation interrupt
|
||||
{ CTRL_REG5, 0x01 }, // Route data ready interrupts to INT1 ->PB5 ->EXTI5, leaving orientation routed to INT2
|
||||
{ CTRL_REG2, 0x12 }, //Set maximum resolution oversampling
|
||||
{ XYZ_DATA_CFG_REG, (1 << 4) }, //select high pass filtered data
|
||||
{ HP_FILTER_CUTOFF_REG, 0x03 }, //select high pass filtered data
|
||||
{ CTRL_REG1, 0x19 } // ODR=12 Hz, Active mode
|
||||
};
|
||||
|
||||
void MMA8652FC::I2C_RegisterWrite(uint8_t reg, uint8_t data) {
|
||||
i2c->Mem_Write( MMA8652FC_I2C_ADDRESS, reg, I2C_MEMADD_SIZE_8BIT, &data, 1);
|
||||
}
|
||||
|
||||
uint8_t MMA8652FC::I2C_RegisterRead(uint8_t reg) {
|
||||
uint8_t tx_data[1];
|
||||
i2c->Mem_Read( MMA8652FC_I2C_ADDRESS, reg, I2C_MEMADD_SIZE_8BIT, tx_data,
|
||||
1);
|
||||
|
||||
return tx_data[0];
|
||||
}
|
||||
void MMA8652FC::initalize() {
|
||||
size_t index = 0;
|
||||
|
||||
//send all the init commands to the unit
|
||||
|
||||
I2C_RegisterWrite(i2c_registers[index].reg, i2c_registers[index].val); index++;
|
||||
I2C_RegisterWrite(i2c_registers[index].reg, i2c_registers[index].val); index++;
|
||||
FRToSI2C::I2C_RegisterWrite(MMA8652FC_I2C_ADDRESS,i2c_registers[index].reg, i2c_registers[index].val);
|
||||
index++;
|
||||
FRToSI2C::I2C_RegisterWrite(MMA8652FC_I2C_ADDRESS,i2c_registers[index].reg, i2c_registers[index].val);
|
||||
index++;
|
||||
|
||||
HAL_Delay(2); // ~1ms delay
|
||||
|
||||
while (index < (sizeof(i2c_registers) / sizeof(i2c_registers[0]))) {
|
||||
I2C_RegisterWrite(i2c_registers[index].reg, i2c_registers[index].val); index++;
|
||||
FRToSI2C::I2C_RegisterWrite(MMA8652FC_I2C_ADDRESS,i2c_registers[index].reg, i2c_registers[index].val);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
Orientation MMA8652FC::getOrientation() {
|
||||
//First read the PL_STATUS register
|
||||
uint8_t plStatus = I2C_RegisterRead(PL_STATUS_REG);
|
||||
uint8_t plStatus = FRToSI2C::I2C_RegisterRead(MMA8652FC_I2C_ADDRESS,PL_STATUS_REG);
|
||||
if ((plStatus & 0b10000000) == 0b10000000) {
|
||||
plStatus >>= 1; //We don't need the up/down bit
|
||||
plStatus &= 0x03; //mask to the two lower bits
|
||||
@@ -67,12 +59,13 @@ Orientation MMA8652FC::getOrientation() {
|
||||
|
||||
return static_cast<Orientation>(plStatus);
|
||||
}
|
||||
|
||||
|
||||
return ORIENTATION_FLAT;
|
||||
}
|
||||
void MMA8652FC::getAxisReadings(int16_t *x, int16_t *y, int16_t *z) {
|
||||
uint8_t tempArr[6];
|
||||
i2c->Mem_Read( MMA8652FC_I2C_ADDRESS, OUT_X_MSB_REG,I2C_MEMADD_SIZE_8BIT, (uint8_t*) tempArr, 6);
|
||||
FRToSI2C::Mem_Read( MMA8652FC_I2C_ADDRESS, OUT_X_MSB_REG, I2C_MEMADD_SIZE_8BIT,
|
||||
(uint8_t*) tempArr, 6);
|
||||
|
||||
(*x) = tempArr[0] << 8 | tempArr[1];
|
||||
(*y) = tempArr[2] << 8 | tempArr[3];
|
||||
|
||||
@@ -5,69 +5,81 @@
|
||||
* Author: Ben V. Brown
|
||||
*/
|
||||
|
||||
#include <OLED.hpp>
|
||||
#include <string.h>
|
||||
#include <OLED.hpp>
|
||||
#include "Translation.h"
|
||||
#include "cmsis_os.h"
|
||||
|
||||
const uint8_t* OLED::currentFont; // Pointer to the current font used for
|
||||
// rendering to the buffer
|
||||
uint8_t* OLED::firstStripPtr; // Pointers to the strips to allow for buffer
|
||||
// having extra content
|
||||
uint8_t* OLED::secondStripPtr; // Pointers to the strips
|
||||
bool OLED::inLeftHandedMode; // Whether the screen is in left or not (used for
|
||||
// offsets in GRAM)
|
||||
bool OLED::displayOnOffState; // If the display is on or not
|
||||
uint8_t OLED::fontWidth, OLED::fontHeight;
|
||||
int16_t OLED::cursor_x, OLED::cursor_y;
|
||||
uint8_t OLED::displayOffset;
|
||||
uint8_t OLED::screenBuffer[16 + (OLED_WIDTH * 2) + 10]; // The data buffer
|
||||
|
||||
/*Setup params for the OLED screen*/
|
||||
/*http://www.displayfuture.com/Display/datasheet/controller/SSD1307.pdf*/
|
||||
/*All commands are prefixed with 0x80*/
|
||||
/*Data packets are prefixed with 0x40*/
|
||||
uint8_t OLED_Setup_Array[] = { /**/
|
||||
0x80, 0xAE,/*Display off*/
|
||||
0x80, 0xD5,/*Set display clock divide ratio / osc freq*/
|
||||
0x80, 0x52,/*Divide ratios*/
|
||||
0x80, 0xA8,/*Set Multiplex Ratio*/
|
||||
0x80, 0x0F,/*16 == max brightness,39==dimmest*/
|
||||
0x80, 0xC0,/*Set COM Scan direction*/
|
||||
0x80, 0xD3,/*Set vertical Display offset*/
|
||||
0x80, 0x00,/*0 Offset*/
|
||||
0x80, 0x40,/*Set Display start line to 0*/
|
||||
0x80, 0xA0,/*Set Segment remap to normal*/
|
||||
0x80, 0x8D,/*Charge Pump*/
|
||||
0x80, 0x14,/*Charge Pump settings*/
|
||||
0x80, 0xDA,/*Set VCOM Pins hardware config*/
|
||||
0x80, 0x02,/*Combination 2*/
|
||||
0x80, 0x81,/*Contrast*/
|
||||
0x80, 0x33,/*^51*/
|
||||
0x80, 0xD9,/*Set pre-charge period*/
|
||||
0x80, 0xF1,/*Pre charge period*/
|
||||
0x80, 0xDB,/*Adjust VCOMH regulator ouput*/
|
||||
0x80, 0x30,/*VCOM level*/
|
||||
0x80, 0xA4,/*Enable the display GDDR*/
|
||||
0x80, 0XA6,/*Normal display*/
|
||||
0x80, 0x20,/*Memory Mode*/
|
||||
0x80, 0x00,/*Wrap memory*/
|
||||
0x80, 0xAF /*Display on*/
|
||||
uint8_t OLED_Setup_Array[] = {
|
||||
/**/
|
||||
0x80, 0xAE, /*Display off*/
|
||||
0x80, 0xD5, /*Set display clock divide ratio / osc freq*/
|
||||
0x80, 0x52, /*Divide ratios*/
|
||||
0x80, 0xA8, /*Set Multiplex Ratio*/
|
||||
0x80, 0x0F, /*16 == max brightness,39==dimmest*/
|
||||
0x80, 0xC0, /*Set COM Scan direction*/
|
||||
0x80, 0xD3, /*Set vertical Display offset*/
|
||||
0x80, 0x00, /*0 Offset*/
|
||||
0x80, 0x40, /*Set Display start line to 0*/
|
||||
0x80, 0xA0, /*Set Segment remap to normal*/
|
||||
0x80, 0x8D, /*Charge Pump*/
|
||||
0x80, 0x14, /*Charge Pump settings*/
|
||||
0x80, 0xDA, /*Set VCOM Pins hardware config*/
|
||||
0x80, 0x02, /*Combination 2*/
|
||||
0x80, 0x81, /*Contrast*/
|
||||
0x80, 0x33, /*^51*/
|
||||
0x80, 0xD9, /*Set pre-charge period*/
|
||||
0x80, 0xF1, /*Pre charge period*/
|
||||
0x80, 0xDB, /*Adjust VCOMH regulator ouput*/
|
||||
0x80, 0x30, /*VCOM level*/
|
||||
0x80, 0xA4, /*Enable the display GDDR*/
|
||||
0x80, 0XA6, /*Normal display*/
|
||||
0x80, 0x20, /*Memory Mode*/
|
||||
0x80, 0x00, /*Wrap memory*/
|
||||
0x80, 0xAF /*Display on*/
|
||||
};
|
||||
//Setup based on the SSD1307 and modified for the SSD1306
|
||||
// Setup based on the SSD1307 and modified for the SSD1306
|
||||
|
||||
const uint8_t REFRESH_COMMANDS[17] = { 0x80, 0xAF, 0x80, 0x21, 0x80, 0x20, 0x80,
|
||||
0x7F, 0x80, 0xC0, 0x80, 0x22, 0x80, 0x00, 0x80, 0x01, 0x40 };
|
||||
|
||||
OLED::OLED(FRToSI2C* i2cHandle) {
|
||||
i2c = i2cHandle;
|
||||
cursor_x = cursor_y = 0;
|
||||
currentFont = FONT_12;
|
||||
fontWidth = 12;
|
||||
inLeftHandedMode = false;
|
||||
firstStripPtr = &screenBuffer[FRAMEBUFFER_START];
|
||||
secondStripPtr = &screenBuffer[FRAMEBUFFER_START + OLED_WIDTH];
|
||||
fontHeight = 16;
|
||||
displayOffset = 0;
|
||||
displayOnOffState = true;
|
||||
}
|
||||
const uint8_t REFRESH_COMMANDS[17] = {0x80, 0xAF, 0x80, 0x21, 0x80, 0x20,
|
||||
0x80, 0x7F, 0x80, 0xC0, 0x80, 0x22,
|
||||
0x80, 0x00, 0x80, 0x01, 0x40};
|
||||
|
||||
void OLED::initialize() {
|
||||
memcpy(&screenBuffer[0], &REFRESH_COMMANDS[0], sizeof(REFRESH_COMMANDS));
|
||||
cursor_x = cursor_y = 0;
|
||||
currentFont = FONT_12;
|
||||
fontWidth = 12;
|
||||
inLeftHandedMode = false;
|
||||
firstStripPtr = &screenBuffer[FRAMEBUFFER_START];
|
||||
secondStripPtr = &screenBuffer[FRAMEBUFFER_START + OLED_WIDTH];
|
||||
fontHeight = 16;
|
||||
displayOffset = 0;
|
||||
displayOnOffState = true;
|
||||
memcpy(&screenBuffer[0], &REFRESH_COMMANDS[0], sizeof(REFRESH_COMMANDS));
|
||||
|
||||
HAL_Delay(50);
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_SET);
|
||||
HAL_Delay(50);
|
||||
//Send the setup settings
|
||||
i2c->Transmit( DEVICEADDR_OLED, (uint8_t*) OLED_Setup_Array,
|
||||
sizeof(OLED_Setup_Array));
|
||||
displayOnOff(true);
|
||||
HAL_Delay(50);
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_SET);
|
||||
HAL_Delay(50);
|
||||
// Send the setup settings
|
||||
FRToSI2C::Transmit(DEVICEADDR_OLED, (uint8_t*)OLED_Setup_Array,
|
||||
sizeof(OLED_Setup_Array));
|
||||
displayOnOff(true);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -76,259 +88,262 @@ void OLED::initialize() {
|
||||
* Precursor is the command char that is used to select the table.
|
||||
*/
|
||||
void OLED::drawChar(char c, char PrecursorCommand) {
|
||||
if (c == '\n' && cursor_y == 0) {
|
||||
cursor_x = 0;
|
||||
cursor_y = 8;
|
||||
}
|
||||
if (c < ' ') {
|
||||
return;
|
||||
}
|
||||
uint16_t index = 0;
|
||||
if (PrecursorCommand == 0) {
|
||||
//Fonts are offset to start at the space char
|
||||
index = (c - ' ');
|
||||
} else {
|
||||
//This is for extended range
|
||||
//We decode the precursor command to find the offset
|
||||
//Latin starts at 96
|
||||
c -= 0x80;
|
||||
if (c == '\n' && cursor_y == 0) {
|
||||
cursor_x = 0;
|
||||
cursor_y = 8;
|
||||
}
|
||||
if (c < ' ') {
|
||||
return;
|
||||
}
|
||||
uint16_t index = 0;
|
||||
if (PrecursorCommand == 0) {
|
||||
// Fonts are offset to start at the space char
|
||||
index = (c - ' ');
|
||||
} else {
|
||||
// This is for extended range
|
||||
// We decode the precursor command to find the offset
|
||||
// Latin starts at 96
|
||||
c -= 0x80;
|
||||
|
||||
switch (PrecursorCommand) {
|
||||
|
||||
case 0xC2:
|
||||
index = (96 - 32) + (c);
|
||||
break; //-32 compensate for chars excluded from font C2 section
|
||||
case 0xC3:
|
||||
index = (128) + (c);
|
||||
break;
|
||||
#if defined(LANG_RU) || defined(LANG_UK) || defined(LANG_SR) || defined(LANG_BG) || defined(LANG_MK)
|
||||
case 0xD0:
|
||||
index = (192) + (c);
|
||||
break;
|
||||
case 0xD1:
|
||||
index = (256) + (c);
|
||||
break;
|
||||
switch (PrecursorCommand) {
|
||||
case 0xC2:
|
||||
index = (96 - 32) + (c);
|
||||
break; //-32 compensate for chars excluded from font C2 section
|
||||
case 0xC3:
|
||||
index = (128) + (c);
|
||||
break;
|
||||
#if defined(LANG_RU) || defined(LANG_UK) || defined(LANG_SR) || \
|
||||
defined(LANG_BG) || defined(LANG_MK)
|
||||
case 0xD0:
|
||||
index = (192) + (c);
|
||||
break;
|
||||
case 0xD1:
|
||||
index = (256) + (c);
|
||||
break;
|
||||
#else
|
||||
case 0xC4:
|
||||
index = (192) + (c);
|
||||
break;
|
||||
case 0xC5:
|
||||
index = (256) + (c);
|
||||
break;
|
||||
case 0xC4:
|
||||
index = (192) + (c);
|
||||
break;
|
||||
case 0xC5:
|
||||
index = (256) + (c);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
uint8_t* charPointer;
|
||||
charPointer = ((uint8_t*) currentFont)
|
||||
+ ((fontWidth * (fontHeight / 8)) * index);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
uint8_t* charPointer;
|
||||
charPointer =
|
||||
((uint8_t*)currentFont) + ((fontWidth * (fontHeight / 8)) * index);
|
||||
|
||||
drawArea(cursor_x, cursor_y, fontWidth, fontHeight, charPointer);
|
||||
drawArea(cursor_x, cursor_y, fontWidth, fontHeight, charPointer);
|
||||
|
||||
cursor_x += fontWidth;
|
||||
cursor_x += fontWidth;
|
||||
}
|
||||
|
||||
void OLED::setRotation(bool leftHanded) {
|
||||
if (inLeftHandedMode == leftHanded) {
|
||||
return;
|
||||
}
|
||||
if (inLeftHandedMode == leftHanded) {
|
||||
return;
|
||||
}
|
||||
|
||||
//send command struct again with changes
|
||||
if (leftHanded) {
|
||||
OLED_Setup_Array[11] = 0xC8; //c1?
|
||||
OLED_Setup_Array[19] = 0xA1;
|
||||
} else {
|
||||
OLED_Setup_Array[11] = 0xC0;
|
||||
OLED_Setup_Array[19] = 0xA0;
|
||||
}
|
||||
i2c->Transmit( DEVICEADDR_OLED, (uint8_t*) OLED_Setup_Array,
|
||||
sizeof(OLED_Setup_Array));
|
||||
inLeftHandedMode = leftHanded;
|
||||
// send command struct again with changes
|
||||
if (leftHanded) {
|
||||
OLED_Setup_Array[11] = 0xC8; // c1?
|
||||
OLED_Setup_Array[19] = 0xA1;
|
||||
} else {
|
||||
OLED_Setup_Array[11] = 0xC0;
|
||||
OLED_Setup_Array[19] = 0xA0;
|
||||
}
|
||||
FRToSI2C::Transmit(DEVICEADDR_OLED, (uint8_t*)OLED_Setup_Array,
|
||||
sizeof(OLED_Setup_Array));
|
||||
inLeftHandedMode = leftHanded;
|
||||
|
||||
screenBuffer[5] = inLeftHandedMode ? 0 : 32; //display is shifted by 32 in left handed mode as driver ram is 128 wide
|
||||
screenBuffer[7] = inLeftHandedMode ? 95 : 0x7F; //End address of the ram segment we are writing to (96 wide)
|
||||
screenBuffer[9] = inLeftHandedMode ? 0xC8 : 0xC0;
|
||||
screenBuffer[5] =
|
||||
inLeftHandedMode ? 0 : 32; // display is shifted by 32 in left handed
|
||||
// mode as driver ram is 128 wide
|
||||
screenBuffer[7] =
|
||||
inLeftHandedMode
|
||||
? 95
|
||||
: 0x7F; // End address of the ram segment we are writing to (96 wide)
|
||||
screenBuffer[9] = inLeftHandedMode ? 0xC8 : 0xC0;
|
||||
}
|
||||
|
||||
//print a string to the current cursor location
|
||||
// print a string to the current cursor location
|
||||
void OLED::print(const char* str) {
|
||||
while (str[0]) {
|
||||
if (str[0] >= 0x80) {
|
||||
drawChar(str[1], str[0]);
|
||||
str++; //skip this marker
|
||||
} else
|
||||
drawChar(str[0]);
|
||||
str++;
|
||||
}
|
||||
while (str[0]) {
|
||||
if (str[0] >= 0x80) {
|
||||
drawChar(str[1], str[0]);
|
||||
str++; // skip this marker
|
||||
} else
|
||||
drawChar(str[0]);
|
||||
str++;
|
||||
}
|
||||
}
|
||||
|
||||
void OLED::setFont(uint8_t fontNumber) {
|
||||
if (fontNumber == 1) {
|
||||
//small font
|
||||
currentFont = FONT_6x8;
|
||||
fontHeight = 8;
|
||||
fontWidth = 6;
|
||||
} else if (fontNumber == 2) {
|
||||
currentFont = ExtraFontChars;
|
||||
fontHeight = 16;
|
||||
fontWidth = 12;
|
||||
} else {
|
||||
currentFont = FONT_12;
|
||||
fontHeight = 16;
|
||||
fontWidth = 12;
|
||||
}
|
||||
if (fontNumber == 1) {
|
||||
// small font
|
||||
currentFont = FONT_6x8;
|
||||
fontHeight = 8;
|
||||
fontWidth = 6;
|
||||
} else if (fontNumber == 2) {
|
||||
currentFont = ExtraFontChars;
|
||||
fontHeight = 16;
|
||||
fontWidth = 12;
|
||||
} else {
|
||||
currentFont = FONT_12;
|
||||
fontHeight = 16;
|
||||
fontWidth = 12;
|
||||
}
|
||||
}
|
||||
|
||||
//maximum places is 5
|
||||
// maximum places is 5
|
||||
void OLED::printNumber(uint16_t number, uint8_t places) {
|
||||
char buffer[7] = { 0 };
|
||||
char buffer[7] = {0};
|
||||
|
||||
if (places >= 5) {
|
||||
buffer[5] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
if (places > 4) {
|
||||
buffer[4] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
if (places >= 5) {
|
||||
buffer[5] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
if (places > 4) {
|
||||
buffer[4] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
|
||||
if (places > 3) {
|
||||
buffer[3] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
if (places > 3) {
|
||||
buffer[3] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
|
||||
if (places > 2) {
|
||||
buffer[2] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
if (places > 2) {
|
||||
buffer[2] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
|
||||
if (places > 1) {
|
||||
buffer[1] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
if (places > 1) {
|
||||
buffer[1] = '0' + number % 10;
|
||||
number /= 10;
|
||||
}
|
||||
|
||||
buffer[0] = '0' + number % 10;
|
||||
number /= 10;
|
||||
print(buffer);
|
||||
buffer[0] = '0' + number % 10;
|
||||
number /= 10;
|
||||
print(buffer);
|
||||
}
|
||||
|
||||
void OLED::drawSymbol(uint8_t symbolID) {
|
||||
//draw a symbol to the current cursor location
|
||||
setFont(2);
|
||||
drawChar(' ' + symbolID); // space offset is in all fonts, so we pad it here and remove it later
|
||||
setFont(0);
|
||||
// draw a symbol to the current cursor location
|
||||
setFont(2);
|
||||
drawChar(' ' + symbolID); // space offset is in all fonts, so we pad it here
|
||||
// and remove it later
|
||||
setFont(0);
|
||||
}
|
||||
|
||||
//Draw an area, but y must be aligned on 0/8 offset
|
||||
// Draw an area, but y must be aligned on 0/8 offset
|
||||
void OLED::drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
|
||||
const uint8_t* ptr) {
|
||||
// Splat this from x->x+wide in two strides
|
||||
if (x <= -wide)
|
||||
return; //cutoffleft
|
||||
if (x > 96)
|
||||
return; //cutoff right
|
||||
const uint8_t* ptr) {
|
||||
// Splat this from x->x+wide in two strides
|
||||
if (x <= -wide) return; // cutoffleft
|
||||
if (x > 96) return; // cutoff right
|
||||
|
||||
uint8_t visibleStart = 0;
|
||||
uint8_t visibleEnd = wide;
|
||||
uint8_t visibleStart = 0;
|
||||
uint8_t visibleEnd = wide;
|
||||
|
||||
// trimming to draw partials
|
||||
if (x < 0) {
|
||||
visibleStart -= x; //subtract negative value == add absolute value
|
||||
}
|
||||
if (x + wide > 96) {
|
||||
visibleEnd = 96 - x;
|
||||
}
|
||||
// trimming to draw partials
|
||||
if (x < 0) {
|
||||
visibleStart -= x; // subtract negative value == add absolute value
|
||||
}
|
||||
if (x + wide > 96) {
|
||||
visibleEnd = 96 - x;
|
||||
}
|
||||
|
||||
if (y == 0) {
|
||||
//Splat first line of data
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
firstStripPtr[xx + x] = ptr[xx];
|
||||
}
|
||||
}
|
||||
if (y == 8 || height == 16) {
|
||||
// Splat the second line
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
secondStripPtr[x + xx] = ptr[xx + (height == 16 ? wide : 0)];
|
||||
}
|
||||
}
|
||||
if (y == 0) {
|
||||
// Splat first line of data
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
firstStripPtr[xx + x] = ptr[xx];
|
||||
}
|
||||
}
|
||||
if (y == 8 || height == 16) {
|
||||
// Splat the second line
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
secondStripPtr[x + xx] = ptr[xx + (height == 16 ? wide : 0)];
|
||||
}
|
||||
}
|
||||
}
|
||||
void OLED::fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
|
||||
const uint8_t value) {
|
||||
// Splat this from x->x+wide in two strides
|
||||
if (x <= -wide)
|
||||
return; //cutoffleft
|
||||
if (x > 96)
|
||||
return; //cutoff right
|
||||
const uint8_t value) {
|
||||
// Splat this from x->x+wide in two strides
|
||||
if (x <= -wide) return; // cutoffleft
|
||||
if (x > 96) return; // cutoff right
|
||||
|
||||
uint8_t visibleStart = 0;
|
||||
uint8_t visibleEnd = wide;
|
||||
uint8_t visibleStart = 0;
|
||||
uint8_t visibleEnd = wide;
|
||||
|
||||
// trimming to draw partials
|
||||
if (x < 0) {
|
||||
visibleStart -= x; //subtract negative value == add absolute value
|
||||
}
|
||||
if (x + wide > 96) {
|
||||
visibleEnd = 96 - x;
|
||||
}
|
||||
// trimming to draw partials
|
||||
if (x < 0) {
|
||||
visibleStart -= x; // subtract negative value == add absolute value
|
||||
}
|
||||
if (x + wide > 96) {
|
||||
visibleEnd = 96 - x;
|
||||
}
|
||||
|
||||
if (y == 0) {
|
||||
//Splat first line of data
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
firstStripPtr[xx + x] = value;
|
||||
}
|
||||
}
|
||||
if (y == 8 || height == 16) {
|
||||
// Splat the second line
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
secondStripPtr[x + xx] = value;
|
||||
}
|
||||
}
|
||||
if (y == 0) {
|
||||
// Splat first line of data
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
firstStripPtr[xx + x] = value;
|
||||
}
|
||||
}
|
||||
if (y == 8 || height == 16) {
|
||||
// Splat the second line
|
||||
for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {
|
||||
secondStripPtr[x + xx] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OLED::drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1,
|
||||
bool clear) {
|
||||
//Draw this in 3 sections
|
||||
//This is basically a N wide version of vertical line
|
||||
bool clear) {
|
||||
// Draw this in 3 sections
|
||||
// This is basically a N wide version of vertical line
|
||||
|
||||
//Step 1 : Draw in the top few pixels that are not /8 aligned
|
||||
//LSB is at the top of the screen
|
||||
uint8_t mask = 0xFF;
|
||||
if (y0) {
|
||||
mask = mask << (y0 % 8);
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
if (clear)
|
||||
firstStripPtr[(y0 / 8) * 96 + col] &= ~mask;
|
||||
else
|
||||
firstStripPtr[(y0 / 8) * 96 + col] |= mask;
|
||||
}
|
||||
//Next loop down the line the total number of solids
|
||||
if (y0 / 8 != y1 / 8)
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
for (uint8_t r = (y0 / 8); r < (y1 / 8); r++) {
|
||||
//This gives us the row index r
|
||||
if (clear)
|
||||
firstStripPtr[(r * 96) + col] = 0;
|
||||
else
|
||||
firstStripPtr[(r * 96) + col] = 0xFF;
|
||||
}
|
||||
// Step 1 : Draw in the top few pixels that are not /8 aligned
|
||||
// LSB is at the top of the screen
|
||||
uint8_t mask = 0xFF;
|
||||
if (y0) {
|
||||
mask = mask << (y0 % 8);
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
if (clear)
|
||||
firstStripPtr[(y0 / 8) * 96 + col] &= ~mask;
|
||||
else
|
||||
firstStripPtr[(y0 / 8) * 96 + col] |= mask;
|
||||
}
|
||||
// Next loop down the line the total number of solids
|
||||
if (y0 / 8 != y1 / 8)
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
for (uint8_t r = (y0 / 8); r < (y1 / 8); r++) {
|
||||
// This gives us the row index r
|
||||
if (clear)
|
||||
firstStripPtr[(r * 96) + col] = 0;
|
||||
else
|
||||
firstStripPtr[(r * 96) + col] = 0xFF;
|
||||
}
|
||||
|
||||
//Finally draw the tail
|
||||
mask = ~(mask << (y1 % 8));
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
if (clear)
|
||||
firstStripPtr[(y1 / 8) * 96 + col] &= ~mask;
|
||||
else
|
||||
firstStripPtr[(y1 / 8) * 96 + col] |= mask;
|
||||
// Finally draw the tail
|
||||
mask = ~(mask << (y1 % 8));
|
||||
for (uint8_t col = x0; col < x1; col++)
|
||||
if (clear)
|
||||
firstStripPtr[(y1 / 8) * 96 + col] &= ~mask;
|
||||
else
|
||||
firstStripPtr[(y1 / 8) * 96 + col] |= mask;
|
||||
}
|
||||
|
||||
void OLED::drawHeatSymbol(uint8_t state) {
|
||||
//Draw symbol 14
|
||||
//Then draw over it botom 5 pixels always stay. 8 pixels above that are the levels
|
||||
state /= 12; // 0-> 8 range
|
||||
//Then we want to draw down (16-(5+state)
|
||||
uint8_t cursor_x_temp = cursor_x;
|
||||
drawSymbol(14);
|
||||
drawFilledRect(cursor_x_temp, 0, cursor_x_temp + 12, 2 + (8 - state), true);
|
||||
// Draw symbol 14
|
||||
// Then draw over it, the bottom 5 pixels always stay. 8 pixels above that are
|
||||
// the levels masks the symbol nicely
|
||||
state /= 12; // 0-> 8 range
|
||||
// Then we want to draw down (16-(5+state)
|
||||
uint8_t cursor_x_temp = cursor_x;
|
||||
drawSymbol(14);
|
||||
drawFilledRect(cursor_x_temp, 0, cursor_x_temp + 12, 2 + (8 - state), true);
|
||||
}
|
||||
|
||||
@@ -4,61 +4,62 @@
|
||||
* Created on: 29 Sep 2016
|
||||
* Author: Ralim
|
||||
*
|
||||
* This file holds the users settings and saves / restores them to the devices flash
|
||||
* This file holds the users settings and saves / restores them to the
|
||||
* devices flash
|
||||
*/
|
||||
|
||||
#include "Settings.h"
|
||||
#include "Setup.h"
|
||||
#define FLASH_ADDR (0x8000000|0xFC00)/*Flash start OR'ed with the maximum amount of flash - 1024 bytes*/
|
||||
#define FLASH_ADDR \
|
||||
(0x8000000 | \
|
||||
0xFC00) /*Flash start OR'ed with the maximum amount of flash - 1024 bytes*/
|
||||
#include "string.h"
|
||||
volatile systemSettingsType systemSettings;
|
||||
|
||||
void saveSettings() {
|
||||
//First we erase the flash
|
||||
FLASH_EraseInitTypeDef pEraseInit;
|
||||
pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
|
||||
pEraseInit.Banks = FLASH_BANK_1;
|
||||
pEraseInit.NbPages = 1;
|
||||
pEraseInit.PageAddress = FLASH_ADDR;
|
||||
uint32_t failingAddress = 0;
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
__HAL_FLASH_CLEAR_FLAG(
|
||||
FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | FLASH_FLAG_BSY);
|
||||
HAL_FLASH_Unlock();
|
||||
HAL_Delay(10);
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
HAL_FLASHEx_Erase(&pEraseInit, &failingAddress);
|
||||
//^ Erase the page of flash (1024 bytes on this stm32)
|
||||
//erased the chunk
|
||||
//now we program it
|
||||
uint16_t *data = (uint16_t*) &systemSettings;
|
||||
HAL_FLASH_Unlock();
|
||||
|
||||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_ADDR + (i * 2),
|
||||
data[i]);
|
||||
}
|
||||
HAL_FLASH_Lock();
|
||||
// First we erase the flash
|
||||
FLASH_EraseInitTypeDef pEraseInit;
|
||||
pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
|
||||
pEraseInit.Banks = FLASH_BANK_1;
|
||||
pEraseInit.NbPages = 1;
|
||||
pEraseInit.PageAddress = FLASH_ADDR;
|
||||
uint32_t failingAddress = 0;
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR |
|
||||
FLASH_FLAG_BSY);
|
||||
HAL_FLASH_Unlock();
|
||||
HAL_Delay(10);
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
HAL_FLASHEx_Erase(&pEraseInit, &failingAddress);
|
||||
//^ Erase the page of flash (1024 bytes on this stm32)
|
||||
// erased the chunk
|
||||
// now we program it
|
||||
uint16_t *data = (uint16_t *)&systemSettings;
|
||||
HAL_FLASH_Unlock();
|
||||
|
||||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_ADDR + (i * 2),
|
||||
data[i]);
|
||||
}
|
||||
HAL_FLASH_Lock();
|
||||
}
|
||||
|
||||
void restoreSettings() {
|
||||
//We read the flash
|
||||
uint16_t *data = (uint16_t*) &systemSettings;
|
||||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
|
||||
data[i] = *((uint16_t*) (FLASH_ADDR + (i * 2)));
|
||||
}
|
||||
|
||||
//if the version is correct were done
|
||||
//if not we reset and save
|
||||
if (systemSettings.version != SETTINGSVERSION) {
|
||||
//probably not setup
|
||||
resetSettings();
|
||||
}
|
||||
// We read the flash
|
||||
uint16_t *data = (uint16_t *)&systemSettings;
|
||||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
|
||||
data[i] = *((uint16_t *)(FLASH_ADDR + (i * 2)));
|
||||
}
|
||||
|
||||
// if the version is correct were done
|
||||
// if not we reset and save
|
||||
if (systemSettings.version != SETTINGSVERSION) {
|
||||
// probably not setup
|
||||
resetSettings();
|
||||
}
|
||||
}
|
||||
//Lookup function for cutoff setting -> X10 voltage
|
||||
// Lookup function for cutoff setting -> X10 voltage
|
||||
/*
|
||||
* 0=DC
|
||||
* 1=3S
|
||||
@@ -67,36 +68,54 @@ void restoreSettings() {
|
||||
* 4=6S
|
||||
*/
|
||||
uint8_t lookupVoltageLevel(uint8_t level) {
|
||||
if (level == 0)
|
||||
return 90; //9V since iron does not function effectively below this
|
||||
else
|
||||
return (level * 33) + (33 * 2);
|
||||
if (level == 0)
|
||||
return 90; // 9V since iron does not function effectively below this
|
||||
else
|
||||
return (level * 33) + (33 * 2);
|
||||
}
|
||||
void resetSettings() {
|
||||
memset((void*) &systemSettings, 0, sizeof(systemSettingsType));
|
||||
systemSettings.SleepTemp = 150; //Temperature the iron sleeps at - default 150.0 C
|
||||
systemSettings.SleepTime = 6; //How many seconds/minutes we wait until going to sleep - default 1 min
|
||||
systemSettings.SolderingTemp = 320; //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.detailedSoldering = 0; // Detailed soldering screen
|
||||
systemSettings.detailedIDLE = 0;// Detailed idle screen (off for first time users)
|
||||
systemSettings.OrientationMode = 2; //Default to automatic
|
||||
systemSettings.sensitivity = 7; //Default high sensitivity
|
||||
systemSettings.voltageDiv = 467; //Default divider from schematic
|
||||
systemSettings.ShutdownTime = 10;//How many minutes until the unit turns itself off
|
||||
systemSettings.boostModeEnabled = 1;//Default to safe, with no boost mode
|
||||
systemSettings.BoostTemp = 420; //default to 400C
|
||||
systemSettings.autoStartMode = 0; //Auto start off for safety
|
||||
systemSettings.coolingTempBlink = 0;//Blink the temperature on the cooling screen when its > 50C
|
||||
systemSettings.temperatureInF = 0; //default to 0
|
||||
systemSettings.descriptionScrollSpeed = 0; //default to slow
|
||||
systemSettings.PID_P = 42;
|
||||
systemSettings.PID_I = 50;
|
||||
systemSettings.PID_D = 15;
|
||||
systemSettings.CalibrationOffset = 2780; // the adc offset
|
||||
systemSettings.customTipGain = 0; // The tip type is either default or a custom gain
|
||||
systemSettings.tipType = TS_B2;
|
||||
saveSettings();
|
||||
}
|
||||
memset((void *)&systemSettings, 0, sizeof(systemSettingsType));
|
||||
systemSettings.SleepTemp =
|
||||
150; // Temperature the iron sleeps at - default 150.0 C
|
||||
systemSettings.SleepTime = 6; // How many seconds/minutes we wait until going
|
||||
// to sleep - default 1 min
|
||||
systemSettings.SolderingTemp = 320; // Default soldering temp is 320.0 C
|
||||
systemSettings.cutoutSetting = 0; // default to no cut-off voltage (or 18W for TS80)
|
||||
systemSettings.version =
|
||||
SETTINGSVERSION; // Store the version number to allow for easier upgrades
|
||||
systemSettings.detailedSoldering = 0; // Detailed soldering screen
|
||||
systemSettings.detailedIDLE =
|
||||
0; // Detailed idle screen (off for first time users)
|
||||
systemSettings.OrientationMode = 2; // Default to automatic
|
||||
systemSettings.sensitivity = 7; // Default high sensitivity
|
||||
#ifdef MODEL_TS80
|
||||
systemSettings.voltageDiv = 780; // Default divider from schematic
|
||||
|
||||
#else
|
||||
systemSettings.voltageDiv = 467; // Default divider from schematic
|
||||
#endif
|
||||
systemSettings.ShutdownTime =
|
||||
10; // How many minutes until the unit turns itself off
|
||||
systemSettings.boostModeEnabled =
|
||||
1; // Default to having boost mode on as most people prefer itF
|
||||
systemSettings.BoostTemp = 420; // default to 400C
|
||||
systemSettings.autoStartMode = 0; // Auto start off for safety
|
||||
systemSettings.coolingTempBlink =
|
||||
0; // Blink the temperature on the cooling screen when its > 50C
|
||||
systemSettings.temperatureInF = 0; // default to 0
|
||||
systemSettings.descriptionScrollSpeed = 0; // default to slow
|
||||
systemSettings.PID_P = 42; // PID tuning constants
|
||||
systemSettings.PID_I = 50;
|
||||
systemSettings.PID_D = 15;
|
||||
systemSettings.CalibrationOffset = 2780; // the adc offset
|
||||
systemSettings.customTipGain =
|
||||
0; // The tip type is either default or a custom gain
|
||||
#ifdef MODEL_TS100
|
||||
systemSettings.tipType = TS_B2; // Default to the B2 Tip
|
||||
#endif
|
||||
#ifdef MODEL_TS80
|
||||
|
||||
systemSettings.tipType = TS_B02; // Default to the B2 Tip
|
||||
#endif
|
||||
saveSettings(); // Save defaults
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@ IWDG_HandleTypeDef hiwdg;
|
||||
TIM_HandleTypeDef htim2;
|
||||
TIM_HandleTypeDef htim3;
|
||||
|
||||
uint16_t ADCReadings[64]; //room for 32 lots of the pair of readings
|
||||
uint16_t ADCReadings[64]; // room for 32 lots of the pair of readings
|
||||
|
||||
//Functions
|
||||
// Functions
|
||||
void SystemClock_Config(void);
|
||||
static void MX_ADC1_Init(void);
|
||||
static void MX_I2C1_Init(void);
|
||||
@@ -31,344 +31,340 @@ static void MX_GPIO_Init(void);
|
||||
static void MX_ADC2_Init(void);
|
||||
|
||||
void Setup_HAL() {
|
||||
SystemClock_Config();
|
||||
MX_GPIO_Init();
|
||||
MX_DMA_Init();
|
||||
MX_I2C1_Init();
|
||||
MX_ADC1_Init();
|
||||
MX_ADC2_Init();
|
||||
MX_TIM3_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_IWDG_Init();
|
||||
HAL_ADC_Start(&hadc2);
|
||||
HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t*) ADCReadings, 64); //start DMA of normal readings
|
||||
HAL_ADCEx_InjectedStart(&hadc1); //enable injected readings
|
||||
HAL_ADCEx_InjectedStart(&hadc2); //enable injected readings
|
||||
|
||||
|
||||
SystemClock_Config();
|
||||
__HAL_AFIO_REMAP_SWJ_DISABLE();
|
||||
MX_GPIO_Init();
|
||||
MX_DMA_Init();
|
||||
MX_I2C1_Init();
|
||||
MX_ADC1_Init();
|
||||
MX_ADC2_Init();
|
||||
MX_TIM3_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_IWDG_Init();
|
||||
HAL_ADC_Start(&hadc2);
|
||||
HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t*)ADCReadings,
|
||||
64); // start DMA of normal readings
|
||||
HAL_ADCEx_InjectedStart(&hadc1); // enable injected readings
|
||||
HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings
|
||||
}
|
||||
|
||||
//channel 0 -> temperature sensor, 1-> VIN
|
||||
// channel 0 -> temperature sensor, 1-> VIN
|
||||
uint16_t getADC(uint8_t channel) {
|
||||
uint32_t sum = 0;
|
||||
for (uint8_t i = 0; i < 32; i++)
|
||||
sum += ADCReadings[channel + (i * 2)];
|
||||
return sum >> 2;
|
||||
uint32_t sum = 0;
|
||||
for (uint8_t i = 0; i < 32; i++) sum += ADCReadings[channel + (i * 2)];
|
||||
return sum >> 2;
|
||||
}
|
||||
|
||||
/** System Clock Configuration
|
||||
*/
|
||||
void SystemClock_Config(void) {
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit;
|
||||
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit;
|
||||
/**Initializes the CPU, AHB and APB busses clocks
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType =
|
||||
RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI;
|
||||
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||
RCC_OscInitStruct.HSICalibrationValue = 16;
|
||||
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; // 64MHz
|
||||
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||
|
||||
/**Initializes the CPU, AHB and APB busses clocks
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI
|
||||
| RCC_OSCILLATORTYPE_LSI;
|
||||
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||
RCC_OscInitStruct.HSICalibrationValue = 16;
|
||||
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; //64MHz
|
||||
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||
/**Initializes the CPU, AHB and APB busses clocks
|
||||
*/
|
||||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
|
||||
RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
|
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV16; // TIM
|
||||
// 2,3,4,5,6,7,12,13,14
|
||||
RCC_ClkInitStruct.APB2CLKDivider =
|
||||
RCC_HCLK_DIV1; // 64 mhz to some peripherals and adc
|
||||
|
||||
/**Initializes the CPU, AHB and APB busses clocks
|
||||
*/
|
||||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
|
||||
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
|
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV16; //TIM 2,3,4,5,6,7,12,13,14
|
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; //64 mhz to some peripherals and adc
|
||||
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
|
||||
|
||||
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
|
||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
|
||||
PeriphClkInit.AdcClockSelection =
|
||||
RCC_ADCPCLK2_DIV6; // 6 or 8 are the only non overclocked options
|
||||
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
|
||||
|
||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
|
||||
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; //6 or 8 are the only non overclocked options
|
||||
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
|
||||
/**Configure the Systick interrupt time
|
||||
*/
|
||||
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
|
||||
|
||||
/**Configure the Systick interrupt time
|
||||
*/
|
||||
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
|
||||
/**Configure the Systick
|
||||
*/
|
||||
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
||||
|
||||
/**Configure the Systick
|
||||
*/
|
||||
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
||||
|
||||
/* SysTick_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);
|
||||
/* SysTick_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);
|
||||
}
|
||||
|
||||
/* ADC1 init function */
|
||||
static void MX_ADC1_Init(void) {
|
||||
ADC_MultiModeTypeDef multimode;
|
||||
ADC_MultiModeTypeDef multimode;
|
||||
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
ADC_InjectionConfTypeDef sConfigInjected;
|
||||
/**Common config
|
||||
*/
|
||||
hadc1.Instance = ADC1;
|
||||
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc1.Init.NbrOfConversion = 2;
|
||||
HAL_ADC_Init(&hadc1);
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
ADC_InjectionConfTypeDef sConfigInjected;
|
||||
/**Common config
|
||||
*/
|
||||
hadc1.Instance = ADC1;
|
||||
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc1.Init.ContinuousConvMode = ENABLE;
|
||||
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc1.Init.NbrOfConversion = 2;
|
||||
HAL_ADC_Init(&hadc1);
|
||||
|
||||
/**Configure the ADC multi-mode
|
||||
*/
|
||||
multimode.Mode = ADC_DUALMODE_REGSIMULT_INJECSIMULT;
|
||||
HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode);
|
||||
/**Configure the ADC multi-mode
|
||||
*/
|
||||
multimode.Mode = ADC_DUALMODE_REGSIMULT_INJECSIMULT;
|
||||
HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode);
|
||||
|
||||
/**Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = ADC_CHANNEL_7;
|
||||
sConfig.Rank = 1;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
|
||||
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
|
||||
/**Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = TMP36_ADC1_CHANNEL;
|
||||
sConfig.Rank = 1;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
|
||||
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
|
||||
|
||||
/**Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = ADC_CHANNEL_9;
|
||||
sConfig.Rank = 2;
|
||||
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
|
||||
/**Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = VIN_ADC1_CHANNEL;
|
||||
sConfig.Rank = 2;
|
||||
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
|
||||
|
||||
/**Configure Injected Channel
|
||||
*/
|
||||
//F in = 10.66 MHz
|
||||
/*
|
||||
* Injected time is 1 delay clock + (12 adc cycles*4)+4*sampletime =~217 clocks = 0.2ms
|
||||
* Charge time is 0.016 uS ideally
|
||||
* So Sampling time must be >= 0.016uS
|
||||
* 1/10.66MHz is 0.09uS, so 1 CLK is *should* be enough
|
||||
* */
|
||||
sConfigInjected.InjectedChannel = ADC_CHANNEL_8;
|
||||
sConfigInjected.InjectedRank = 1;
|
||||
sConfigInjected.InjectedNbrOfConversion = 4;
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_7CYCLES_5;
|
||||
sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T2_CC1;
|
||||
sConfigInjected.AutoInjectedConv = DISABLE;
|
||||
sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;
|
||||
sConfigInjected.InjectedOffset = 0;
|
||||
/**Configure Injected Channel
|
||||
*/
|
||||
// F in = 10.66 MHz
|
||||
/*
|
||||
* Injected time is 1 delay clock + (12 adc cycles*4)+4*sampletime =~217
|
||||
* clocks = 0.2ms Charge time is 0.016 uS ideally So Sampling time must be >=
|
||||
* 0.016uS 1/10.66MHz is 0.09uS, so 1 CLK is *should* be enough
|
||||
* */
|
||||
sConfigInjected.InjectedChannel = TIP_TEMP_ADC1_CHANNEL;
|
||||
sConfigInjected.InjectedRank = 1;
|
||||
sConfigInjected.InjectedNbrOfConversion = 4;
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_7CYCLES_5;
|
||||
sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T2_CC1;
|
||||
sConfigInjected.AutoInjectedConv = DISABLE;
|
||||
sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;
|
||||
sConfigInjected.InjectedOffset = 0;
|
||||
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
||||
sConfigInjected.InjectedRank = 2;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = 3;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = 4;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
SET_BIT(hadc1.Instance->CR1, ( ADC_CR1_JEOCIE )); //Enable end of injected conv irq
|
||||
// Run ADC internal calibration
|
||||
while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
|
||||
;
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
||||
sConfigInjected.InjectedRank = 2;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = 3;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = 4;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);
|
||||
SET_BIT(hadc1.Instance->CR1,
|
||||
(ADC_CR1_JEOCIE)); // Enable end of injected conv irq
|
||||
// Run ADC internal calibration
|
||||
while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
|
||||
;
|
||||
}
|
||||
|
||||
/* ADC2 init function */
|
||||
static void MX_ADC2_Init(void) {
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
ADC_InjectionConfTypeDef sConfigInjected;
|
||||
|
||||
ADC_ChannelConfTypeDef sConfig;
|
||||
ADC_InjectionConfTypeDef sConfigInjected;
|
||||
/**Common config
|
||||
*/
|
||||
hadc2.Instance = ADC2;
|
||||
hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc2.Init.ContinuousConvMode = ENABLE;
|
||||
hadc2.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc2.Init.NbrOfConversion = 2;
|
||||
HAL_ADC_Init(&hadc2);
|
||||
|
||||
/**Common config
|
||||
*/
|
||||
hadc2.Instance = ADC2;
|
||||
hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
|
||||
hadc2.Init.ContinuousConvMode = ENABLE;
|
||||
hadc2.Init.DiscontinuousConvMode = DISABLE;
|
||||
hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||
hadc2.Init.NbrOfConversion = 2;
|
||||
HAL_ADC_Init(&hadc2);
|
||||
/**Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = TIP_TEMP_ADC2_CHANNEL;
|
||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
|
||||
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
|
||||
sConfig.Channel = VIN_ADC2_CHANNEL;
|
||||
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
|
||||
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
|
||||
|
||||
/**Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = ADC_CHANNEL_8;
|
||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
|
||||
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
|
||||
sConfig.Channel = ADC_CHANNEL_8;
|
||||
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
|
||||
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
|
||||
/**Configure Injected Channel
|
||||
*/
|
||||
sConfigInjected.InjectedChannel = TIP_TEMP_ADC2_CHANNEL;
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_1;
|
||||
sConfigInjected.InjectedNbrOfConversion = 4;
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_7CYCLES_5;
|
||||
sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T2_CC1;
|
||||
sConfigInjected.AutoInjectedConv = DISABLE;
|
||||
sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;
|
||||
sConfigInjected.InjectedOffset = 0;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
||||
|
||||
/**Configure Injected Channel
|
||||
*/
|
||||
sConfigInjected.InjectedChannel = ADC_CHANNEL_8;
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_1;
|
||||
sConfigInjected.InjectedNbrOfConversion = 4;
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_7CYCLES_5;
|
||||
sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T2_CC1;
|
||||
sConfigInjected.AutoInjectedConv = DISABLE;
|
||||
sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;
|
||||
sConfigInjected.InjectedOffset = 0;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
||||
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_2;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_3;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_4;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
|
||||
// Run ADC internal calibration
|
||||
while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK)
|
||||
;
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_2;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_3;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_4;
|
||||
HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);
|
||||
|
||||
// Run ADC internal calibration
|
||||
while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK)
|
||||
;
|
||||
}
|
||||
/* I2C1 init function */
|
||||
static void MX_I2C1_Init(void) {
|
||||
|
||||
hi2c1.Instance = I2C1;
|
||||
hi2c1.Init.ClockSpeed = 100000; // OLED doesnt handle >100k when its asleep (off).
|
||||
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
||||
hi2c1.Init.OwnAddress1 = 0;
|
||||
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
||||
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
||||
hi2c1.Init.OwnAddress2 = 0;
|
||||
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
||||
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
||||
HAL_I2C_Init(&hi2c1);
|
||||
|
||||
hi2c1.Instance = I2C1;
|
||||
hi2c1.Init.ClockSpeed =
|
||||
100000; // OLED doesnt handle >100k when its asleep (off).
|
||||
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
||||
hi2c1.Init.OwnAddress1 = 0;
|
||||
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
||||
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
||||
hi2c1.Init.OwnAddress2 = 0;
|
||||
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
||||
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
||||
HAL_I2C_Init(&hi2c1);
|
||||
}
|
||||
|
||||
/* IWDG init function */
|
||||
static void MX_IWDG_Init(void) {
|
||||
|
||||
hiwdg.Instance = IWDG;
|
||||
hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
|
||||
hiwdg.Init.Reload = 100;
|
||||
HAL_IWDG_Init(&hiwdg);
|
||||
|
||||
hiwdg.Instance = IWDG;
|
||||
hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
|
||||
hiwdg.Init.Reload = 100;
|
||||
HAL_IWDG_Init(&hiwdg);
|
||||
}
|
||||
|
||||
/* TIM3 init function */
|
||||
static void MX_TIM3_Init(void) {
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig;
|
||||
TIM_MasterConfigTypeDef sMasterConfig;
|
||||
TIM_OC_InitTypeDef sConfigOC;
|
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig;
|
||||
TIM_MasterConfigTypeDef sMasterConfig;
|
||||
TIM_OC_InitTypeDef sConfigOC;
|
||||
htim3.Instance = TIM3;
|
||||
htim3.Init.Prescaler = 2;
|
||||
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim3.Init.Period = 100; // 10 Khz PWM freq
|
||||
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4; // 4mhz before div
|
||||
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
HAL_TIM_Base_Init(&htim3);
|
||||
|
||||
htim3.Instance = TIM3;
|
||||
htim3.Init.Prescaler = 2;
|
||||
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim3.Init.Period = 100; //10 Khz PWM freq
|
||||
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4; //4mhz before div
|
||||
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
HAL_TIM_Base_Init(&htim3);
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);
|
||||
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);
|
||||
HAL_TIM_PWM_Init(&htim3);
|
||||
|
||||
HAL_TIM_PWM_Init(&htim3);
|
||||
HAL_TIM_OC_Init(&htim3);
|
||||
|
||||
HAL_TIM_OC_Init(&htim3);
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);
|
||||
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 50;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, PWM_Out_CHANNEL);
|
||||
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 50;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
/**TIM3 GPIO Configuration
|
||||
PB4 ------> TIM3_CH1
|
||||
*/
|
||||
GPIO_InitStruct.Pin = PWM_Out_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(PWM_Out_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
__HAL_AFIO_REMAP_TIM3_PARTIAL()
|
||||
;
|
||||
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
/**TIM3 GPIO Configuration
|
||||
PWM_Out_Pin ------> TIM3_CH1
|
||||
*/
|
||||
GPIO_InitStruct.Pin = PWM_Out_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(PWM_Out_GPIO_Port, &GPIO_InitStruct);
|
||||
#ifdef MODEL_TS100
|
||||
// Remap TIM3_CH1 to be on pB4
|
||||
__HAL_AFIO_REMAP_TIM3_PARTIAL();
|
||||
#else
|
||||
// No re-map required
|
||||
#endif
|
||||
HAL_TIM_PWM_Start(&htim3, PWM_Out_CHANNEL);
|
||||
}
|
||||
/* TIM3 init function */
|
||||
static void MX_TIM2_Init(void) {
|
||||
/*
|
||||
* We use the channel 1 to trigger the ADC at end of PWM period
|
||||
* And we use the channel 4 as the PWM modulation source using Interrupts
|
||||
* */
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig;
|
||||
TIM_MasterConfigTypeDef sMasterConfig;
|
||||
TIM_OC_InitTypeDef sConfigOC;
|
||||
/*
|
||||
* We use the channel 1 to trigger the ADC at end of PWM period
|
||||
* And we use the channel 4 as the PWM modulation source using Interrupts
|
||||
* */
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig;
|
||||
TIM_MasterConfigTypeDef sMasterConfig;
|
||||
TIM_OC_InitTypeDef sConfigOC;
|
||||
|
||||
//Timer 2 is fairly slow as its being used to run the PWM and trigger the ADC in the PWM off time.
|
||||
htim2.Instance = TIM2;
|
||||
htim2.Init.Prescaler = 2000; // pwm out is 10k, we want to run our PWM at around 100hz
|
||||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim2.Init.Period = 122;
|
||||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4; //4mhz before divide
|
||||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
HAL_TIM_Base_Init(&htim2);
|
||||
// Timer 2 is fairly slow as its being used to run the PWM and trigger the ADC
|
||||
// in the PWM off time.
|
||||
htim2.Instance = TIM2;
|
||||
htim2.Init.Prescaler =
|
||||
2000; // pwm out is 10k, we want to run our PWM at around 100hz
|
||||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim2.Init.Period = 122;
|
||||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4; // 4mhz before divide
|
||||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
HAL_TIM_Base_Init(&htim2);
|
||||
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);
|
||||
|
||||
HAL_TIM_PWM_Init(&htim2);
|
||||
HAL_TIM_OC_Init(&htim2);
|
||||
HAL_TIM_PWM_Init(&htim2);
|
||||
HAL_TIM_OC_Init(&htim2);
|
||||
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
|
||||
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 118;
|
||||
/*
|
||||
* It takes 4 milliseconds for output to be stable after PWM turns off.
|
||||
* Assume ADC samples in 0.5ms
|
||||
* We need to set this to 100% + 5.5ms
|
||||
* */
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 118;
|
||||
/*
|
||||
* It takes 4 milliseconds for output to be stable after PWM turns off.
|
||||
* Assume ADC samples in 0.5ms
|
||||
* We need to set this to 100% + 5.5ms
|
||||
* */
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
|
||||
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);
|
||||
|
||||
HAL_TIM_Base_Start_IT(&htim2);
|
||||
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
|
||||
HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_4);
|
||||
HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
|
||||
HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);
|
||||
|
||||
HAL_TIM_Base_Start_IT(&htim2);
|
||||
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
|
||||
HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_4);
|
||||
HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable DMA controller clock
|
||||
*/
|
||||
static void MX_DMA_Init(void) {
|
||||
/* DMA controller clock enable */
|
||||
__HAL_RCC_DMA1_CLK_ENABLE()
|
||||
;
|
||||
|
||||
/* DMA interrupt init */
|
||||
/* DMA1_Channel1_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 15, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
||||
/* DMA1_Channel6_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 15, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
|
||||
/* DMA1_Channel7_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 15, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
|
||||
/* DMA controller clock enable */
|
||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||
|
||||
/* DMA interrupt init */
|
||||
/* DMA1_Channel1_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 15, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
||||
/* DMA1_Channel6_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 15, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
|
||||
/* DMA1_Channel7_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 15, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
|
||||
}
|
||||
|
||||
/** Configure pins as
|
||||
@@ -382,71 +378,73 @@ static void MX_DMA_Init(void) {
|
||||
PB1 ------> ADCx_IN9
|
||||
*/
|
||||
static void MX_GPIO_Init(void) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
;
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
;
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
;
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
/*Configure GPIO pins : PD0 PD1 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||
/*Configure peripheral I/O remapping */
|
||||
__HAL_AFIO_REMAP_PD01_ENABLE();
|
||||
//^ remap XTAL so that pins can be analog (all input buffers off).
|
||||
// reduces power consumption
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
/*Configure GPIO pins : PD0 PD1 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||
/*
|
||||
* Configure All pins as analog by default
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
|
||||
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 |
|
||||
GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_15;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |
|
||||
#ifdef MODEL_TS100
|
||||
GPIO_PIN_3 |
|
||||
#endif
|
||||
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 |
|
||||
GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |
|
||||
GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PA0 PA1 PA2 PA3
|
||||
PA4 PA5 PA10 PA15 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3
|
||||
| GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12
|
||||
| GPIO_PIN_15;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
#ifdef MODEL_TS100
|
||||
/* Pull USB lines low to disable, pull down debug too*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14 | GPIO_PIN_13;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_RESET);
|
||||
#else
|
||||
/* TS80 */
|
||||
/* Leave USB lines open circuit*/
|
||||
|
||||
//Set PA 11 and PA 12 to GND to stop usb detection, 13/14 re-rused for debug
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14 | GPIO_PIN_13;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_RESET);
|
||||
#endif
|
||||
|
||||
/*Configure GPIO pins : KEY_B_Pin KEY_A_Pin */
|
||||
GPIO_InitStruct.Pin = KEY_B_Pin | KEY_A_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
/*Configure GPIO pins : KEY_B_Pin KEY_A_Pin */
|
||||
GPIO_InitStruct.Pin = KEY_B_Pin | KEY_A_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(KEY_B_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : TIP_TEMP_Pin VIN_Pin PB2 */
|
||||
GPIO_InitStruct.Pin = TIP_TEMP_Pin | VIN_Pin | GPIO_PIN_2;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : OLED_RESET_Pin */
|
||||
GPIO_InitStruct.Pin = OLED_RESET_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(OLED_RESET_GPIO_Port, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/* Configure GPIO pins : INT_Orientation_Pin INT_Movement_Pin */
|
||||
/* Not used anymore*/
|
||||
GPIO_InitStruct.Pin = INT_Orientation_Pin | INT_Movement_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure peripheral I/O remapping */
|
||||
__HAL_AFIO_REMAP_PD01_ENABLE();
|
||||
//^ remap XTAL so that pins can be analog (all input buffers off).
|
||||
// reduces power consumption
|
||||
/*Configure GPIO pin : OLED_RESET_Pin */
|
||||
GPIO_InitStruct.Pin = OLED_RESET_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(OLED_RESET_GPIO_Port, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);
|
||||
|
||||
// Pull down LCD reset
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);
|
||||
HAL_Delay(10);
|
||||
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// WARNING: THIS FILE WAS AUTO GENERATED BY make_translation.py. PLEASE DO NOT EDIT.
|
||||
// WARNING: THIS FILE WAS AUTO GENERATED BY make_translation.py. PLEASE DO NOT
|
||||
// EDIT.
|
||||
|
||||
#include "Translation.h"
|
||||
#ifndef LANG
|
||||
@@ -29,6 +30,7 @@ const char* SettingsDescriptions[] = {
|
||||
/* TipModel */ "Tip Model selection",
|
||||
/* SimpleCalibrationMode */ "Simple Calibration using Hot water",
|
||||
/* AdvancedCalibrationMode */ "Advanced calibration using thermocouple on the tip",
|
||||
/* Power Input */ "The power rating of the power adapter",
|
||||
};
|
||||
|
||||
const char* SettingsCalibrationDone = "Calibration done!";
|
||||
@@ -81,17 +83,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Soldering settings",
|
||||
/* PowerSavingMenu */ "Power saving settings",
|
||||
/* UIMenu */ "User interface settings",
|
||||
/* AdvancedMenu */ "Advanced options",
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -172,17 +167,17 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Поялник\nНастройки",
|
||||
/* PowerSavingMenu */ "Режими\nНастройки",
|
||||
/* UIMenu */ "Интерфейс\nНастройки",
|
||||
/* AdvancedMenu */ "Разширени\nНастройки",
|
||||
/* SolderingMenu */ "Поялник\nНастройки",
|
||||
/* PowerSavingMenu */ "Режими\nНастройки",
|
||||
/* UIMenu */ "Интерфейс\nНастройки",
|
||||
/* AdvancedMenu */ "Разширени\nНастройки",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Настройки на поялника",
|
||||
/* PowerSavingMenu */ "Настройки енергоспестяване",
|
||||
/* UIMenu */ "Настройки на интерфейса",
|
||||
/* AdvancedMenu */ "Допълнителни настройки",
|
||||
/* SolderingMenu */ "Настройки на поялника",
|
||||
/* PowerSavingMenu */ "Настройки енергоспестяване",
|
||||
/* UIMenu */ "Настройки на интерфейса",
|
||||
/* AdvancedMenu */ "Допълнителни настройки",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -263,17 +258,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Pájecí\nnastavení",
|
||||
/* PowerSavingMenu */ "Režim\nspánku",
|
||||
/* UIMenu */ "Uživatelské\nrozhraní",
|
||||
/* AdvancedMenu */ "Pokročilé\nvolby",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Nastavení pájení (boost, auto start...)",
|
||||
/* PowerSavingMenu */ "Nastavení režimu spánku, automatického vypnutí...",
|
||||
/* UIMenu */ "Nastavení uživatelského rozhraní.",
|
||||
/* AdvancedMenu */ "Pokročilé volby (detailní obrazovky, kalibrace, tovární nastavení...)",
|
||||
/* SolderingMenu */ "Pájecí\nnastavení",
|
||||
/* PowerSavingMenu */ "Režim\nspánku",
|
||||
/* UIMenu */ "Uživatelské\nrozhraní",
|
||||
/* AdvancedMenu */ "Pokročilé\nvolby",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -354,17 +342,17 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Löt-\neinstellungen",
|
||||
/* PowerSavingMenu */ "Schlaf-\nmodus",
|
||||
/* UIMenu */ "Menü-\neinstellungen",
|
||||
/* AdvancedMenu */ "Erweiterte\nEinstellungen",
|
||||
/* SolderingMenu */ "Löt-\neinstellungen",
|
||||
/* PowerSavingMenu */ "Schlaf-\nmodus",
|
||||
/* UIMenu */ "Menü-\neinstellungen",
|
||||
/* AdvancedMenu */ "Erweiterte\nEinstellungen",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Löteinstellungen",
|
||||
/* PowerSavingMenu */ "Energiespareinstellungen",
|
||||
/* UIMenu */ "Menüeinstellungen",
|
||||
/* AdvancedMenu */ "Erweiterte Einstellungen",
|
||||
/* SolderingMenu */ "Löteinstellungen",
|
||||
/* PowerSavingMenu */ "Energiespareinstellungen",
|
||||
/* UIMenu */ "Menüeinstellungen",
|
||||
/* AdvancedMenu */ "Erweiterte Einstellungen",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -445,17 +433,17 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Soldering settings",
|
||||
/* PowerSavingMenu */ "Power Saving Settings",
|
||||
/* UIMenu */ "User Interface settings",
|
||||
/* AdvancedMenu */ "Advanced options",
|
||||
/* SolderingMenu */ "Soldering settings",
|
||||
/* PowerSavingMenu */ "Power Saving Settings",
|
||||
/* UIMenu */ "User Interface settings",
|
||||
/* AdvancedMenu */ "Advanced options",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -536,17 +524,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Opciones de\nSoldadura",
|
||||
/* PowerSavingMenu */ "Modos de\nReposo",
|
||||
/* UIMenu */ "Interfaz\nde Usuario",
|
||||
/* AdvancedMenu */ "Opciones\nAvanzadas",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Opciones de Soldadura",
|
||||
/* PowerSavingMenu */ "Opciones de ahorro energético",
|
||||
/* UIMenu */ "Opciones de interfaz de usuario",
|
||||
/* AdvancedMenu */ "Opciones avanzadas",
|
||||
/* SolderingMenu */ "Opciones de\nSoldadura",
|
||||
/* PowerSavingMenu */ "Modos de\nReposo",
|
||||
/* UIMenu */ "Interfaz\nde Usuario",
|
||||
/* AdvancedMenu */ "Opciones\nAvanzadas",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -627,17 +608,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Juotos-\nasetukset",
|
||||
/* PowerSavingMenu */ "Lepotilan\nasetukset",
|
||||
/* UIMenu */ "Käyttö-\nliittymä",
|
||||
/* AdvancedMenu */ "Lisä-\nasetukset",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Juotosasetukset",
|
||||
/* PowerSavingMenu */ "Virransäästöasetukset",
|
||||
/* UIMenu */ "Käyttöliittymän asetukset",
|
||||
/* AdvancedMenu */ "Lisäasetukset",
|
||||
/* SolderingMenu */ "Juotos-\nasetukset",
|
||||
/* PowerSavingMenu */ "Lepotilan\nasetukset",
|
||||
/* UIMenu */ "Käyttö-\nliittymä",
|
||||
/* AdvancedMenu */ "Lisä-\nasetukset",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -718,17 +692,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Soudure\nParamètres",
|
||||
/* PowerSavingMenu */ "Mode\nVeille",
|
||||
/* UIMenu */ "Interface\nUtilisateur",
|
||||
/* AdvancedMenu */ "Options\nAdvanced",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Paramètres de soudage",
|
||||
/* PowerSavingMenu */ "Paramètres d'économie d'énergie",
|
||||
/* UIMenu */ "Paramètres de l'interface utilisateur",
|
||||
/* AdvancedMenu */ "Options avancées",
|
||||
/* SolderingMenu */ "Soudure\nParamètres",
|
||||
/* PowerSavingMenu */ "Mode\nVeille",
|
||||
/* UIMenu */ "Interface\nUtilisateur",
|
||||
/* AdvancedMenu */ "Options\nAdvanced",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -809,17 +776,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Postavke\nlemljenja",
|
||||
/* PowerSavingMenu */ "Ušteda\nenergije",
|
||||
/* UIMenu */ "Korisničko\nsučelje",
|
||||
/* AdvancedMenu */ "Napredne\nopcije",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Postavke pri lemljenju",
|
||||
/* PowerSavingMenu */ "Postavke spavanja i štednje energije",
|
||||
/* UIMenu */ "Postavke korisničkog sučelja",
|
||||
/* AdvancedMenu */ "Upravljanje naprednim opcijama",
|
||||
/* SolderingMenu */ "Postavke\nlemljenja",
|
||||
/* PowerSavingMenu */ "Ušteda\nenergije",
|
||||
/* UIMenu */ "Korisničko\nsučelje",
|
||||
/* AdvancedMenu */ "Napredne\nopcije",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -900,17 +860,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Forrasztás\nBeállítások",
|
||||
/* PowerSavingMenu */ "Alvás\nMódok",
|
||||
/* UIMenu */ "Felhasználó\nfelület",
|
||||
/* AdvancedMenu */ "Speciális\nbeállítások",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Forrasztási beállítások",
|
||||
/* PowerSavingMenu */ "Energiatakarékossági beállítások",
|
||||
/* UIMenu */ "Felhasználói felület beállításai",
|
||||
/* AdvancedMenu */ "Speciális beállítások",
|
||||
/* SolderingMenu */ "Forrasztás\nBeállítások",
|
||||
/* PowerSavingMenu */ "Alvás\nMódok",
|
||||
/* UIMenu */ "Felhasználó\nfelület",
|
||||
/* AdvancedMenu */ "Speciális\nbeállítások",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1082,17 +1035,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Litavimo\nnustatymai",
|
||||
/* PowerSavingMenu */ "Miego\nrežimai",
|
||||
/* UIMenu */ "Naudotojo\nsąsaja",
|
||||
/* AdvancedMenu */ "Išplėstin.\nnustatymai",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Litavimo nustatymai",
|
||||
/* PowerSavingMenu */ "Energijos vartojimo nustatymai",
|
||||
/* UIMenu */ "Naudotojo sąsajos nustatymai",
|
||||
/* AdvancedMenu */ "Išplėstiniai nustatymai",
|
||||
/* SolderingMenu */ "Litavimo\nnustatymai",
|
||||
/* PowerSavingMenu */ "Miego\nrežimai",
|
||||
/* UIMenu */ "Naudotojo\nsąsaja",
|
||||
/* AdvancedMenu */ "Išplėstin.\nnustatymai",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1173,17 +1119,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Soldeer\nInstellingen",
|
||||
/* PowerSavingMenu */ "Slaap\nModes",
|
||||
/* UIMenu */ "Gebruikers-\nInterface",
|
||||
/* AdvancedMenu */ "geavanceerde\nInstellingen",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Soldeerinstellingen",
|
||||
/* PowerSavingMenu */ "Batterijbesparingsinstellingen",
|
||||
/* UIMenu */ "Gebruikersinterface Instellingen",
|
||||
/* AdvancedMenu */ "geavanceerde Instellingen",
|
||||
/* SolderingMenu */ "Soldeer\nInstellingen",
|
||||
/* PowerSavingMenu */ "Slaap\nModes",
|
||||
/* UIMenu */ "Gebruikers-\nInterface",
|
||||
/* AdvancedMenu */ "geavanceerde\nInstellingen",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1264,17 +1203,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Lodde-\ninnst.",
|
||||
/* PowerSavingMenu */ "Dvale-\ninnst.",
|
||||
/* UIMenu */ "Bruker-\ngrensesn.",
|
||||
/* AdvancedMenu */ "Avanserte\nvalg",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Loddeinnstillinger",
|
||||
/* PowerSavingMenu */ "Dvaleinnstillinger",
|
||||
/* UIMenu */ "Brukergrensesnitt-innstillinger",
|
||||
/* AdvancedMenu */ "Avanserte valg",
|
||||
/* SolderingMenu */ "Lodde-\ninnst.",
|
||||
/* PowerSavingMenu */ "Dvale-\ninnst.",
|
||||
/* UIMenu */ "Bruker-\ngrensesn.",
|
||||
/* AdvancedMenu */ "Avanserte\nvalg",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1355,17 +1287,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Soldering settings",
|
||||
/* PowerSavingMenu */ "Power Saving Settings",
|
||||
/* UIMenu */ "User Interface settings",
|
||||
/* AdvancedMenu */ "Advanced options",
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1446,17 +1371,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Configurações\nSolda",
|
||||
/* PowerSavingMenu */ "Modos\nRepouso",
|
||||
/* UIMenu */ "Interface\nUsuário",
|
||||
/* AdvancedMenu */ "Menu\nAvançado",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Configurações de soldagem",
|
||||
/* PowerSavingMenu */ "Configurações de economia de energia",
|
||||
/* UIMenu */ "Configurações da interface do usuário",
|
||||
/* AdvancedMenu */ "Opções avançadas",
|
||||
/* SolderingMenu */ "Configurações\nSolda",
|
||||
/* PowerSavingMenu */ "Modos\nRepouso",
|
||||
/* UIMenu */ "Interface\nUsuário",
|
||||
/* AdvancedMenu */ "Menu\nAvançado",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1537,17 +1455,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Параметры\nпайки",
|
||||
/* PowerSavingMenu */ "Режим\nсна",
|
||||
/* UIMenu */ "Пользовател\nинтерфейс",
|
||||
/* AdvancedMenu */ "Дополнител.\nпараметры",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Параметры пайки",
|
||||
/* PowerSavingMenu */ "Параметры экономии энергии",
|
||||
/* UIMenu */ "Параметры пользовательского интерфейса",
|
||||
/* AdvancedMenu */ "Дополнительные параметры",
|
||||
/* SolderingMenu */ "Параметры\nпайки",
|
||||
/* PowerSavingMenu */ "Режим\nсна",
|
||||
/* UIMenu */ "Пользовател\nинтерфейс",
|
||||
/* AdvancedMenu */ "Дополнител.\nпараметры",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1628,17 +1539,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Soldering settings",
|
||||
/* PowerSavingMenu */ "Power Saving Settings",
|
||||
/* UIMenu */ "User Interface settings",
|
||||
/* AdvancedMenu */ "Advanced options",
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1719,17 +1623,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Postavke\nlemljenja",
|
||||
/* PowerSavingMenu */ "Ušteda\nenergije",
|
||||
/* UIMenu */ "Korisničke\nopcije",
|
||||
/* AdvancedMenu */ "Napredne\nopcije",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Postavke pri lemljenju",
|
||||
/* PowerSavingMenu */ "Postavke spavanja i štednje energije",
|
||||
/* UIMenu */ "Postavke korisničkih opcija",
|
||||
/* AdvancedMenu */ "Upravljanje naprednim opcijama",
|
||||
/* SolderingMenu */ "Postavke\nlemljenja",
|
||||
/* PowerSavingMenu */ "Ušteda\nenergije",
|
||||
/* UIMenu */ "Korisničke\nopcije",
|
||||
/* AdvancedMenu */ "Napredne\nopcije",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1810,17 +1707,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Lödnings-\ninställningar",
|
||||
/* PowerSavingMenu */ "Vilo-\nlägen",
|
||||
/* UIMenu */ "Användar-\ngränssnitt",
|
||||
/* AdvancedMenu */ "Avancerade\nalternativ",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Lödningsinställningar",
|
||||
/* PowerSavingMenu */ "Viloläges-inställningar",
|
||||
/* UIMenu */ "Användargränssnitts-inställningar",
|
||||
/* AdvancedMenu */ "Avancerade alternativ",
|
||||
/* SolderingMenu */ "Lödnings-\ninställningar",
|
||||
/* PowerSavingMenu */ "Vilo-\nlägen",
|
||||
/* UIMenu */ "Användar-\ngränssnitt",
|
||||
/* AdvancedMenu */ "Avancerade\nalternativ",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1901,17 +1791,10 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Soldering settings",
|
||||
/* PowerSavingMenu */ "Power Saving Settings",
|
||||
/* UIMenu */ "User Interface settings",
|
||||
/* AdvancedMenu */ "Advanced options",
|
||||
/* SolderingMenu */ "Soldering\nSettings",
|
||||
/* PowerSavingMenu */ "Sleep\nModes",
|
||||
/* UIMenu */ "User\nInterface",
|
||||
/* AdvancedMenu */ "Advanced\nOptions",
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1992,17 +1875,9 @@ const char* SettingsShortNames[][2] = {
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntries[4] = {
|
||||
/* SolderingMenu */ "Пайка\n",
|
||||
/* PowerSavingMenu */ "Сон\n",
|
||||
/* UIMenu */ "Інтерфейс\n",
|
||||
/* AdvancedMenu */ "Інші\n",
|
||||
/* SolderingMenu */ "Пайка\n",
|
||||
/* PowerSavingMenu */ "Сон\n",
|
||||
/* UIMenu */ "Інтерфейс\n",
|
||||
/* AdvancedMenu */ "Інші\n",
|
||||
};
|
||||
|
||||
const char* SettingsMenuEntriesDescriptions[4] = {
|
||||
/* SolderingMenu */ "Налаштування для режиму пайки. Діють при включеному жалі.",
|
||||
/* PowerSavingMenu */ "Налаштування при бездіяльності. Корисно що б не обпектися і з часом не спалити житло.",
|
||||
/* UIMenu */ "Користувальницький інтерфейс.",
|
||||
/* AdvancedMenu */ "Розширені налаштування. Додаткові зручності.",
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,8 +5,10 @@
|
||||
* Author: Ben V. Brown
|
||||
*/
|
||||
|
||||
//These are all the functions for interacting with the hardware
|
||||
// These are all the functions for interacting with the hardware
|
||||
#include "hardware.h"
|
||||
#include "FreeRTos.h"
|
||||
#include "stm32f1xx_hal.h"
|
||||
volatile uint16_t PWMSafetyTimer = 0;
|
||||
volatile int16_t CalibrationTempOffset = 0;
|
||||
uint16_t tipGainCalValue = 0;
|
||||
@@ -22,32 +24,30 @@ void setCalibrationOffset(int16_t offSet) {
|
||||
}
|
||||
uint16_t getHandleTemperature() {
|
||||
// We return the current handle temperature in X10 C
|
||||
// TMP36 in handle, 0.5V offset and then 10mV per deg C (0.75V @ 25C for example)
|
||||
// STM32 = 4096 count @ 3.3V input -> But
|
||||
// We oversample by 32/(2^2) = 8 times oversampling
|
||||
// Therefore 32768 is the 3.3V input, so 0.201416015625 mV per count
|
||||
// So we need to subtract an offset of 0.5V to center on 0C (2482*2 counts)
|
||||
// TMP36 in handle, 0.5V offset and then 10mV per deg C (0.75V @ 25C for
|
||||
// example) STM32 = 4096 count @ 3.3V input -> But We oversample by 32/(2^2) =
|
||||
// 8 times oversampling Therefore 32768 is the 3.3V input, so 0.1007080078125
|
||||
// mV per count So we need to subtract an offset of 0.5V to center on 0C
|
||||
// (4964.8 counts)
|
||||
//
|
||||
uint16_t result = getADC(0);
|
||||
if (result < 4964)
|
||||
return 0;
|
||||
result -= 4964; //remove 0.5V offset
|
||||
result /= 10; //convert to X10 C
|
||||
int32_t result = getADC(0);
|
||||
result -= 4965; // remove 0.5V offset
|
||||
// 10mV per C
|
||||
// 99.29 counts per Deg C above 0C
|
||||
result *= 10;
|
||||
result /= 993;
|
||||
return result;
|
||||
|
||||
}
|
||||
uint16_t tipMeasurementToC(uint16_t raw) {
|
||||
|
||||
//((Raw Tip-RawOffset) * calibrationgain) / 1000 = tip delta in CX10
|
||||
// tip delta in CX10 + handleTemp in CX10 = tip absolute temp in CX10
|
||||
//Div answer by 10 to get final result
|
||||
// Div answer by 10 to get final result
|
||||
|
||||
uint32_t tipDelta = ((raw - CalibrationTempOffset) * tipGainCalValue)
|
||||
/ 1000;
|
||||
tipDelta += getHandleTemperature();
|
||||
|
||||
return tipDelta / 10;
|
||||
|
||||
}
|
||||
uint16_t ctoTipMeasurement(uint16_t temp) {
|
||||
//[ (temp-handle/10) * 10000 ]/calibrationgain = tip raw delta
|
||||
@@ -59,37 +59,34 @@ uint16_t ctoTipMeasurement(uint16_t temp) {
|
||||
}
|
||||
|
||||
uint16_t tipMeasurementToF(uint16_t raw) {
|
||||
//Convert result from C to F
|
||||
// Convert result from C to F
|
||||
return (tipMeasurementToC(raw) * 9) / 5 + 32;
|
||||
|
||||
}
|
||||
uint16_t ftoTipMeasurement(uint16_t temp) {
|
||||
//Convert the temp back to C from F
|
||||
// Convert the temp back to C from F
|
||||
return ctoTipMeasurement(((temp - 32) * 5) / 9);
|
||||
}
|
||||
|
||||
uint16_t __attribute__ ((long_call, section (".data.ramfuncs"))) getTipInstantTemperature() {
|
||||
uint16_t getTipInstantTemperature() {
|
||||
uint16_t sum;
|
||||
sum = HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_1);
|
||||
sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_2);
|
||||
sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_3);
|
||||
sum += HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_4);
|
||||
sum += HAL_ADCEx_InjectedGetValue(&hadc2, ADC_INJECTED_RANK_1);
|
||||
sum += HAL_ADCEx_InjectedGetValue(&hadc2, ADC_INJECTED_RANK_2);
|
||||
sum += HAL_ADCEx_InjectedGetValue(&hadc2, ADC_INJECTED_RANK_3);
|
||||
sum += HAL_ADCEx_InjectedGetValue(&hadc2, ADC_INJECTED_RANK_4);
|
||||
|
||||
return sum; // 8x over sample
|
||||
|
||||
sum = hadc1.Instance->JDR1;
|
||||
sum += hadc1.Instance->JDR2;
|
||||
sum += hadc1.Instance->JDR3;
|
||||
sum += hadc1.Instance->JDR4;
|
||||
sum += hadc2.Instance->JDR1;
|
||||
sum += hadc2.Instance->JDR2;
|
||||
sum += hadc2.Instance->JDR3;
|
||||
sum += hadc2.Instance->JDR4;
|
||||
return sum; // 8x over sample
|
||||
}
|
||||
/*
|
||||
* Loopup table for the tip calibration values for
|
||||
* the gain of the tip's
|
||||
* This can be found by line of best fit of TipRaw on X, and TipTemp-handle on Y.
|
||||
* Then take the m term * 10000
|
||||
* This can be found by line of best fit of TipRaw on X, and TipTemp-handle on
|
||||
* Y. Then take the m term * 10000
|
||||
* */
|
||||
uint16_t lookupTipDefaultCalValue(enum TipType tipID) {
|
||||
|
||||
#ifdef MODEL_TS100
|
||||
switch (tipID) {
|
||||
case TS_D24:
|
||||
return 141;
|
||||
@@ -103,16 +100,28 @@ uint16_t lookupTipDefaultCalValue(enum TipType tipID) {
|
||||
case TS_B2:
|
||||
return 133;
|
||||
default:
|
||||
return 132; // make this the average of all
|
||||
return 132; // make this the average of all
|
||||
break;
|
||||
}
|
||||
#else
|
||||
switch (tipID) {
|
||||
case TS_D25:
|
||||
return 154;
|
||||
break;
|
||||
case TS_B02:
|
||||
return 154;
|
||||
break;
|
||||
default:
|
||||
return 154; // make this the average of all
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
uint16_t __attribute__ ((long_call, section (".data.ramfuncs"))) getTipRawTemp(
|
||||
uint8_t instant) {
|
||||
uint16_t getTipRawTemp(uint8_t instant) {
|
||||
static int64_t filterFP = 0;
|
||||
static uint16_t lastSample = 0;
|
||||
const uint8_t filterBeta = 7; //higher values smooth out more, but reduce responsiveness
|
||||
const uint8_t filterBeta = 7; // higher values smooth out more, but reduce responsiveness
|
||||
|
||||
if (instant == 1) {
|
||||
uint16_t itemp = getTipInstantTemperature();
|
||||
@@ -132,10 +141,10 @@ uint16_t __attribute__ ((long_call, section (".data.ramfuncs"))) getTipRawTemp(
|
||||
}
|
||||
}
|
||||
uint16_t getInputVoltageX10(uint16_t divisor) {
|
||||
//ADC maximum is 32767 == 3.3V at input == 28.05V at VIN
|
||||
//Therefore we can divide down from there
|
||||
//Multiplying ADC max by 4 for additional calibration options,
|
||||
//ideal term is 467
|
||||
// ADC maximum is 32767 == 3.3V at input == 28.05V at VIN
|
||||
// Therefore we can divide down from there
|
||||
// Multiplying ADC max by 4 for additional calibration options,
|
||||
// ideal term is 467
|
||||
#define BATTFILTERDEPTH 64
|
||||
static uint8_t preFillneeded = 1;
|
||||
static uint32_t samples[BATTFILTERDEPTH];
|
||||
@@ -157,27 +166,277 @@ uint16_t getInputVoltageX10(uint16_t divisor) {
|
||||
preFillneeded = 1;
|
||||
return sum * 4 / divisor;
|
||||
}
|
||||
#ifdef MODEL_TS80
|
||||
uint8_t QCMode = 0;
|
||||
void seekQC(int16_t Vx10) {
|
||||
if (QCMode <= 1)
|
||||
return; // NOT connected to a QC Charger
|
||||
if (Vx10 < 50)
|
||||
return;
|
||||
// Seek the QC to the Voltage given if this adapter supports continuous mode
|
||||
// try and step towards the wanted value
|
||||
|
||||
// 1. Measure current voltage
|
||||
int16_t vStart = getInputVoltageX10(195);
|
||||
int difference = Vx10 - vStart;
|
||||
|
||||
// 2. calculate ideal steps (0.2V changes)
|
||||
|
||||
int steps = difference / 2;
|
||||
if (QCMode == 3) {
|
||||
while (steps < 0) {
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
|
||||
vTaskDelay(3);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
||||
vTaskDelay(3);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
vTaskDelay(3);
|
||||
steps++;
|
||||
}
|
||||
while (steps > 0) {
|
||||
// step once up
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
|
||||
vTaskDelay(3);
|
||||
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
||||
vTaskDelay(3);
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
vTaskDelay(3);
|
||||
steps--;
|
||||
}
|
||||
}
|
||||
// Re-measure
|
||||
/* Disabled due to nothing to test and code space of around 1k*/
|
||||
#ifdef QC2_ROUND_DOWN
|
||||
steps = vStart - getInputVoltageX10(195);
|
||||
if (steps < 0) steps = -steps;
|
||||
if (steps > (difference / 2)) {
|
||||
// No continuous mode, so QC2
|
||||
QCMode = 2;
|
||||
// Goto nearest
|
||||
if (Vx10 > 10.5) {
|
||||
// request 12V
|
||||
// D- = 0.6V, D+ = 0.6V
|
||||
// Clamp PB3
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);// pull down D+
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
||||
|
||||
} else {
|
||||
// request 9V
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Must be called after FreeRToS Starts
|
||||
void startQC() {
|
||||
// Pre check that the input could be >5V already, and if so, dont both
|
||||
// negotiating as someone is feeding in hv
|
||||
uint16_t vin = getInputVoltageX10(205);
|
||||
if (vin > 150)
|
||||
return;// Over voltage
|
||||
if (vin > 100) {
|
||||
QCMode = 1; // ALready at ~12V
|
||||
return;
|
||||
}
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
// Tries to negotiate QC for 9V
|
||||
// This is a multiple step process.
|
||||
// 1. Set around 0.6V on D+ for 1.25 Seconds or so
|
||||
// 2. After this It should un-short D+->D- and instead add a 20k pulldown on
|
||||
// D-
|
||||
// 3. Now set D+ to 3.3V and D- to 0.6V to request 9V
|
||||
// OR both at 0.6V for 12V request (if the adapter can do it).
|
||||
// If 12V is implimented then should fallback to 9V after validation
|
||||
// Step 1. We want to pull D+ to 0.6V
|
||||
// Pull PB3 donwn to ground
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);// pull low to put 0.6V on D+
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_3;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);// pull low to put 0.6V on D+
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
||||
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14 | GPIO_PIN_13;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
// Delay 1.25 seconds
|
||||
uint8_t enteredQC = 0;
|
||||
for (uint16_t i = 0; i < 130 && enteredQC == 0; i++) {
|
||||
// HAL_Delay(10);
|
||||
vTaskDelay(1);
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
}
|
||||
// Check if D- is low to spot a QC charger
|
||||
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11) == GPIO_PIN_RESET)
|
||||
enteredQC = 1;
|
||||
if (enteredQC) {
|
||||
// We have a QC capable charger
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
||||
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_8;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
|
||||
// Wait for frontend ADC to stabilise
|
||||
QCMode = 4;
|
||||
for (uint8_t i = 0; i < 10; i++) {
|
||||
if (getInputVoltageX10(195) > 80) {
|
||||
// yay we have at least QC2.0 or QC3.0
|
||||
QCMode = 3;// We have at least QC2, pray for 3
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
|
||||
return;
|
||||
}
|
||||
vTaskDelay(10); // 100mS
|
||||
}
|
||||
QCMode = 0;
|
||||
// No QC / not working to us
|
||||
|
||||
} else {
|
||||
// no QC
|
||||
}
|
||||
}
|
||||
// Get tip resistance in milliohms
|
||||
uint32_t calculateTipR(uint8_t useFilter) {
|
||||
// We inject a small current into the front end of the iron,
|
||||
// By measuring the Vdrop over the tip we can calculate the resistance
|
||||
// Turn PA0 into an output and drive high to inject (3.3V-0.6)/(6K8+Rtip)
|
||||
// current PA0->Diode -> 6K8 -> Tip -> GND So the op-amp will amplify the
|
||||
// small signal across the tip and convert this into an easily read voltage
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);// Set low first
|
||||
setTipPWM(0);
|
||||
vTaskDelay(1);
|
||||
uint32_t offReading = getTipInstantTemperature();
|
||||
for (uint8_t i = 0; i < 24; i++) {
|
||||
if (useFilter == 0) {
|
||||
vTaskDelay(1); // delay to allow it too stabilize
|
||||
offReading += getTipInstantTemperature();
|
||||
} else {
|
||||
offReading += getTipRawTemp(0);
|
||||
}
|
||||
}
|
||||
|
||||
// Turn on
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);// Set low first
|
||||
vTaskDelay(1);// delay to allow it too stabilize
|
||||
uint32_t onReading = getTipInstantTemperature();
|
||||
for (uint8_t i = 0; i < 24; i++) {
|
||||
if (useFilter == 0) {
|
||||
vTaskDelay(1); // delay to allow it too stabilize
|
||||
onReading += getTipInstantTemperature();
|
||||
} else {
|
||||
onReading += getTipRawTemp(0);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t difference = onReading - offReading;
|
||||
// V = IR, therefore I = V/R
|
||||
// We can divide this reading by a known "gain" to get the resulting
|
||||
// resistance This was determined emperically This tip is 4.688444162 ohms,
|
||||
// 4688 milliohms (Measured using 4 terminal measurement) 25x oversampling
|
||||
// reads this as around 47490 Almost perfectly 10x the milliohms value This
|
||||
// will drift massively with tip temp However we really only need 10x ohms
|
||||
return (difference / 10) + 1;// ceil
|
||||
}
|
||||
static unsigned int sqrt32(unsigned long n) {
|
||||
unsigned int c = 0x8000;
|
||||
unsigned int g = 0x8000;
|
||||
|
||||
for (;;) {
|
||||
if (g * g > n)
|
||||
g ^= c;
|
||||
c >>= 1;
|
||||
if (c == 0)
|
||||
return g;
|
||||
g |= c;
|
||||
}
|
||||
}
|
||||
int16_t calculateMaxVoltage(uint8_t useFilter, uint8_t useHP) {
|
||||
// This measures the tip resistance, then it calculates the appropriate
|
||||
// voltage To stay under ~18W. Mosfet is "9A", so no issues there
|
||||
// QC3.0 supports up to 18W, which is 2A @9V and 1.5A @12V
|
||||
uint32_t milliOhms = calculateTipR(useFilter);
|
||||
// Check no tip
|
||||
if (milliOhms > 10000)
|
||||
return -1;
|
||||
//
|
||||
// V = sqrt(18W*R)
|
||||
// Convert this to sqrt(18W)*sqrt(milli ohms)*sqrt(1/1000)
|
||||
|
||||
uint32_t Vx = sqrt32(milliOhms);
|
||||
if (useHP)
|
||||
Vx *= 1549;//sqrt(24)*sqrt(1/1000)
|
||||
else
|
||||
Vx *= 1342;// sqrt(18) * sqrt(1/1000)
|
||||
|
||||
// Round to nearest 200mV,
|
||||
// So divide by 100 to start, to get in Vxx
|
||||
Vx /= 100;
|
||||
if (Vx % 10 >= 5)
|
||||
Vx += 10;
|
||||
Vx /= 10;
|
||||
// Round to nearest increment of 2
|
||||
if (Vx % 2 == 1)
|
||||
Vx++;
|
||||
return Vx;
|
||||
}
|
||||
|
||||
#endif
|
||||
volatile uint32_t pendingPWM = 0;
|
||||
uint8_t getTipPWM() {
|
||||
return pendingPWM;
|
||||
}
|
||||
void __attribute__ ((long_call, section (".data.ramfuncs"))) setTipPWM(uint8_t pulse) {
|
||||
PWMSafetyTimer = 2; //This is decremented in the handler for PWM so that the tip pwm is disabled if the PID task is not scheduled often enough.
|
||||
void setTipPWM(uint8_t pulse) {
|
||||
PWMSafetyTimer = 2; // This is decremented in the handler for PWM so that the tip pwm is
|
||||
// disabled if the PID task is not scheduled often enough.
|
||||
if (pulse > 100)
|
||||
pulse = 100;
|
||||
|
||||
pendingPWM = pulse;
|
||||
}
|
||||
|
||||
//These are called by the HAL after the corresponding events from the system timers.
|
||||
// These are called by the HAL after the corresponding events from the system
|
||||
// timers.
|
||||
|
||||
void __attribute__ ((long_call, section (".data.ramfuncs"))) HAL_TIM_PeriodElapsedCallback(
|
||||
TIM_HandleTypeDef *htim) {
|
||||
//Period has elapsed
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
|
||||
// Period has elapsed
|
||||
if (htim->Instance == TIM2) {
|
||||
//we want to turn on the output again
|
||||
PWMSafetyTimer--; //We decrement this safety value so that lockups in the scheduler will not cause the PWM to become locked in an active driving state.
|
||||
//While we could assume this could never happen, its a small price for increased safety
|
||||
// we want to turn on the output again
|
||||
PWMSafetyTimer--; // We decrement this safety value so that lockups in the
|
||||
// scheduler will not cause the PWM to become locked in an
|
||||
// active driving state.
|
||||
// While we could assume this could never happen, its a small price for
|
||||
// increased safety
|
||||
htim2.Instance->CCR4 = pendingPWM;
|
||||
if (htim2.Instance->CCR4 && PWMSafetyTimer) {
|
||||
htim3.Instance->CCR1 = 50;
|
||||
@@ -192,15 +451,12 @@ void __attribute__ ((long_call, section (".data.ramfuncs"))) HAL_TIM_PeriodElaps
|
||||
}
|
||||
}
|
||||
|
||||
void __attribute__ ((long_call, section (".data.ramfuncs"))) HAL_TIM_PWM_PulseFinishedCallback(
|
||||
TIM_HandleTypeDef *htim) {
|
||||
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
|
||||
if (htim->Instance == TIM2) {
|
||||
//This was a when the PWM for the output has timed out
|
||||
// This was a when the PWM for the output has timed out
|
||||
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4) {
|
||||
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
|
||||
htim3.Instance->CCR1 = 0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -41,18 +41,6 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) {
|
||||
if (hadc->Instance == ADC1) {
|
||||
__HAL_RCC_ADC1_CLK_ENABLE()
|
||||
;
|
||||
/**ADC1 GPIO Configuration
|
||||
PA7 ------> ADC1_IN7
|
||||
PB0 ------> ADC1_IN8
|
||||
PB1 ------> ADC1_IN9
|
||||
*/
|
||||
GPIO_InitStruct.Pin = TMP36_INPUT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = TIP_TEMP_Pin | VIN_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* ADC1 DMA Init */
|
||||
/* ADC1 Init */
|
||||
@@ -100,7 +88,7 @@ void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) {
|
||||
GPIO_InitStruct.Pin = SCL_Pin | SDA_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* Peripheral clock enable */
|
||||
|
||||
@@ -45,25 +45,12 @@ void _exit (int status)
|
||||
|
||||
int _read (int file, char *ptr, int len)
|
||||
{
|
||||
int DataIdx;
|
||||
|
||||
for (DataIdx = 0; DataIdx < len; DataIdx++)
|
||||
{
|
||||
*ptr++ = __io_getchar();
|
||||
}
|
||||
|
||||
return len;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _write(int file, char *ptr, int len)
|
||||
{
|
||||
int DataIdx;
|
||||
|
||||
for (DataIdx = 0; DataIdx < len; DataIdx++)
|
||||
{
|
||||
__io_putchar(*ptr++);
|
||||
}
|
||||
return len;
|
||||
return 0;
|
||||
}
|
||||
|
||||
caddr_t _sbrk(int incr)
|
||||
|
||||
@@ -165,11 +165,6 @@
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-1-PROJECT_LOC/TS100/inc/stm32f1xx_it.h</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>inc/uRender.hpp</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-1-PROJECT_LOC/TS100/inc/uRender.hpp</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/FRToSI2C.cpp</name>
|
||||
<type>1</type>
|
||||
@@ -250,11 +245,6 @@
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-1-PROJECT_LOC/TS100/src/system_stm32f1xx.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src/uRender.cpp</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-1-PROJECT_LOC/TS100/src/uRender.cpp</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>startup/startup_stm32.s</name>
|
||||
<type>1</type>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="296187985853974766" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="com.atollic.truestudio.mbs.GCCSpecsDetectorAtollicArm" console="false" env-hash="100391687907069452" id="com.atollic.truestudio.mbs.provider" keep-relative-paths="false" name="Atollic ARM Tools Language Settings" parameter="${COMMAND} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
|
||||
Reference in New Issue
Block a user