25 void eeprom_read_data (
void )
28 eeprom_read_fs_data ();
31 for (
int i = 0; i < 4; i++ )
33 eeprom_akku_basis_daten[i].inbetriebnahme_yy =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_1, 0 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
34 eeprom_akku_basis_daten[i + 4].inbetriebnahme_yy =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_2, 0 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
35 eeprom_akku_basis_daten[i].inbetriebnahme_mo =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_1, 1 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
36 eeprom_akku_basis_daten[i + 4].inbetriebnahme_mo =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_2, 1 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
37 eeprom_akku_basis_daten[i].inbetriebnahme_dd =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_1, 2 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
38 eeprom_akku_basis_daten[i + 4].inbetriebnahme_dd =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_2, 2 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
39 eeprom_akku_basis_daten[i].inbetriebnahme_hh =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_1, 3 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
40 eeprom_akku_basis_daten[i + 4].inbetriebnahme_hh =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_2, 3 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
41 eeprom_akku_basis_daten[i].inbetriebnahme_mi =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_1, 4 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
42 eeprom_akku_basis_daten[i + 4].inbetriebnahme_mi =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_2, 4 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
43 eeprom_akku_basis_daten[i].inbetriebnahme_ss =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_1, 5 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
44 eeprom_akku_basis_daten[i + 4].inbetriebnahme_ss =
EEPROM_ReadByte ( AKKU_BASIS_PAGE_2, 5 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
45 eeprom_akku_basis_daten[i].max_kapa = EEPROM_ReadBytes ( AKKU_BASIS_PAGE_1, 6, 2 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
46 eeprom_akku_basis_daten[i + 4].max_kapa = EEPROM_ReadBytes ( AKKU_BASIS_PAGE_2, 6, 2 + AKKU_BASIS_DATA_BYTE_OFFSET * i );
50 for (
int i = 0; i < 8; i++ )
52 eeprom_akku_daten[i].timestamp_datensatz_yy =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 0 );
53 eeprom_akku_daten[i].timestamp_datensatz_mo =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 1 );
54 eeprom_akku_daten[i].timestamp_datensatz_dd =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 2 );
55 eeprom_akku_daten[i].timestamp_datensatz_hh =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 3 );
56 eeprom_akku_daten[i].timestamp_datensatz_mi =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 4 );
57 eeprom_akku_daten[i].timestamp_datensatz_ss =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 5 );
58 eeprom_akku_daten[i].soc =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 6 );
59 eeprom_akku_daten[i].soh =
EEPROM_ReadByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 7 );
60 eeprom_akku_daten[i].c_max = EEPROM_ReadBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 8, 2 );
61 eeprom_akku_daten[i].charge = EEPROM_ReadBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 10, 2 );
62 eeprom_akku_daten[i].betriebszeit_s = EEPROM_ReadBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 12, 4 );
63 eeprom_akku_daten[i].ladezeit_s = EEPROM_ReadBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 16, 4 );
65 temp_data = EEPROM_ReadBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 20, 2 );
66 eeprom_akku_daten[i].ladezyklen = temp_data / 100.0;
70 void eeprom_write_akku_data (
void )
73 eeprom_read_fs_data ();
76 for (
int i = 0; i < 8; i++ )
78 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 0, eeprom_akku_daten[i].timestamp_datensatz_yy );
79 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 1, eeprom_akku_daten[i].timestamp_datensatz_mo );
80 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 2, eeprom_akku_daten[i].timestamp_datensatz_dd );
81 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 3, eeprom_akku_daten[i].timestamp_datensatz_hh );
82 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 4, eeprom_akku_daten[i].timestamp_datensatz_mi );
83 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 5, eeprom_akku_daten[i].timestamp_datensatz_ss );
84 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 6, eeprom_akku_daten[i].soc );
85 EEPROM_WriteByte ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 7, eeprom_akku_daten[i].soh );
86 EEPROM_WriteBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 8, 2, eeprom_akku_daten[i].c_max );
87 EEPROM_WriteBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 10, 2, eeprom_akku_daten[i].charge );
88 EEPROM_WriteBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 12, 4, eeprom_akku_daten[i].betriebszeit_s );
89 EEPROM_WriteBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 16, 4, eeprom_akku_daten[i].ladezeit_s );
91 temp_data = eeprom_akku_daten[i].ladezyklen * 100.0;
92 EEPROM_WriteBytes ( AKKU_DATA_PAGE_START + i + eeprom_fs_data.page_offset, 20, 2, temp_data );
95 eeprom_write_fs_data ();
99 void eeprom_write_akku_basis_data (
void )
102 for (
int i = 0; i < 4; i++ )
104 EEPROM_WriteByte ( AKKU_BASIS_PAGE_1, 0 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i].inbetriebnahme_yy );
105 EEPROM_WriteByte ( AKKU_BASIS_PAGE_2, 0 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i + 4].inbetriebnahme_yy );
106 EEPROM_WriteByte ( AKKU_BASIS_PAGE_1, 1 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i].inbetriebnahme_mo );
107 EEPROM_WriteByte ( AKKU_BASIS_PAGE_2, 1 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i + 4].inbetriebnahme_mo );
108 EEPROM_WriteByte ( AKKU_BASIS_PAGE_1, 2 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i].inbetriebnahme_dd );
109 EEPROM_WriteByte ( AKKU_BASIS_PAGE_2, 2 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i + 4].inbetriebnahme_dd );
110 EEPROM_WriteByte ( AKKU_BASIS_PAGE_1, 3 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i].inbetriebnahme_hh );
111 EEPROM_WriteByte ( AKKU_BASIS_PAGE_2, 3 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i + 4].inbetriebnahme_hh );
112 EEPROM_WriteByte ( AKKU_BASIS_PAGE_1, 4 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i].inbetriebnahme_mi );
113 EEPROM_WriteByte ( AKKU_BASIS_PAGE_2, 4 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i + 4].inbetriebnahme_mi );
114 EEPROM_WriteByte ( AKKU_BASIS_PAGE_1, 5 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i].inbetriebnahme_ss );
115 EEPROM_WriteByte ( AKKU_BASIS_PAGE_2, 5 + AKKU_BASIS_DATA_BYTE_OFFSET * i, eeprom_akku_basis_daten[i + 4].inbetriebnahme_ss );
116 EEPROM_WriteBytes ( AKKU_BASIS_PAGE_1, 6 + AKKU_BASIS_DATA_BYTE_OFFSET * i, 2, eeprom_akku_basis_daten[i].max_kapa );
117 EEPROM_WriteBytes ( AKKU_BASIS_PAGE_2, 6 + AKKU_BASIS_DATA_BYTE_OFFSET * i, 2, eeprom_akku_basis_daten[i + 4].max_kapa );
122 void eeprom_read_fs_data (
void )
124 eeprom_fs_data.byte_offset =
EEPROM_ReadByte ( EEPROM_FS_DATA_PAGE, BYTE_OFFSET_BYTE );
125 eeprom_fs_data.page_offset =
EEPROM_ReadByte ( EEPROM_FS_DATA_PAGE, PAGE_OFFSET_BYTE );
126 eeprom_fs_data.write_cycles =
EEPROM_ReadByte ( EEPROM_FS_DATA_PAGE, WRITE_CYCLES_BYTE + eeprom_fs_data.byte_offset );
129 void eeprom_write_fs_data (
void )
131 eeprom_fs_data.write_cycles++;
133 if ( eeprom_fs_data.write_cycles >= MAX_CYCLES )
135 eeprom_fs_data.byte_offset += 4;
136 eeprom_fs_data.page_offset += 8;
137 eeprom_fs_data.write_cycles = 0;
138 EEPROM_WriteByte ( EEPROM_FS_DATA_PAGE, BYTE_OFFSET_BYTE, eeprom_fs_data.byte_offset );
139 EEPROM_WriteByte ( EEPROM_FS_DATA_PAGE, PAGE_OFFSET_BYTE, eeprom_fs_data.byte_offset );
149 EEPROM_WriteByte ( EEPROM_FS_DATA_PAGE, WRITE_CYCLES_BYTE + eeprom_fs_data.byte_offset, eeprom_fs_data.write_cycles );
152 void eeprom_test (
void )
154 eeprom_read_fs_data ();
157 for (
int i = 0; i < 8; i++ )
159 eeprom_akku_daten[i].timestamp_datensatz_yy = i;
160 eeprom_akku_daten[i].timestamp_datensatz_mo = i;
161 eeprom_akku_daten[i].timestamp_datensatz_dd = i;
162 eeprom_akku_daten[i].timestamp_datensatz_hh = i;
163 eeprom_akku_daten[i].timestamp_datensatz_mi = i;
164 eeprom_akku_daten[i].timestamp_datensatz_ss = i;
165 eeprom_akku_daten[i].soc = i;
166 eeprom_akku_daten[i].soh = i;
167 eeprom_akku_daten[i].c_max = i;
168 eeprom_akku_daten[i].charge = i;
169 eeprom_akku_daten[i].betriebszeit_s = 5000 * i;
170 eeprom_akku_daten[i].ladezeit_s = 1000 * i;
171 eeprom_akku_daten[i].ladezyklen = 70.3;
175 for (
int i = 0; i < 4; i++ )
177 eeprom_akku_basis_daten[i].inbetriebnahme_yy = i;
178 eeprom_akku_basis_daten[i + 4].inbetriebnahme_yy = i + 4;
179 eeprom_akku_basis_daten[i].inbetriebnahme_mo = i;
180 eeprom_akku_basis_daten[i + 4].inbetriebnahme_mo = i + 4;
181 eeprom_akku_basis_daten[i].inbetriebnahme_dd = i;
182 eeprom_akku_basis_daten[i + 4].inbetriebnahme_dd = i + 4;
183 eeprom_akku_basis_daten[i].inbetriebnahme_hh = i;
184 eeprom_akku_basis_daten[i + 4].inbetriebnahme_hh = i + 4;
185 eeprom_akku_basis_daten[i].inbetriebnahme_mi = i;
186 eeprom_akku_basis_daten[i + 4].inbetriebnahme_mi = i + 4;
187 eeprom_akku_basis_daten[i].inbetriebnahme_ss = i;
188 eeprom_akku_basis_daten[i + 4].inbetriebnahme_ss = i + 4;
189 eeprom_akku_basis_daten[i].max_kapa = 7500;
190 eeprom_akku_basis_daten[i + 4].max_kapa = 8500;
193 eeprom_fs_data.byte_offset = 0;
194 eeprom_fs_data.page_offset = 0;
195 eeprom_fs_data.write_cycles = 0;
197 printf (
"Page Offset: %i\r\n", eeprom_fs_data.page_offset );
199 eeprom_write_akku_basis_data ();
200 eeprom_write_akku_data ();
203 for (
int i = 0; i < 8; i++ )
205 eeprom_akku_daten[i].timestamp_datensatz_yy = 0;
206 eeprom_akku_daten[i].timestamp_datensatz_mo = 0;
207 eeprom_akku_daten[i].timestamp_datensatz_dd = 0;
208 eeprom_akku_daten[i].timestamp_datensatz_hh = 0;
209 eeprom_akku_daten[i].timestamp_datensatz_mi = 0;
210 eeprom_akku_daten[i].timestamp_datensatz_ss = 0;
211 eeprom_akku_daten[i].soc = 0;
212 eeprom_akku_daten[i].soh = 0;
213 eeprom_akku_daten[i].c_max = 0;
214 eeprom_akku_daten[i].charge = 0;
215 eeprom_akku_daten[i].betriebszeit_s = 0;
216 eeprom_akku_daten[i].ladezeit_s = 0;
217 eeprom_akku_daten[i].ladezyklen = 0;
221 for (
int i = 0; i < 4; i++ )
223 eeprom_akku_basis_daten[i].inbetriebnahme_yy = 0;
224 eeprom_akku_basis_daten[i + 4].inbetriebnahme_yy = 0;
225 eeprom_akku_basis_daten[i].inbetriebnahme_mo = 0;
226 eeprom_akku_basis_daten[i + 4].inbetriebnahme_mo = 0;
227 eeprom_akku_basis_daten[i].inbetriebnahme_dd = 0;
228 eeprom_akku_basis_daten[i + 4].inbetriebnahme_dd = 0;
229 eeprom_akku_basis_daten[i].inbetriebnahme_hh = 0;
230 eeprom_akku_basis_daten[i + 4].inbetriebnahme_hh = 0;
231 eeprom_akku_basis_daten[i].inbetriebnahme_mi = 0;
232 eeprom_akku_basis_daten[i + 4].inbetriebnahme_mi = 0;
233 eeprom_akku_basis_daten[i].inbetriebnahme_ss = 0;
234 eeprom_akku_basis_daten[i + 4].inbetriebnahme_ss = 0;
235 eeprom_akku_basis_daten[i].max_kapa = 0;
236 eeprom_akku_basis_daten[i + 4].max_kapa = 0;
239 eeprom_fs_data.byte_offset = 0;
240 eeprom_fs_data.page_offset = 0;
241 eeprom_fs_data.write_cycles = 0;
243 printf (
"Page Offset: %i\r\n", eeprom_fs_data.page_offset );
248 for (
int i = 0; i < 8; i++ )
250 printf (
"Akku %i Zustandsdaten:\r\n", i );
251 printf (
"%02i.%02i.%02i %02i:%02i:%02i\r\n", eeprom_akku_daten[i].timestamp_datensatz_dd, eeprom_akku_daten[i].timestamp_datensatz_mo, eeprom_akku_daten[i].timestamp_datensatz_yy,
252 eeprom_akku_daten[i].timestamp_datensatz_hh, eeprom_akku_daten[i].timestamp_datensatz_mi, eeprom_akku_daten[i].timestamp_datensatz_ss );
253 printf (
"SOC: %i\r\n", eeprom_akku_daten[i].soc );
254 printf (
"SOH: %i\r\n", eeprom_akku_daten[i].soh );
255 printf (
"c_max: %i\r\n", eeprom_akku_daten[i].c_max );
256 printf (
"charge: %i\r\n", eeprom_akku_daten[i].charge );
257 printf (
"charge: %li\r\n", eeprom_akku_daten[i].betriebszeit_s );
258 printf (
"charge: %li\r\n", eeprom_akku_daten[i].ladezeit_s );
259 printf (
"charge: %5.2f\r\n", eeprom_akku_daten[i].ladezyklen );
264 for (
int i = 0; i < 4; i++ )
266 printf (
"Block %i Basisdaten:\r\n", i );
267 printf (
"%02i.%02i.%02i %02i:%02i:%02i\r\n", eeprom_akku_basis_daten[i].inbetriebnahme_dd, eeprom_akku_basis_daten[i].inbetriebnahme_mo, eeprom_akku_basis_daten[i].inbetriebnahme_yy,
268 eeprom_akku_basis_daten[i].inbetriebnahme_hh, eeprom_akku_basis_daten[i].inbetriebnahme_mi, eeprom_akku_basis_daten[i].inbetriebnahme_ss );
269 printf (
"%02i.%02i.%02i %02i:%02i:%02i\r\n", eeprom_akku_basis_daten[i + 4].inbetriebnahme_dd, eeprom_akku_basis_daten[i + 4].inbetriebnahme_mo,
270 eeprom_akku_basis_daten[i + 4].inbetriebnahme_yy, eeprom_akku_basis_daten[i + 4].inbetriebnahme_hh, eeprom_akku_basis_daten[i + 4].inbetriebnahme_mi,
271 eeprom_akku_basis_daten[i + 4].inbetriebnahme_ss );
272 printf (
"MaxKapa: %i\r\n", eeprom_akku_basis_daten[i].max_kapa );
273 printf (
"MaxKapa: %i\r\n", eeprom_akku_basis_daten[i + 4].max_kapa );
uint8_t EEPROM_ReadByte(uint8_t pageAddr, uint8_t byteAddr)
Read one byte from EEPROM using IO mapping.
XMEGA EEPROM driver header file.
void EEPROM_WriteByte(uint8_t pageAddr, uint8_t byteAddr, uint8_t value)
Write one byte to EEPROM using IO mapping.