не вижу где написано какой контроллер а это критично
не вижу где написано какой контроллер а это критично
RK9AMX
Начал процедуру переноса значений из #define в ячейки памяти. В этом процессе возникло несколько вопросов. Нигде не указана у меня мощность для градусника, но это я введу и растяну на весь градусник. Дальше время нагрева и охлаждения. Выделил по 1 байту, а это значит 255. Округлил до целого счета до 250. Это значит максимальное время на разогрев 250 секунд и 250 секунд на охлаждение. Вопрос больше к тем, кто эксплуатирует ламповые усилители. Хватит ли этого времени.
Спасибо от RK9AMX
разогрев 3 минуты хватит, а остывать может и больше и меньше, зависит от лампы
Датчик температуры думаю можно и не ставить. Контроль потока воздуха на флажке очень надежная штука, а сигнал с оптрона подать на контроль анодного напряжения. Появится авария и дополнительно сделать индикацию, что это по воздуху. Датчиком температуры регулировать обороты вентилятора.
Последний раз редактировалось ua9ocb; 18.01.2020 в 11:46.
Integral, не ограничивайте себя одним байтом. В библиотеке EEPROM есть функция get(), которая позволяет считывать любой тип данных. А записывать соответственно get(). Значение в памяти будет занимать больше одного байта, но нам без разницы. Главное знать адрес первого байта.
Вот статья на тему работы с EEPROM.
Предлагаю все данные хранить в 2х байтах (int16_t -32767...32767 или uint16_t). Этого я думаю будет более чем достаточно. Обращаться к ячейкам памяти нужно будет кратно 2 (0, 2, 4...1022). 512 ячеек нам же должно хватить?
Не стыковка. Функция put()/get() использует 4 байта, т.к. сохраняет значения типа float. У нас таких значений нет, поэтому я использую по одному байту для значений до 255 и две ячейки для значений больше 255. Кроме этого я сделал автоматическую коррекцию показаний значений от недопустимых параметров. Такая ситуация возможна, когда считывание значений происходит в первый раз. Во флеш памяти при первом чтении находятся 1, поэтому их необходимо переписать в нужные значения по каждому параметру. Со вчерашнего дня эта версия 1.0.8.1 есть у меня в Облаке.
Тут пока писал функцию пришло в голову...
Выделить запись из дефайнов в еепром в отдельную процедуру. Можно будет после прошивки делать инициализацию контроллера и в случае необходимости сбрасывать до "заводских" настроек.
Код будет такой:Добавлено через 10 минут(ы):Код:EEPROM.put(0, DEFINE0); EEPROM.put(2, DEFINE1); EEPROM.put(4, DEFINE2); ... EEPROM.put(ADDR_N, DEFINE_N);
Можно и 2 байта, попробуйте. Прочитайте статью, там 4 пример демонстрирует работу этих процедур.
Добавлено через 13 минут(ы):
Если предпочитаете работать с байтами, то можно обращаться к памяти как к массиву. Значения получать с помощью битовых операций. Сам правда пока такой способ не испытывал.
Код:value = (EEPROM[0]<<8) | EEPROM[1];
Последний раз редактировалось RK9AMX; 18.01.2020 в 20:26.
Последний раз редактировалось Integral; 18.01.2020 в 20:42.
Спасибо от RK9AMX
Сергей тут легко получить 500 или 750 секунд если считанный байт умножить на два или три. То есть читается байт и умножается на два = результат двухбайтовое значение. Понятно что дискретность удвоится но для разогрева лампы это не важно. Там точность в секунду не имеет значения.
А можно и через оверлей. На Си он должен быть. Удобная штука. С еепром читается младший байт двухбайтовой переменой и умножается на два. А если нужно записать назад то два байта делится на 2 и в еепром загоняется младший байт. Обратное преобразование. Я такое повсеместно использую где не требуется принципиальная точность. Более байта и более переменные использую только там где они нужны. А дробные не использую совсем. Проще и быстрее работать с остатком от деления или умножения. Так максимально быстро работает и минимальный размер хекса.
Спасибо от Integral
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)