Перейти к содержанию

Фуоз-676 (Продолжение)


Рекомендуемые сообщения

PCLATH--он только отображает состояние ст.р. програмного счётчика или управляет им так как прямого доступа к счётчику не предусмотрен и в данном случае в него ничего не записывается а только идёт сравнение его значения с числом 03

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

я лишь описал,то что сделал автор(это он всё ввёл в том году когда боролся с Глюками... эта процедура у него записана даже 2 раза в проге в начале после инициализации и потом каждый такт после нахождения номера строки).лично я тоже не сторонник этого приёма т.к. считаю что все сбои происходили из за того .что тогда не было програмного ограничения числа строк в таблице.что он ввёл одновременно с этой проверкой.Но поскольку эта процедура занимает не так много кода(всего 6строк),я тоже применяю её,но только 1 раз

Изменено пользователем syma1961
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

это не что иное как защита программы от глюка и означает она следующее: производится сравнение ст.р. програмного счётчика(а он отбражается через регистр PCLATH),с константой 03. Если содержимое указанного регистра больше яисла 03.то мы идём на перезапуск МК,т.к. это сбой!!!! Почему именно 03? Дело в том что 13разрядный програмный счётчик способен нам обеспечить 8кбайт памяти,но у нас в этом МК физически реализовано только 1кбайт---это есть 4страницы или блока по 256 шт в каждом ...4 это будет 00,01,02и 03. То есть всего програмный счётчик должен принимать только эти 4 значения,а способен и больше----именно поэтому идёт сравнение с числом 03!!!!

от PCLATH отнимаем 03 = (0 - 3) ?

а почему не сравнивать с нулем?

При переходе в начало программы счетчики то не сбрасываются и переменные?

Потихоньку доходит: если PCLATH > 3 значит сброс, так ?

Изменено пользователем Alexan
Ссылка на комментарий
Поделиться на другие сайты

Потихоньку доходит: если PCLATH > 3 значит сброс, так ?

Мало того, что сброс, процессор получается зацикливается, и пока не снимешь питания с него работать больше не будет (вернее пока собака не сработает), так что-ли получается?

Изменено пользователем donec
Ссылка на комментарий
Поделиться на другие сайты

отнимается из константы(03)содержимое указанного регистра и по флагу "с" регистра STATUS производится сранение полученного значения после вычетания(число положительное--00.01.02.03) или отрицательное??? Не путайте это с простам вычетанием из константы регистра---данная СВЯЗКА команд означает лишь процедуру сравнения результата на то число получилось положительным(в том числе и 0,или отрицательным......И если вы совершили перезапуск проги уже не важно сбросились счётчики или нет--всё начинается заново.....Не стоит сильно заморачиваться по этому поводу-примите это как факт и следуйте дальше -есть многовещей поинтересней этого.....Можно было бы и с0 сравнивать,НО нет такой команды в ПИКЕ(их всего то там 35шт....)

Изменено пользователем syma1961
Ссылка на комментарий
Поделиться на другие сайты

отнимается из константы(03)содержимое указанного регистра и по флагу "с" регистра STATUS производится сранение полученного значения после вычетания(число положительное--00.01.02.03) или отрицательное??? Не путайте это с простам вычетанием из константы регистра---данная СВЯЗКА команд означает лишь процедуру сравнения результата на то число получилось положительным(в том числе и 0,или отрицательным......И если вы совершили перезапуск проги уже не важно сбросились счётчики или нет--всё начинается заново.....Не стоит сильно заморачиваться по этому поводу-примите это как факт и следуйте дальше -есть многовещей поинтересней этого.....

1) GOTO START это разве перезапуск ? это по моему переход на начало программы.... продолжаем с начала...

2) если PCLATH > 3 значит сброс, правильно ?

Ссылка на комментарий
Поделиться на другие сайты

Всем добрый день!!!!

Для syma1961. Не дискусии ради, а в подтверждении моего предложения возникла дискусия с #134 расписывать не только ход программы или нюансы программирования заложенные в программе

"Распиши как производится отработка УОЗ" . Это даст не повторение или копирование программы, а искать пути решения свои, орегинальные, я как раз и думаю эта тема для этого подходящая.

Спасибо IGO61 за эту тему.

Я не говорю панацеи - я предлагаю варианты

Ссылка на комментарий
Поделиться на другие сайты

я по моему и расписал там далее принцып формирования самого угла(так как смог--я не писал этого заранее,а писал сразу и написал что всё остальное это уже довески--прога может работать и с1ой таблицей без поправок по ДАД,ОК и т.д. Описать работу всей проги сразу не получится-надо писать заранее и очень много..... там я описал лишь принцып по которому делается опережение без учёта того что делается дальше с формированием выходного сигнала--номирование и т д. Во всё вникнуть сразу не получится---я тоже на это потратил не один месяц-выписывая команды и составляя комментарии такие как я это понимаю.Для тренировки можете глянуть как я описываю свою прогу дх1,но это не асм,а его муляж,т.к я не использую программы выдающие асм(там правда ещё не всё дописано)....А ещё лучше если вы начнёте изучение с авторской проги на 675 с одной таблицей(она есть в выложенном мной Сборнике Фуоз)-там кстати есть и авторский асм с комментариями и экселем--вот только после полного понимания там...-- начнёт просняться и здесь....

ФУ0З-ДХ1(АСМ).rar

Изменено пользователем syma1961
Ссылка на комментарий
Поделиться на другие сайты

Всем ПРИВЕТ!

Программы конечно морально устаревшие , но в качестве учебного пособия могут пригодиться .

В комментариях есть неточности (например частоты перехода , настройки портов и т.д.) В программах присутствуют мелкие глюки , "лохматый" код и т.д. , но в свое время они неплохо работали . ЖЕЛАЮ УДАЧИ !

F675 декабрь 2011.rar

Изменено пользователем b523pc
Ссылка на комментарий
Поделиться на другие сайты

все карты (с тузом из рукава)в ваших руках---дерзайте!!!!

Ну ещё не все тузы из рукава извлечены, по крайней мере, у меня. Тема только начинается.


 

Ссылка на комментарий
Поделиться на другие сайты

Лады, не будем "гнать лошадей". Дорисую картинки - ещё выложу на осмысление. Да и самому будет полезно въехать. У меня ведь не семь пяток (пядей) во лбу.


 

Ссылка на комментарий
Поделиться на другие сайты

Основной алгоритм работы:

Если на входе 0

увеличиваем переменную "нулевого уровня" с каждым тактом генератора

Если на входе 1

увеличиваем переменную " еденичного уровня" с каждым тактом генератора

Складываем переменные:

"нулевого уровня" + " еденичного уровня" = "накопленное число" (период от ВМТ 1-3 цилиндра до ВМТ 2-4 цилиндра)

и ищем в таблице УОЗ значение по адресу строки = "накопленное число"

post-164574-0-42616100-1356711103.jpg

Правильно ?

Я даже к родственнику на день рождения не пошел, чтоб не выпасть из темы и состояния осмысления :lol2:

Изменено пользователем Alexan
Ссылка на комментарий
Поделиться на другие сайты

Всем добрый вечер!!

Сильно не ругайте ни кого не хотя обидеть предлагаю кусочек коментариев, старался побольше добавить физики в "голую" математику цифирек

;================================================

CH_ign ;предпусковое состояние ;Зажигание включено стартер не крутим

CLRWDT

MOVLW 0xFF ;макс значения внести ;Записываем 0xFF(1111 1111) регистр времени ожидания

MOVWF TD_Lo ;в "предпусковой счётчик" ;в младший байт TD_Lo

MOVWF TD_Hi ;и старший байт TD_Hi

LOAD_0

MOVLW 0x05 ;записываем 0x05(0000 0101)

MOVWF temp ;во временный регистр temp

NO_0

DECFSZ temp,F ;уменьш на 1 ПП-счётчика ;Производим отсчёт времени ожидания сигнала искры на входе

GOTO NO_0 ;если не 0, циклимся ;Время ожидания можно менять по желанию

DECFSZ TD_Lo,F ;уменьш на 1 мл/б ПП-счётчика ;меняя значения в регистрах ожидания и temp

GOTO IN_UP ;если не 0, на провер сост-я входа ;Проверяя сигнал на входе переходя на метку IN_UP

DECFSZ TD_Hi,F ;если 0, уменьш ст/байт ;Если сигнал появился значит покрутили стартер переходим на обработку искры

GOTO IN_UP ;если ст/б не 0, проверить вход ;По окончании счёта и отсутствии входного сигнала

BSF OUT ;если ПП-счётчик обнулился, на выход 0 ;Отключаем выход (т.е.устанавливаем 1 - BSF OUT)прекращаем накопление

GOTO CH_ign ;если вх имп-сов нет - циклимся ;И начинаем отсчёт времени и проверку входного сигнала снова

;================================================

IN_UP ;ВУ на входе, ожидание НУ,режим пуска

CLRWDT

BTFSS IN ;если на входе НУ, ;Проверяем сигнал на воде IN,если он = 0

GOTO LOAD_0 ;ожидать ВУ на входе ;Переходим на метку LOAD_0

CLRF TL_Lo ;если ВУ на входе, ;Если на входе IN 1, подготавливаем регистры,

CLRF TL_Hi ;очистка переменных "0"-го ;т.е. обнуляем регистры нулевого и

CLRF TH_Lo ;состояния и ;единичного состояния сигналов TL_Lo,

CLRF TH_Hi ;"1"-го ;TL_Hi, TH_Lo, TH_Hi

lbl_1_1

BCF FLG,0 ;подн флаг "0" ;Выставляем в 0 нулевой бит регистра флагов FLG

MOVLW .255 ;предвар загрузка макс значения ;Пока нет данных заносим в регистры опережения зажигания

MOVWF OP_Hi ;в "опережение" ;Максимально возможное .255 в OP_Hi

MOVWF OP_Lo ;И младший байт OP_Lo

BSF FLG,0 ;"поднять флаг" ожидания искры ;Разрешаем искру, записью 1 в 0 бит регистра флагов FLG

BTFSS IN ;если пришёл НУ, ;И проверяем сигнал на входе IN

GOTO IN_DN ;на П/П обработки НУ ;Если входной сигнал = 0 переходим на обработку нулевого сигнала по метке IN_DN

BCF OUT ;если нет - накопление ;Если на входе стала 1, то устанавливаем на выходе 0 - включаем накопление

lbl_1_2

DECFSZ OP_Lo,F ;декремент "опережения", мл/б ;Уменьшаем значение на 1 мл.байта регистра опережения и пока он не равен 0

GOTO lbl_1_4 ;если не 0, то по метке ;Увеличиваем на 1 мл.байт регистра TH_Lo по метке lbl_1_4

BCF STATUS,Z ;если 0, ;Если досчитали до 0 регистр OP_Lo, обнуляем Z в регистре STATUS для использования

MOVF OP_Hi,F ;провер ст/б на 0 ;Проверка значение OP_Hi = 0 ?

BTFSS STATUS,Z ;если ст/б не 0

GOTO lbl_1_3 ;то по метке ;Если OP_Hi не равен 0, из него можно вычесть 1 по метке lbl_1_3

GOTO MN_ISK ;на "многоискровку", здесь отключена ;

GOTO lbl_1_4 ;страховка на случай ошибки ;Если OP_Hi равен 0, переходим на lbl_1_4

lbl_1_3

DECF OP_Hi,F ;декремент ст/б "опережения" ;Вот тут мы отнимаем 1 из OP_Hi

lbl_1_4

INCFSZ TH_Lo,F ;увел на 1 длины ВУ на входе(мл/б) ;Увеличиваем регистр времени единичного сигнала на входе

GOTO lbl_1_5 ;если не 0, то по метке ;Пока не перевалил за .255 проверяем состояние входа IN по метке lbl_1_5

INCF TH_Hi,F ;если 0, то инкремент ст/б ;Если перевалил добавим 1 к старшему регистру счёта единицы на входе

NOP ;"пустые операции для сохранения

NOP ;алгоритма подсчёта длительностей

NOP

NOP

NOP

lbl_1_5

CLRWDT

BTFSC IN ;провер сост входа ;Проверим, на входе IN 1 ?

GOTO lbl_1_2 ;если =1, то цикл в ожидании 0 ;Да, переходим на подсчёт по метке lbl_1_2

BSF OUT ;если 0, искра и идём дальше ;Нет,т.е. из 1 перешёл в 0 даём искру переключением выхода в 1 BSF OUT

;================================================

Мои коментарии после после коментариев IGO61 после точки с запятой. Еще раз прошу прощения. Может комуто станет понятнее .

Изменено пользователем granick

Я не говорю панацеи - я предлагаю варианты

Ссылка на комментарий
Поделиться на другие сайты

granick, Alexan, Вы молодцы!!!

Это не высокомерное похлопывание по плечу старшим братом, а искреннее выражение чувств.

В алго только одно замечание. Так как в схеме из №1 между коммутатором и МК стоит один транзистор, поэтому искра всё-таки по переходу с НУ на ВУ с выхода МК. Потом это дело инвертируем транзистором и получаем на входе в коммут искру по спаду. А страховка - это всё-таки страховка. Имеют значение только две команды GOTO после BTFSS STATUS,Z. Третья команда перехода - страховка на случай сбоя. Но это лишь моё мнение, видение процедуры. В своих прогах я такую страховку не делал.

По поводу принципа подсчёта. Проц тактируется 4МГц. Команды "перескакивают" с частотой 1МГЦ (такт 1мксек). Так вот, в программах ФУОЗ Автором организован так называемый "програмный счётчик" с коэффициентом деления 10, когда между инкрементами (или декрементами) "счётных" переменных проскакивает 10 машинных циклов, тактов (команд). Таким образом, инкремент (или декремент) счётчика происходит каждые 10мксек. Что нужно учитывать при внесении прАвок в программу.


 

Ссылка на комментарий
Поделиться на другие сайты

Всем доброй ночи !!

Я начинающий, сам только начинаю осваивать, поэтому и бросился в процесс изучения, и участия в проекте и всеми четырьмя руками или лапами ЗА.

Я не говорю панацеи - я предлагаю варианты

Ссылка на комментарий
Поделиться на другие сайты

Почитал немного прогу, в ней не использован такой мощный инструмент как прерывания, сделал расчет проги если использовать прерывания и шестнадцатибитный счетчик Т1, данные в таблице. Частота процессора 4МГц, счетчика 500кГц (делитель 8). По перепаду с "0" в "1" на входе INT (прерывание) производится считывание счетчика и его обнуление, в итоге имеем аппаратный счетчик с дискретностью 2мкс, также команда искрить и расчет оборотов, ДАД, ОК, ТЕМР, УОЗ и всего остального. Плохо, что нету регистра сравнения в таймере, поэтому после расчета контролируем считыванием значение счетчика и когда он достигнет 45 градусов до ВМТ (45 градусов - это если перепад с "0" в "1" идет в ВМТ, можно сделать перепад градусов 5 до ВМТ, тогда и общий отрабатываемый УОЗ будет в интервале от 45+5=50 до 5 градусов, и соответственно пусковой УОЗ будет 5 градусов) выполняем соответствующие действия - начало отработки задержки УОЗ и далее либо искра, либо накопление. По прерыванию при переполнении счетчика установка флага "переполнение", переполнение будет до оборотов 229, если установлен флаг переполнение, то искра по перепаду с "0" в "1", начало накопления через 1.5мсек после искры. С оборотов 229 будет работать прога с расчетом УОЗ с таблиц. В таблицах задается УОЗ не в тиках, а в градусах задержки зажигания начиная от 45 градусов до ВМТ, одна единица равна 0.17578 градуса, значение 255 - 44.824 градуса. Отсчет УОЗ ведем от 45 градусов до ВМТ. как получаем 45 градусов - 180 делим на 2 = 90 и еще раз делим на 2 = 45, 45+90=135 градусов после ВМТ или 45 до ВМТ (естественно с поправкой на начальный УОЗ 5 градусов).

Вот такое направление в общих чертах, а дальше сами смотрите.

Книга1.rar

Изменено пользователем donec
Ссылка на комментарий
Поделиться на другие сайты

Почитал немного прогу, в ней не использован такой мощный инструмент как прерывания,.....
На этот момент многие указывали, но так его и нереализовали. Возможно теперь, прерывание возьмут на вооружение... :rolleyes:

А вообще...., молодцы мужики, что вы взялись за это дело!!!! :i-m_so_happy::clapping:

Больше дела, меньше слов! Не ошибается тот, кто ничего не делает!

ВАЗ-2104(2004г); мотор:1,5куб; КПП:5; СЗ:ДПКВ(60-2)+ФУОЗ(своя схема, МК: SiLabs C8051F310)+ДКЗ-006м(статика).

Ссылка на комментарий
Поделиться на другие сайты

У меня в общем теле проги только настройка и после настройки процессор зацикливается сам на себе, стоит на месте, а все расчеты и отработки по прерываниям.

Ссылка на комментарий
Поделиться на другие сайты

Аналогично!!! :drinks:

Больше дела, меньше слов! Не ошибается тот, кто ничего не делает!

ВАЗ-2104(2004г); мотор:1,5куб; КПП:5; СЗ:ДПКВ(60-2)+ФУОЗ(своя схема, МК: SiLabs C8051F310)+ДКЗ-006м(статика).

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...