Hallo Zusammen
ich habe mal wieder ein für mich sehr unlogisches Problem:
ich betreibe zur Zeit einen Atmega16 mit 12MHz und daran ein 24LC512 um
größere Datenmengen abzuspeichern.
Dazu habe ich zu Testzwecken zwei einfache Funktionen geschrieben:
1 | char EEPROM_write_page(int add)
|
2 | {
|
3 | char addr_low = add;
|
4 | char addr_high= add>>8;
|
5 | i2c_start_wait(EEPROM + I2C_WRITE);
|
6 | i2c_write(addr_high);
|
7 | i2c_write(addr_low);
|
8 | for(int i=0;i<(EEPROM_BUFFER_SIZE/2);i++)
|
9 | {
|
10 | char data_low = EEPROM_buf[i];
|
11 | char data_high= EEPROM_buf[i]>>8;
|
12 | i2c_write(data_low);
|
13 | i2c_write(data_high);
|
14 | }
|
15 | i2c_stop();
|
16 | return 0;
|
17 | }
|
18 |
|
19 | char EEPROM_read_page(int add)
|
20 | {
|
21 | char ret_l, ret_h;
|
22 | char add_low = add;
|
23 | char add_high= add>>8;
|
24 | i2c_start_wait(EEPROM+I2C_WRITE);
|
25 | i2c_write(add_high);
|
26 | i2c_write(add_low);
|
27 | i2c_rep_start(EEPROM+I2C_READ);
|
28 |
|
29 | for(char i=0; i<(EEPROM_BUFFER_SIZE/2);i++)
|
30 | {
|
31 | ret_l = i2c_readAck();
|
32 | ret_h = i2c_readAck();
|
33 | EEPROM_testpuffer[i] = (ret_h*256)+ret_l;
|
34 |
|
35 | }
|
36 | i2c_readNak();
|
37 | i2c_stop();
|
38 | return 0;
|
39 | }
|
ich habe die Datenübertragung mit einem LogicCube überprüft - das
Speichern funktioniert ohne irgend ein Problem, doch warum erhalte ich
beim Auslesen des EEPROMs fehlerhafte Werte?
zum veranschaulichen was für werte ich schreibe sind 2 Bilder im Anhang
Daten_zum_speichern sind die daten die ich speichern möchte
erhaltene_Daten ist das, was ich zurückerhalte
hat da einer eine Lösung parat?
gerne stelle ich noch weitere Daten zur Verfügung wenn sie gewünscht
werden.