mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user