Ходок привет, есть вопрос по поводу еепром, у меня предстоит задача, изменять значения в процессе работы МК,
Привет КОТ.
В общем я сейчас делаю так:
Диапазон частот вращения КВ разбит на 51 зону.
В ЕЕПРОМе забиваю 11 восьмибитных ячеек, в них при программировании закладываю величину «отставания искры от выхода металла в десятых долях градуса», значение для 0й зоны, для 5й, для 10й, для 15й ……… для 50й. С увеличением номера зоны значение отставания уменьшается. В СРАМ резервирую 51 шестнадцатибитную ячейку. Затем при загрузке:
Шаг 1. Из ЕЕПРОМ в СРАМ копирую значения для соответственных зон, все 11 штук.
Шаг 2. Между 0м и 5м значением (соответственно между 5м и 10м, 10м и 15м таже ситуация) остаются пустые 4 шестнадцатибитные ячейки. Начинаем их заполнять по прямолинейному закону между двумя крайними значениями промежутка. Расчет ведется с точностью до 0,01 градуса. Т.е. берем 0е значение отнимаем от него 1 и записываем в 1е значение, отнимаем еще 1 и записываем во 2е значение, отнимаем 1 и в 3е, минус 1 и в 4е, минус 1 и сравниваем с 5м, предварительно прибавив к 5му 5(но в СРАМ не записываем). Если 5е+5 меньше повторяем операцию но уже отнимаем по 2 каждый раз. Как только последние сравниваемое значение будет меньше чем 5е+5 останавливаемся и переходим к следующему промежутку от 5го до 10го.
Таким образом, основываясь на 11ти опорных значениях, заполняем весь массив из 51 значения, каждое из них отображает «на сколько сотых долей градуса искра отстает от выхода металла» для данной зоны частот КВ, причем график состоит из 10 прямых, в опорных значениях имеет изломы.
Шаг 3. Берем значение «количества сотых градуса» из 0й зоны, затем загружаем 0е значение из массива «время прохождения 0,01 градуса через датчик для 0й зоны».
(массив был посчитан заранее и записан в ФЛЕШ, 51 значение «время прохождения 0,01 градуса через датчик» измеряется в «сотых долях импульсов таймера счетчика с пределителем на 8»).
Складываем значение из второго массива столько раз, сколько указано в первом массиве, одновременно понижая точность до единиц. Полученное значение отправляем обратно в 0ю ячейку СРАМ. Переходим к 1й ячейке и повторяем операцию.
В результате получаем в СРАМе массив из 51 шестнадцатибитных значений времен отставания искры от выхода металла в тактах таймера СК/8. Его можно использовать в работе ФУОЗа обычным способом. Основан он был на 11ти значениях в ЕЕПРОМ.
Объясню почему так сложно. Просто задать 11 значений времен отставания искры от выхода металла, а затем заполнить прямыми пустоты графика нельзя так как даже при прямолинейной зависимости «угол опережения – обороты» зависимость «время отставания – обороты» не прямолинейная, а представляет собой квадратичную параболу, а заполнять промежутки параболическими кусками я не представляю как. Поэтому сначала формируем прямолинейный график «угол – обороты» затем преобразуем его в график «время отставания – обороты».
Считать все не в градусах и тактах, а в «сотых градуса» и в «сотых такта» нужно для точности результатов. Процессор работает только с целыми числами, и если оперировать градусами и тактами, то погрешность будет очень большой.
Я запускал данный расчет в протеусе и сравнивал результаты с результатами экселя, самоя большая погрешность составила 0,5%. Это 5 единиц при вычислении числа в 1000.
В результате:
Экономим на памяти (11 восьмибитных значений вместо 51 шестнадцатибинтых).
Получаем возможность заложить несколько массивов из 11 значений и по одному и тому же расчету воссоздать и использовать любой из них.
Используя этот же кусок программы можем воссоздать остальные массивы (время прохождения сектора для определения зоны, время впрыска, время отставания впрыска и т.д.)
И самое главное: корректируя 11 значений ЕЕПРОМ прямо на дороге, двумя кнопками, можем поднимать «бугры» и делать «ямы» на графике зависимости «частота-угол опережения», причем график будет оставаться плавным без ступенек.
О корректировке ЕЕПРОМ двумя кнопками.
Для этого необходимо подключить к процессору две кнопки и один 3х миллиметровый светодиод через резистор 500 Ом.
Одна кнопка это у нас «селект» (далее «С»), а вторая «энтер» (далее «Э»). Запускается режим удержанием обеих кнопок во включенном состоянии в момент включения питания процессора. Далее процессор общается с нами длинными и короткими «мигами» светодиодом, длинный 1сек.+0,5сек пауза, короткий 0,5сек. +0,5сек. пауза. О включении режима корректировки ЕЕПРОМ он сигнализирует 10тью короткими мигами.
Затем переходит к ячейке ЕЕПРОМ по адресу $0000.
Ожидает.
Если вы желаете откорректировать значение ячейки то нажимаем «С».
Процессор сообщает порядковый номер ячейки, подлежащую корректировке, короткими мигами (чтобы не ошибиться), в данном случае мигает один раз.
Берет некий регистр R, обнуляет его и ожидает нового значения ячейки.
Нажимаем «С» и держим.
Процессор мигает короткими мигами (0,5 горит, 0,5 не горит), каждым мигом увеличивая значение регистра R на 1.
Мы стоим и считаем миги, увидев начало последнего мига (например 5го если мы хотим ввести 5) мы отпускаем кнопку.
Нажимаем «Э».
Процессор записывает значение R по адресу $0000 ЕЕПРОМ о чем сообщает одним длинным мигом.
Переходит к адресу $0001 и все действие повторяется.
Если мы не хотим корректировать ячейку $0000 мы сразу нажимаем «Э», процессор делает длинный миг и переходит к $0001. и т.д.
Таким образом можно откорректировать любую из ячеек ЕЕПРОМ и задать ей любое значение, главное внимательно считать миги. Очень удобно.
Так например задаем по адресу $0000 переменную ЕЕПРОМ «KrivaiaEE» и даем ей значение $00, затем в СРАМ резервируем также одну переменную «Krivaia», при подаче питания загружаем KrivaiaEE -> Krivaia, в дальнейшей программе при формировании массива отставаний искры сверяемся, если Krivaia = $00 то загружаем одну зависимость, если $01 то другую.
Корректируя двумя кнопками значение по адресу $0000 переключаем графики опережений.
Объединено: 15-01-12, 11:24А сможеш-ли добавить в программу (фуоз 1-канал дв. 634) такуюже функцию как переключение между кривыми ? Допустим залить 3 кривых(1-загруженый мот.,2-на легке, 3-на скорость),
Смогу. Вопрос только в том какие значения углов оперижения будут при "загруженном моте" при "на легке" и при "на скорость". А так, остальное дело техники и времени.
Объединено: 15-01-12, 11:30День добрый яваводам. Собрал ФУОЗ по схеме Hodok`а, двигло запускаеться и работает, но вот разницы на слух, не замечаю с ФУОЗ и без него, а снег мешает проверить тяговые качества на ходу. Вобще можно ли заметить разницу стоя в гараже??
Добрый.
Не знаю, может и нет. Я честно говоря не обращал внимания.
Если разницы на ходу тоже не почуствуется то проверь ФЬЮЗ биты. Часто бывает что они не прошиваются при прошивании программы, не смотря на птичку в квадратике, и потом процессор не верно тактируется, неверно все меряет и эффекта нет.