diff options
author | discip <[email protected]> | 2022-09-10 12:52:57 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2022-09-10 20:52:57 +1000 |
commit | c89db78b45faae08bfd3acf45f55e0dc028b1add (patch) | |
tree | 10301bcec74fbb75439da3457b28de9deb9059fb | |
parent | 19a6e169a70b92e35c26104dfa252417a40ab9c3 (diff) | |
download | IronOS-c89db78b45faae08bfd3acf45f55e0dc028b1add.tar.gz IronOS-c89db78b45faae08bfd3acf45f55e0dc028b1add.zip |
Calibrate CJC at next boot (#1398)
Changes Cold Junction Compensation (Tip Offset / CJC) to be performed during bootup time. (After starting in settings)
45 files changed, 562 insertions, 547 deletions
diff --git a/Documentation/DebugMenu.md b/Documentation/DebugMenu.md index a0553a24..057f312c 100644 --- a/Documentation/DebugMenu.md +++ b/Documentation/DebugMenu.md @@ -3,9 +3,9 @@ In this firmware there is extra debugging information in a hidden sub-menu.
This menu is meant to be simple, so it has no fancy GUI animations.
-- Access by pressing the rear (``-/B``) button on the iron while it is on the home screen.
-- To scroll through the menu, use the front (``+/A``) button.
-- To exit, use the rear (``-/B``) button again.
+- Access it by pressing the rear button (`-/B`) on the iron while it is on the home screen.
+- Use the front button (`+/A`) to scroll through the menu.
+- To exit, use the rear button (`-/B`) again.
## Menu items
@@ -15,15 +15,6 @@ Items are shown in the menu on a single line, so they use short codes and appear - This is used by Irons that have an ID and serial number to help check if the iron is authentic. All Pinecil V1 show the same ID number as this is the number programmed into the MCU.
- The new Pinecil V2 released Aug. 2, 2022 now uses MCU BL706, which enables generating a unique ID/Serial number to every iron. This can be used to verify your [Pinecil authenticity here](https://pinecil.pine64.org/).
-### Time
-
-This is just uptime; it shows how many deciseconds the unit has been powered for (600 ds = 1 minute).
-
-### Move
-
-This is the last timestamp of movement. When the iron is moved, this should update to match the Time field (previous menu item).
-This can be used for checking performance of the movement detection code.
-
### ACC
This indicates the accelerometer that is fitted inside the unit.
@@ -33,47 +24,60 @@ This indicates the accelerometer that is fitted inside the unit. - BMA223
- MSA301
- SC7A20
-- None detected -> running in fallback without movement detection
+- None -> running in fallback without movement detection
- Scanning -> Still searching I2C for one
-### Tip Res
+### PWR
-This indicates the tip resistance that the device is currently using. For devices with multiple possible values to choose from (Pinecil V2), the appropriate value is automatically detected at every boot-up. Tip should be installed before boot-up or reading can not be done.
+This indicates the current power source for the iron.
+This may change during power up as the sources are negotiated in turn.
+
+- **DC** input (dumb)
+- **QC** input (We used QC2/3 negotiation for current supply)
+- **PD W. VBus** input (PD subsystem is used to negotiate for current supply); and VBus is connected to your input power source
+- **PD No VBus** input (PD subsystem is used to negotiate for current supply); and VBus is **NOT** connected to your input power source. If it is Not required or possible to do a special mod of your PCB (i.e. late model V1, some early Green PCB models) then [PD No VBus] displays on-screen ([see details and PD Debug section below](/Documentation/DebugMenu.md#pd-debug-menu)).
-### RTip
+### Vin
-This is the raw tip reading in μV. Tip must be installed or reading will be high/inaccurate. At cool, the range of 700-1000 is normal for larger tips and ~1500 for smaller tips (TS80). This is used to evaluate the calibration routines.
+The input voltage as read by the internal ADC. Can be used to sanity check it is being read correctly.
-### CTip
+### Tip C
-This is the tip temperature in degrees Celsius.
+This is the tip temperature in °C.
This can be used with RTip for assessing temperature processing performance.
-### CHan
+### Han C
-This is the handle temperature or more accurately the reading of the Cold Junction Compensation (CJC) temperature sensor. This is expressed in °C x 10 (29.0 °C ambient should read as 290). Range of 200-400 (20-40 °C) is normal depending on how hot/cold the room is and how long power has been plugged in which warms the PCB further.
+This is the handle temperature or more accurately the reading of the Cold Junction Compensation (CJC) temperature sensor. This is expressed in °C. Range of 20-40 °C is normal depending on how hot/cold the room is and how long power has been plugged in which warms the PCB further.
This is used for CJC of the tip temperature.
> If CHan is extremely high, this indicates the temperature sensor isn't reading correctly ([see Troubleshooting](/Documentation/Troubleshooting.md))
-### CMax
+### Max C
-This indicates the max temperature in °Celsius that the system estimates it can measure the tip reliably to.
+This indicates the max temperature in °C that the system estimates it can measure the tip reliably to.
This is dependent on a few factors including the handle temperature so it can move around during use. As you use the iron, the Max increases to a point.
-### Vin
+### UpTime
-The input voltage as read by the internal ADC. Can be used to sanity check it is being read correctly.
+This shows how many deciseconds the unit has been powered for (600 ds = 1 minute).
-### PWR
+### Move
-This indicates the current power source for the iron.
-This may change during power up as the sources are negotiated in turn.
+This is the last timestamp of movement. When the iron is moved, this should update to match the Time field (previous menu item).
+This can be used for checking performance of the movement detection code.
-- **DC** input (dumb)
-- **QC** input (We used QC2/3 negotiation for current supply)
-- **PD W. VBus** input (PD subsystem is used to negotiate for current supply); and VBus is connected to your input power source
-- **PD No VBus** input (PD subsystem is used to negotiate for current supply); and VBus is **NOT** connected to your input power source. If it is Not required or possible to do a special mod of your PCB (i.e. late model V1, some early Green PCB models) then [PD No VBus] displays on-screen ([see details and PD Debug section below](/Documentation/DebugMenu.md#pd-debug-menu)).
+### Tip Res
+
+This indicates the tip resistance that the device is currently using. For devices with multiple possible values to choose from (Pinecil V2), the appropriate value is automatically detected at every boot-up. Tip should be installed before boot-up or reading can not be done.
+
+### Tip R
+
+This is the raw tip reading in μV. Tip must be installed or reading will be high/inaccurate. At cool, the range of 700-1000 is normal for larger tips and ~1500 for smaller tips (TS80). This is used to evaluate the calibration routines.
+
+### Tip O
+
+This is the offset resulting from the *'Cold Junction Compensation Calibration'*.
### HW G
diff --git a/Documentation/Menu.md b/Documentation/Menu.md index da56b561..b073cf0c 100644 --- a/Documentation/Menu.md +++ b/Documentation/Menu.md @@ -44,15 +44,16 @@ What this is for: some tips have an offset on their readings which causes issues Caution: if the method below is not followed, the iron could be worse than before calibration. If you need to repeat the method, first unplug and let the handle/PCB cool down to room temperature. -1. Connect power to your iron (tip should be installed). -2. **Critical: make sure the tip & handle is at room temperature** (wait a good while after using the iron before calibration) -3. Using (`-/B`) scroll down to Advanced settings > press (`+/A`) to select > then (`-/B`) to scroll to Calibrate temperature? > press (`+/A`) -4. Important warning message is shown: *Confirm the tip & device are at room temperature before starting!* -5. Press the (`+/A`) button to confirm (tip/handle are at ambient temperature). -6. Display shows **`....`** for a short time as the unit measures and compares the tip and handle temperatures. -7. The display then goes back to *TMP CAL* and displays your *Offset number*. You generally don't need this offset unless debugging issues. -8. After you see an Offset number, calibration is done, just exit the settings menu normally, use (`-/B`). -9. You're done, enjoy your iron! +1. Connect power to your device. +2. Go to **`Advanced Settings`** using (`-/B`) and press (`+/A`) to select it. Use (`-/B`) to scroll to **`Calibrate CJC at next boot`** and confirm with (`+/A`). +3. Accept the *'warning text'* with (`+/A`). +3. Exit the settings menu as usual by pressing and holding (`-/B`). +4. Unplug you device. +5. **Critical: Make sure a tip is attached & wait until the tip & handle are at room temperature.** (Wait a reasonable amount of time after having used the device.) +6. Power the device and ideally keep it out of your hands (You know it might get warm.). +7. The display shows **`....`** for a short time while the device measures and compares the tip and handle voltages. +8. As a result the new *Offset value* is displayed. This value can later be viewed in the **`Debug menu`**. +9. Calibration is done and the device proceeds booting. Note: offsets are dependant on your tip, temperature sensor, and the MCU. It's the culmination of tolerances at rest. Typical values are 700-1000 range. This is only designed to be used at boot while cold (ambient room temperature), as temperatures drift apart as soon as power is connected. Doing this reading repeatedly could result in wide varience of the offset number and/or incorrect calibration. diff --git a/Documentation/Settings.md b/Documentation/Settings.md index dc8296c4..7501a2ad 100644 --- a/Documentation/Settings.md +++ b/Documentation/Settings.md @@ -125,13 +125,18 @@ On device help text: Flash temperature reading at idle if tip is hot -### Setting: Calibrate tip CJC +### Setting: Calibrate CJC at next boot -Used to calibrate the ADC+Op-amp offsets for the tip. This calibration must be performed when the tip temperature and the handle temperature are equal. Generally not required unless your device is reading more than 5°C off target. +Note: +If the difference between the target temperature and the measured temperature is less than 5°C, **calibration is NOT required at all**. + +This is used to calibrate the offset between ADC and Op-amp of the tip at next boot (Idealy it has to be done at boot, before internal components get warm.). But this setting is ***not permanent!*** It resetes after the calibration is completed (At next boot the checkbox will be unchecked!). If you need to repeat the calibration however, you have to set the checkbox *again*, unplug your device and let it cool down to room/ambient temperature & power it up, idealy while it sits on the desk. + +Hence, never repeat the calibration in quick succession! On device help text: -Tip-temperature Cold Junction Compensation (not needed if Tip is +/- 5°C of display) +Calibrate tip Cold Junction Compensation at the next boot (not required if Delta T is < 5°C) ### Setting: Restore default settings diff --git a/Documentation/Troubleshooting.md b/Documentation/Troubleshooting.md index 4b4d56cf..5eacc38b 100644 --- a/Documentation/Troubleshooting.md +++ b/Documentation/Troubleshooting.md @@ -46,13 +46,13 @@ If `CHan` is reading low: - Check the power pin connection on the TMP36 - Check pullup resistor on the NTC thermistor - Check no bridged pins or weak shorts on the signal to nearby pins on MCU or temperature sensor -- Reflow/resolder the the aforementioned components +- Reflow/resolder the aforementioned components If `CHan` is reading higher - Check ground connections on the sensors - Check no bridged pins or weak shorts on the signal to nearby pins on MCU or temperature sensor -- Reflow/resolder the the aforementioned components +- Reflow/resolder the aforementioned components ## No display OR dots on the display @@ -14,7 +14,7 @@ I highly recommend reading the installation guide fully when installing on your For soldering irons that are designed to be powered by 'smart' power sources (PD and QC), the firmware supports settings around the negotiated power and voltage. For soldering irons that are designed to be powered by batteries (TS100 & Pinecil), settings for a cutoff voltage for battery protection are supported. -There are 30 languages currently supported. When downloading the firmware for your soldering iron, take note of the language code in the file name. +Currently **31** languages are supported. When downloading the firmware for your soldering iron, take note of the language code in the file name. This project is considered feature complete for use as a soldering iron, _so please suggest any feature improvements you would like!_ diff --git a/Translations/make_translation.py b/Translations/make_translation.py index 8e6c7527..466679dd 100755 --- a/Translations/make_translation.py +++ b/Translations/make_translation.py @@ -120,20 +120,21 @@ def get_debug_menu() -> List[str]: return [ datetime.today().strftime("%d-%m-%y"), "ID ", + "ACC ", + "PWR ", + "Vin ", + "Tip C ", + "Han C ", + "Max C ", "UpTime ", - "Move ", - "ACC ", + "Move ", "Tip Res", - "RTip ", - "CTip ", - "CHan ", - "CMax ", - "Vin ", - "PWR ", - "HW G ", - "HW M ", - "HW P ", - "Hall ", + "Tip R ", + "Tip O ", + "HW G ", + "HW M ", + "HW P ", + "Hall ", ] diff --git a/Translations/translation_BE.json b/Translations/translation_BE.json index 1320ed10..f9e42cca 100644 --- a/Translations/translation_BE.json +++ b/Translations/translation_BE.json @@ -176,7 +176,7 @@ ],
"desc": "Міргаць тэмпературай на экране астуджэння, пакуль джала яшчэ гарачае"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Каліброўка",
"тэмпературы"
diff --git a/Translations/translation_BG.json b/Translations/translation_BG.json index 7ad0e6dc..5890c16d 100644 --- a/Translations/translation_BG.json +++ b/Translations/translation_BG.json @@ -175,7 +175,7 @@ ],
"desc": "След изключване от работен режим, индикатора за температура да мига докато човката на поялника все още е топла"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Калибриране",
"температура?"
diff --git a/Translations/translation_CS.json b/Translations/translation_CS.json index 943af115..85d85a03 100644 --- a/Translations/translation_CS.json +++ b/Translations/translation_CS.json @@ -175,7 +175,7 @@ ],
"desc": "Blikat teplotou při chladnutí dokud je hrot horký"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibrovat",
"teplotu?"
diff --git a/Translations/translation_DA.json b/Translations/translation_DA.json index 1c56b0f0..b789683f 100644 --- a/Translations/translation_DA.json +++ b/Translations/translation_DA.json @@ -175,7 +175,7 @@ ],
"desc": "Blink temperaturen på skærmen, mens spidsen stadig er varm."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Calibrate",
"temperature?"
diff --git a/Translations/translation_DE.json b/Translations/translation_DE.json index 41eedc55..bfb7bea7 100644 --- a/Translations/translation_DE.json +++ b/Translations/translation_DE.json @@ -7,7 +7,7 @@ ],
"tempUnitFahrenheit": false,
"messages": {
- "SettingsCalibrationWarning": "Nur Fortfahren wenn Lötspitze & Gerät Raumtemperatur haben!",
+ "SettingsCalibrationWarning": "Nur Kalibrieren wenn Lötspitze & Gerät Raumtemperatur haben!",
"SettingsResetWarning": "Sicher, dass alle Werte zurückgesetzt werden sollen?",
"UVLOWarningString": "V niedr.",
"UndervoltageString": "Unterspannung",
@@ -175,12 +175,12 @@ ],
"desc": "Temperaturanzeige blinkt beim Abkühlen, solange Spitze heiß ist"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Temperatur",
"kalibrieren?"
],
- "desc": "Kalibrierung der Kaltstellenkompensation (nicht nötig wenn Delta T < 5°C)"
+ "desc": "Kalibrierung der Kaltstellenkompensation beim nächsten Start (nicht nötig wenn Delta T < 5°C)"
},
"SettingsReset": {
"text2": [
diff --git a/Translations/translation_EL.json b/Translations/translation_EL.json index b70bd599..4c3622da 100644 --- a/Translations/translation_EL.json +++ b/Translations/translation_EL.json @@ -178,7 +178,7 @@ ],
"desc": "Αναβοσβήσιμο της ενδειξης θερμοκρασίας κατά την παύση θέρμανσης όταν η μύτη είναι ακόμα καυτή"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Βαθμονόμηση",
"θερμοκρασίας;"
diff --git a/Translations/translation_EN.json b/Translations/translation_EN.json index 54603693..3616a04b 100644 --- a/Translations/translation_EN.json +++ b/Translations/translation_EN.json @@ -1,340 +1,340 @@ -{ - "languageCode": "EN", - "languageLocalName": "English", - "fonts": [ - "ascii_basic", - "latin_extended" - ], - "tempUnitFahrenheit": true, - "messages": { - "SettingsCalibrationWarning": "Confirm the tip & device are at room temperature before starting!", - "SettingsResetWarning": "Are you sure you want to restore default settings?", - "UVLOWarningString": "DC LOW", - "UndervoltageString": "Undervoltage", - "InputVoltageString": "Input V: ", - "SleepingSimpleString": "Zzzz", - "SleepingAdvancedString": "Sleeping...", - "SleepingTipAdvancedString": "Tip:", - "OffString": "Off", - "DeviceFailedValidationWarning": "Your device is likely a Counterfeit!" - }, - "messagesWarn": { - "ResetOKMessage": "Reset OK", - "SettingsResetMessage": [ - "Certain settings", - "were changed!" - ], - "NoAccelerometerMessage": [ - "No accelerometer", - "detected!" - ], - "NoPowerDeliveryMessage": [ - "No USB-PD IC", - "detected!" - ], - "LockingKeysString": "LOCKED", - "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!", - "WarningThermalRunaway": [ - "Thermal", - "Runaway" - ] - }, - "characters": { - "SettingRightChar": "R", - "SettingLeftChar": "L", - "SettingAutoChar": "A", - "SettingOffChar": "O", - "SettingSlowChar": "S", - "SettingMediumChar": "M", - "SettingFastChar": "F", - "SettingStartNoneChar": "O", - "SettingStartSolderingChar": "S", - "SettingStartSleepChar": "Z", - "SettingStartSleepOffChar": "R", - "SettingSensitivityOff": "O", - "SettingSensitivityLow": "L", - "SettingSensitivityMedium": "M", - "SettingSensitivityHigh": "H", - "SettingLockDisableChar": "D", - "SettingLockBoostChar": "B", - "SettingLockFullChar": "F" - }, - "menuGroups": { - "PowerMenu": { - "text2": [ - "Power", - "settings" - ], - "desc": "Power settings" - }, - "SolderingMenu": { - "text2": [ - "Soldering", - "settings" - ], - "desc": "Soldering settings" - }, - "PowerSavingMenu": { - "text2": [ - "Sleep", - "mode" - ], - "desc": "Power saving settings" - }, - "UIMenu": { - "text2": [ - "User", - "interface" - ], - "desc": "User interface settings" - }, - "AdvancedMenu": { - "text2": [ - "Advanced", - "settings" - ], - "desc": "Advanced settings" - } - }, - "menuOptions": { - "DCInCutoff": { - "text2": [ - "Power", - "source" - ], - "desc": "Set cutoff voltage to prevent battery over-drain. (DC 10V) (S=3.3V per cell, disable PWR limit)" - }, - "SleepTemperature": { - "text2": [ - "Sleep", - "temp" - ], - "desc": "Tip temperature while in \"sleep mode\"" - }, - "SleepTimeout": { - "text2": [ - "Sleep", - "timeout" - ], - "desc": "Interval before \"sleep mode\" starts (s=seconds | m=minutes)" - }, - "ShutdownTimeout": { - "text2": [ - "Shutdown", - "timeout" - ], - "desc": "Interval before the iron shuts down (m=minutes)" - }, - "MotionSensitivity": { - "text2": [ - "Motion", - "sensitivity" - ], - "desc": "0=off | 1=least sensitive | ... | 9=most sensitive" - }, - "TemperatureUnit": { - "text2": [ - "Temperature", - "unit" - ], - "desc": "C=Celsius | F=Fahrenheit" - }, - "AdvancedIdle": { - "text2": [ - "Detailed", - "idle screen" - ], - "desc": "Display detailed info in a smaller font on idle screen" - }, - "DisplayRotation": { - "text2": [ - "Display", - "orientation" - ], - "desc": "R=right-handed | L=left-handed | A=automatic" - }, - "BoostTemperature": { - "text2": [ - "Boost", - "temp" - ], - "desc": "Tip temperature used in \"boost mode\"" - }, - "AutoStart": { - "text2": [ - "Start-up", - "behavior" - ], - "desc": "O=off | S=heat to soldering temp | Z=standby at sleep temp until moved | R=standby, heat-off until moved" - }, - "CooldownBlink": { - "text2": [ - "Cooldown", - "flashing" - ], - "desc": "Flash temperature reading at idle if tip is hot" - }, - "TemperatureCalibration": { - "text2": [ - "Calibrate", - "tip CJC" - ], - "desc": "Tip-temperature Cold Junction Compensation (not needed if Tip is +/- 5°C of display)" - }, - "SettingsReset": { - "text2": [ - "Restore default", - "settings" - ], - "desc": "Reset default settings for this firmware ver." - }, - "VoltageCalibration": { - "text2": [ - "Calibrate", - "input voltage" - ], - "desc": "Start VIN calibration (long press to exit)" - }, - "AdvancedSoldering": { - "text2": [ - "Detailed", - "solder screen" - ], - "desc": "Display detailed info in a smaller font on soldering screen" - }, - "ScrollingSpeed": { - "text2": [ - "Scrolling", - "speed" - ], - "desc": "Speed info text scrolls past at (S=slow | F=fast)" - }, - "QCMaxVoltage": { - "text2": [ - "QC", - "voltage" - ], - "desc": "Max QC voltage the iron should negotiate for" - }, - "PDNegTimeout": { - "text2": [ - "PD", - "timeout" - ], - "desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers" - }, - "PowerLimit": { - "text2": [ - "Power", - "limit" - ], - "desc": "Maximum power the iron can use (W=watt)" - }, - "ReverseButtonTempChange": { - "text2": [ - "Swap", - "+ - keys" - ], - "desc": "Reverse assignment of buttons for temperature adjustment" - }, - "TempChangeShortStep": { - "text2": [ - "Temp change", - "short" - ], - "desc": "Temperature-change-increment on short button press" - }, - "TempChangeLongStep": { - "text2": [ - "Temp change", - "long" - ], - "desc": "Temperature-change-increment on long button press" - }, - "PowerPulsePower": { - "text2": [ - "Power", - "pulse" - ], - "desc": "Intensity of power of keep-awake-pulse (watt)" - }, - "HallEffSensitivity": { - "text2": [ - "Hall sensor", - "sensitivity" - ], - "desc": "Sensitivity to magnets (0=off | 1=least sensitive | ... | 9=most sensitive)" - }, - "LockingMode": { - "text2": [ - "Allow locking", - "buttons" - ], - "desc": "While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)" - }, - "MinVolCell": { - "text2": [ - "Minimum", - "voltage" - ], - "desc": "Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)" - }, - "AnimLoop": { - "text2": [ - "Anim.", - "loop" - ], - "desc": "Loop icon animations in main menu" - }, - "AnimSpeed": { - "text2": [ - "Anim.", - "speed" - ], - "desc": "Pace of icon animations in menu (O=off | S=slow | M=medium | F=fast)" - }, - "PowerPulseWait": { - "text2": [ - "Power pulse", - "delay" - ], - "desc": "Delay before keep-awake-pulse is triggered (x 2.5s)" - }, - "PowerPulseDuration": { - "text2": [ - "Power pulse", - "duration" - ], - "desc": "Keep-awake-pulse duration (x 250ms)" - }, - "LanguageSwitch": { - "text2": [ - "Language:", - " EN English" - ], - "desc": "Current firmware language" - }, - "Brightness": { - "text2": [ - "Screen", - "brightness" - ], - "desc": "Adjust the OLED screen brightness" - }, - "ColourInversion": { - "text2": [ - "Invert", - "screen" - ], - "desc": "Invert the OLED screen colors" - }, - "LOGOTime": { - "text2": [ - "Boot logo", - "duration" - ], - "desc": "Set Boot logo duration (off | s=seconds | infinity)" - } - } -}
\ No newline at end of file +{
+ "languageCode": "EN",
+ "languageLocalName": "English",
+ "fonts": [
+ "ascii_basic",
+ "latin_extended"
+ ],
+ "tempUnitFahrenheit": true,
+ "messages": {
+ "SettingsCalibrationWarning": "Please make sure tip & handle are at room temperature before calibration!",
+ "SettingsResetWarning": "Are you sure you want to restore default settings?",
+ "UVLOWarningString": "DC LOW",
+ "UndervoltageString": "Undervoltage",
+ "InputVoltageString": "Input V: ",
+ "SleepingSimpleString": "Zzzz",
+ "SleepingAdvancedString": "Sleeping...",
+ "SleepingTipAdvancedString": "Tip:",
+ "OffString": "Off",
+ "DeviceFailedValidationWarning": "Your device is most likely a counterfeit!"
+ },
+ "messagesWarn": {
+ "ResetOKMessage": "Reset OK",
+ "SettingsResetMessage": [
+ "Certain settings",
+ "were changed!"
+ ],
+ "NoAccelerometerMessage": [
+ "No accelerometer",
+ "detected!"
+ ],
+ "NoPowerDeliveryMessage": [
+ "No USB-PD IC",
+ "detected!"
+ ],
+ "LockingKeysString": "LOCKED",
+ "UnlockingKeysString": "UNLOCKED",
+ "WarningKeysLockedString": "!LOCKED!",
+ "WarningThermalRunaway": [
+ "Thermal",
+ "Runaway"
+ ]
+ },
+ "characters": {
+ "SettingRightChar": "R",
+ "SettingLeftChar": "L",
+ "SettingAutoChar": "A",
+ "SettingOffChar": "O",
+ "SettingSlowChar": "S",
+ "SettingMediumChar": "M",
+ "SettingFastChar": "F",
+ "SettingStartNoneChar": "O",
+ "SettingStartSolderingChar": "S",
+ "SettingStartSleepChar": "Z",
+ "SettingStartSleepOffChar": "R",
+ "SettingSensitivityOff": "O",
+ "SettingSensitivityLow": "L",
+ "SettingSensitivityMedium": "M",
+ "SettingSensitivityHigh": "H",
+ "SettingLockDisableChar": "D",
+ "SettingLockBoostChar": "B",
+ "SettingLockFullChar": "F"
+ },
+ "menuGroups": {
+ "PowerMenu": {
+ "text2": [
+ "Power",
+ "settings"
+ ],
+ "desc": "Power settings"
+ },
+ "SolderingMenu": {
+ "text2": [
+ "Soldering",
+ "settings"
+ ],
+ "desc": "Soldering settings"
+ },
+ "PowerSavingMenu": {
+ "text2": [
+ "Sleep",
+ "mode"
+ ],
+ "desc": "Power saving settings"
+ },
+ "UIMenu": {
+ "text2": [
+ "User",
+ "interface"
+ ],
+ "desc": "User interface settings"
+ },
+ "AdvancedMenu": {
+ "text2": [
+ "Advanced",
+ "settings"
+ ],
+ "desc": "Advanced settings"
+ }
+ },
+ "menuOptions": {
+ "DCInCutoff": {
+ "text2": [
+ "Power",
+ "source"
+ ],
+ "desc": "Set cutoff voltage to prevent battery overdrainage (DC 10V) (S=3.3V per cell, disable PWR limit)"
+ },
+ "SleepTemperature": {
+ "text2": [
+ "Sleep",
+ "temp"
+ ],
+ "desc": "Tip temperature while in \"sleep mode\""
+ },
+ "SleepTimeout": {
+ "text2": [
+ "Sleep",
+ "timeout"
+ ],
+ "desc": "Interval before \"sleep mode\" starts (s=seconds | m=minutes)"
+ },
+ "ShutdownTimeout": {
+ "text2": [
+ "Shutdown",
+ "timeout"
+ ],
+ "desc": "Interval before the iron shuts down (m=minutes)"
+ },
+ "MotionSensitivity": {
+ "text2": [
+ "Motion",
+ "sensitivity"
+ ],
+ "desc": "0=off | 1=least sensitive | ... | 9=most sensitive"
+ },
+ "TemperatureUnit": {
+ "text2": [
+ "Temperature",
+ "unit"
+ ],
+ "desc": "C=°Celsius | F=°Fahrenheit"
+ },
+ "AdvancedIdle": {
+ "text2": [
+ "Detailed",
+ "idle screen"
+ ],
+ "desc": "Display detailed info in a smaller font on idle screen"
+ },
+ "DisplayRotation": {
+ "text2": [
+ "Display",
+ "orientation"
+ ],
+ "desc": "R=right-handed | L=left-handed | A=automatic"
+ },
+ "BoostTemperature": {
+ "text2": [
+ "Boost",
+ "temp"
+ ],
+ "desc": "Tip temperature used in \"boost mode\""
+ },
+ "AutoStart": {
+ "text2": [
+ "Start-up",
+ "behavior"
+ ],
+ "desc": "O=off | S=heat to soldering temp | Z=standby at sleep temp until moved | R=standby without heating until moved"
+ },
+ "CooldownBlink": {
+ "text2": [
+ "Cooldown",
+ "flashing"
+ ],
+ "desc": "Flash temp reading at idle while tip is hot"
+ },
+ "CalibrateCJC": {
+ "text2": [
+ "Calibrate CJC",
+ "at next boot"
+ ],
+ "desc": "Calibrate tip Cold Junction Compensation at the next boot (not required if Delta T is < 5°C)"
+ },
+ "SettingsReset": {
+ "text2": [
+ "Restore default",
+ "settings"
+ ],
+ "desc": "Reset all settings to default"
+ },
+ "VoltageCalibration": {
+ "text2": [
+ "Calibrate",
+ "input voltage"
+ ],
+ "desc": "Start VIN calibration (long press to exit)"
+ },
+ "AdvancedSoldering": {
+ "text2": [
+ "Detailed",
+ "solder screen"
+ ],
+ "desc": "Display detailed info in a smaller font on soldering screen"
+ },
+ "ScrollingSpeed": {
+ "text2": [
+ "Scrolling",
+ "speed"
+ ],
+ "desc": "Speed info text scrolls past at (S=slow | F=fast)"
+ },
+ "QCMaxVoltage": {
+ "text2": [
+ "QC",
+ "voltage"
+ ],
+ "desc": "Max QC voltage the iron should negotiate for"
+ },
+ "PDNegTimeout": {
+ "text2": [
+ "PD",
+ "timeout"
+ ],
+ "desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers"
+ },
+ "PowerLimit": {
+ "text2": [
+ "Power",
+ "limit"
+ ],
+ "desc": "Maximum power the iron can use (W=watt)"
+ },
+ "ReverseButtonTempChange": {
+ "text2": [
+ "Swap",
+ "+ - keys"
+ ],
+ "desc": "Reverse assignment of buttons for temperature adjustment"
+ },
+ "TempChangeShortStep": {
+ "text2": [
+ "Temp change",
+ "short"
+ ],
+ "desc": "Temperature-change-increment on short button press"
+ },
+ "TempChangeLongStep": {
+ "text2": [
+ "Temp change",
+ "long"
+ ],
+ "desc": "Temperature-change-increment on long button press"
+ },
+ "PowerPulsePower": {
+ "text2": [
+ "Power",
+ "pulse"
+ ],
+ "desc": "Intensity of power of keep-awake-pulse (watt)"
+ },
+ "HallEffSensitivity": {
+ "text2": [
+ "Hall sensor",
+ "sensitivity"
+ ],
+ "desc": "Sensitivity to magnets (0=off | 1=least sensitive | ... | 9=most sensitive)"
+ },
+ "LockingMode": {
+ "text2": [
+ "Allow locking",
+ "buttons"
+ ],
+ "desc": "While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)"
+ },
+ "MinVolCell": {
+ "text2": [
+ "Minimum",
+ "voltage"
+ ],
+ "desc": "Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)"
+ },
+ "AnimLoop": {
+ "text2": [
+ "Anim.",
+ "loop"
+ ],
+ "desc": "Loop icon animations in main menu"
+ },
+ "AnimSpeed": {
+ "text2": [
+ "Anim.",
+ "speed"
+ ],
+ "desc": "Pace of icon animations in menu (O=off | S=slow | M=medium | F=fast)"
+ },
+ "PowerPulseWait": {
+ "text2": [
+ "Power pulse",
+ "delay"
+ ],
+ "desc": "Delay before keep-awake-pulse is triggered (x 2.5s)"
+ },
+ "PowerPulseDuration": {
+ "text2": [
+ "Power pulse",
+ "duration"
+ ],
+ "desc": "Keep-awake-pulse duration (x 250ms)"
+ },
+ "LanguageSwitch": {
+ "text2": [
+ "Language:",
+ " EN English"
+ ],
+ "desc": "Current firmware language"
+ },
+ "Brightness": {
+ "text2": [
+ "Screen",
+ "brightness"
+ ],
+ "desc": "Adjust the OLED screen brightness"
+ },
+ "ColourInversion": {
+ "text2": [
+ "Invert",
+ "screen"
+ ],
+ "desc": "Invert the OLED screen colors"
+ },
+ "LOGOTime": {
+ "text2": [
+ "Boot logo",
+ "duration"
+ ],
+ "desc": "Set boot logo duration (off | s=seconds | infinity)"
+ }
+ }
+}
diff --git a/Translations/translation_ES.json b/Translations/translation_ES.json index 611367a5..bbed077c 100644 --- a/Translations/translation_ES.json +++ b/Translations/translation_ES.json @@ -175,7 +175,7 @@ ],
"desc": "La temperatura en pantalla parpadea mientras la punta siga caliente."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Calibrar temp.",
"de la punta"
diff --git a/Translations/translation_FI.json b/Translations/translation_FI.json index e73c4908..bc88e223 100644 --- a/Translations/translation_FI.json +++ b/Translations/translation_FI.json @@ -175,7 +175,7 @@ ],
"desc": "Vilkuttaa jäähtyessä juotoskärjen lämpötilaa sen ollessa vielä vaarallisen kuuma"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibroi",
"lämpötila?"
diff --git a/Translations/translation_FR.json b/Translations/translation_FR.json index a95ad5a3..f5c763b4 100644 --- a/Translations/translation_FR.json +++ b/Translations/translation_FR.json @@ -175,7 +175,7 @@ ],
"desc": "Faire clignoter la température lors du refroidissement tant que la panne est chaude"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Étalonner",
"température"
diff --git a/Translations/translation_HR.json b/Translations/translation_HR.json index 94f27936..fd687edd 100644 --- a/Translations/translation_HR.json +++ b/Translations/translation_HR.json @@ -175,7 +175,7 @@ ],
"desc": "Bljeskanje temperature prilikom hlađenja, ako je lemilica vruća."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibracija",
"temperature"
diff --git a/Translations/translation_HU.json b/Translations/translation_HU.json index 3c97c4e3..56f55987 100644 --- a/Translations/translation_HU.json +++ b/Translations/translation_HU.json @@ -175,7 +175,7 @@ ],
"desc": "Villogjon a hőmérséklet kijelzése hűlés közben, amíg a forrasztó hegy forró"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Hőmérséklet",
"kalibrálása?"
diff --git a/Translations/translation_IT.json b/Translations/translation_IT.json index 56ac70e3..83d89b21 100644 --- a/Translations/translation_IT.json +++ b/Translations/translation_IT.json @@ -174,7 +174,7 @@ "punta calda"],
"desc": "Evidenzia il valore di temperatura durante il raffreddamento se la punta è ancora calda"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Calibrazione",
"temperatura"
diff --git a/Translations/translation_JA_JP.json b/Translations/translation_JA_JP.json index fea41b94..8e61670f 100755 --- a/Translations/translation_JA_JP.json +++ b/Translations/translation_JA_JP.json @@ -115,7 +115,7 @@ "text2": "冷却中に点滅",
"desc": "加熱の停止後、コテ先が熱い間は温度表示を点滅する"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": "温度校正",
"desc": "コテ先の温度校正を開始する"
},
diff --git a/Translations/translation_LT.json b/Translations/translation_LT.json index ec73c98a..7a590b39 100644 --- a/Translations/translation_LT.json +++ b/Translations/translation_LT.json @@ -175,7 +175,7 @@ ],
"desc": "Ar mirksėti temperatūrą ekrane kol vėstantis antgalis vis dar karštas?"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibruoti",
"temperatūrą?"
diff --git a/Translations/translation_NL.json b/Translations/translation_NL.json index 2cfa7f2a..69e3b7fc 100644 --- a/Translations/translation_NL.json +++ b/Translations/translation_NL.json @@ -175,7 +175,7 @@ ],
"desc": "Temperatuur laten flitsen in het hoofdmenu zo lang de punt nog warm is"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibreer",
"temperatuur?"
diff --git a/Translations/translation_NL_BE.json b/Translations/translation_NL_BE.json index b751a55c..2b03b7ee 100644 --- a/Translations/translation_NL_BE.json +++ b/Translations/translation_NL_BE.json @@ -175,7 +175,7 @@ ],
"desc": "Temperatuur knippert in hoofdmenu tijdens afkoeling."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Calibreer",
"temperatuur?"
diff --git a/Translations/translation_NO.json b/Translations/translation_NO.json index 0e647573..e80bb6d2 100644 --- a/Translations/translation_NO.json +++ b/Translations/translation_NO.json @@ -175,7 +175,7 @@ ],
"desc": "Blink temperaturen på skjermen mens spissen fortsatt er varm."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"TempKal?",
""
diff --git a/Translations/translation_PL.json b/Translations/translation_PL.json index ac04dfae..fe0a152c 100644 --- a/Translations/translation_PL.json +++ b/Translations/translation_PL.json @@ -175,7 +175,7 @@ ],
"desc": "Temperatura miga podczas wychładzania, gdy grot jest wciąż gorący"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibracja",
"temp. grotu"
diff --git a/Translations/translation_PT.json b/Translations/translation_PT.json index 5175dbca..4a88e4e4 100644 --- a/Translations/translation_PT.json +++ b/Translations/translation_PT.json @@ -175,7 +175,7 @@ ],
"desc": "Faz o valor da temperatura piscar durante o arrefecimento"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Calibrar",
"temperatura"
diff --git a/Translations/translation_RO.json b/Translations/translation_RO.json index c41ad7a3..a622a934 100644 --- a/Translations/translation_RO.json +++ b/Translations/translation_RO.json @@ -175,7 +175,7 @@ ],
"desc": "Clipeste temperatura după oprirea încălzirii, în timp ce vârful este încă fierbinte"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Calibrare",
"temperatură?"
diff --git a/Translations/translation_RU.json b/Translations/translation_RU.json index 08fe20ed..ed364a77 100644 --- a/Translations/translation_RU.json +++ b/Translations/translation_RU.json @@ -8,7 +8,7 @@ ],
"tempUnitFahrenheit": false,
"messages": {
- "SettingsCalibrationWarning": "Прежде чем продолжить, убедитесь, что жала и ручка имеют комнатную температуру!",
+ "SettingsCalibrationWarning": "Перед калибровкой убедитесь, что жала и ручка имеют комнатную температуру!",
"SettingsResetWarning": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?",
"UVLOWarningString": "НАПРЯЖ--",
"UndervoltageString": "Низ. напряжение",
@@ -176,12 +176,12 @@ ],
"desc": "Мигать температурой на экране охлаждения, пока жало еще горячее"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Калибровка",
"температуры"
],
- "desc": "Калибровка компенсации холодного спая жала (не требуется, если Delta T < 5°C)"
+ "desc": "Калибровка компенсации холодного спая жала при следующей загрузке (не требуется, если Delta T < 5°C)"
},
"SettingsReset": {
"text2": [
diff --git a/Translations/translation_SK.json b/Translations/translation_SK.json index 02b1efa4..37a9da7e 100644 --- a/Translations/translation_SK.json +++ b/Translations/translation_SK.json @@ -175,7 +175,7 @@ ],
"desc": "Blikanie ukazovateľa teploty počas chladnutia hrotu"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibrácia",
"teploty"
diff --git a/Translations/translation_SL.json b/Translations/translation_SL.json index 68346921..9c4e45f9 100644 --- a/Translations/translation_SL.json +++ b/Translations/translation_SL.json @@ -175,7 +175,7 @@ ],
"desc": "Ko je konica še vroča, utripaj prikaz temperature med hlajenjem."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibriram",
"temperaturo?"
diff --git a/Translations/translation_SR_CYRL.json b/Translations/translation_SR_CYRL.json index 0be4debc..3ac6cd2d 100644 --- a/Translations/translation_SR_CYRL.json +++ b/Translations/translation_SR_CYRL.json @@ -175,7 +175,7 @@ ],
"desc": "Приказ температуре трепће приликом хлађења докле год је врх и даље врућ."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Калибрација",
"температуре"
diff --git a/Translations/translation_SR_LATN.json b/Translations/translation_SR_LATN.json index 26f08985..b0a8f6ce 100644 --- a/Translations/translation_SR_LATN.json +++ b/Translations/translation_SR_LATN.json @@ -175,7 +175,7 @@ ],
"desc": "Prikaz temperature trepće prilikom hlađenja dokle god je vrh i dalje vruć."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibracija",
"temperature"
diff --git a/Translations/translation_SV.json b/Translations/translation_SV.json index a3ba5823..1d3e0d9d 100644 --- a/Translations/translation_SV.json +++ b/Translations/translation_SV.json @@ -175,7 +175,7 @@ ],
"desc": "Blinka temperaturen medan spetsen kyls av och fortfarande är varm."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Kalibrera",
"temperatur?"
diff --git a/Translations/translation_TR.json b/Translations/translation_TR.json index a26c1b8b..0762b3ed 100644 --- a/Translations/translation_TR.json +++ b/Translations/translation_TR.json @@ -178,7 +178,7 @@ ],
"desc": "Soğutma ekranında uç hala sıcakken derece gösterilsin."
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"SCK KAL?",
""
diff --git a/Translations/translation_UK.json b/Translations/translation_UK.json index 59e61ad7..7ab9816f 100644 --- a/Translations/translation_UK.json +++ b/Translations/translation_UK.json @@ -176,7 +176,7 @@ ],
"desc": "Показувати температуру на екрані охолодження, поки жало залишається гарячим, при цьому екран моргає"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Калібрування",
"температури"
diff --git a/Translations/translation_VI.json b/Translations/translation_VI.json index a64673a1..b03b422c 100644 --- a/Translations/translation_VI.json +++ b/Translations/translation_VI.json @@ -175,7 +175,7 @@ ],
"desc": "-Nhap nháy nhiet đo sau khi viec gia nhiet tam dung trong khi mui hàn van nóng"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": [
"Hieu chuan",
"nhiet đo?"
diff --git a/Translations/translation_YUE_HK.json b/Translations/translation_YUE_HK.json index 95dbaa05..28a0afd9 100644 --- a/Translations/translation_YUE_HK.json +++ b/Translations/translation_YUE_HK.json @@ -115,7 +115,7 @@ "text2": "降温時閃爍",
"desc": "停止加熱之後,當焫雞咀仲係熱嗰陣閃爍畫面"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": "温度校正?",
"desc": "開始校正焫雞咀温度位移"
},
diff --git a/Translations/translation_ZH_CN.json b/Translations/translation_ZH_CN.json index c82888bc..43c54085 100644 --- a/Translations/translation_ZH_CN.json +++ b/Translations/translation_ZH_CN.json @@ -115,7 +115,7 @@ "text2": "降温时闪显",
"desc": "停止加热之后,闪动温度显示提醒烙铁头仍处于高温状态"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": "温度校正?",
"desc": "开始校正烙铁头温度偏移"
},
diff --git a/Translations/translation_ZH_TW.json b/Translations/translation_ZH_TW.json index 43d2a8aa..de9611bd 100644 --- a/Translations/translation_ZH_TW.json +++ b/Translations/translation_ZH_TW.json @@ -115,7 +115,7 @@ "text2": "降溫時閃爍",
"desc": "停止加熱之後,當烙鐵頭仍處於高溫時閃爍畫面"
},
- "TemperatureCalibration": {
+ "CalibrateCJC": {
"text2": "溫度校正?",
"desc": "開始校正烙鐵頭溫度位移"
},
diff --git a/Translations/translations_def.js b/Translations/translations_def.js index 04332137..d0e35a04 100644 --- a/Translations/translations_def.js +++ b/Translations/translations_def.js @@ -283,7 +283,7 @@ var def = /// },
{
- "id": "TemperatureCalibration",
+ "id": "CalibrateCJC",
"maxLen": 8,
"maxLen2": 15,
"description": "Used to calibrate the ADC+Op-amp offsets for the tip. This calibration must be performed when the tip temperature and the handle temperature are equal. Generally not required unless your device is reading more than 5°C off target."
diff --git a/source/Core/Inc/Settings.h b/source/Core/Inc/Settings.h index 9fdb7e24..a1435650 100644 --- a/source/Core/Inc/Settings.h +++ b/source/Core/Inc/Settings.h @@ -50,9 +50,10 @@ enum SettingsOptions { OLEDInversion = 33, // Invert the colours on the display OLEDBrightness = 34, // Brightness for the OLED display LOGOTime = 35, // Duration the logo will be displayed for + CalibrateCJC = 36, // Toggle calibrate CJC at next boot // - SettingsOptionsLength = 36, // + SettingsOptionsLength = 37, // }; typedef enum { diff --git a/source/Core/Inc/Translation.h b/source/Core/Inc/Translation.h index 124c1b99..b4545503 100644 --- a/source/Core/Inc/Translation.h +++ b/source/Core/Inc/Translation.h @@ -46,7 +46,7 @@ enum class SettingsItemIndex : uint8_t { BoostTemperature,
AutoStart,
CooldownBlink,
- TemperatureCalibration,
+ CalibrateCJC,
SettingsReset,
VoltageCalibration,
AdvancedSoldering,
diff --git a/source/Core/Src/Settings.cpp b/source/Core/Src/Settings.cpp index d8974989..048d9212 100644 --- a/source/Core/Src/Settings.cpp +++ b/source/Core/Src/Settings.cpp @@ -85,6 +85,7 @@ static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOp {0, 1, 1, 0}, // OLEDInversion {0, 99, 11, 33}, // OLEDBrightness {0, 5, 1, 1}, // LOGOTime + {0, 1, 1, 0}, // CalibrateCJC }; static_assert((sizeof(settingsConstants) / sizeof(SettingConstants)) == ((int)SettingsOptions::SettingsOptionsLength)); diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index 98a9d8f0..74d93481 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -101,8 +101,8 @@ static bool enterAdvancedMenu(void); * Soldering * Boost Mode Temp * Auto Start - * Temp change short step - * Temp change long step + * Temp Change Short Step + * Temp Change Long Step * Locking Mode * * Power Saving @@ -114,10 +114,10 @@ static bool enterAdvancedMenu(void); * * UI * Temperature Unit - * Display orientation - * Cooldown blink + * Display Orientation + * Cooldown Blink * Scrolling Speed - * Reverse Temp change buttons + - + * Swap Temp Change Buttons + - * Animation Speed * -Animation Loop * OLED Brightness @@ -128,11 +128,11 @@ static bool enterAdvancedMenu(void); * * Advanced * Power Limit - * Calibrate Temperature + * Calibrate CJC At Next Boot * Calibrate Input V * Power Pulse * -Power Pulse Delay - * -Power Pulse duration + * -Power Pulse Duration * Factory Reset * */ @@ -184,8 +184,8 @@ const menuitem solderingMenu[] = { /* * Boost Mode Temp * Auto Start - * Temp change short step - * Temp change long step + * Temp Change Short Step + * Temp Change Long Step * Locking Mode */ {SETTINGS_DESC(SettingsItemIndex::BoostTemperature), setBoostTemp, displayBoostTemp, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::BoostTemperature, 5}, /*Boost Temp*/ @@ -221,10 +221,10 @@ const menuitem PowerSavingMenu[] = { const menuitem UIMenu[] = { /* * Temperature Unit - * Display orientation - * Cooldown blink + * Display Orientation + * Cooldown Blink * Scrolling Speed - * Reverse Temp change buttons + - + * Swap Temp Change Buttons + - * Animation Speed * -Animation Loop * OLED Brightness @@ -257,16 +257,16 @@ const menuitem UIMenu[] = { const menuitem advancedMenu[] = { /* * Power Limit - * Calibrate Temperature + * Calibrate CJC At Next Boot * Calibrate Input V * Power Pulse * -Power Pulse Delay - * -Power Pulse duration + * -Power Pulse Duration * Factory Reset */ {SETTINGS_DESC(SettingsItemIndex::PowerLimit), nullptr, displayPowerLimit, nullptr, SettingsOptions::PowerLimit, SettingsItemIndex::PowerLimit, 5}, /*Power limit*/ - {SETTINGS_DESC(SettingsItemIndex::TemperatureCalibration), setCalibrate, displayCalibrate, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::TemperatureCalibration, - 5}, /*Calibrate tip*/ + {SETTINGS_DESC(SettingsItemIndex::CalibrateCJC), setCalibrate, displayCalibrate, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::CalibrateCJC, + 7}, /*Calibrate Cold Junktion Compensation at next boot*/ {SETTINGS_DESC(SettingsItemIndex::VoltageCalibration), setCalibrateVIN, displayCalibrateVIN, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::VoltageCalibration, 5}, /*Voltage input cal*/ {SETTINGS_DESC(SettingsItemIndex::PowerPulsePower), nullptr, displayPowerPulse, nullptr, SettingsOptions::KeepAwakePulse, SettingsItemIndex::PowerPulsePower, 5}, /*Power Pulse adjustment */ @@ -644,49 +644,20 @@ static void displayPowerLimit(void) { } } -static void setTipOffset() { - uint16_t setoffset = 0; - - // If the thermo-couple at the end of the tip, and the handle are at - // equilibrium, then the output should be zero, as there is no temperature - // differential. - while (setoffset == 0) { - uint32_t offset = 0; - for (uint8_t i = 0; i < 16; i++) { - offset += getTipRawTemp(1); - // cycle through the filter a fair bit to ensure we're stable. - OLED::clearScreen(); - OLED::setCursor(0, 0); - OLED::print(SymbolDot, FontStyle::LARGE); - for (uint8_t x = 0; x < (i / 4); x++) - OLED::print(SymbolDot, FontStyle::LARGE); - OLED::refresh(); - osDelay(100); - } - setoffset = TipThermoModel::convertTipRawADCTouV(offset / 16, true); - } - setSettingValue(SettingsOptions::CalibrationOffset, setoffset); - OLED::clearScreen(); - OLED::setCursor(0, 0); - OLED::drawCheckbox(true); - OLED::printNumber(setoffset, 4, FontStyle::LARGE); - OLED::refresh(); - osDelay(1200); -} - -// Provide the user the option to tune their own tip if custom is selected -// If not only do single point tuning as per usual static bool setCalibrate(void) { - - if (userConfirmation(translatedString(Tr->SettingsCalibrationWarning))) { - // User confirmed - // So we now perform the actual calculation - setTipOffset(); + if (getSettingValue(SettingsOptions::CalibrateCJC) < 1) { + if (userConfirmation(translatedString(Tr->SettingsCalibrationWarning))) { + // User confirmed + // So we now set the tick + setSettingValue(SettingsOptions::CalibrateCJC, 1); + } + } else { + setSettingValue(SettingsOptions::CalibrateCJC, 0); } return false; } -static void displayCalibrate(void) {} +static void displayCalibrate(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::CalibrateCJC)); } static bool setCalibrateVIN(void) { // Jump to the voltage calibration subscreen diff --git a/source/Core/Threads/GUIThread.cpp b/source/Core/Threads/GUIThread.cpp index 990da3f5..a22b3e78 100644 --- a/source/Core/Threads/GUIThread.cpp +++ b/source/Core/Threads/GUIThread.cpp @@ -94,6 +94,42 @@ void gui_drawTipTemp(bool symbol, const FontStyle font) { } } } +void performCJCC() { + // Calibrate Cold Junction Compensation directly at boot, before internal components get warm. + OLED::refresh(); + osDelay(50); + if (!isTipDisconnected() && (TipThermoModel::getTipInC() - getHandleTemperature(0) / 10) < 10) { + uint16_t setoffset = 0; + // If the thermo-couple at the end of the tip, and the handle are at + // equilibrium, then the output should be zero, as there is no temperature + // differential. + while (setoffset == 0) { + uint32_t offset = 0; + for (uint8_t i = 0; i < 16; i++) { + offset += getTipRawTemp(1); + // cycle through the filter a fair bit to ensure we're stable. + OLED::clearScreen(); + OLED::setCursor(0, 0); + OLED::print(SymbolDot, FontStyle::LARGE); + for (uint8_t x = 0; x < (i / 4); x++) + OLED::print(SymbolDot, FontStyle::LARGE); + OLED::refresh(); + osDelay(100); + } + setoffset = TipThermoModel::convertTipRawADCTouV(offset / 16, true); + } + setSettingValue(SettingsOptions::CalibrationOffset, setoffset); + OLED::clearScreen(); + OLED::setCursor(0, 0); + OLED::drawCheckbox(true); + OLED::printNumber(setoffset, 5, FontStyle::LARGE); + OLED::refresh(); + osDelay(1200); + // Preventing to repeat calibration at boot automatically (only one shot). + setSettingValue(SettingsOptions::CalibrateCJC, 0); + saveSettings(); + } +} #ifdef POW_DC // returns true if undervoltage has occured @@ -688,10 +724,9 @@ void showDebugMenu(void) { OLED::setCursor(0, 8); // second line OLED::print(DebugMenu[screen], FontStyle::SMALL); switch (screen) { - case 0: // Build Date + case 0: // Build Date break; - case 1: - // Device ID + case 1: // Device ID { uint64_t id = getDeviceID(); #ifdef DEVICE_HAS_VALIDATION_CODE @@ -706,46 +741,10 @@ void showDebugMenu(void) { OLED::drawHex((uint32_t)(id & 0xFFFFFFFF), FontStyle::SMALL, 8); } break; - case 2: - // System Uptime - OLED::printNumber(xTaskGetTickCount() / TICKS_100MS, 5, FontStyle::SMALL); - break; - case 3: - // Movement Timestamp - OLED::printNumber(lastMovementTime / TICKS_100MS, 5, FontStyle::SMALL); - break; - case 4: - // ACC Type + case 2: // ACC Type OLED::print(AccelTypeNames[(int)DetectedAccelerometerVersion], FontStyle::SMALL); break; - case 5: - // Tip Resistance - OLED::printNumber(getTipResistanceX10() / 10, 4, FontStyle::SMALL); // large to pad over so that we cover ID left overs - OLED::print(SymbolDot, FontStyle::SMALL); - OLED::printNumber(getTipResistanceX10() % 10, 1, FontStyle::SMALL); - break; - case 6: - // Raw Tip in uV - { OLED::printNumber(TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true), 6, FontStyle::SMALL); } - break; - case 7: - // Temp in C - OLED::printNumber(TipThermoModel::getTipInC(), 5, FontStyle::SMALL); - break; - case 8: - // Handle Temp in C - OLED::printNumber(getHandleTemperature(0), 6, FontStyle::SMALL); - break; - case 9: - // Max C Limit - OLED::printNumber(TipThermoModel::getTipMaxInC(), 3, FontStyle::SMALL); - break; - case 10: - // Input Voltage - printVoltage(); - break; - case 11: - // Power Negotiation Status + case 3: // Power Negotiation Status { int sourceNumber = 0; if (getIsPoweredByDCIN()) { @@ -780,22 +779,49 @@ void showDebugMenu(void) { OLED::print(PowerSourceNames[sourceNumber], FontStyle::SMALL); } break; - case 12: - // High Water Mark for GUI - OLED::printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 5, FontStyle::SMALL); + case 4: // Input Voltage + printVoltage(); + break; + case 5: // Temp in °C + OLED::printNumber(TipThermoModel::getTipInC(), 6, FontStyle::SMALL); + break; + case 6: // Handle Temp in °C + OLED::printNumber(getHandleTemperature(0) / 10, 6, FontStyle::SMALL); + OLED::print(SymbolDot, FontStyle::SMALL); + OLED::printNumber(getHandleTemperature(0) % 10, 1, FontStyle::SMALL); + break; + case 7: // Max Temp Limit in °C + OLED::printNumber(TipThermoModel::getTipMaxInC(), 6, FontStyle::SMALL); + break; + case 8: // System Uptime + OLED::printNumber(xTaskGetTickCount() / TICKS_100MS, 8, FontStyle::SMALL); + break; + case 9: // Movement Timestamp + OLED::printNumber(lastMovementTime / TICKS_100MS, 8, FontStyle::SMALL); break; - case 13: - // High Water Mark for Movement Task - OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 5, FontStyle::SMALL); + case 10: // Tip Resistance in Ω + OLED::printNumber(getTipResistanceX10() / 10, 6, FontStyle::SMALL); // large to pad over so that we cover ID left overs + OLED::print(SymbolDot, FontStyle::SMALL); + OLED::printNumber(getTipResistanceX10() % 10, 1, FontStyle::SMALL); break; - case 14: - // High Water Mark for PID Task - OLED::printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 5, FontStyle::SMALL); + case 11: // Raw Tip in µV + OLED::printNumber(TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true), 8, FontStyle::SMALL); + break; + case 12: // Tip Cold Junction Compensation Offset in µV + OLED::printNumber(getSettingValue(SettingsOptions::CalibrationOffset), 8, FontStyle::SMALL); + break; + case 13: // High Water Mark for GUI + OLED::printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 8, FontStyle::SMALL); + break; + case 14: // High Water Mark for Movement Task + OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 8, FontStyle::SMALL); + break; + case 15: // High Water Mark for PID Task + OLED::printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 8, FontStyle::SMALL); break; break; #ifdef HALL_SENSOR - case 15: - // Raw Hall Effect Value + case 16: // Raw Hall Effect Value { int16_t hallEffectStrength = getRawHallEffect(); if (hallEffectStrength < 0) @@ -816,9 +842,9 @@ void showDebugMenu(void) { else if (b == BUTTON_F_SHORT) { screen++; #ifdef HALL_SENSOR - screen = screen % 16; + screen = screen % 17; #else - screen = screen % 15; + screen = screen % 16; #endif } GUIDelay(); @@ -996,6 +1022,11 @@ void startGUITask(void const *argument) { } #endif #endif + + if (getSettingValue(SettingsOptions::CalibrateCJC) > 0) { + performCJCC(); + } + // If the boot logo is enabled (but it times out) and the autostart mode is enabled (but not set to sleep w/o heat), start heating during boot logo if (getSettingValue(SettingsOptions::LOGOTime) > 0 && getSettingValue(SettingsOptions::LOGOTime) < 5 && getSettingValue(SettingsOptions::AutoStartMode) > 0 && getSettingValue(SettingsOptions::AutoStartMode) < 3) { @@ -1005,7 +1036,7 @@ void startGUITask(void const *argument) { } else { sleepTempDegC = getSettingValue(SettingsOptions::SleepTemp); } - // Only heat to sleep temperature (but no higher than 75*C for safety) + // Only heat to sleep temperature (but no higher than 75°C for safety) currentTempTargetDegC = min(sleepTempDegC, 75); } |