Академический Документы
Профессиональный Документы
Культура Документы
1
Итак, введение, в принципиальную схему "текущей железяки", транзисторного
коммутатора тока, означает "неожиданное" возникновение обратной связи.
Ранее я упоминал о том, что последствия этого события, при условии наличия
превышения порога защиты по току, для нагрузки, по большому счету, не есть "зер
гут" (не всегда, но иногда может закончиться "Гитлер капутом").
А именно, если в сложившейся ситуации, не предпринять каких-то "контрмер", то
возникнет устойчивый автоколебательный процесс (в данном случае, "паразитный"),
представляющий собой множество кратковременных "перегрузов" (нагрузка
запитывается), с паузами между ними (нагрузка не запитывается).
Совершенно понятно, что это "безобразие" вообще "не лезет ни в какие ворота".
"Лучше уж сразу умереть", чем "сваять" такое.
Но жить-то очень хочется…
Соответственно, возникает вопрос "жизни и смерти": "Как, по умному, придушить эту
гадину (автоколебательный процесс)"?
Но не до конца, а иначе результатом будет "труп", с которого, естественно, "ничего не
поимеешь".
Вернее, "поимеешь", но совсем не то, что нужно, а диаметрально противоположное
("рытье могилы, похороны, венки" и т.д.).
Пусть уж этот "организм дышит", но только тогда, когда это будет дозволено
конструктором.
Вот и будет красота-ляпота, к которой нужно стремиться всеми фибрами истерзанной
и избитой невзгодами, конструкторской души.
Это и называется тяжелым, но почетным конструкторским счастьем.
Вернее, одной из ее составляющих.
Имею моральное право так говорить, так как являюсь "чемпионом мира по
перенесенным невзгодам" (шутка, но доля истины есть).
Итак, имеется некий автоколебательный процесс, который нужно "сорвать", но не до
конца.
Значит, в "границах" отдельно взятого, автоколебательного процесса, нужно оставить
одно "колебание", а остальные "поубивать".
И это "колебание" должно быть не абы каким, а первым (вспомните про
инерционность срабатывания защиты).
После его "прохождения" (дозволено "дышать"), все остальные колебания, "не
попавшие под раздачу слонов", должны "отправиться к праотцам" (не дозволено
"дышать", но "организм живой").
Вы сейчас сами удивитесь, как это просто "ваяется":
...................................
...................................
;********************************************************************************
; 2-е АЦП (сила тока). **********************************************************
;********************************************************************************
; Анализ, на предмет обхода процедуры 2-го АЦП, в случае предыдущего поднятия
; флага превышения порога защиты по току.
;--------------------------------------------------------------------------------
ACP_2 btfsc Flag,4 ; Флаг превышения порога защиты по току
; поднят или нет ?
goto ACP_END ; Если поднят, то обход процедуры 2-го АЦП.
; Если опущен, то процедура 2-го АЦП
; исполняется.
;--------------------------------------------------------------------------------
; Работа с регистром Adcon0.
;--------------------------------------------------------------------------------
...................................
...................................
;--------------------------------------------------------------------------------
; Проверка на превышение порога.
;--------------------------------------------------------------------------------
bcf Flag,4 ; Сброс флага превышения порога защиты
; по току.
2
subwf Porog_I,W ; Аналогично, только
btfsc Status,C ; Porog_I - Mem_IL = ...
goto ACP_END ; ----"----
bcf PortA,2 ; <-В этом случае, блокировка срабатывает и
bsf Flag,4 ; флаг превышения порога защиты, по току,
; поднимается.
;--------------------------------------------------------------------------------
; Теперь модуль АЦП можно выключить (начало выхода из прерывания).
;--------------------------------------------------------------------------------
ACP_END
...................................
...................................
5
6
Внутри циклической ПП слежения KOL_MOZALO, организованы две процедуры
сценариев: MOZALO_1 и MOZALO_2.
Для обеспечения управляемости, внутри каждой из них "врезаны" процедуры опроса
клавиатуры.
Разница между этими опросами только в том, что в ПП MOZALO_1, организован
полномасштабный опрос клавиатуры (опрашиваются все 4 кнопки), а в ПП MOZALO_2,
организован частичный опрос клавиатуры (не опрашивается кнопка "-/Нет").
Это объясняется тем, что после окончания отработки сценария-помощника и далее, ПП
MOZALO_2 не исполняется (всегда обходится).
А раз это так, то и смысла в опросе кнопки "-/Нет", нет (извиняюсь за тавтологию).
Обе подпрограммы "ставятся на счетчики" отрабатываемых циклов.
После обнуления такого счетчика, происходит переход с конца исполнения одной ПП,
на начало исполнения другой ПП.
"Механика" подобного рода "постановок на счетчики" многократно описывались мной
ранее.
Но в этом случае, ни о каком заданном количестве смен картинок и речи не идет, так
как эти смены будут происходить постоянно ("безлимитно").
Значит, ПП MOZALO_2 нужно "поставить на двойной счетчик".
Первый счетчик - то, о чем сказано выше.
Второй счетчик должен отсчитывать количество переходов из ПП MOZALO_2 в ПП
MOZALO_1.
Как только второй счетчик обнулится, поднимается некий флаг, дальнейший опрос
состояния которого "закольцовывает" рабочую точку программы в ПП MOZALO_1.
А проще говоря, после поднятия этого флага, ПП MOZALO_2 всегда будет обходиться,
и вся дальнейшая работа будет происходить только в "границах" ПП MOZALO_1.
Что и реализовано.
Этот "некий флаг" я назвал флагом завершения смен надписей.
После такой "закольцовки", основная функция счетчика циклов ПП MOZALO_1
"атрофируется".
В том смысле, что его обнуление не приводит к выходу рабочей точки программы из
ПП MOZALO_1.
Поднятый флаг завершения смен надписей не позволяет выйти.
Он, образно выражаясь, "отфутболивает" рабочую точку программы на начало ПП
KOL_MOZALO, после чего она снова "закольцовывается" в ПП MOZALO_1.
И т.д. Вплоть до нажатия кнопки "+/Да" (пуск).
Вот и получается, что отрабатывается заданное количество смен надписей, которые
выводятся на индикацию в течение заданного интервала времени.
Этот принцип достаточно универсален.
С его помощью, можно организовать подобного рода смену не двух, а более надписей.
Для тех людей, которые как следует освоили "постановки на счетчики", это не
является большой проблемой.
Можно даже "состряпать" что-то и "покруче".
Вывод: умение "ставить разнообразнейшие циклы на счетчики" это признак
квалифицированного программиста и показатель существенного уменьшения количества
возможных, "тупиковых" ситуаций.
От всей души советую Вам как следует это прочувствовать, разобраться и сделать
соответствующие выводы.
Теперь обращаю Ваше внимание на "начинку" ПП MOZALO_1.
Кроме того, что в ней происходит работа с флагом завершения смен надписей, в ней
еще происходит и работа с флагом, который я назвал флагом факта нажатия кнопки
"+/Да".
Его поднятие означает то, что ранее, кнопка "+/Да" была нажата.
Это нужно для организации замены двух мигающих символов "+" на символы "пусто",
в случае пуска.
Если этого не сделать, то после пуска, символы "+" не "исчезнут", а просто
зафиксируются на дисплее.
Мигание символов "+" обеспечивается простейшим триггером (задействуется бит №0).
У меня уже от него на языке мозоль. Повторять, сию "механику" не буду.
7
В зависимости от одного из двух возможных состояний бита №0 этого триггера, на
индикацию, в самые крайние знакоместа 1-й строки ЖК-модуля, будут выведены либо
символы "+", либо символы "пусто".
Это происходит последовательно, и именно это обеспечивает мигание символов "+".
Если смена надписей не завершена (отрабатывается сценарий-подсказка), то в
знакоместа результата измерения тока, на индикацию выводятся прочерки (а можно и
вопросительные заки или еще что-нибудь).
Критерий - опущенный флаг завершения смен надписей.
Если же этот флаг поднимется (сценарий-подсказка отработан), то процедура вывода
на индикацию прочерков банально обходится, и далее, в эти знакоместа будут
выведены результаты измерения тока.
Примечание: для обеспечения возврата, в сценарий-подсказку, из аварийного
подрежима, в ПП проверки превышения/не превышения порогов (PROV_U_I) и в ПП
параметров защиты (PARAMETR), "врезаны" процедуры опросов кнопки "-/Нет".