Ignore:
Timestamp:
Sep 8, 2025, 6:57:30 PM (7 weeks ago)
Author:
f.jahn
Message:
  • Bug in ADC Kalibrierung (STM32 ADC Strom) behoben
  • DMA Buffer für ADC 1 und ADC wird vor Überschreibung während bearbeitung geschützt, indem Datenübertragung nur einmalig erfolgt und erst nach Auswertung wieder gestartet wird
  • RS485Modbus: Timeout Zeit wird für Baudraten >19200 korrekt berechnet
  • Hardware ID geändert
  • Separates Register für "Batterie Empty detection mode" auf Adresse 92 angelegt
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/firmware/Debug125A/self_discharge_PP.c

    r6 r26  
    1 # 1 "D:\\projekte\\ecs_smartSwitch\\trunk\\firmware\\Src\\self_discharge.c"
     1# 1 "D:\\projekte\\ecsSmartPro\\trunk\\firmware\\Src\\self_discharge.c"
    22# 1 "<built-in>" 1
    33# 1 "<built-in>" 3
     
    55# 1 "<command line>" 1
    66# 1 "<built-in>" 2
    7 # 1 "D:\\projekte\\ecs_smartSwitch\\trunk\\firmware\\Src\\self_discharge.c" 2
    8 
    9 # 1 "D:/projekte/ecs_smartSwitch/trunk/firmware/Inc\\sysdata.h" 1
    10 # 15 "D:/projekte/ecs_smartSwitch/trunk/firmware/Inc\\sysdata.h"
    11 # 1 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdint.h" 1 3
    12 # 20 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdint.h" 3
     7# 1 "D:\\projekte\\ecsSmartPro\\trunk\\firmware\\Src\\self_discharge.c" 2
     8# 1 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdio.h" 1 3
     9# 20 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdio.h" 3
    1310# 1 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\__SEGGER_RTL.h" 1 3
    1411# 17 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\__SEGGER_RTL.h" 3
     
    666663int __SEGGER_RTL_mb_cur_max (void);
    667664void __SEGGER_RTL_init_heap (void *__ptr, unsigned int __size);
    668 # 21 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdint.h" 2 3
     665# 21 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdio.h" 2 3
     666# 72 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdio.h" 3
     667typedef unsigned int size_t;
     668
     669
     670
     671
     672typedef long fpos_t;
     673
     674
     675
     676
     677typedef struct __SEGGER_RTL_FILE_impl FILE;
     678
     679
     680
     681
     682typedef struct __SEGGER_RTL_POSIX_locale_s *locale_t;
     683# 97 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdio.h" 3
     684extern FILE *stdin;
     685extern FILE *stdout;
     686extern FILE *stderr;
     687# 108 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdio.h" 3
     688int putchar (int __c);
     689int getchar (void);
     690int puts (const char *__s);
     691char * gets (char *__s);
     692int sprintf (char *__s, const char *__format, ...);
     693int sprintf_l (char *__s, locale_t __loc, const char *__format, ...);
     694int snprintf (char *__s, size_t __n, const char *__format, ...);
     695int snprintf_l (char *__s, size_t __n, locale_t __loc, const char *__format, ...);
     696int vsnprintf (char *__s, size_t __n, const char *__format, __builtin_va_list __arg);
     697int vsnprintf_l (char *__s, size_t __n, locale_t __loc, const char *__format, __builtin_va_list __arg);
     698int printf (const char *__format, ...);
     699int printf_l (locale_t __loc, const char *__format, ...);
     700int vprintf (const char *__format, __builtin_va_list __arg);
     701int vprintf_l (locale_t __loc, const char *__format, __builtin_va_list __arg);
     702int vsprintf (char *__s, const char *__format, __builtin_va_list __arg);
     703int vsprintf_l (char *__s, locale_t __loc, const char *__format, __builtin_va_list __arg);
     704int vasprintf (char **__strp, const char *__format, __builtin_va_list __ap);
     705int vasprintf_l (char **__strp, locale_t __loc, const char *__format, __builtin_va_list __ap);
     706int asprintf (char **__strp, const char *__format, ...);
     707int asprintf_l (char **__strp, locale_t __loc, const char *__format, ...);
     708
     709int scanf (const char *__format, ...);
     710int scanf_l (locale_t __loc, const char *__format, ...);
     711int sscanf (const char *__s, const char *__format, ...);
     712int sscanf_l (const char *__s, locale_t __loc, const char *__format, ...);
     713int vscanf (const char *__format, __builtin_va_list __arg);
     714int vscanf_l (locale_t __loc, const char *__format, __builtin_va_list __arg);
     715int vsscanf (const char *__s, const char *__format, __builtin_va_list __arg);
     716int vsscanf_l (const char *__s, locale_t __loc, const char *__format, __builtin_va_list __arg);
     717
     718void clearerr (FILE *);
     719int fclose (FILE *);
     720int feof (FILE *);
     721int ferror (FILE *);
     722int fflush (FILE *);
     723int fgetc (FILE *);
     724int fgetpos (FILE *, fpos_t *);
     725char * fgets (char *, int, FILE *);
     726int fileno (FILE *);
     727FILE * fopen (const char *, const char *);
     728int fprintf (FILE *, const char *, ...);
     729int fprintf_l (FILE *, locale_t, const char *, ...);
     730int vfprintf (FILE *__stream, const char *__format, __builtin_va_list __arg);
     731int vfprintf_l (FILE *__stream, locale_t loc, const char *__format, __builtin_va_list __arg);
     732int fputc (int, FILE *);
     733int fputs (const char *, FILE *);
     734size_t fread (void *, size_t, size_t, FILE *);
     735FILE * freopen (const char *, const char *, FILE *);
     736int fscanf (FILE *, const char *, ...);
     737int fscanf_l (FILE *, locale_t, const char *, ...);
     738int vfscanf (FILE *, const char *, __builtin_va_list);
     739int vfscanf_l (FILE *, locale_t, const char *, __builtin_va_list);
     740int fseek (FILE *, long, int);
     741int fsetpos (FILE *, const fpos_t *);
     742long ftell (FILE *);
     743size_t fwrite (const void *, size_t, size_t, FILE *);
     744int getc (FILE *);
     745void perror (const char *);
     746int putc (int, FILE *);
     747int remove (const char *);
     748int rename (const char *, const char *);
     749void rewind (FILE *);
     750void setbuf (FILE *, char *);
     751int setvbuf (FILE *, char *, int, size_t);
     752FILE * tmpfile (void);
     753char * tmpnam (char *);
     754int ungetc (int, FILE *);
     755
     756
     757
     758
     759
     760int dprintf (int, const char *, ...);
     761int vdprintf (int, const char *, __builtin_va_list);
     762FILE * fdopen (int, const char *);
     763# 2 "D:\\projekte\\ecsSmartPro\\trunk\\firmware\\Src\\self_discharge.c" 2
     764# 1 "D:/projekte/ecsSmartPro/trunk/firmware/Inc\\sysdata.h" 1
     765# 15 "D:/projekte/ecsSmartPro/trunk/firmware/Inc\\sysdata.h"
     766# 1 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdint.h" 1 3
    669767# 272 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\stdint.h" 3
    670768typedef signed char int8_t;
     
    700798typedef long long int intmax_t;
    701799typedef long long unsigned int uintmax_t;
    702 # 16 "D:/projekte/ecs_smartSwitch/trunk/firmware/Inc\\sysdata.h" 2
    703 # 25 "D:/projekte/ecs_smartSwitch/trunk/firmware/Inc\\sysdata.h"
     800# 16 "D:/projekte/ecsSmartPro/trunk/firmware/Inc\\sysdata.h" 2
     801# 25 "D:/projekte/ecsSmartPro/trunk/firmware/Inc\\sysdata.h"
    704802typedef union
    705803{
     
    9181016
    9191017void SYS_DATA_Init(void);
    920 # 3 "D:\\projekte\\ecs_smartSwitch\\trunk\\firmware\\Src\\self_discharge.c" 2
    921 # 1 "D:/projekte/ecs_smartSwitch/trunk/firmware/Inc\\self_discharge.h" 1
     1018# 3 "D:\\projekte\\ecsSmartPro\\trunk\\firmware\\Src\\self_discharge.c" 2
     1019# 1 "D:/projekte/ecsSmartPro/trunk/firmware/Inc\\self_discharge.h" 1
    9221020# 1 "C:/Program Files/SEGGER/SEGGER Embedded Studio 8.22a/include\\inttypes.h" 1 3
    923 # 2 "D:/projekte/ecs_smartSwitch/trunk/firmware/Inc\\self_discharge.h" 2
     1021# 2 "D:/projekte/ecsSmartPro/trunk/firmware/Inc\\self_discharge.h" 2
    9241022
    9251023int16_t SELF_DISCHARGE_Exec(void);
    926 # 4 "D:\\projekte\\ecs_smartSwitch\\trunk\\firmware\\Src\\self_discharge.c" 2
     1024# 4 "D:\\projekte\\ecsSmartPro\\trunk\\firmware\\Src\\self_discharge.c" 2
    9271025
    9281026
     
    9331031
    9341032  const double batt_float_voltage_tol = 0.03;
    935   const double batt_voltage_holding_tol = 10;
     1033  const int32_t batt_voltage_holding_tol = 10;
    9361034  int32_t max_u = sys_data.s.parameter.uBatFull * ( 1 + batt_float_voltage_tol);
    9371035  int32_t min_u = sys_data.s.parameter.uBatFull * ( 1 - batt_float_voltage_tol);
     
    9711069    u_hold = 0;
    9721070    holding_counter = 0;
     1071
    9731072    return -2;
    9741073  }
     
    9791078    u_hold = 0;
    9801079    holding_counter = 0;
     1080
    9811081    return -2;
    9821082  }
    9831083
     1084
     1085  if (sys_data.s.values.batteryCurrent < sys_data.s.parameter.extraDischargeStrom_mA)
     1086  {
     1087
     1088    u_hold = 0;
     1089    holding_counter = 0;
     1090
     1091    return -3;
     1092  }
     1093
    9841094  holding_counter++;
    985   if (holding_counter > ( 3 * 3600 ))
     1095  if (holding_counter > (10800 ))
    9861096  {
    987     sys_data.s.values.selfDischarge = sys_data.s.values.batteryCurrent;
     1097    sys_data.s.values.selfDischarge = sys_data.s.values.batteryCurrent - sys_data.s.parameter.extraDischargeStrom_mA;
    9881098  }
    9891099
    9901100
    9911101
    992 
    993   static uint32_t last_days;
    994   static unsigned long avgsum = 0;
    995 
    996 
    997   uint32_t days = sys_data.s.values.onTime / (24U * 3600U);
    998 
    999 
    1000   if (days != last_days)
     1102  if (sys_data.s.values.selfDischarge > 0)
    10011103  {
    1002     last_days = days;
    1003 
    1004     uint32_t avgval;
    1005 
    1006     avgsum -= avgsum/64;
    1007     avgsum += sys_data.s.values.selfDischarge;
    1008     avgval = avgsum / 64;
    1009 
    1010     sys_data.s.values.selfDischargeAvg = avgval;
     1104
     1105
     1106    static uint32_t last_days;
     1107    static unsigned long avgsum = 0;
     1108
     1109
     1110    uint32_t days = sys_data.s.values.onTime / (24U * 3600U);
     1111
     1112
     1113    if (days != last_days)
     1114    {
     1115      last_days = days;
     1116
     1117      uint32_t avgval;
     1118
     1119      avgsum -= avgsum/64;
     1120      avgsum += sys_data.s.values.selfDischarge;
     1121      avgval = avgsum / 64;
     1122
     1123      sys_data.s.values.selfDischargeAvg = avgval;
     1124    }
     1125
    10111126  }
    10121127
    10131128
    10141129
    1015 
    1016 
    10171130  return 0;
    10181131
Note: See TracChangeset for help on using the changeset viewer.