Ви не увійшли.
Сторінки 1
Добрый день!
Пишу отладочный код для 24С256.
Наткнулся на непонятное поведение записи чтения массива
void setup()
{
Serial.begin(9600);
Serial.println("Hello!");
uint8_t dat[10];
Serial.println(F("Writing random "));
for (uint8_t i = 0; i < 10; i++) {
dat[i] = random(0,254);
Serial.print(dat[i]);
Serial.print(' ');
}
Serial.println();
Serial.println();
Serial.println(F("Check: "));
for (uint8_t i = 0; i < 10; i++) {
Serial.print(dat[i]);
Serial.print(' ');
}
}
Получаю после прошивки (Nano, PlatformIO):
Hello!
Writing random
43 71 29 238 220 122 60 98 43 169
Check:
184 184 184 184 184 184 184 184 184 184
Что я делаю не так?
PS
Вынес объявление массива до setup() - все заработало верно. Но ведь при объявлении массива внутри setup() он же находится в зоне видимости.
Почему не работает?
Так, вірно. Але біда ще в іншому. Wire () має буфер 32 байта але разом з адресою. Так можна відправляти 30байт даних + 2 байта адреси. Ось цей код спрацював
byte dataA[] = { 1, 2, 3, 4, 5, 6, 7, 8,
9,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24
},
dataB[] = {
25,26,27,28,29,30,31,32,
33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48
},
dataC[] = {
49,50,51,52,53,54,55,56,
57,58,59,60,61,62,63,64,
65,66,67,68,69,70,71,72
},
dataD[] = { 73,74,75,76,77,78,79,80,
81,82,83,84,85,86,87,88,
89,90,91,92,93,94,95,96
};
Serial.println("Memory written from: " + String(addr) + " dataA");
eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataA, 24);
delay(200);
addr +=24;
Serial.println("Memory written from: " + String(addr) + " dataB");
eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataB, 24);
delay(200);
addr +=24;
Serial.println("Memory written from: " + String(addr) + " dataC");
eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataC, 24);
delay(200);
addr +=24;
Serial.println("Memory written from: " + String(addr) + " dataD");
eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataD, 24);
Але, з'явилася нова біда в перших 8 адресах:
0: 41 1: 42 2: 43 3: 44 4: 45 5: 46 6: 47 7: 48
8: 9 9: A A: B B: C C: D D: E E: F F: 10
10: 11 11: 12 12: 13 13: 14 14: 15 15: 16 16: 17 17: 18
18: 19 19: 1A 1A: 1B 1B: 1C 1C: 1D 1D: 1E 1E: 1F 1F: 20
. . .
4F: 50 50: 51 51: 52 52: 53 53: 54 54: 55 55: 56 56: 57
57: 58 58: 59 59: 5A 5A: 5B 5B: 5C 5C: 5D 5D: 5E 5E: 5F
5F: 60 60: FF
Якимось чином додається 0x40. Спробував записати в них побайтово - все нормально. Виходить баг з посторінковим записом.
Шукаю бібліотеку "правильну"
Дякую за допомогу
Вітаю шановне панство!
Сабж
Использую библиотеку
#include <Arduino.h>
#include <Wire.h>
#include <EEEPROM.h>
#define EEPROM_I2C_ADDRESS 0x50
EEEPROM eMem;
bool saveData = false;
int addr=0;
void setup() {
Wire.begin();
Serial.begin(9600);
onMem();
if(saveData) {
byte dataA[] = { 1, 2, 3, 4, 5, 6, 7, 8,
9,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24,
25,26,27,28,29,30,31,32
},
dataB[] = { 33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,
49,50,51,52,53,54,55,56,
57,58,59,60,61,62,63,64
},
dataC[] = { 65,66,67,68,69,70,71,72,
73,74,75,76,77,78,79,80,
81,82,83,84,85,86,87,88,
89,90,91,92,93,94,95,96
};
Serial.println("Memory written from: " + String(addr) + " dataA");
eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataA, 32); // write to EEPROM
delay(200);
addr +=31;
Serial.println("Memory written from: " + String(addr) + " dataB");
eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataB, 32); // write to EEPROM
delay(200);
addr +=31;
Serial.println("Memory written from: " + String(addr) + " dataC");
eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataC, 32); // write to EEPROM
delay(100);
Serial.println("Memory written");
}
else {
Serial.println("READ ONLY");
}
addr = 0;
while (addr < 100)
{
Serial.print(addr, HEX);
Serial.print(": ");
Serial.println(eMem.i2c_eeprom_read_byte(EEPROM_I2C_ADDRESS, addr), HEX);
addr++;
}
}
void loop() {
}
Отримую (трохи згрупувв шоб місце менш займало) :
0: 43 1: 44 2: 45 3: 46 4: 47 5: 48 6: 49 7: 4A
8: 4B 9: 4C A: 4D B: 4E C: 4F D: 50 E: 51 F: 52
10: 53 11: 54 12: 55 13: 56 14: 57 15: 58 16: 59 17: 5A
18: 5B 19: 5C 1A: 5D 1B: 5E 1C: 1D 1D: 1E 1E: FF 1F: 21
20: 22 21: 23 22: 24 23: 25 24: 26 25: 27 26: 28 27: 29
28: 2A 29: 2B 2A: 2C 2B: 2D 2C: 2E 2D: 2F 2E: 30 2F: 31
30: 32 31: 33 32: 34 33: 35 34: 36 35: 37 36: 38 37: 39
38: 3A 39: 3B 3A: 3C 3B: 3D 3C: 3E 3D: 3D 3E: 41 3F: 42
40: FF 41: FF 42: 41 43: 42 44: 43 45: 44 46: 45 47: 46
48: 47 49: 48 4A: 49 4B: 4A 4C: 4B 4D: 4C 4E: 4D 4F: 4E
50: 4F 51: 50 52: 51 53: 52 54: 53 55: 54 56: 55 57: 56
58: 57 59: 58 5A: 59 5B: 5A 5C: 5B 5D: 5C 5E: 5D 5F: 5E
60: FF 61: FF 62: FF 63: FF
Ша я не так роблю?
Дякую всім
Сторінки 1