Внешняя EEPROM I2C 24C32, 64....

Пользовательские блоки дающие дополнительные возможности при работе с EEPROM и SD картами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

Внешняя EEPROM I2C 24C32, 64....

Сообщение Ivan_Kornege »

Sancho писал(а): 10 фев 2018, 11:14Надеюсь, в предыдущем посте я подробно изложил идею и возможности блоков?
Вам необходимо сохранять одну переменную один раз, или несколько? Т.е. сколько ячеек нужно и каких?
Еще раз спасибо за блок.
Я хочу писать время работы моего мотоблока. Что бы не убить память ардуины я решил писать во внешнюю память 24LC16B. Если умрет то просто заменю. Недорого и доступно. За основу взял проект с форума - пишит каждую минуту работы мотора. Пока не понял сколько минут можно записать в Ваш блок.
Я так понимаю что int1 это вход для записи в первую ячейку памяти?
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

Ещё один вариант использования описан тут
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

Внешняя EEPROM I2C 24C32, 64....

Сообщение Ivan_Kornege »

Sancho писал(а): 22 фев 2018, 09:10Ещё один вариант использования описан тут
У меня нет памяти 24С32.

Отправлено спустя 19 минут 7 секунд:
Sancho писал(а): 09 янв 2018, 11:16UPD.31.01.2018. Добавлены два тестовых блока для 24С16. Запись и чтение по два байта и три интегера = восемь байт. 256 блоков.(0-255).
Если использую вход блока int1 то можно записать 8 байт? Т.е. 12345678 запишется?
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

Любой тип данных в памяти контролера представлен байтами.
Типы byte, char - занимают по одному байту, поэтому могут иметь всего 256 значений.
Тип integer занимает два байта, 65536 значений.
Типы long и float занимают 4 байта.
Всё вышеописанное относится к ардуино, в других местах может быть иначе...
Возьмём тетрадь в клеточку.
[spoiler]
Пример распределения байт_1.png
[/spoiler]
Представим, что каждый квадрат это один байт информации( или восемь бит, но сегодня без них :) )
Блоки, описанные здесь, принимают на вход разный тип данных, но сразу сложные рабираются на байты.
При установке нужного номера блока и подаче сигнала Record происходит одновременная запись всех байт в ячейки памяти, соответствующие поданному адресу - Numblock.
При считывании происходит обратный процесс - устанавливаем адрес на входе Numblock - на выходе появляются записанные значения в том фомате, как и записывали.
ВСЁ!!!
Ivan_Kornege писал(а): 22 фев 2018, 10:42У меня нет памяти 24С32.
При чём здесь тип микросхемы? Вы принцип понимаете вообще???
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

Внешняя EEPROM I2C 24C32, 64....

Сообщение Ivan_Kornege »

Sancho писал(а): 22 фев 2018, 11:18При чём здесь тип микросхемы? Вы принцип понимаете вообще???
Ну зачем мне рассматривать левые микрушки.
В принципе как радист я понимаю на уровне общеобразовательной школы
1год = 525600 минут -влезет в 3 байта ,
Из расчета в трех байтах - 2^24-1 = 16777215 .
Но мой вопрос именно что сможет Ваш блок.
Sancho писал(а): 22 фев 2018, 11:18Тип integer занимает два байта, 65536 значений.
Т.е. теоретически 525600 минут не влезет в integer
Sancho писал(а): 22 фев 2018, 11:18Типы long и float занимают 4 байта.
А вот сюда уже с запасом. В флпрог можно применить unsigned long integer =от 0 до 4294967295 (4байта)
Но неизвестно сможет ли Ваш блок работать с unsigned long integer ?
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

[ref]Ivan_Kornege[/ref],
Блоки можно сделать для всего!!!
А можно и так.
[spoiler]
1_long_to_2_integ.png
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

Внешняя EEPROM I2C 24C32, 64....

Сообщение Ivan_Kornege »

Sancho писал(а): 23 фев 2018, 11:13Блоки можно сделать для всего!!!
Почему Вы изначально сделали запись по 2 байта на каждый вход,
или unsigned long integer для записи 4байта в 24LC16B невозможно сделать блок?
Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29 дек 2016, 00:49
Откуда: москва

Внешняя EEPROM I2C 24C32, 64....

Сообщение Nikan »

.
Последний раз редактировалось Nikan 23 мар 2023, 21:55, всего редактировалось 1 раз.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

Nikan писал(а): 23 фев 2018, 14:21может я чего не понял.
Вы почитайте вопросы выше и мои ответы....
Я устал объяснять, а ещё и рассказывать, что делает блок внутри...
[ref]Ivan_Kornege[/ref],
Для Вас на 23 февраля!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03 фев 2017, 12:23

Внешняя EEPROM I2C 24C32, 64....

Сообщение AVGN »

Sancho писал(а): 23 фев 2018, 15:06Я устал объяснять, а ещё и рассказывать, что делает блок внутри...
Подсобим малость...
Просто о сложном...
:moil: :wizard:

Памятка.
В один байт можно записать -один символ.
Пример: "Это что память?"
Имеем 12 букв = 12 символов, два пробела=2 символа, две кавычки= 2 символа и знак вопроса=1 символ.
Итого - 17 символов . Для хранения в памяти потребуется 17 байт.

Какое максимальное число можно записать считаем (^ -Возведение в степень).
в одном байте - 2^8-1 = 255
в двух байтах - 2^16-1 = 65535
в трех байтах - 2^24-1 = 16777215
в четырёх байтах - 2^32-1 = 4294967296 -1 = 4294967295
*****************************************************************************************
Тестовая программа для ARDUINO UNO с KEYPAD LCD 1602.
EEPROM_24LC16B_I2C_Flprog_UNO_test2.flp
Генерит каждую секунду и записывает в 24LC16B.
Обнуление 24LC16B – Замкнуть pin A2 на общий провод ( в проекте обозначен " RESET A2").
На дисплей выводится:
-верхняя строка – количество секунд считанные из 24LC16B и плюсуется каждая секунда которую генерим.
-нижняя строка - количество секунд считанных из 24LC16B
****************************************************************************************

Блок "24C16_Чтение_Long" для чтения из памяти 24LC16B.
На борту два выхода byte с возможностью чтения до 2 byte
+ один выход Integer с возможностью чтения до 2 byte
+ один выход unsig long Integer с возможностью чтения до 4 byte= итого 8 байт блоком.
Настройки блока "24C16_Чтение_Long".
Входы:
Reading – разрешение считывания если "true"
Numblock - номера блока от 0 до 255 , т.е. всего блоков 256. Можно организовать поблочное чтение.
Выходы:
byte_out_1 - один байт
byte_out_2 - один байт
int_out_1 - два байта , т.е прочитать не больше чем число 65535
Long_1 - четыре байта, т.е. прочитать можно не больше чем число 4294967295 или 4 символа.
-----------------------------------------------------------------------------------------------------------------------
Блок "24C16_Запись_Long" для записи в память 24LC16B
На борту два входа byte с возможностью записи до 2 byte
+ один вход Integer с возможностью записи до 2 byte
+ один вход unsig long Integer с возможностью записи до 4 byte = итого 8 байт блоком.
Настройки блока "24C16_Запись_Long".
Входы:
Record – разрешение записи при поступлении "true" в этом цикле происходит запись. Встроен R триггер. Что-бы не протереть дырку в памяти.
Numblock - номера блока от 0 до 255 , т.е. всего блоков 256. Можно организовать поблочную запись.
byte_in_1 - один байт
byte_in_2 - один байт
int1 - два байта , т.е записать не больше 65535
Long_1 - четыре байта, т.е. записать можно не больше чем число 4294967295 или 4 символа.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось AVGN 09 мар 2018, 08:47, всего редактировалось 1 раз.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

Внешняя EEPROM I2C 24C32, 64....

Сообщение Ivan_Kornege »

[ref=#ff8000]Sancho[/ref], Спасибо за блок- заработала микруха.
[ref]AVGN[/ref], Спасибо -доходчиво расписал!
Аватара пользователя
ElectroMechaniC
Сержант
Сообщения: 230
Зарегистрирован: 21 сен 2016, 06:50
Откуда: Донецк
Имя: Юрий

Внешняя EEPROM I2C 24C32, 64....

Сообщение ElectroMechaniC »

Привет! Если в проекте используются ЧРВ DS3231, с памятью 24С32, в неё можно писать к примеру 8мь интегров, с помощью данных блоков,пусть не сразу?
:newrus: Все в руках человека. Поэтому всегда мойте руки перед и зад! :victory:
:smile225: :smile469: :smile427:
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

[ref]ElectroMechaniC[/ref],
Без проблем.
Вопрос в том - использовать блок или воспользоваться встроенной в программу поддержкой.
Просто назначение блоков весьма своеобразно, скажем так.
Выкладывайте задачу - будем решать.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
ElectroMechaniC
Сержант
Сообщения: 230
Зарегистрирован: 21 сен 2016, 06:50
Откуда: Донецк
Имя: Юрий

Внешняя EEPROM I2C 24C32, 64....

Сообщение ElectroMechaniC »

Ок спасибо! Как только буду готов-выложу!
Ещё вопросик? А часами при этом можно пользоваться? Ну тлесть снимать показания жаты и времени, и одновременно производить чтение/запись в ееprom?
:newrus: Все в руках человека. Поэтому всегда мойте руки перед и зад! :victory:
:smile225: :smile469: :smile427:
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

ElectroMechaniC писал(а): 12 мар 2018, 05:59А часами при этом можно пользоваться?
Конечно, это разные устройства с разными адресами.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
fsergei70
Капитан
Сообщения: 860
Зарегистрирован: 17 ноя 2015, 20:36
Имя: Сергей
Благодарил (а): 40 раз
Поблагодарили: 8 раз

Внешняя EEPROM I2C 24C32, 64....

Сообщение fsergei70 »

Здравствуйте, что то ни как не соображу как переделать блок под ESP, Как прописать выводы I2C.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

В коде изменить/добавить, пробуй
Wire.pins(0, 2); // sda, scl
Wire.begin();
Или
Wire.begin(0,2);
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
fsergei70
Капитан
Сообщения: 860
Зарегистрирован: 17 ноя 2015, 20:36
Имя: Сергей
Благодарил (а): 40 раз
Поблагодарили: 8 раз

Внешняя EEPROM I2C 24C32, 64....

Сообщение fsergei70 »

Sancho писал(а): 02 июл 2018, 11:19В коде изменить/добавить, пробуй
Wire.pins(0, 2); // sda, scl
Wire.begin();
Или
Wire.begin(0,2);
Спасибо сейчас попробую. Вот еще нашел пример в нем библиотеки дополнительные подключены. и выводы определены #define В вашем коде библиотеки не нужны?

[spoiler]
#include <Wire.h>
#include <EEPROM.h>

unsigned int EEPROMBank = 0x50; // Base address of 1st EEPROM chip
unsigned int EEPROMAddress = 0; // Sets the start EEPROM address
unsigned int EEPROMValue = 0; // EEPROM value
byte Dummy;

// EEPROM list taken from:
// http://vascoferraz.com/projects/24c-eeprom-check/
// Sets the Maximum EEPROM address, uncomment accordingly:
//#define MaxBankAddress = 128 - 1; //24C01 -> 1024 bit -> 128 byte
//#define MaxBankAddress = 256 - 1; //24C02 -> 2048 bit -> 256 byte
//#define MaxBankAddress = 512 - 1; //24C04 -> 4096 bit -> 512 byte
unsigned int MaxBankAddress = 1024 - 1; //24C08 -> 8192 bit -> 1024 byte
//#define MaxBankAddress = 2048 - 1; //24C16 -> 16384 bit -> 2048 byte
//#define MaxBankAddress = 4096 - 1; //24C32 -> 32768 bit -> 4096 byte
//#define MaxBankAddress = 8192 - 1; //24C64 -> 65536 bit -> 8192 byte
//#define MaxBankAddress = 16384 - 1; //24C128 -> 131072 bit -> 16384 byte
//#define MaxBankAddress = 32768 - 1; //24C256 -> 262144 bit -> 32768 byte
//#define unsigned int maxaddress = 65536 - 1; //24C512 -> 524288 bit -> 65536 byte

#define SCLPin D1 // I2C SCL Pin
#define SDAPin D2 // I2C SDA Pin

void setup() {
Wire.begin(SDAPin, SCLPin); // Initialize 2-Wire bus
pinMode(D1, INPUT_PULLUP); // I Need to validate this line
pinMode(D2, INPUT_PULLUP); // I Need to validate this line
Serial.begin(19200); // Initialize serial port
while(!Serial); // wait for serial
delay(3000); // Waits 3 seconds
Serial.println("\n============================="); // Sends preamble and Cr+Lf
EEPROMAddress = 0; // EEPROM word variable
EEPROMValue = 120; // EEPROM value
Serial.print("EEPROMAddress: ");
Serial.print(EEPROMAddress);
Serial.print(", EEPROMValue: ");
Serial.print(EEPROMValue);
Serial.print(", EEPROMBank: 0x");
Serial.println(EEPROMBank,HEX);
writeEEPROM(EEPROMBank, EEPROMAddress, byte(EEPROMValue));
for (EEPROMAddress = 0; EEPROMAddress < 3; EEPROMAddress++) {
Serial.print("EEPROMAddress: ");
Serial.print(EEPROMAddress);
Serial.print(", Value: ");
Serial.println(readEEPROM(EEPROMBank, EEPROMAddress), DEC);
}
}
void loop(){
}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) {
Wire.beginTransmission(deviceaddress);
//Wire.write((int)(eeaddress >> 8)); // MSB
//Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write((int)(eeaddress)); //only for 8 bit addressing
Wire.write(data);
Wire.endTransmission();
delay(5);
}

byte readEEPROM(int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
//Wire.write((int)(eeaddress >> 8)); // MSB
//Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write((int)(eeaddress)); //only for 8 bit addressing
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.read();
return rdata;
}
[/spoiler]
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Sancho »

fsergei70 писал(а): 02 июл 2018, 11:29В вашем коде библиотеки не нужны?
Только Wire.h
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26 ноя 2017, 23:18
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

Внешняя EEPROM I2C 24C32, 64....

Сообщение Golan »

Сань, а для 24С64 можно такой блок забабахать?
Добро не ценится в современном мире, люди от него наглеют!
Ответить

Вернуться в «EEPROM и SD карты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость