Внешняя EEPROM по шине I2C

Использование внешней и внутренней EEPROM, а так-же SD card
Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#1

Сообщение Sancho » 04.08.2017{, 17:39}

Блоки для работы, пока тестовые, выложены в "Блоках пользователей".
Пример программы для понимания, насколько всё несложно прилагается.
Учитывая, что УВАЖАЕМЫЙ АВТОР не добавил в программу такое простое математическое понятие, как остаток от деления (modulo) придётся поработать ручками в коде, либо переделать алгоритм.( файл .txt нужно вставить в ide, уже испр).
О содеянном. Плата с DS3231 и 24C32, LED1602 с I2C, DHT22.
Записываются показания*10 и время каждые 5 сек, запись по кругу(512 блоков х 5сек= более 40 мин).
Три кнопки 10пин - текущее/архив, 11пин - вверх по архиву,12 - вниз.
В блок записи встроен R тригер, поэтому запишет только по фронту на Record(от дырки в памяти, если в каждом цикле).
Текущее значение времени преобразуется в один интегер и тоже записывается.
Читаем. Считываем при изменении номера блока на входе.
Распаковываем "временной" инт, преобразуем в перевариваемый формат.
Желающим позаморачиваться с возвратом точки в темп/влажности - плиз.
Чтобы значения не ёрзали по местам, когда нужно добавляем пробелы.

У кого есть железки - попробуйте. Первый раз при запуске поиграйтесь, пусть пишет минут 45. смотреть можно сразу, пишет всегда.
Потом, можно отключить на сколько угодного, вкл, и зайти на блоки 510, 509(пин 12),  так как писать начинает с 0,1 ...

Надеюсь, пригодится.
Вопросы по делу приветствуются!
Как и критика...
Жуть как не хватает MODULO!!!!

P.S. Не цепляется один, лежит тут.
Вложения
5835783.txt
(12.48 КБ) 124 скачивания
Последний раз редактировалось Sancho 09.01.2018{, 11:21}, всего редактировалось 2 раза.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
fsergei70
Капитан
Сообщения: 703
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Внешняя EEPROM по шине I2C

#2

Сообщение fsergei70 » 05.08.2017{, 06:52}

Здравствуйте. Подскажите откуда взялась формула пересчета в вашем проекте
Собрали сек, мин, час в один интегер по формуле
сек(0-60)/5 + мин(0-60) * 16 + час(0-24)*1024
запись с периодом 5 сек, поэтому максимум от сек 12,
Если писать раз в 5 секунд то должно быть
сек(0-60)/5 + мин(0-60) * 12 + час(0-24)*720
ведь в одну минуту пишется 12 значений а в час 12*60

По поводу остатка разве нельзя его так посчитать? файл прикрепил внизу, если можно то все это можно загнать в блок.

Добавлено (05.08.2017, 06:52)
---------------------------------------------
Я в железе не пробовал, но мне кажется что значения с датчика надо писать в переменные, а уже с переменных считывать и подавать на блок записи в память. Ну а в блоке чтения наоборот.

Пересчет времени не совсем удобен, потому как не универсален, если нужен другой период опроса то в проекте надо переделывать формулы а если мне нужно будет вместо секунды/минуты/часы, сохранять например месяц/день/час вообще начнутся сложности, ведь количество дней каждый месяц разное. Да и переменной Integer со своим максимальным значением 32767 не бесконечная,  при использовании другой микросхемы памяти с большим объемом ее точно не хватит, а использовать другой тип переменной вместо Integer это уже 4 байта.  Поэтому лучше все таки хранить значения секунды/минуты/часы или скажем месяц/день/час каждую в своей переменной типа Byte.

P.S. И еще раз у нас целых 4096 байта  может имеет смысл сделать еще один блок по 16 байт и часть данных сделать строковой переменно, а часть в  integer.  Ведь не всегда нам нужно сохранять именно время или дату, например если использовать блоки  для хранения настроек Modbys Master, при работе с несколькими Slave, в строковых переменных можно хранить название опрашиваемого датчика или место их установки а в Integer допустим адреса и скорость обмена, тогда забив настройки один раз все Slave устройств можно будет из меню переключаться между ними.

Еще раз огромное Вам спасибо за блок.
Вложения
2156186.flp
(73.75 КБ) 95 скачиваний
Последний раз редактировалось fsergei70 05.08.2017{, 07:07}, всего редактировалось 1 раз.

Аватара пользователя
fsergei70
Капитан
Сообщения: 703
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Внешняя EEPROM по шине I2C

#3

Сообщение fsergei70 » 05.08.2017{, 07:45}

Вот проект ваш немного переделал, я его не проверял  датчика влажности нет у меня, по идее должен работать. Единственное в чем не уверен, может данные с датчика надо писать в переменные а после с переменных считывать, не знаю сохраняются значения на выходе DHT в переуд между опросами Данные пишутся раз в минуту. Если кто проверит отпишитесь интересно все таки, сам то я проверить не смогу, потому как датчик DHT влажность мерит в попугаях, брешут сильно и приобретать его не вижу смысла а для температуры 18b20 есть.
Вложения
9302942.flp
(1.41 МБ) 88 скачиваний

Аватара пользователя
fsergei70
Капитан
Сообщения: 703
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Внешняя EEPROM по шине I2C

#4

Сообщение fsergei70 » 05.08.2017{, 07:47}

проект в архиве
Вложения
__.rar
(64.78 КБ) 86 скачиваний
Последний раз редактировалось fsergei70 05.08.2017{, 07:49}, всего редактировалось 1 раз.

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#5

Сообщение Sancho » 05.08.2017{, 10:44}

fsergei70 писал(а):Здравствуйте. Подскажите откуда взялась формула пересчета в вашем проектеСобрали сек, мин, час в один интегер по формулесек(0-60)/5 + мин(0-60) * 16 + час(0-24)*1024запись с периодом 5 сек, поэтому максимум от сек 12,Если писать раз в 5 секунд то должно бытьсек(0-60)/5 + мин(0-60) * 12 + час(0-24)*720ведь в одну минуту пишется 12 значений а в час 12*60
Я для удобства подсчётов использовал разрядность битов - ничего личного, мне так удобнее считать и запоминать. Каждый, в данном случае, волен выбирать, что душе угодно.
fsergei70 писал(а):По поводу остатка разве нельзя его так посчитать? файл прикрепил внизу, если можно то все это можно загнать в блок.
Считать остаток ИЗВРАЩЁННЫМИ методами, нет не я. Скормите Ваше творение IDE, посмотрите код, а потом сравните с X=Y%Z   А???? Разницу видите???
fsergei70 писал(а):Я в железе не пробовал, но мне кажется что значения с датчика надо писать в переменные, а уже с переменных считывать и подавать на блок записи в память. Ну а в блоке чтения наоборот.
Пользовательские блоки, точнее их входы/выходы - это уже переменные, задекларированные.
Чем меньше вокруг пользовательских блоков прослоек из доп. переменных - тем больше места нам остаётся в программе.
fsergei70 писал(а):Пересчет времени не совсем удобен, потому как не универсален, если нужен другой период опроса то в проекте надо переделывать формулы а если мне нужно будет вместо секунды/минуты/часы, сохранять например месяц/день/час вообще начнутся сложности, ведь количество дней каждый месяц разное. Да и переменной Integer со своим максимальным значением 32767 не бесконечная,  при использовании другой микросхемы памяти с большим объемом ее точно не хватит, а использовать другой тип переменной вместо Integer это уже 4 байта.  Поэтому лучше все таки хранить значения секунды/минуты/часы или скажем месяц/день/час каждую в своей переменной типа Byte.
Ответ:
Sancho писал(а):Пример программы для понимания, насколько всё несложно прилагается.
Добавлено (05.08.2017, 09:10)
---------------------------------------------
fsergei70 писал(а):P.S. И еще раз у нас целых 4096 байта  может имеет смысл сделать еще один блок по 16 байт и часть данных сделать строковой переменно, а часть в  integer.  Ведь не всегда нам нужно сохранять именно время или дату, например если использовать блоки  для хранения настроек.......
ВСЕ данные в контролере представляют собой байты, поэтому хранить можно хоть чёрта лысого, если его описать этими самыми байтами. 

Это всего лишь ТЕСТОВЫЙ блок, сделать можно под ЛЮБОЙ!!! тип, комбинированные, особенно итересным представляется массив в формате использования его для web...
У микросхем от С64 и выше размер записываемого блока может доходить до 64 байт в один заход.
Надеюсь, очень, что моя писанина, не только в этом топике, помогает разобраться - сам по образованию не програмист.

Добавлено (05.08.2017, 10:44)
---------------------------------------------
fsergei70 писал(а):инуты/часы, сохранять например месяц/день/час вообще начнутся сложности, ведь количество дней каждый месяц разное. Да и переменной Integer со своим максимальным значением 32767 не бесконечная,  при использовании другой микросхемы памяти с большим объемом ее точно не хватит, а использовать другой тип переменной вместо Integer это уже 4 байта
Что Вам мешает получить из двух байтов инт, а из двух инт - лонг инт?
У 24С256 адрес последнего бита 32767, хватит.
А чего ещё не хватает в нашей либимой FLProg, кроме MODULO % ???
Правильно, типа переменной, который, также, как и   MODULO %, приходится править(делать) руками, но стандартен.
Ещё не догадались?
Да, думаю, все знают.
Правильно,  unsigned int, который позволяет работать в диапазоне 0-65535....
Особенно актуально, в моих случаях, в счетчиках, для выборки адресов - опять-же, правлю руками уже в коде.
Очень, Очень надеюсь, что Уважаемый АВТОР меня когда-нибудь, да услышит....
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
fsergei70
Капитан
Сообщения: 703
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Внешняя EEPROM по шине I2C

#6

Сообщение fsergei70 » 05.08.2017{, 14:58}

Sancho писал(а):А чего ещё не хватает в нашей либимой FLProg, кроме MODULO % ???Правильно, типа переменной, который, также, как и   MODULO %, приходится править(делать) руками, но стандартен.
Ещё не догадались?
Да, думаю, все знают.
Правильно,  unsigned int, который позволяет работать в диапазоне 0-65535....
Особенно актуально, в моих случаях, в счетчиках, для выборки адресов - опять-же, правлю руками уже в коде.
если знаете где править то какие проблемы. Мне бы например очень пригодились переменные unsigned s hort    и  unsigned char для обмена по modbus, но их к сожалению нет, да и в float  порядок следования бит не настраивается. У каждого из пользователей есть свои хотелки, а автор программы у нас один, он при всем желании физически не в состоянии помочь всем. Сейчас вот Scada допиливает на языке FBD, штука безусловно нужная, хотя как по мне есть куча сторонних программ, взять хотя бы овен  телемеханика,  тот же язык FBD, работает правда она 2 часа а потом перезапускать ее нужно. 
Сори что то я от темы отвлекся.
Sancho писал(а):Что Вам мешает получить из двух байтов инт, а из двух инт - лонг инт?У 24С256 адрес последнего бита 32767, хватит.
Я не адресное пространство имел ввиду а получившееся число при расчете времени, если измерений будет больше писаться на другую микросхему, то мы можем выйти за диапазон 32767

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#7

Сообщение Sancho » 05.08.2017{, 15:48}

fsergei70 писал(а):Мне бы например очень пригодились переменные unsigned short
Чем отличается от  unsigned int в IDE?
 
fsergei70 писал(а):и unsigned char
А Вы проверили, как он реализован в IDE?
fsergei70 писал(а):для обмена по modbus
О каком режиме идёт речь?
fsergei70 писал(а):да и в float порядок следования бит не настраивается
Где проблема - я не понимаю!!! У Вас не получается принять флоат сторонними программами от FLProg? Расскажите, ОБЯЗАТЕЛЬНО поможем!
fsergei70 писал(а):Я не адресное пространство имел ввиду а получившееся число при расчете времени, если измерений будет больше писаться на другую микросхему, то мы можем выйти за диапазон 32767
Вот я и писал, что
Sancho писал(а):Правильно,  unsigned int, который позволяет работать в диапазоне 0-65535....Особенно актуально, в моих случаях, в счетчиках, для выборки адресов - опять-же, правлю руками уже в коде.
Добавлено (05.08.2017, 15:48)
---------------------------------------------
При архивировании времени - упаковке его для хранения- можно использовать не два байта, а три, четыре... - всё зависит от фантазии! Я, в примере, лишь сделал так, как мне было удобнее при пяти секундном интервале записей, и показал процесс сборки сек, мин, часов в другой формат.
К указанным в названии темы микросхемам данные разглагольствования никак не относятся.
Последний раз редактировалось Sancho 05.08.2017{, 16:00}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#8

Сообщение Sancho » 14.08.2017{, 17:15}

Сделал блок для записи в память телефонов с фамилиями и именами.

Отдельное СПАСИБО пользователю boroda, за идею приёма из уарта байтами...

В будущем будет работать в паре с gsm модулем, пока жду, едет из поднебесной...
Ввод всего производится через терминал - копипастом из таблицы эксель ПЕРВЫЕ ЧЕТЫРЕ СИМВОЛА - АДРЕС СТРАНИЦЫ, КУДА ЗАПИШЕТСЯ, энтер, посмотрели на дисплее - кнопку write, следующий...
Страница = 32 байта.
В памяти, которая с часами ds3231, 4096/32= 128 страниц
Переводим в чтение(вход write/read на общий), смотрим, листаем вверх/вниз, проверяем...
Блок для работы непосредственно с блоками gsm для поиска номера пока не делал.
Номер страницы намеренно сделал четырёх символьным - думаю, в будущем этот самый 4-й символ буду дописывать литерой A-Z и использовать для дальнейшей реакции на звонок - чего-то включить, выключить, поднять трубку, какие команды принять по дтмф, сбросить.......
Блок, вместе с другими тестами, лежит тут
Для нормальной работы необходимо пролечить две библиотеки, т.к. буфер шины i2c всего 32 байта, а для записи нужно 34. У себя поднял до 70 - в будущем, в другие 24С,  можно писать по 64 байта за один проход....
в файле \AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.19\libraries\Wire\src строка 28,
или C:\Program Files (x86)\Flprog\ideV2\hardware\arduino\avr\libraries\Wire\src
#define BUFFER_LENGTH 70
в файле %Arduino%\libraries\Wire\utility\twi.h строка 32или Поиск в помощь

#define TWI_BUFFER_LENGTH 70
Вложения
Test_memory.xlsx
(20.14 КБ) 142 скачивания
Последний раз редактировалось Sancho 19.08.2017{, 09:19}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#9

Сообщение Sancho » 17.08.2017{, 09:42}

iBells, для уменьшения кол-ва перепрошивок контролера, используйте переключение между платами.
Вложения
ext_EEPROM_R_W_.flp
(173.61 КБ) 109 скачиваний
Последний раз редактировалось Sancho 17.08.2017{, 09:43}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#10

Сообщение Sancho » 19.08.2017{, 09:23}

В архиве блока пользователя изменён блок "тел книги" - появилась функция поиска.
Для тестов используйте exel файл из поста выше.
Постарался всё закомментировать, так, что-бы можно было легко переделать под свои нужды, может под контроль доступа, ....
Поиск совпадений идёт с ПОСЛЕДНЕЙ цифры номера - считаю наиболее быстрый вариант.
Пример в комплекте. Не последняя версия.
Вложения
1922382.png
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#11

Сообщение Sancho » 29.08.2017{, 12:20}

Приделал к блоку ModBus RTU - отдаёт копию экрана, в народе СТРОКУ, даже две.
Пока принимаю через инсатовсий ОРС, порядок символов в регистре наоборот: вместо 01 23  принимаю 10 32.
Но ничего, на стороне мастера разберу как надо.

Используется ОДИН МАССИВ (16 рег или 32байта) и для модбас, и для всего остального!!!
Сложно было придумать, как в массив INT запихивать байты в произвольном порядке НЕ используя HightByte/LowByte и <<8/>>8. Получилось без всего этого, но мозг подзакипал.

Кто нибудь эксперементировал с блоком, памятью? Или это у меня монолог такой?

Добавлено (29.08.2017, 12:20)
---------------------------------------------
P.S. Дополню. В реальности передаётся не переменная КЛАССА String, а массив симолов типа char.
Разобрать строку (String) на символы простыми средствами С++ не могу. Даже не знаю, возможно-ли... Совсем не програмист Кто на что учился...
Вложения
1460233.png
9619221.png
Последний раз редактировалось Sancho 29.08.2017{, 12:05}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Dev1
Майор
Сообщения: 1017
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 58
Откуда: Гондурас

Внешняя EEPROM по шине I2C

#12

Сообщение Dev1 » 29.08.2017{, 14:41}

Sancho писал(а):Разобрать строку (String) на символы простыми средствами С++ не могу. Даже не знаю, возможно-ли...
Можно так разобрать...



СпойлерПоказать


Код: Выделить всё

String str = "HelloWorld";    //Инициализируем строку

void setup() {

  Serial.begin(9600);

}

void loop() {
   char charBufVar[11]; //Создаем буфер на 11 символов (HelloWorld=10 + 1)
   str.toCharArray(charBufVar, 11);  //Копируем символы из стринга в буфер длиной 11 символов

      //Выводим в компорт сомволы 
      Serial.print ("Char1=");
      Serial.print (charBufVar[0]);  //Символ из буфера под 1 номером (в обычном исчислении)
      Serial.print (" Char2=");
      Serial.print (charBufVar[1]);  //Символ из буфера под 2 номером
      Serial.print (" Char3=");
      Serial.print (charBufVar[2]);  //Символ из буфера под 3 номером
      Serial.print (" Char4=");
      Serial.print (charBufVar[3]);  //Символ из буфера под 4 номером
      Serial.print (" Char5=");
      Serial.print (charBufVar[4]);  //Символ из буфера под 5 номером
      Serial.print (" Char6=");
      Serial.print (charBufVar[5]);  //Символ из буфера под 6 номером
      Serial.print (" Char7=");
      Serial.print (charBufVar[6]);  //Символ из буфера под 7 номером
      Serial.print (" Char8=");
      Serial.print (charBufVar[7]);  //Символ из буфера под 8 номером
      Serial.print (" Char9=");
      Serial.print (charBufVar[8]);  //Символ из буфера под 9 номером
      Serial.print (" Char10=");
      Serial.println (charBufVar[9]);  //Символ из буфера под 10 номером
      
   delay(1000);

}
Вложения
3274294.jpg
Win10-64 FLProg v7.5.2 Portable :fie:

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#13

Сообщение Sancho » 30.08.2017{, 08:43}

Dev1, Спасибо, на будущее буду знать.(только учусь этому на "старости лет" )
О истории поста 11.
На стороне мастера принял массив, загнал в строки - всё ОК!!!

P.S. Промежуточный вывод: при желании можно и строки по модбас переслать.
P.P.S. Не составляет большого труда организовать считывание памяти 24Cxx через ModBus сразу по 32/64 байта (16/32 регистра) - смотреть архивы, логи, например. И записью тоже. Надо подумать...
Испльзование единственного массива для всего проекта - милое дело - не надо загружать в модбас теги переменные - экономим место в разделе памяти переменных и время.
Последний раз редактировалось Sancho 30.08.2017{, 11:11}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
fsergei70
Капитан
Сообщения: 703
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Внешняя EEPROM по шине I2C

#14

Сообщение fsergei70 » 04.09.2017{, 00:20}

Sancho писал(а):Не составляет большого труда организовать считывание памяти 24Cxx через ModBus сразу по 32/64 байта (16/32 регистра) - смотреть архивы, логи, например. И записью тоже.
Александр, интересно взглянуть на допиленный блок для передачи сразу 64 байт через modbus. Планирую подружить память с дисплеем на МАХ7219 чтоб дистанционно текст в бегущей строке менять через блютуз или rs485. Извини за не скромный вопрос, новые блоки для других типов данных выкладывать не собираешься? Думаю народу на форуме будет очень интересно.

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#15

Сообщение Sancho » 04.09.2017{, 12:26}

fsergei70 писал(а):новые блоки для других типов данных выкладывать не собираешься? Думаю народу на форуме будет очень интересно.
Обновил, появился флоат, конструируйте по шаблону наборы под  любые переменные.
fsergei70 писал(а):Планирую подружить память с дисплеем на МАХ7219 чтоб дистанционно текст в бегущей строке менять через блютуз или rs485
Вопрос не совсем понятен - где будет текст изначально? Если в памяти - то просто считывать нужный блок(страницу). Если просто передавать - то память здесь причём. Проясните идею.
fsergei70 писал(а):Александр, интересно взглянуть на допиленный блок для передачи сразу 64 байт через modbus.
 Пожалуйста, п.1. Необходимо, ОБЯЗАТЕЛЬНО, создать необходимое количество Input Register(аналоговые входы) на отдельной плате, создать условие для платы, при котором она никогда не будет выполнятся или удалить её в IDE. Эти действия создадут массив для модбаса в программе.
Скриншот в посте 11. Каждый регистр - два байта.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
fsergei70
Капитан
Сообщения: 703
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Внешняя EEPROM по шине I2C

#16

Сообщение fsergei70 » 04.09.2017{, 12:35}

Sancho писал(а):Вопрос не совсем понятен - где будет текст изначально? Если в памяти - то просто считывать нужный блок(страницу). Если просто передавать - то память здесь причём. Проясните идеюХочу
Хочу через блютуз или rs485 загонять текст в память а потом выводить на дисплей.

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#17

Сообщение Sancho » 04.09.2017{, 15:05}

fsergei70 писал(а):Хочу через блютуз или rs485 загонять текст в память а потом выводить на дисплей.
Я вносил текст в память через терминал. Но текст у меня содержал номер(файл в архиве), по которому он полу-автоматически заносился в соответствующую страницу, только нажимал Write.
Для остальных случаев нужно сделать  блок записи с выбором страницы.
Пришли микрухи пообъёмнее, буду переделывать на 64 байтные страницы - первые 32, как и раньше, личные данные, вторые 32 байта - для записи времени последних и общего количества "проходов". А есть ещё у меня и на 128 и 256 байт/страница...
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
fsergei70
Капитан
Сообщения: 703
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Внешняя EEPROM по шине I2C

#18

Сообщение fsergei70 » 04.09.2017{, 15:54}

Sancho писал(а):Я вносил текст в память через терминал. Но текст у меня содержал номер(файл в архиве), по которому он полу-автоматически заносился в соответствующую страницу, только нажимал Write.Для остальных случаев нужно сделать  блок записи с выбором страницы.
Пришли микрухи пообъёмнее, буду переделывать на 64 байтные страницы - первые 32, как и раньше, личные данные, вторые 32 байта - для записи времени последних и общего количества "проходов". А есть ещё у меня и на 128 и 256 байт/страница...
Александр я на али заказал модули 24с256 для экспериментов. ссылка под спойлером. Когда дойдут не знаю, пока мучаю память с часов 3107. Нужен блок чтоб только строковые переменные можно было писать/читать в eeprom  с ком порта .  .64 байтные страницы это хорошо но и на 32 байта в принципе пойдет, буду использовать несколько страниц если что.. Первые 32 байта с личными данными, как раньше в твоем блоке Uart_to_EEPROM_32_v5 было сделано  мне не нужны.

Аватара пользователя
Sancho
Полковник
Сообщения: 3999
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 571
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Внешняя EEPROM по шине I2C

#19

Сообщение Sancho » 08.09.2017{, 10:25}

fsergei70 писал(а):Нужен блок чтоб только строковые переменные можно было писать/читать в eeprom  с ком порта
Пишем из терминала, читаем на дисплее.
Текст для записи должен содержать четыре дополнительных первых символов для вычисления адреса страницы, в память пишутся 32 последующих. Например: 012 Hello, FLProg....... - в 12 страницу.
Скорость порта стоит 9600, меняйте по желанию.

Добавлено (08.09.2017, 10:25)
---------------------------------------------
Обновлено в блоках польз. выше описанный - добавился вход Work для режима чтения в каждом цикле страницы по адресу Page_num. пример UART-EEPROM_5.
Вложения
Uart_to_EEPROM_.ubi
(195.66 КБ) 99 скачиваний
UART-EEPROM_4.flp
(338.27 КБ) 112 скачиваний
Последний раз редактировалось Sancho 04.09.2017{, 16:51}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Iron
Рядовой
Сообщения: 26
Зарегистрирован: 23.11.2016{, 17:20}
Репутация: 1

Внешняя EEPROM по шине I2C

#20

Сообщение Iron » 02.10.2017{, 19:29}

Уважаемый Sancho.
В часах DS3231 в регистре по адресу 0x10 находится  компенсация точности хода.
Можно ли помощью  вашего блока прочитать и изменить его значения.

Ответить

Вернуться в «Устройства памяти»