Официальный сайт компании Arduino по адресу arduino.cc
Запись девятизначного числа во FRAM
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 28/06/2021 - 18:24
Привет! Прошу предоставить простой код, с возможностью записи 6 и 9 значного числа из переменной long, во внешнюю память FRAM.
Наверняка есть что-то простое как этот ниже, абсолютно рабочий, для встроенной EEPROM.
Память FM24CL64B. Побайтно пишу без проблем, 3 дня бьюсь с объединением кода в единое целое, всё безрезультатно.
Всё что находил в инете? перепробовал всё, не могу сделать рабочий вариант, поэтому прошу как алкаш в переходе, с табличкой "подайте на бухло". За то честно и прямо, напишите мне код :)
#include <EEPROM.h> long data = 123456789; int address = 0; void setup() { Serial.begin(9600); EEPROM.put(address, data); delay(10); EEPROM.get(address, data); Serial.print(data, DEC); } void loop() { }
Наверняка есть что-то простое как этот ниже, абсолютно рабочий, для встроенной EEPROM.
если вы этим кодом проверяете запись в ЕЕПРОМ - хочу вас "обрадовать" - этот код бессмысленный, он ничего не проверяет.
Если вместо реальных функций записи и чтения ЕЕППРОМ подставить в этот код просто "заглушки" - то есть пустые функции, которые вообще ничего не делают - код все равно будет выдавать верный результат. да что там - можно просто тупо закомментировать в этом скетче строчки, начинающиеся с EEPROM - на результате это не скажется :)
вам такой же бессмысленный код нужен для ФРАМ? :)
Само собой, если закомментировать запись, и стереть значение long, то чтение идёт из памяти правильное на TFT дисплее всё отображается верно, у меня это работает в конструкции.
Этот код только для примера, насколько он короткий и понятный.
Просто мне нужно сохранить около двухсот 9-значных значений, и хотелось бы код покороче.
FRAM по сути внешняя еепром. Есть такой код, но для запоминания 9 знаков, его нужно допилить.
Заявку в "Ищу исполнителя" размещай. 500р. Телега @wdrakula.
Заявку в "Ищу исполнителя" размещай. 500р. Телега @wdrakula.
я смотрю,, бармалею скоро придется снижать цены :)
Просто мне нужно сохранить около двухсот 9-значных значений, и хотелось бы код покороче.
Возьми свой "побайтный код" и оберни в функцию или просто в цикл.- и сможешь писать хоть тысячу значений десятком строчек...
А хочешь красиво - найди исходник ЕЕПРОМ.put и get и сделай по аналогии
Прошу предоставить...
Круто!
b707,
Понял, попробую.
Их у меня есть.
На не реви только
Адрес моей внешней FRAM 0x50
Может есть волшебная строчка, что бы можно было сменить запись и чтение в внутренней памяти на внешнюю, и всё?
Например вписать что то типа этого (eeprom.begin(0x50));
Адрес моей внешней FRAM 0x50
Может есть волшебная строчка, что бы можно было сменить запись и чтение в внутренней памяти на внешнюю, и всё?
нет
честно говоря. не понимаю вашей проблемы. если вы умеете писать на свою память один байт - неужели так трудно научится сохранять 4 последовательно???
В конце концов, если уж так все плохо с соображалкой (что уж миндальничать) - так закажите код Дракуле, или 500 рублей тоже нет?
b707
всё просто, я копи-пастер, на этом этапе с FRAM я сильно застрял.
Я вообще сомневаюсь что это FRAM, поэтому большинство скетчей, которые вроде как работают у других, у меня с ними не всё отображается в плане всё что записывается. Хотя побайтно пишется. Одну FRAM я протестировал, 60 миллионов записей прошла, ячейки свойство сохранять информацию сохранили. Хотя может перемаркированная стойкая EEPROM попалась.
Бьюсь с кодами дальше...
Я одного понять не могу.
Ты пишешь можешь писать один байт.
Как записать и прочитать long побайтно я тебе выложил .
Что тебе ещё надо ?
Всё что находил в инете? перепробовал всё, не могу сделать рабочий вариант, поэтому прошу как алкаш в переходе, с табличкой "подайте на бухло". За то честно и прямо
Давайте я тоже Вам скажу честно и прямо.
Вы сейчас делаете три вещи
1. Не лазите ни по каким интернетам, а открываете библиотеку EEPROM и вытаскиваете оттуда функцию put. которая у Вас работает (выкладываете еёё в виде кода)
2. Сморите на неё и пытаетесь понять какие именно два пальца надо "чиркнуть" об асфальт, чтобы она работала с Вашей функцией записи одного байта. Вашу пробу выкладываете тоже.
Скорее всего (ну 95%) шаг три не понадобится, но если таки ..., то я обещаю
3. в ответ выложить Вам готовое решение - всего-то поменять одну (прописью "ОДНУ") строку в put, чтобы у Вас всё заработало.
Договорились?
Только давайте честно и прямо, т.е. п. 2 Вы честно пытаетесь выполнить.
Kakmyc,
спасибо! это заработало)) я нашёл куда код подоткнуть. Теперь попытаюсь отвязать библиотеку Adafruit_EEPROM_I2C.h.
ЕвгенийП, попробую и это, голова реально кипит, отпишусь.
Пока этот код работает. При проверке, само собой запись, и значение long 987654321 закомментировать.
Пока этот код работает.
Этот код значительно хуже put. Вернее, не хуже, а "менее универсален". Он только для long, а так, как сделано в put вы сразу получаете функцию для записи переменной любого типа. Хоть long, хоть long long, хоть структуры или массива - одна функция на всё.
Так что постарайтесь, там одну строку изменить надо - вместо её функции записи байта вызывать Вашу И ВСЁ. Если что, то моё обещание в силе, но уверен. что не понадобится.
ЕвгенийП, смотрю на этот кусок кода с файла еепром, и честно, нифига не понимаю куда его вставить.... в мой код записи одного байта.
ЕвгенийП, смотрю на этот кусок кода с файла еепром, и честно, нифига не понимаю куда его вставить.... в мой код записи одного байта.
Так не его надо вставить, а в него вставить вызов Вашей функции!
У Вас же сть функция записи одно байта? Как она называется? ZapisatBait? И у неё два параметра? Тот самый байт и адрес? Так? Типа ZapisatBait(bt, addr); и всё запишется?
Если так, то просто вставляете это в код put
Строку № 2 выбрасываете, она не нужна, а вместо их записи байта вставляете свою, делов-то
Ну, собственно и всё, если я ничего не наляпал (ночь-таки глубокая). Можете записывать еъ хоть массивы, хоть структуры, что угодно.
Вот рабочий скетч на основе кода, который предоставил Kakmyc, на мониторе порта всё хорошо, но как Вы предупреждали, будут проблемы, и они появились в реальной конструкции, я перевёл код на внешнюю FRAM, при чтении из ячеек памяти всё виснет, поскольку нет возврата адреса что ли, как Вы подметили, что put и get работет правльно. С встроенной еепром у меня всё работает. Я всё ровно не понял куда вставить, то что я вытащил из библиотеки еепром. При вставке в этот скетч что прикрепил ниже, компилятор материться на template. Можете вставить куда надо? скетч ниже.
https://drive.google.com/file/d/1HkxISdY7XWJhsH0imjKBW3SXR9zyOGE8/view?usp=sharing
Не, давайте скетч нормально вставляйте.
Возможно, я сегодня не смогу посмотреть, если так, потерпите до завтра, у меня сегодня беготной день.
Я всё ровно не понял куда вставить, то что я вытащил из библиотеки еепром. При вставке в этот скетч что прикрепил ниже, компилятор материться на template. Можете вставить куда надо? скетч ниже.
э, нет. Условие было - put get вы пишете сами. А вы даже две строчки поменять не осилили, Евгению и это пришлось самому делать. Я бы на его месте ничего вам дописывать не стал....
Зависания кода на основе кода от Kakmyc победил, я балбес посадил выбор ячеек памяти в код вращения энкодера, при прерываниях я так понимаю происходит сбой (на внутреннюю еепром это не влияло и всё работало). Сделал управление кнопками, каналы плюс - каналы минус, прошил во все ячейки фрам 0, и всё заработало отлично, пустые каналы содержат пустые ячейки, и при записи частоты сохраняются.
Про put get, мне не ясно. В данный момент у меня есть скетч, он использует библиотеку Adafruit_EEPROM_I2C.h.
Итого, файл скетча, и два файла библиотеки, Adafruit_EEPROM_I2C.h и Adafruit_EEPROM_I2C.cpp. Куда мне вставлять этот кусок кода PUT GET от библиотеки EEPROM? куда не вставь компилятор матерится на всё что в этом куске, оно и понятно, кусок от библы EEPROM, и всё что в нем есть, завязано на всё что связано с библиотекой EEPROM. Или мне нужно прикрепить дополнительно в скетч штатную библиотеку EEPROM, но у меня же внешняя EEPROM-FRAM...
До сих пор я не видел ни одной попытки от Вас что-нибудь куда-нибудь вставить :-(
Значит, оно Вам не надо :-(
Неужели? Что именно в моей функции из поста #18 "завязано" на EEPROM? Ответ "всё" не принимается. Конкретно, хоть одну букву покажите, которая "завязана"? Ничего там не завязано - совершенно независимый код.
Да, неужели? Он матерится ТОЛЬКО на функцию ZapisatBait - так я Вам сразу сказал, "допустим, она у Вас есть", разумеется надо туда Вашу функцию вставить
Почему вот я вставил в Ваш последний код свою функцию из поста #18 (только вместо ZapisatBait разумное что-то написал) и никто не матерится? Ну, совсем никто?
И где он ругается? Честно, Вы хоть что-нибудь в этом "своём" коде понимаете?
Теперь сделайте также get. Только сразу предупреждаю. С put Вы моё условие не выполнили - сами не попытались (я ни одной попытки не видел). Если с get будет также - на меня не рассчитывайте. Пока не начнёте думать и делать сами, я больше Вам ничего писать не буду.
Ладно, вопрос закрыт.
Живите долго, не болейте...
Зачем ты взываешь к тому, чего нет? Организм тебе в первом сообщении прямо сказал "Подайте код зарадихриста". Эх, опять ты плохой, не так помогаешь.
Ладно, вопрос закрыт.
Живите долго, не болейте...
выпросил код нахаляву еще и обиделся в итоге...
И Вам не хворать.
Ладно, вопрос закрыт.
Живите долго, не болейте...
выпросил код нахаляву еще и обиделся в итоге...
Так понятно, он же дал четкую заявку
Привет! Прошу предоставить простой код
А ему тут мозги выносить начали, сделай то.. пробуй так.. Написано ж четко "Прошу предоставить"
Написано ж четко "Прошу предоставить"
Послать код? В смысле "предоставить"?