Arduino Uno FT24C256A
- Войдите на сайт для отправки комментариев
Вс, 03/10/2021 - 21:02
Всех приветствую!
Сабж
Использую библиотеку
#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
Что я делаю не так?
Спасибо всем
Помнится мне такое, что у Wire буфер в 32 байта на все, а не столь о на данные.
Походу вы правы!
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); // write to EEPROM delay(200); addr +=24; Serial.println("Memory written from: " + String(addr) + " dataB"); eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataB, 24); // write to EEPROM delay(200); addr +=24; Serial.println("Memory written from: " + String(addr) + " dataC"); eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataC, 24); // write to EEPROM delay(200); addr +=24; Serial.println("Memory written from: " + String(addr) + " dataD"); eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataD, 24); // write to EEPROMТолько осталась проблема с первыми 8 адресами:
PS
Да, я работаю ... пытаюсь :) ... через TCA9548 - может в этом еще подводный камень
PPS
А пример из букваря нормально работает
пишет с 0 адреса
Временно исключительно его и все будет ясно - он гадит или нет.
Ничего не дало. Подтянул SDA и SCL 10к на 5В, поменял ардуину ... Завтра куплю новую 24С256 и попробую. Может сама память накрылась. Хотя нет же - текст нормально пишется в первые адреса
:(
Если текст пишется, то вместо текстовой строки в подсуньте свои данные. Чудес-то не бывает - или в функции записи ошибка или в процедуре вывода. Или адрес не тот.
В сущности-то цифири верные, только 0x40 чем-то накидывается к каждой.
Попробовал писать побайтово - все числа от 0x00 до 0xFF пишутся нормально. Получается проблема в страничной записи.
Ищу "правильную" библиотеку
Спасибо за помощь :)
PS
Вот эта библиотека нормально сработала
Между записью в различные страницы нужно выдержать паузу - по дэйташиту 5 мс. На практике меньше, но пауза все равно нужна.