From 2c82d8d42effafb2dc8364de03e3d3aab16b53c3 Mon Sep 17 00:00:00 2001 From: Alessandro Mauri Date: Sun, 19 Apr 2026 16:46:54 +0200 Subject: [PATCH] draw useful info on screen --- fw/main.c | 56 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/fw/main.c b/fw/main.c index 929f49c..54d8aa7 100644 --- a/fw/main.c +++ b/fw/main.c @@ -24,6 +24,8 @@ #define NTC_ADC_CHANNEL ANALOG_2 // PA2 #define TEMP_ADC_CHANNEL ANALOG_3 // PA3 +#define FRAME_TIME_MS 41 // roughly 24 fps + // constants // LUT for converting NTC readings to degrees kelvin // Nominal: 1kOhm, Beta: 3380, Step: 64 @@ -66,13 +68,6 @@ static inline int16_t get_current_ma(uint16_t adc_reading) } -// convert the raw tip reading from the adc to a temperature in kelvin -static inline int16_t get_tip_temp_k(uint16_t adc_reading, int16_t cold_temp_k) -{ - return 0; -} - - void print_i2c_device(uint8_t addr) { printf("Device found at 0x%02X\n", addr); @@ -106,13 +101,6 @@ void handle_usbfs_input(int numbytes, uint8_t *data) "\ts : scan I2C bus\n" ); break; - case 'd': - printf("Initializing display...\n"); - u8g2 = display_init(); - u8g2_ClearBuffer(u8g2); - u8g2_DrawBox(u8g2, 0, 0, 20, 10); - u8g2_SendBuffer(u8g2); - break; case 's': printf("Scanning I2C bus...\n"); i2c_scan(I2C_TARGET, print_i2c_device); @@ -208,18 +196,40 @@ __attribute__((noreturn)) int main(void) Delay_Ms(500); - unsigned int count = 0; + u8g2 = display_init(); - for (uint32_t x = 0; true ; x++) { + for (;;) { poll_input(); // usb - if ((x % 100) == 0) { - uint16_t vbus_mv = ((u32)funAnalogRead(VBUS_ADC_CHANNEL)*VCC_MV*11)/4096; - uint16_t current_ma = get_current_ma(funAnalogRead(CURRENT_ADC_CHANNEL)); - int16_t temp_k = get_temp_k(funAnalogRead(NTC_ADC_CHANNEL)); - uint16_t tip_mv = ((u32)funAnalogRead(TEMP_ADC_CHANNEL)*VCC_MV)/4096; + u32 start = funSysTick32(); - printf("[%d]: VBUS=%d, CURRENT=%d, TEMP=%d, TIP=%d, COUNTER=%d\n", count++, vbus_mv, current_ma, temp_k, tip_mv, encoder); + uint16_t vbus_mv = ((u32)funAnalogRead(VBUS_ADC_CHANNEL)*VCC_MV*11)/4096; + uint16_t current_ma = get_current_ma(funAnalogRead(CURRENT_ADC_CHANNEL)); + int16_t temp_k = get_temp_k(funAnalogRead(NTC_ADC_CHANNEL)); + uint16_t tip_mv = ((u32)funAnalogRead(TEMP_ADC_CHANNEL)*VCC_MV)/4096; + + u8g2_ClearBuffer(u8g2); + u8g2_SetBitmapMode(u8g2, 1); + u8g2_SetFontMode(u8g2, 1); + u8g2_SetFont(u8g2, u8g2_font_5x8_tr); + u8g2_DrawStr(u8g2, 0, 7, "TIP:"); + u8g2_DrawStr(u8g2, 20, 7, u8x8_u16toa(tip_mv, 4)); + u8g2_DrawStr(u8g2, 0, 15, "VBUS:"); + u8g2_DrawStr(u8g2, 25, 15, u8x8_u16toa(vbus_mv, 4)); + u8g2_DrawLine(u8g2, 62, 19, 62, 0); + u8g2_DrawStr(u8g2, 71, 6, "TEMP:"); + u8g2_DrawStr(u8g2, 96, 6, u8x8_u16toa(temp_k, 2)); + u8g2_DrawFrame(u8g2, 0, 22, 128, 10); + encoder = encoder < -61 ? -61 : (encoder > 61 ? 61 : encoder); + u8g2_DrawBox(u8g2, 61+encoder, 23, 4, 8); + u8g2_SendBuffer(u8g2); + + printf("VBUS=%d, CURRENT=%d, TEMP=%d, TIP=%d, COUNTER=%d\n", vbus_mv, current_ma, temp_k, tip_mv, encoder); + + u32 elapsed = funSysTick32() - start; + if (elapsed < Ticks_from_Ms(FRAME_TIME_MS)) { + DelaySysTick(Ticks_from_Ms(FRAME_TIME_MS) - elapsed); + } else { + printf("Frame took too long: %ld ms\n", elapsed/DELAY_MS_TIME); } - Delay_Ms(1); } }