20 #include "gfx_draw_bms_demo.h" 27 #include "SD-Card/sdcard_demo.h" 41 bool messwert_flag =
false;
64 if ( PORTE_IN & LAST_bm )
69 if ( !(betriebsart == LEERLAUF) )
72 leerlauf_voltage_get_data ();
77 volt_akt = voltage[aktuelle_zelle_P1] + voltage[aktuelle_zelle_P2];
78 amp_akt = (current[aktuelle_zelle_P1] + current[aktuelle_zelle_P2]) / 2;
81 scr_betrieb.mAmp = amp_akt;
82 scr_betrieb.volt = volt_akt;
83 scr_betrieb.vent1 = vent_1;
84 scr_betrieb.vent2 = vent_2;
88 for (
int i = 0; i <= 3; i++ )
91 scr_betrieb.battery_color[i] = USED_AKKU;
93 scr_betrieb.battery_color[i] = NO_AKKU;
96 scr_betrieb.battery_color[i] = UNUSED_AKKU;
97 if ( akku_laden[i] ) scr_betrieb.battery_color[i] = LADE_AKKU;
100 for (
int i = 4; i <= 7; i++ )
103 scr_betrieb.battery_color[i] = USED_AKKU;
105 scr_betrieb.battery_color[i] = NO_AKKU;
108 scr_betrieb.battery_color[i] = UNUSED_AKKU;
109 if ( akku_laden[i] ) scr_betrieb.battery_color[i] = LADE_AKKU;
114 for (
int i = 0; i <= 7; i++ )
116 scr_betrieb.bat_voltage[i] = voltage[i];
121 for (
int i = 0; i <= 7; i++ )
125 scr_akku_info[i].vent = vent_1;
127 scr_akku_info[i].vent = vent_2;
130 scr_akku_info[i].verbraucher = last;
131 scr_akku_info[i].mAmp = current[i];
132 scr_akku_info[i].volt = voltage[i];
133 scr_akku_info[i].soc = SOC[i];
134 scr_akku_info[i].soh = SOH[i];
135 scr_akku_info[i].temperatur = temp[i];
142 scr_akku_info[i].top_bat_color = GFX_COLOR_GREEN;
143 scr_akku_info[i].top_bat_cross = GFX_BAT_NO_CROSS;
147 scr_akku_info[i].top_bat_color = GFX_COLOR_LT_GRAY;
148 scr_akku_info[i].top_bat_cross = GFX_BAT_NO_CROSS;
153 scr_akku_info[i].top_bat_color = GFX_COLOR_WHITE;
154 scr_akku_info[i].top_bat_cross = GFX_BAT_CROSS;
159 scr_akku_info[i].soc_color = GFX_CHARGE_FULL;
160 else if ( SOC[i] >= 70 )
161 scr_akku_info[i].soc_color = GFX_CHARGE_3_4;
162 else if ( SOC[i] >= 50 )
163 scr_akku_info[i].soc_color = GFX_CHARGE_2_4;
164 else if ( SOC[i] >= 30 )
165 scr_akku_info[i].soc_color = GFX_CHARGE_WARN;
167 scr_akku_info[i].soc_color = GFX_CHARGE_CRIT;
171 scr_akku_info[i].temp_color = TEMP_HIGH;
172 else if ( flag_tupper[i] )
173 scr_akku_info[i].temp_color = TEMP_MIDDLE;
175 scr_akku_info[i].temp_color = TEMP_LOW;
179 sprintf ( scr_akku_info[i].name,
"1.%1i", i + 1 );
181 sprintf ( scr_akku_info[i].name,
"2.%1i", i - 3 );
185 scr_laden.vent1 = vent_1;
186 scr_laden.vent2 = vent_2;
189 for (
int i = 0; i <= 7; i++ )
192 scr_laden.battery_color[i] = SOC_HIGH_C;
193 else if ( SOC[i] >= 70 )
194 scr_laden.battery_color[i] = SOC_MIDDLE_C;
196 scr_laden.battery_color[i] = SOC_LOW_C;
198 gesamt_SOC = gesamt_SOC + SOC[i];
202 for (
int i = 0; i <= 7; i++ )
204 scr_laden.mAmp[i] = current[i];
208 if ( gesamt_SOC >= 720 )
209 scr_laden.soc_color = GFX_CHARGE_FULL;
210 else if ( gesamt_SOC >= 560 )
211 scr_laden.soc_color = GFX_CHARGE_3_4;
212 else if ( gesamt_SOC >= 400 )
213 scr_laden.soc_color = GFX_CHARGE_2_4;
214 else if ( gesamt_SOC >= 240 )
215 scr_laden.soc_color = GFX_CHARGE_WARN;
217 scr_laden.soc_color = GFX_CHARGE_CRIT;
222 uint8_t warn_anz = 0;
224 scr_akku_warning.temp_color = TEMP_LOW;
225 scr_akku_warning.temperatur = TNORM;
226 scr_akku_warning.volt =
false;
227 scr_akku_warning.soc =
false;
228 scr_akku_warning.soh =
false;
229 scr_betrieb.warnung =
false;
231 for (
int i = 0; i <= 7; i++ )
234 if ( flag_tupper[i] )
236 scr_akku_warning.temp_color = TEMP_MIDDLE;
237 scr_akku_warning.temperatur = TUPPER;
238 scr_betrieb.warnung =
true;
239 if ( i != warn_nr ) warn_anz++;
244 if ( voltage[i] <= VOLTAGE_LOW )
246 scr_akku_warning.volt =
true;
247 scr_betrieb.warnung =
true;
248 if ( i != warn_nr ) warn_anz++;
253 if ( SOC[i] <= SOC_LOW )
255 scr_akku_warning.soc =
true;
256 scr_betrieb.warnung =
true;
257 if ( i != warn_nr ) warn_anz++;
262 if ( SOH[i] <= SOH_LOW )
264 scr_akku_warning.soh =
true;
265 scr_betrieb.warnung =
true;
266 if ( i != warn_nr ) warn_anz++;
272 for (
int i = 0; i < 8; i++ )
274 if ( SOC[i] < SOC[soc_nr] ) soc_nr = i;
276 if ( SOC[soc_nr] >= 90 )
277 scr_akku_warning.soc_color = GFX_CHARGE_FULL;
278 else if ( SOC[soc_nr] >= 70 )
279 scr_akku_warning.soc_color = GFX_CHARGE_3_4;
280 else if ( SOC[soc_nr] >= 50 )
281 scr_akku_warning.soc_color = GFX_CHARGE_2_4;
282 else if ( SOC[soc_nr] >= 30 )
284 scr_akku_warning.soc_color = GFX_CHARGE_WARN;
285 scr_betrieb.warnung =
true;
286 if ( soc_nr != warn_nr ) warn_anz++;
291 scr_akku_warning.soc_color = GFX_CHARGE_CRIT;
292 scr_betrieb.warnung =
true;
293 if ( soc_nr != warn_nr ) warn_anz++;
298 for (
int i = 0; i <= 7; i++ )
302 scr_akku_warning.temp_color = TEMP_HIGH;
303 scr_akku_warning.temperatur = TCRIT;
304 scr_betrieb.warnung =
true;
305 if ( i != warn_nr ) warn_anz++;
314 sprintf ( scr_akku_warning.name,
"1.%1i", warn_nr + 1 );
316 sprintf ( scr_akku_warning.name,
"2.%1i", warn_nr - 3 );
319 sprintf ( scr_akku_warning.name,
"+++" );
330 msgbox_notaus =
false;
334 messwert_flag =
false;
335 if ( screen_flag == SCREEN_FLAG_BETRIEB || (screen_flag == 0 && !laden) )
346 if ( auswahl_nr % 8 == 0 )
354 if ( auswahl_nr == -1 ) auswahl_nr = 0;
355 if ( (auswahl_nr % 8) < 4 )
356 sprintf ( scr_akku_info[auswahl_nr % 8].name,
"1.%1i", auswahl_nr % 8 + 1 );
358 sprintf ( scr_akku_info[auswahl_nr % 8].name,
"2.%1i", (auswahl_nr % 8) - 3 );
360 screen_return = SCREEN_RETURN_BETRIEB;
364 if ( scr_betrieb.warnung )
368 screen_return = SCREEN_RETURN_BETRIEB;
378 else if ( screen_flag == SCREEN_FLAG_AKKU_INFO )
390 if ( (auswahl_nr % 8) < 4 )
391 sprintf ( scr_akku_info[auswahl_nr % 8].name,
"1.%1i", auswahl_nr % 8 + 1 );
393 sprintf ( scr_akku_info[auswahl_nr % 8].name,
"2.%1i", (auswahl_nr % 8) - 3 );
405 if ( scr_betrieb.warnung )
418 else if ( screen_flag == SCREEN_FLAG_WARNUNG )
452 else if ( screen_flag == SCREEN_FLAG_HOME )
462 betriebsart = BETRIEB;
463 entlade_start =
true;
464 entlade_steuerung ();
475 for (
int i = 0; i <= 7; i++ )
477 h[aktuelle_zelle_P1][0] = now.hours;
478 m[aktuelle_zelle_P1][0] = now.minutes;
479 s[aktuelle_zelle_P1][0] = now.seconds;
487 betriebsart = LEERLAUF;
496 else if ( screen_flag == SCREEN_FLAG_LADEN || (screen_flag == 0 && laden) )
507 if ( auswahl_nr % 8 == 0 )
515 if ( scr_betrieb.warnung )
517 screen_return = SCREEN_RETURN_LADEN;
524 if ( auswahl_nr == -1 ) auswahl_nr = 0;
525 if ( (auswahl_nr % 8) < 4 )
526 sprintf ( scr_akku_info[auswahl_nr % 8].name,
"1.%1i", auswahl_nr % 8 + 1 );
528 sprintf ( scr_akku_info[auswahl_nr % 8].name,
"2.%1i", (auswahl_nr % 8) - 3 );
530 screen_return = SCREEN_RETURN_LADEN;
Konstanten, Filter und Commands für den Temperatursensor MCP 9843.
Header, Definition der Konstanten und Commands für DS1388.
void DS1388_get_datetime(void)
Die Uhrzeit und das Datum werden ausgelesen.
uint8_t taster_nr
Globale Definition. Die Variable wird aus der ISR gesetzt und gibt an, welcher der vier Taster am Dis...
void screen_akku_warnung(scr_warning_t icon)
Der Warnung-Screen.
bool verbraucher
Verbraucher ein- oder ausgeschaltet.
void screen_akku_info(scr_info_t icon)
Der Infoscreen.
Bibliothek zur USB-Kommunikation von Jürgen W.
void screen_laden(scr_laden_t icon)
Der Ladescreen.
void bildschirm_ausgabe()
Belegung der Icon-Parameter für die Displayausgabe und Aufruf der verschiedenen Screens.
void screen_betrieb(scr_betrieb_t icon)
Der Standard Betriebsscreen.
Graphical System Font system.
Standard Header Datei, Definition der Batteriekonstanten und Grenzwerte.
Standardheader und Auswahl der Übertragungsgeschwindigkeit.
#define gfx_draw_filled_circle(x, y, radius, color, quadrant_mask)
void mosfet_charge_on(void)
Die Ladefunktion wird aktiviert.
void AD7997_voltage_get_data(void)
Ermittelt die Spannungen der Batterien.
void screen_home(void)
Der Home-Screen.
Standardheader. Definition der Iconfarben.
Definition der Schalterstellungen für die einzelnen MOSFETs.
uint8_t zeit_counter
Main.
void AD7997_current_get_data(void)
Ermittelt die Stromstärke in den Batteriestromkreisen.
#define gfx_draw_filled_rect(x, y, width, height, color)
Standardheader und Positionen der Zeilen und Spalten auf den jeweiligen Screens.
Bibliothek zur USB-Kommunikation von Jürgen W.
Header für ADC AD7997, Definition der Register und Commands.