Назад

Инструкция по эксплуатации анализатора импульсных последовательностей (с элементами техописания).

1. Включение устройства.

После включения питания устройства, на индикацию выводится визуальное приветствие:


которое сопровождается исполнением мелодии куплета очень любимой мной песни "Одинокая гармонь" (сердцу не прикажешь и я русский автор. Имею право).
После окончания его полномасштабного (но ускоренного) исполнения (примерно 15 сек. В исполнении пъезоизлучателя. В соответствии с нотами. Основа - 3-я октава, но есть "прыжки" и в соседние), возможны 2 варианта.

1.1. В том случае, если ранее энергонезависимо запомнен подрежим ручного пуска.

В течение примерно 1 сек. (3 коротких "писка" в начале и 3 "писка" в конце), "высвечивается":


после чего долговременно "высвечивается":


То есть, пользователю предлагается выбрать одно из двух подменю (с поясняющей подсказкой).
По умолчанию, маркер (светлая надпись на тёмном фоне. Это относится к строке меню. Она самая верхняя) установлен на подменю основа (см. "вышележащую" картинку).
Если пользователя это устраивает, то для того чтобы перейти в подменю основа, нужно нажать/отжать кнопку Меню (рабочее действие - по факту отжатия), после чего произойдёт переход в подменю основа.
Если необходимо перейти в подменю флэш, то нужно 1 раз нажать/отжать (рабочее действие - по факту отжатия) любую их кнопок + или - (но можно и много раз, так как работа по кольцу. Главное - установить маркер на надпись того подменю, которое нужно).
После того как маркер будет установлен на надписи флэш, нужно нажать/отжать кнопку Меню.
После этого произойдёт переход в подменю флеш.
Здесь и далее, факты нажатия/отжатия любой из кнопок + , - или Пуск, подтверждаются одним коротким "писком", а факты нажатия/отжатия кнопки Меню, тремя.
Соответственно, если "писки" отсутствуют, то фактов рабочих действий либо нет (по каким-то досадным причинам), либо кнопка не задействуется (пассивна).
Последнее относится к кнопке Пуск, так как она задействуется не во всех случаях.
В частности, она не задействована в описываемом случае (выбор подменю).

1.2. В том случае, если ранее энергонезависимо запомнен подрежим автопуска, а также и значение задержки прямого счёта.

В этом случае, сразу же после отработки приветствия, сопровождаемого мелодией (см. выше), на индикацию выводится это диалоговое окно:


Факт "автопоявления" этого диалога свидетельствует о том, что на момент последнего выключения питания устройства, оно работало в подрежиме автопуска, и в нём произошло накопление задержки прямого счёта (это энергонезависимо запоминается и после включения питания, обнаруживается "железякой").
"Железяка" в недоумении и спрашивает у пользователя: "Нужно ли, в дальнейшей работе, использовать задержку прямого счёта (если будут производиться записи во Flash-память программ, то она будет накапливаться от ранее накопленного значения) или не нужно (то же самое, но с накоплением от нуля)"?
По умолчанию, выставлено использовать (см. маркер).
Если это устраивает, то нужно нажать/отжать кнопку Меню, после чего, также как и в пункте 1.1 (после кратковременного, "пищащего высвечивания" надписи Переход на начало МЕНЮ), пользователю предлагается выбрать одно из двух подменю (то же самое, что и в пункте 1.1):


Разница только в том, что в подсказке дополнительно индицируется количество ранее записанных, во Flash-память программ (на момент последнего выключения питания устройства), сессийных групп (сокращённо СГ. В зависимости от текущей "канальности", каждая СГ состоит из 2-х, 4-х или 8-ми сессий).
Наличие надписи ЗаписаноСГ хх также подразумевает то, что в дальнейшем, автопуск будет произведён не по факту возникновения первого перепада, а по факту окончания отработки достаточно высокоточностной, таймерной задержки обратного отсчёта (относительно момента времени обнаружения первого перепада), величина которой задаётся ранее накопленной (на момент последнего выключения питания устройства) суммой задержки прямого счёта.
В данном случае, индицируется 2-я сессийная группа, но их количество может быть и более. До 99-ти. А с учётом работы по числовому кольцу, а также и применения "солидного" (в смысле количества байтов) счётчика накопленной суммы, и более 99-ти (в разряде десятков, незначащий ноль гасится).
В этом случае, автопуск производится не по факту появления первого перепада (как в случае сброшенной, в ноль, задержки прямого счёта), а сразу же после отработки ненулевой задержки обратного отсчёта (это следствие наличия ненулевой задержки прямого счёта).
Чем больше величина накопленной (ранее EEPROM-сохранённой или текущей, или в комплексе) суммы задержки прямого счёта, тем больше величина задержки обратного отсчёта, а значит и величина задержка автопуска (относительно момента времени обнаружения первого перепада).
Зависимость, между временем накопления суммы задержки прямого счёта и соответствующим "моделированием" (посредством накопленной суммы) задержки обратного отсчёта, является достаточно высокоточной, так как таймеры прямого счёта и обратного отсчёта работают от одного и того же такта и предприняты все необходимые меры по программному "выравниванию" (в машинных циклах) величин этих интервалов времени.

В том случае, если необходимо произвести дальнейшее накопление задержки прямого счёта, от нуля, то ранее накопленную сумму задержки прямого счёта нужно сбросить.
Для того чтобы это сделать, необходимо, с помощью кнопок + или - , выставить маркер на надписи сбросить:


а затем нажать/отжать кнопку Меню.
После этого, произойдёт то же самое, что описано в пункте 1.1.
При этом, ранее накопленная сумма задержки прямого счёта, а также и показания счётчика сессийных групп, будут автосброшены (в ноль).

2. Меню.

С целью комфортного разделения двух "глобальных" групп функциональностей, меню разделено на два подменю: основа и флэш (см. картинки пунктов 1.1 и 1.2).
Это первый пункт меню или начало меню.
Любое подменю состоит из пунктов.
Перебор пунктов осуществляется с помощью кнопки Меню, в заданной последовательности и в одном направлении (инкремент).
Одно нажатие/отжатие кнопки Меню соответствует "высвечиванию" (по факту отжатия) следующего пункта подменю.
После окончания перебора всех пунктов подменю, по факту следующего нажатия/отжатия кнопки Меню, происходит автопереход в 1-й пункт меню (см. выше), после чего "железяка ждёт дальнейших распоряжений".
Такой способ "подменюшной закольцовки" удобен для просмотра ранее сохранённых (на момент последнего выключения питания) настроек (многие "подменюшные" настройки энергонезависимо запоминаются), ведь если устраивает, то зачем изменять?
Если необходимо ещё раз "зайти в подменю", то его нужно выбрать и "зайти" (см. выше. Количество таких "заходов" не ограничено).

Внутри любого из пунктов, пользователь, с помощью кнопок + или - , может выбрать (посредством перемещения маркера) одну из предлагаемых позиций.
В зависимости от конкретного пункта, в данном случае, количество позиций может быть от 2-х до 8-ми.
Перебор позиций происходит по двунаправленному кольцу (направления "перескоков" маркера - по желанию пользователя, а можно и в комплексе).

2.1. Подменю основа.

Это основное, 4-пунктное подменю (поэтому и основа).
В нём "сконцентрированы" все настройки, относящиеся к тому, ради чего "затеян весь сыр-бор" (за исключением того, что относится к Flash-записи/чтению).
Пуск (ручн или авто. Кнопка Пуск) можно осуществить из любого пункта подменю основа.

1-й пункт подменю основа выглядит так, как показано на картинке.


В нем выбирается "канальность".
В данном случае, установлен 1-канальный режим работы.
Если, с помощью кнопок + или - , переместить маркер на цифру 2, то это соответствует выбору 2-канального режима работы, а если на цифру 3, то 3-канального.

2-й пункт подменю основа выглядит так, как показано на картинке.


В нём выбирается режим пуска.
В данном случае (ручн), выбран ручной пуск, который, сразу же после нажатия кнопки Пуск, осуществляется по факту обнаружения "железякой" события "прохождения" первого же перепада (0/1 или 1/0), причём, в любом из активных каналов.
Например, выбран 3-канальный режим работы (активно 3 канала).
Если, после нажатия на кнопку Пуск, устройство автообнаружило событие первого перепада, допустим, в 3-м канале (или во 2-м, или в 1-м. Там, где перепад будет первым), то это и будет моментом начала формирования всей 3-канальной эпюры.
Если перепадов нет (к входам устройства не подключены источники сигналов, либо подключены, но их уровни не изменяются), то по истечении некоторого времени (доли секунды), "железяка принимает решение" о бесперспективности дальнейшего ожидания и "даёт автоотмашку" на замер/отображение того, что есть (длинные, промаркированные линии нулевых и/или единичных уровней. Об этом, позднее).
Если переместить маркер на авто, то это соответствует тому, что называется "ждущий пуск" (или "запуск").
Его суть в следующем.
К устройству подключается внешний источник (или источники, если 2 или 3 канала) сигнала, который начинает генерировать сигнал (имеется ввиду сигнал с перепадами) не сразу, а после разрешения этой генерации (например, нажатие/отжатие кнопки, клик мышью, разрешение прохождения сигнала через коммутатор и т.п.).
"Ждущий пуск" разрешается после подключения к устройству источника (источников) сигнала, до разрешения генерации, путём нажатия/отжатия кнопки Пуск.
После этого, "железяка" идентифицирует значение длинного (перепадов нет) уровня ("привязка к начальной точке отсчёта"), присутствующего на сигнальном входе (или 2-х или 3-х уровней, если работа 2-канальная или 3-канальная) и переходит в режим ожидания автопуска, о чём оповещает соответствующая пояснительная надпись (об этом, позднее).
В режиме ожидания автопуска, "железяка" будет находиться до тех пор, пока не будет разрешена генерация.
После этого, если перепады имеются, то по факту обнаружения первого перепада, происходит автопуск (со всеми вытекающими).
Если перепадов нет, то выход, из режима ожидания автопуска, осуществляется посредством долговременного (до тех пор, пока содержимое дисплея не изменится) нажатия на кнопку Пуск.
При этом, на индикацию будет выведен длинный (без перепадов), промаркированный уровень (уровни), значение которого (которых) соответствует уровню (уровням. Нулевым или единичным), присутствующему на сигнальном входе (входах).
Если перепады есть, то возможны 2 варианта автопуска:
1. Если накопленная задержка прямого счёта сброшена в ноль (см. пункт 1.2), то автопуск произойдёт по факту возникновения первого перепада (равно как и в том случае, если выставлен ручной пуск).
2. Если накопленная задержка прямого счёта имеет ненулевое значение, то, по факту возникновения первого перепада, начнётся отсчёт времени задержки автопуска. Автопуск произойдёт сразу же после отработки этой задержки.

3-й пункт подменю основа выглядит так, как показано на картинке.


В нём выбирается режим горизонтальной развёртки.
В данном случае (ручн), 4-й пункт подменю основа (см. ниже) активен, и в нём, с помощью кнопок + или - , пользователь может выбрать одну из 8-ми позиций горизонтальной развёртки (ручная развёртка).
Если, в 3-м пункте подменю основа, с помощью кнопок + или - , переместить маркер на надпись авто, то это соответствует выбору такого сервиса, как автоматическая развёртка.
В этом случае, по причине "локальной ненужности", 4-й пункт подменю основа (в нём производится ручной выбор позиции развёртки) игнорируется, и подменю основа будет состоять не из 4-х пунктов, а из 3-х.
В случае выбора режима авторазвёртки, "железяка" самостоятельно установит относительно оптимальную позицию развёртки.
Критерий этой оптимальности субъективен.
Я ориентировался на отображение примерно 3 - 5 периодов, в начале поддиапазона автопозиции, и на отображение примерно 8 - 11 периодов, в конце поддиапазона автопозиции (в одном "кадре").
Частотные поддиапазоны автопозиций "нарезаны" в соответствии с этим.
В комплексе, это соответствует отсутствию лимитных маркеров (ими помечаются относительно длинные уровни), начиная с 1-й и до 7-й автопозиции включительно.
В 8-й (наиболее низкочастотной) автопозиции, в случае существенного понижения частоты входного сигнала, "автовозникнут" лимитные маркеры.
По причине того, что работа, в режиме авторазвёртки, требует не одного (как в случае ручной развёртки), а двух "наборов" оперданных (1-й - оценочный, а 2-й - итоговый), этот подрежим нецелесообразно использовать в режиме автопуска, но его вполне можно использовать в режиме ручного пуска.
Если работа происходит в режиме авторазвёртки, то после осуществления пуска, в строку меню, на индикацию выводится ранее проигнорированный (см. выше), 4-й пункт подменю основа, в котором маркер размещён на той позиции горизонтальной развёртки, которая автовыставлена.
В конечном итоге, 4-й пункт подменю основа вовсе не игнорируется, а "высвечивается", в строке меню, после осуществления пуска.
Если, после этого, выбрать режим ручной развёртки и перейти в 4-й пункт подменю основа, (в этом случае, он будет активен), то положение маркера будет тем же (сервис).
На эту автовыставленную позицию можно ориентироваться в том случае, если у пользователя есть желание вручную "растянуть" или "сжать" (по горизонтали) "эпюрную картинку" (уменьшение номера позиции - "растяжка", а увеличение - "сжимание").

4-й пункт подменю основа выглядит так, как показано на картинке.


В нём выбирается позиция горизонтальной развёртки.
В том случае, если установлена ручная развёртка (ручн См. 3-й пункт подменю основа), этот пункт (4-й) входит в состав подменю основа, и в нём, с помощью кнопок + или - , можно выбрать ту позицию горизонтальной развёртки (1 … 8), которая нравится.
В том случае, если установлен режим авторазвёртки (авто), этот пункт (4-й) автоисключается из состава подменю основа, но "высвечивается" после осуществления пуска, с маркированием той позиции горизонтальной развёртки, которая автовыставлена и которая сохраняется, вплоть до ручной смены позиции.

Энергонезависимое запоминание настроек подменю основа.

По факту нажатия кнопки Пуск, "железяка" производит соответствующие рабочие действия, а заодно и энергонезависимо запоминает (в EEPROM-памяти данных) все настройки подменю основа:
- текущую "канальность",
- текущий режим пуска,
- текущий режим горизонтальной развёртки,
- текущую позицию ручной развёртки или авторазвёртки.

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

2.2. Подменю флэш.

Надпись флэш свидетельствует о том, что "железяка", по желанию пользователя, по-максимуму, способна энергонезависимо, последовательно и безошибочно (т.к. применена "тотальная" верификация) запомнить, во Flash-памяти программ (под это дело, задействуется её часть), все данные всех сессий, всех "канальностей" (но можно и не по-максимуму, а по мере необходимости. Выборочно/комплексно/… Короче, по-всякому. В пределах дозволенного).
В данном случае, по-максимуму, можно Flash-запомнить:
- 2 сессии 1-канального режима, в каждой из которых содержится по 1024 перепада/уровня (1024 х 1 х 2 = 2048 байтов),
- 4 сессии 2-канального режима, в каждой из которых содержится по 512 перепадов/уровней (512 х 2 х 4 = 4096 байтов),
- 8 сессий 3-канального режима, в каждой из которых содержится по 256 перепадов/уровней (256 х 3 х 8 = 6144 байта).
Итого: 12288 байтов или 12288/2 = 6144 слова памяти программ (без учёта программной "обслуги" Flash-записи/чтения).
После осуществления энергонезависимого Flash-запоминания (с помощью подменю флэш), ранее запомненное, по желанию пользователя (с помощью того же подменю флэш), он может Flash-прочесть (в том числе и многократно), причём, с автоматическим ("железяка позаботится") выводом соответствующей эпюры (или эпюр, если текущий режим 2-канальный или 3-канальный) на индикацию.
Визуальные результаты любого Flash-чтения ничем (кроме строки меню) не будут отличаться от своих "матерей", и не только в части касающейся "материнской" эпюры (эпюр), но и в части касающейся атрибутов её оформления, а именно, значений замеров "пиконапруги" и частоты.
Они тоже энергонезависимо запоминаются, но только не во Flash-памяти программ, а в EEPROM-памяти данных.
С результатом Flash-чтения можно работать точно так же, как и с результатом "материнского" пуска.
По желанию пользователя, "по верху" Flash-данных любой "старой" (условно) сессии, можно Flash-записать данные "новой" сессии (любое количество раз).
Естественно, что прежде чем Flash-считать вожделеемое, его нужно Flash-записать.
Также естественно и то, что прежде чем Flash-записывать, нужно заиметь то, что подлежит Flash-записи ("мать добывается" в подменю основа).

Для того чтобы, в 1-м пункте меню, выбрать подменю флэш, нужно, с помощью кнопок + или - , переместить маркер на надпись флэш:


После установки маркера, необходимо нажать/отжать кнопку Меню.
"Возникнет" следующее "древовидное, подменюшное ветвление":


То есть, "железяка" предлагает пользователю выбрать, что именно нужно осуществить: Flash-чтение или Flash-запись?
Примечание: в данном случае, кнопка Пуск пассивна.
По умолчанию, предлагается Flash-чтение.
Если чтение устраивает, то нужно нажать/отжать кнопку Меню (в манипуляциях, с кнопками + или - , нет необходимости. Но можно и понажимать).
Так как сначала нужно записать, а только после этого считывать ранее записанное, начну с Flash-записи.

Flash-запись.

Сначала, в подменю основа, нужно заиметь то, что подлежит Flash-записи (в виде визуально отображённой эпюры {или эпюр}. Об этом, ниже), причём, по принципу "одному пуску соответствует одна Flash-запись".
Проще говоря, несколько раз одно и то же Flash-записать не получится.
Можно только один раз.
Это исключает "Flash-клонирование" сессий.
Иными словами, все попытки осуществления записи одного и того же, в несколько сессий, равно как и все попытки многократного осуществления записи одного и того же, в одну сессию, программно блокируются.
Если такого рода конфуз имеет место быть (по невнимательности или ещё как-то), то после установки маркера (с помощью кнопки + или - ) на надписи запись и последующего нажатия/отжатия кнопки Меню, на индикацию кратковременно будет выведена предупреждающая/блокирующая/"пищащая" надпись:


после чего осуществляется автопереход в 1-й пункт меню ("устройство ждёт дальнейших распоряжений", и не абы каких, а правильных).
Проще говоря, "железяка отказала пользователю во Flash-взаимности" (без негативных последствий) и предлагает/заставляет/убеждает/… сделать то, что предписывают "правила игры" ("дружба дружбой, а служба службой").
А именно, нужно перейти в подменю основа, осуществить пуск (ручной или авто, с отображением, в дисплее графического модуля, того результата, который подлежит Flash-записи) и повторить неудавшуюся ранее попытку Flash-записи (в этом случае, она будет гораздо более симпатичной).

Допустим, что всё сделано по правилам и "вышележащего" оргконфуза нет.
Теперь следует учесть, что "канальность" Flash-записи автозадаётся той текущей "канальностью", в которой был произведён последний пуск.
То есть, в случае осуществления Flash-записи, "канальность" выбирать не нужно (она задаётся автоматически. "Железяка" об этом позаботилась. Короче, сервис).
А именно:
1. Если, в подменю основа, пуск был произведён в 1-канальном режиме, то после выбора Flash-записи и осуществления нажатия/отжатия кнопки Меню, "железяка" автоинформирует о том, что в дальнейшем будет произведена запись в одну из сессий 1-канальной Flash-записи и предложит выбрать одну из 2-х этих сессий:


При этом, кнопка Пуск становится активной (равно как и в случаях идентификации других канальностей. См. ниже).

2. Если, в подменю основа, пуск был произведён в 2-канальном режиме, то после выбора Flash-записи и осуществления нажатия/отжатия кнопки Меню, "железяка" автоинформирует о том, что в дальнейшем будет произведена запись в одну из сессий 2-канальной Flash-записи и предложит выбрать одну из 4-х этих сессий:


3. Если, в подменю основа, пуск был произведён в 3-канальном режиме, то после выбора Flash-записи и осуществления нажатия/отжатия кнопки Меню, "железяка" автоинформирует о том, что в дальнейшем будет произведена запись в одну из сессий 3-канальной Flash-записи и предложит выбрать одну из 8-ми этих сессий:


В любом из этих случаев, с помощью кнопок + или - , пользователь может вручную скорректировать положение маркера (то есть, выбрать тот номер сессии, в которую будет осуществлена Flash-запись), причём, по двунаправленному кольцу.
После осуществления этой коррекции (или без неё, если номер сессии устраивает), нужно нажать/отжать кнопку Пуск.
После этой "отмашки" (напоминает "выстрел стартового пистолета"), "железяка" автоматически (мозги пользователя отдыхают) перепишет содержимое соответствующего "сектора" области оперпамяти, в соответствующий "сектор" Flash-памяти программ, обеспечивая тем самым энергонезависимое запоминание текущего массива оперданных, который (массив), в дальнейшем (в виде энергонезависимо запомненного), можно любое количество раз Flash-считать (об этом, позднее), естественно, если этот массив не уничтожен записью, "по его верху", другого массива (в этом случае, будет считан "другой" массив).
Во всех случаях, применена "тотальная" (полная) верификация.
То есть, сразу же после осуществления текущей Flash-записи, с целью вычисления контрольной суммы числовых значений всех байтов записанного массива данных, производится последовательное Flash-чтение записанного.
Также вычисляется и контрольная сумма числовых значений всех байтов "материнского" массива данных (он "лежит" в соответствующем "секторе" оперпамяти).
Две эти контрольные суммы сравниваются.
Примечание: "вышележащие" рассуждения относятся к 1-канальному режиму (так как применено единственное число. Канал один), но если текущий режим 2/3-канальный, то производится последовательная, "тотальная" верификация массивов данных всех активных каналов.
Если контрольные суммы одинаковы, то это соответствует безошибочной верификации (безошибочной Flash-записи), и "железяка" кратковременно автовыводит, на индикацию, такое очень симпатичное, радостное и "молчащее" сообщение:


после чего кратковременно "автовысветится пищащая" надпись Переход на начало МЕНЮ (см. выше) и осуществится автопереход (см. выше) в 1-й пункт меню (далее, "железяка ждёт дальнейших распоряжений").

В большинстве случаев, безошибочная Flash-запись производится с первой же попытки, но "на всякий пожарный случай", учтено также и то, что она может быть произведена и со 2-й, и с 3-й, и т.д. попытки.
По максимуму, возможны 20 последовательных попыток Flash-записей (а значит и верификаций).
Это число - мой личный выбор, но можно (в программе) назначить и большее их количество (или меньшее).
Если все 20 попыток оказались безуспешными ("полюбовной" верификации не получилось), а тем паче безуспешны несколько таких групп попыток, то это уже "патология", с которой необходимо разбираться.
В этом случае, в строку меню, также как и в предыдущем случае, на индикацию кратковременно выводится информирующая надпись, но не "жизнеутверждающая/молчащая", а "кладбищенская/пищащая".
А именно, надпись ОШИБКА ЗАПИСИ, после чего, кратковременно "автовысвечивается пищащая" надпись Переход на начало МЕНЮ и осуществляется автопереход в 1-й пункт меню (далее, "железяка", как и положено, "замолкает, преданно хлопает глазами и ждёт дальнейших распоряжений". Это часть моей "техвыучки" типа "всё во благо пользователя").
С учётом того, что ПИКи - надёжные "машины" (лично у меня, в этом смысле, претензий к ним нет), особенно если они не "бэушные" (в данном случае, "не Flash-изнасилованные"), а "свежак", то надписи ОШИБКА ЗАПИСИ вообще может и не быть, или она может появиться в результате какого-то сбоя (сбоев), или через очень много лет эксплуатации, или если используется "Flash-изнасилованный" (количество Flash-записей не бесконечно) ПИК. Примечание: сказанное не есть "ля-ля". Работает чётко. Проверено наложением Flash-массива одной из сессий на область идентификатора типа ПИКа (в неё невозможно ничего Flash-записать). В этом случае, в этой сессии, появляется неустранимая ОШИБКА ЗАПИСИ (естественно, что в итоговой программе, эта "бяка" адресно обойдена).

"Сессийная автоматика" Flash-записи.
Ранее (см. выше) упоминалось о том, что номер сессии (в любой "канальности") можно выбрать вручную, с помощью кнопок + или - .
Можно и так, но это вовсе не обязательно, так как, после осуществления Flash-записи текущей сессии, при любом "раскладе" (любой "набор" настроек подменю основа), по факту успешного осуществления этой записи (безуспешные, а также и не обеспеченные пуском, Flash-записи не в счёт), программно организован автоинкремент позиции сессии (опять же, во благо пользователя, но только ему нужно знать об этом сервисе).
Это устраняет лишние "телодвижения", а заодно и забывчивость (все мы люди, все мы человеки, а не биороботы).
Проще говоря, в том случае, если необходимо строго последовательно, с автоинкрементным "шагом" в 1 позицию, заполнить данными сессийную группу, то ручной выбор номера сессии просто не нужен (нет необходимости "жать" на кнопки + или - ), так как "железяка" делает это "в автомате" (после выбора Flash-записи, "не забивая себе голову", нужно просто нажать/отжать кнопку Пуск, и все дела).
Например, осуществляется работа в 3-канальном режиме (в этом случае, в сессийной группе 8 сессий) и отработана текущая сессия с номером, допустим, 4.
Следующая Flash-запись (манипуляции с кнопками + или - не нужны) произойдёт в 4 + 1 = 5-ю сессию.
Потом в 6-ю, 7-ю, 8-ю, а если продолжать далее, то по числовому, сессийному кольцу (количество таких колец не ограничено).
Переход, с последней позиции сессийной группы, на первую (в рассматриваемом случае, с 8-й на 1-ю), соответствует прибавлению, к содержимому счётчика сессийных групп, единицы (если осуществляется работа в подрежиме автопуска).
Если, после нажатия/отжатия кнопки Пуск, происходит такой кольцевой переход, с последней сессии на первую, то сначала кратковременно "высвечивается" надпись ЗАПИСЬ ПРОИЗВЕДЕНА (естественно, в случае успешности верификации), а затем кратковременно (примерно в течение 1 сек.) "высвечивается" (сопровождается 5-ю "писками") надпись:


После этого, кратковременно "высвечивается" надпись Переход на начало МЕНЮ (см. выше), что и происходит (переход в 1-й пункт меню).
Все эти надписи "высвечиваются в последовательном автомате" (примерно по 1 сек. каждая).
Появление надписи конец сессийной группы (светлые буквы на чёрном фоне. Это для привлечения внимания) означает то, что следующая Flash-запись произойдёт в 1-ю сессию соответствующей (зависит от текущей "канальности") сессийной группы (кольцевой переход на начало заполнения сессийной группы).
Далее, последовательные Flash-записи происходят в автоинкрементном порядке, вплоть до следующей "закольцовки", и т.д. (количество "закольцовок" не ограничено).
Если нужно заполнить данными только одну сессийную группу (в любой "канальности"), то после "возникновения" надписи конец сессийной группы, нужно просто прекратить Flash-запись (не нажимать на кнопку Пуск), вплоть до окончания анализа содержимого той сессийной группы, которая энергонезависимо запомнена.
Сказанное относится как к случаям осуществления Flash-записей, производимых в подрежиме ручного пуска, так и к случаям осуществления Flash-записей, производимых в подрежиме автопуска, но есть и нюансы.

1. В подрежиме ручного пуска, нет практической необходимости (хотя бы по той причине, что момент ручного пуска - случайное событие) в энергонезависимом запоминании количества отработанных сессийных групп и номера текущей сессии Flash-записи.
Соответственно, после осуществления включения питания устройства, по умолчанию, в любой текущей "канальности" Flash-записи, всегда будет "автопромаркирована" 1-я сессия (далее, по желанию пользователя).

2. В подрежиме автопуска, в любой текущей "канальности", в целях обеспечения продолжения (в том числе и многократного) работы, от ранее накопленных значений, количество отработанных сессийных групп и номер текущей сессии Flash-записи энергонезависимо запоминаются в EEPROM-памяти данных.
Например, питание устройства выключено в момент наличия такого состояния: полностью отработано 2 сессийных группы и отработана N-сессия текущей, то есть 3-й сессийной группы.
После включения питания, всё ранее накопленное будет автовосстановлено и следующая Flash-запись (если вручную не корректировать номер сессии) будет произведена в N+1 - ю сессию (естественно, с учётом работы по сессийному кольцу).

Flash-чтение.

Начну с "первичной бяки".
А именно, после осуществления "прошивки" ПИКа, во всех 12288 байтах (это 12288/2 = 6144 слова памяти программ, располагающиеся ниже нижней команды текста программы) 2+4+8=14-ти сессий, будут "лежать" числовые значения FFh (1111 1111).
Если это Flash-считать, то получится форменное, графическое безобразие, которое и даром не нужно.
Соответственно, "железякой" (ну и "мои уши из-за неё торчат") предприняты кардинальные, программные, блокирующие меры.
Если пользователь попытается Flash-считать массив байтов, числовые значения которых равны FFh, то чтение автоблокируется, и в строку меню кратковременно выводится такая надпись:


после чего осуществляется автопереход в 1-й пункт меню.
По сути, это временная блокировка, так как она, после того, как во все 14 сессий будет что-то Flash-записано, "уходит в небытие" (этой "вопилки/кричалки/предупреждалки" просто не будет. О Винни-Пухе вспомнил. Кстати, его рассуждения логичны. Особенно на счёт "жу-жу").

Допустим, что оснований, для "высвечивания" надписи Флэш-память пуста, нет.
Для того чтобы осуществить Flash-чтение ранее Flash-записанного, нужно перейти в подменю флэш, после чего, по умолчанию, "железяка предложит" осуществить Flash-чтение (маркер установлен на надписи чтение).
После этого, нужно нажать/отжать кнопку Меню.
"Автовозникнет" такой пункт подменю:


В этом пункте, с помощью кнопок + или - , выбирается "канальность" Flash-чтения.
В данном случае (промаркирована цифра 1), осуществляется "привязка" к сессиям 1-канального режима (2 сессии).
Если переместить маркер на цифру 2, то будет осуществлена "привязка" к сессиям 2-канального режима (4 сессии).
Если переместить маркер на цифру 3, то будет осуществлена "привязка" к сессиям 3-канального режима (8 сессий).
Соответственно, после осуществления выбора нужной "канальности" и последующего нажатия/отжатия кнопки Меню, "железяка предложит" пользователю один из этих 3-х вариантов выбора сессий (внутри выбранной "канальности"):


Вы видите состояния типа "по умолчанию" (маркируется 1-я сессия).
С помощью кнопок + и - , пользователь может выбрать тот номер сессии, который ему нравится.
Если после осуществления выбора номера сессии, нажать/отжать кнопку Пуск, то на индикацию будут выведены ранее энергонезависимо запомненные данные соответствующей сессии.
Количество повторных Flash-чтений не ограничено.
Один из многочисленных вариантов Flash-чтения:


В данном случае, осуществлено Flash-чтение ранее Flash-запомненной, 1-й сессии (но можно прочитать и другую) 3-канального режима.
Это ранее Flash-запомненная, 3-фазная последовательность импульсов ("периодика" с относительным фазовым сдвигом 120 градусов. Простейший случай).
С этой "картинкой" можно работать так же, как и с "картинкой", полученной в подменю основа (покадрово прокручивать вправо/влево, плюс сервисы. Об этом, ниже).

Если подытожить сказанное, то логика работы меню (в виде блок-схемы) выглядит так:


Полагаю, что с управлением разобрались (надеюсь на это), а теперь поближе к тому, ради чего "затеян сыр-бор".

3. Подготовительные операции, осуществляемые в подменю основа, после нажатия/отжатия кнопки Пуск.

Предположим, что в подменю основа, пользователь выставил нужные ему настройки, или, путем контрольного просмотра настроек, он убедился в том, что ранее выставленные настройки (они запоминаются) устраивают (в том смысле, что ничего изменять не нужно).
В любом случае, текущие настройки подменю основа, будут "введены в эксплуатацию" после осуществления пуска (ручного или автоматического).
Это в частности (не в начале и не к спеху), но кроме этого, пуск (это что-то типа "выстрела из стартового пистолета") "запускает в работу" совсем не хилый "механизм" последовательных действий, причём, по "железобетонному" принципу типа сначала нужно как можно быстрее осуществить набор оперданных (чем быстрее, тем выше "скоростной потолок". В первую очередь, это относится к работе в 1-й, самой высокоскоростной позиции горизонтальной развёртки. "Суперважняк"), а всё остальное потом (не спеша).
Сначала о подготовительных операциях.
Они отрабатываются в начале так называемого (мной) архиватора (но можно назвать и по-другому).
Так как "канальностей" 3 штуки, то и архиваторов тоже 3 штуки.
То есть, каждая "канальность укомплектована" своим, специализированным архиватором.
Можно было бы "сваять" один универсальный архиватор (с разархиватором это и проделано. Об этом ниже), но это не самый скоростной вариант.
В 1-й позиции горизонтальной развёртки, наиболее высокую скорость (естественно, что в пределах технически дозволенного) можно получить только в том случае, если в состав архиватора входит свой, специализированный ("заточенный" под соответствующую "канальность") обработчик архивных данных (это что-то типа "сердца" устройства).
После отработки подготовительных операций, именно в него и попадает рабочая точка программы.

3.1. Если выставлен ручной режим пуска

Сразу же после нажатия на кнопку Пуск, происходит отработка того, что, если так можно выразиться, "лежит вне кадрового (о "кадрах" расскажу позднее) пространства" (в том смысле, что это не отображается в дисплее графического модуля, но важно при наборе оперданных).
Речь идёт о подготовительных операциях, которые предшествуют началу "загрузки" данными соответствующих "секторов" оперпамяти и которые отрабатываются быстро.
А именно, сразу же после нажатия на кнопку Пуск, осуществляется быстрая (можно даже сказать, что "с реактивным свистом"), программно-аппаратная идентификация (что-то типа "принудиловки") значения уровня (он может быть нулевым или единичным), который присутствует на входе активного канала (в целях упрощения объяснений, рассуждаю об 1-канальном режиме).
Это необходимо для создания "начальной, уровневой точки отсчёта" (она "привязана" к активному фронту внешнего прерывания INTx), от которой, по факту "прохождения" следующего перепада (об этом далее), начнётся заполнение данными соответствующего опермассива.
Иначе, не во всех, но во многих случаях, 1-й уровень, относительно истины, может быть инверсным (ощутил лично. Поэтому и "сваял" то, о чём идёт речь).
Моё техрешение такое.
В процессе осуществления программно-аппаратной идентификации значений уровней, производимой в "зоне" разрешения прерываний INTx, путём кратковременного подключения/отключения подтягивающих резисторов порта В, в одном из 2-х случаев (какой именно? Зависит от того, какой именно уровень присутствует на входе канала), создаются условия необходимые для осуществления ухода в высокоприоритетную ПП прерываний.
А именно, в одном случае, по причине отсутствия перепадов, условия, которые необходимы для осуществления ухода в ПП прерываний, не создаются.
Так как факт ухода/неухода в прерывание программно "засекается", то в данном случае, "железяка" делает вывод о подтверждении той исходной, программной настройки активного фронта внешнего прерывания INTx, которая задана в программе (по умолчанию).
Значит, эту настройку изменять не нужно (констатация радостного факта типа "норма". А если норма, то работа по сценарию типа "программа исполняется далее").
В любом случае, от программной настройки активного фронта внешнего прерывания INTx, напрямую зависит то, какие именно уровни (они могут быть нулевыми/единичными) будут сформированы после обнаружения перепадов (а следовательно и визуально отображены).
В другом случае, программно-аппаратными силами/средствами/усилиями, условия ухода в прерывания создаются (формируется короткий, "провоцирующий" импульс).
Так как, в интервале времени отработки процедуры программно-аппаратной идентификации значений уровней, прерывания по входам INTx разрешены, то по факту этой "провокации", произойдёт уход в ПП прерываний.
В ней, очень быстро, активный фронт внешнего прерывания INTx программно инвертируется, что соответствует инверсии программной настройки активного фронта внешнего прерывания INTx, которая задана по умолчанию.
В конечном итоге, во всех случаях, желаемое становится действительным (без вышеупомянутой "бяки").
Если задействуются несколько активных каналов (работа в 2/3-канальном режиме), то сказанное выше, последовательно осуществляется во всех активных каналах (начиная с 1-го и в порядке возрастания номера канала).

Предположим, что программно-аппаратная идентификация значений уровней, присутствующих на входах активных каналов, успешно осуществлена.
Далее проверяется, какой именно подрежим пуска установлен, ручной или автоматический.
В случае идентификации ручного пуска, начинается отработка сценария ручного пуска.
В соответствии с ним, происходит автопереход в ПП ожидания события "прохождения" первого перепада (0/1 или 1/0).
Проще говоря, в том активном канале, в котором будет "засечено" событие "прохождения" первого перепада, "эпюрная портянка" начнётся не абы с чего (например, с "обрывка" уровня), а с перепада (простейшая, фазовая синхронизация).
Если активных каналов несколько (работа в 2/3 - канальном режиме), то формирование эпюр остальных каналов тоже начнётся по этому же "свистку" (или "отмашке").
Если перепадов нет, то во избежание "вечной закольцовки" в ПП ожидания события "прохождения" первого перепада, по факту превышения "закольцовочного, временнОго лимита", организован "принудительный выход из ожидания".
При этом, во избежание относительно долгого (особенно в 8-й позиции горизонтальной развёртки) ожидания вывода на индикацию соответствующей "эпюрной портянки", "принудительно" выставляется 1-я (самая быстрая) позиция горизонтальной развёртки.
В конечном итоге и в любом случае, происходит переход в обработчик архивных данных.

3.2. Если выставлен автоматический режим пуска

Если выставлен автоматический режим пуска, то эта данность будет программно "засечена" в той проверке, о которой упоминалось выше.
Соответственно, начнёт отрабатываться сценарий автопуска.
По сути, в нём происходит то же самое, о чём говорилось в пункте 3.1, но с учётом того, что пуск ждущий, а также с учётом величины задержки прямого счёта (она может быть как нулевой, так и отличной от нуля).
Если на входах активных каналов перепады отсутствуют, то после нажатия/отжатия (в подменю основа) кнопки Пуск, долговременно "высветится" одна из этих картинок (какая именно, зависит от установленной "канальности". "Железяка" выбирает одну из этих картинок автоматически):


Как видите, в любом и этих случаев, в самой нижней, дисплейной строке, "высвечивается негативная пояснялка" ожидание автопуска и показания отсутствуют (а откуда им взяться, если "свистка/отмашки" нет?).
Плюс, "пояснялка", указывающая на текущую "канальность" (в 3-канальном режиме, по причине нежелательности лишнего, программного "геморроя", она отсутствует, но можно было бы и "нарисовать". Нет проблем).
Она может оказаться полезной в тех случаях, когда кнопка Пуск "жалась" не в 1-м пункте подменю основа (это то, что Вы видите на фото), а в других его пунктах (всё во благо пользователя).
Наличие надписи ожидание автопуска свидетельствует о том, что уровни, на входах активных каналов, не изменяются, а соответственно и не обнаружено ни одного перепада.
Если в дальнейшем, после "запуска в работу" внешнего, N-канального, импульсного процесса, по каким-то причинам, события, хотя бы одного перепада, нет (какой-то недочёт, конфуз, ляп, недоразумение и т.п.), то выйти из этого долгосрочного ожидания можно с помощью той же кнопки Пуск, только в этом случае, её нужно нажать долговременно (удерживать в течение нескольких секунд).
В конечном итоге, "железячная автоматика" сработает и на индикацию будет выведено то, что есть (я это называю "длинными уровнями", то есть, без перепадов), а показания частоты будут нулевыми:


Это случай работы в 3-канальном режиме.
Так как частота (это надпись F 1-го канала: хх Кгц) и уровень "пиконапруги" (это надпись Uмакс 1-го канала: хх в.) замеряются в 1-м канале, то в случае наличия, в 1-м канале, нулевого, длинного уровня, замеренный уровень "пиконапруги" будет нулевым или близким к нулю (см. фото слева), а в случае наличия, в 1-м канале, единичного, длинного уровня, замеренный уровень "пиконапруги" будет тем, который соответствует единичному уровню (см. фото справа. Это в приложении к 5-вольтовой логике).
Предварительно (просто повод подвернулся или к слову пришлось), обратите внимание на "выступающие пимпочки" (это "глобал", и не только по отношению к автопуску).
Я их называю "лимитными маркерами" (не путать с "менюшными"). Расскажу о них позднее.
Сказанное относится к тому случаю, если числовое значение задержки прямого счёта является нулевым.
Значение задержки прямого счёта является нулевым в следующих случаях:

- Если осуществлён переход, из подрежима ручного пуска, в подрежим автопуска.
- Если ранее, в указанном выше диалоге (см. пункт 1.2), маркер был установлен на надписи сбросить.
- Если изменяется позиция любого пункта подменю основа ("возникает" ещё один диалог. Нюансы см. ниже).

В том случае, если числовое значение задержки прямого счёта является ненулевым (это значение энергонезависимо запоминается), то "железяка", если так можно выразиться, "автопереводит это число в интервал времени".
В результате этого, "возникает" задержка обратного отсчёта, которая очень точно соответствует интервалу времени накопления задержки прямого счёта.
В результате всей этой технической "свистопляски", автопуск происходит точно так же, как описано выше (по 1-му перепаду), но переход в обработчик архивных данных произойдёт только после "отмера" (относительно момента возникновения 1-го перепада) задержки обратного отсчёта.
Обращаю Ваше внимание на то, что накопление задержки прямого счёта "заточено" под Flash-запись, а в тех случаях, когда Flash-запись не была осуществлена, этого накопления не происходит (ранее накопленная сумма не изменяется).
То есть, если накопление нужно, то после того, как в подменю основа "добыта текущая, эпюрная портянка", её данные необходимо Flash-записать в автопредложенную сессию (см. пункт 2.2, в части касающейся Flash-записи).
А если не нужно, то можно и не записывать, а например, просмотреть (в том числе и осуществить несколько пусков/просмотров. Допустим, в познавательных целях. Или ещё что-то/как-то).
Записать можно и позже. Когда захочется (если ранее накопленная задержка прямого счёта не сброшена пользователем).
По факту успешного осуществления Flash-записи, к ранее накопленному значению задержки прямого счёта, автоприплюсуется "числовой эквивалент" интервала времени выборки этой "эпюрной портянки".
Почему "заточено" под Flash-запись?
Для того чтобы энергонезависимо сохранить текущую "порцию" того, что "добыто тяжким и непосильным трудом", с возможностью разглядывания этой "красатульки" тогда, когда "в голову взбредёт" (например, через месяц).
Этот "временнОй сервис" позволяет, в несколько приёмов, последовательно заполнить (относительно начала внешнего, импульсного процесса) сессийную группу выбранной "канальности" так, что начало "эпюрной портянки" последующей сессии будет являться продолжением (во времени) "эпюрной портянки" предыдущей сессии.
Мало того, после окончания анализа содержимого текущей сессийной группы (это что-то типа "отработанного материала"), можно далее продолжить эту аналитическую работу, заполнив следующую сессийную группу (счётчик сессийных групп имеется и текущая сессия запоминается).
И т.д.
Счётчики накопленной задержки прямого счёта и обратного отсчёта являются 4-байтными, что, при наличии желания/знаний/навыков, позволяет, таким последовательным и довольно-таки немудрёным способом, отследить/проанализировать протяжённую, во времени (вплоть до продолжительности в нескольких десятков минут. Если "терпелки" хватит), "кусочно-рваную (но "сессийно состыкованную", во времени) эпюрную портянку", что, согласитесь со мной, для устройства, которое можно запитать от батареек и положить в карман, совсем не хило.
По сути, это есть не что иное, как косвенное и значительное наращивание "массы" оперпамяти (в смысле последовательного "вычленения нужного" посредством многократного задействования одних и тех же, не очень-то и "массивных", оперресурсов ПИКа), причём, без задействования внешней оперпамяти достаточно большого объёма.
Естественно, что этот сервис наиболее эффективен в тех случаях, когда внешние, N-канальные, импульсные последовательности, от своего начала, повторяются неизменно, но и в других случаях, при наличии знаний/опыта/аналитических способностей/упёртости/…, этот "прибамбас" может оказаться полезным.
Ну а если он не нужен, то просто сбросьте, в ноль, задержку прямого счёта (удобным для Вас способом) или перейдите в подрежим ручного пуска (это проще всего).

Теперь о нюансах дополнительного (если присваивать №, то второго) диалога.
Начну с того, что мы не ангелы (в том смысле, что не биороботы и можем ошибаться в своих действиях).
Например, пользователь долго и упорно наращивал значение задержки прямого счёта.
Это предполагает неизменность настроек подменю основа (начиная с самой первой сессии) на всём "протяжении" этого наращивания, а иначе получится оргконфуз.
Допустим, телефон зазвонил, комар укусил, собака гавкнула, жена нервирует и т.п. (список огромен), короче, бдительность потерялась, пользователь перепутал кнопки и будучи в подменю основа, вместо нажатия/отжатия кнопки, допустим, Меню, внезапно нажал/отжал кнопку + или - .
Это соответствует изменению настройки того пункта подменю основа, который "текущевысвечивается".
После этого, по ранее накопленной задержке прямого счёта, "можно заказывать панихиду", так как изменение любой настройки этого подменю (по отношению к первоначально выставленной) приводит к сбросу этой задержки (в ноль), а заодно и к сбросу счётчика сессийных групп.
Получается эмоциональный ЁКЛМН/ЁПРСТ и небольшое психорасстройство (сужу по себе).
Во избежание этого досадного недоразумения, я "заставил железяку" цивилизованно (а можно было бы и иначе, но я счёл нужным держаться в рамках "академических" приличий) упреждать подобного рода конфузы.
А именно, посредством "автовозникновения" диалога, суть которого такая же, как, например, суть диалога, "автовозникающего" в "виндах", при попытке удаления файла.
Диалог выглядит так (если пользователь внимателен, то он не "возникнет"):


В данном случае, он "автовозник" в подрежиме автопуска (в подрежиме ручного пуска, этого диалога нет), при попытке изменить "канальность", с 2 на 3 (нажата/отжата кнопка + ).
Количество ранее отработанных сессийных групп может быть и другим.
То же самое "автовозникнет" и при попытке изменения позиции любого другого пункта подменю основа (соответствующий пункт будет "высвечиваться" в строке меню).
Пользователь может либо отвергнуть это изменение (маркер установлен на отменить. В том числе и по умолчанию), либо согласиться с ним (маркер установлен на разрешить).
Установка маркера стандартна: с помощью кнопок + или - , а "запуском выбранного в эксплуатацию" является нажатие/отжатие кнопки Меню.
Если выбрано отменить, то это, образно выражаясь, "безобидный откат на прежние позиции":


а если разрешить, то изменение настройки (в данном случае, это смена "канальности") "вводится в эксплуатацию":


Как видите, позиция изменилась на ту, которая ранее предустанавливалась, а надпись ЗаписаноСГ хх "пропала".
Это свидетельствует о том, что в результате изменения настройки, сброшено в ноль не только количество сессийных групп, но и значение накопленной задержки прямого счёта (оно не индицируется).

О задержках прямого счёта и обратного отсчёта

Под организацию задержки прямого счёта, задействован модуль таймера TMR1.
Под организацию задержки обратного отсчёта, задействован модуль таймера TMR2.
Накопление суммы очередной "сессийной порции" задержки прямого счёта (от нулевого значения. Далее - инкременты) начинается с момента "влёта" в N-канальный обработчик архивных данных и заканчивается сразу же после выхода из обработчика.
В дальнейшем, если сразу же после окончания формирования "эпюрной портянки" произвести Flash-запись сессии, то эта "порция" приплюсуется к ранее накопленной задержке прямого счёта и итоговая накопленная сумма, в виде числа, будет энергонезависимо запомнена в EEPROM-памяти данных (а если не Flash-записать, то эта "порция канет в небытие").
После включения питания, числовое значение ранее накопленной задержки прямого счёта автопредустанавливает значения времязадающих констант задержки обратного отсчёта, суть которой - последовательные декременты, от предустановленного значения, до нуля (поэтому и названо задержкой обратного отсчёта).
Величина задержки прямого счёта является "эталоном".
Величина задержки обратного отсчёта, с учётом специфики программы (исполнение любой команды - хотя и малая, но задержка), программно "подогнана"/откалибрована (в смысле как можно более точного, временнОго соответствия одного другому. По количеству машинных циклов) под этот "эталон".
Этот "прибамбас" работает только в подрежиме автопуска.
В подрежиме ручного пуска, он не работает (игнорируется).

Если подытожить сказанное, то в общем виде (без учёта мелких деталей. Суть), алгоритм подготовительных операций выглядит так:


Два пояснения.
1. Процедуру идентификации значения уровней N-каналов, присутствующих на момент пуска, нельзя перемещать в сценарий ручного пуска, так как после этого, в половине случаев автопуска (если рассуждать среднестатистически. Зависит от того, на какой именно уровень приходится момент перехода в N-канальный обработчик архивных данных), работа системы автопуска нарушается. Поэтому и есть то, что есть.
2. Под организацию прямого счёта, задействована низкоприоритетная ПП прерываний (всего 3 команды: инкремент, сброс флага, возврат).

4. Обработчики архивных данных.

Предположим, что в выбранной "канальности", подготовительные операции отработаны.
После этого, осуществляется автопереход в обработчик архивных данных.

Если работа происходит в 1-канальном режиме, то это только обработчик архивных данных 1-го канала.
Если работа происходит в 2-канальном режиме, то это 2-тактный "симбиоз" обработчика архивных данных 1-го канала и обработчика архивных данных 2-го канала.
Если работа происходит в 3-канальном режиме, то это 3-тактный "симбиоз" обработчика архивных данных 1-го канала, обработчика архивных данных 2-го канала и обработчика архивных данных 3-го канала.

Эти "симбиозы" организованы так, что в 1-й позиции горизонтальной развёртки, обеспечивается максимально возможная (с учётом "канальностной" поправки) скорость отработки одного внутреннего цикла.
В каждом внутреннем цикле, последовательно, по принципу "N-тактности", "сканируются" состояния N-количества каналов (в зависимости от "канальности", N = 1, 2 или 3).
Все обработчики архивных данных работают в "зонах" разрешения прерываний.
Критерий "сканирования" - события прерываний по входам:

- INT0 (для 1-канального режима),
- INT0 и INT1 (для 2-канального режима),
- INT0, INT1 и INT2 (для 3-канального режима).

В последних двух случаях, речь идёт о работе с отложенными прерываниями.
По факту возникновения события прерывания, начинает отрабатываться высокоприоритетная ПП прерываний, в которой определяется, по факту поднятия какого именно флага INTxIF произошёл уход в прерывание, после чего, соответствующий активный фронт прерывания INTx изменяется на противоположный, что позволяет осуществлять уходы в прерывания по фактам "прохождения" как фронтов (0/1), так и спадов (1/0).
В случае возникновения отложенного прерывания, оно отрабатывается сразу же после выхода из предыдущего прерывания, но только в приложении к другому флагу INTxIF.
Так как я произвёл "жесточайшую", скоростную оптимизацию, задействованы быстрые регистры стека и 1 маш. цикл отрабатывается за 0,1 мкс., высокоприоритетная ПП прерываний отрабатывается максимально быстро (быстрее просто технически не получится).
Для простоты объяснений, "привяжусь" к 1-канальной работе.
Итак, после возврата из прерывания, активный фронт прерывания INT0 изменился (инвертировался), что создаёт условия для ухода в прерывание по факту "прохождения" следующего перепада.
После возврата из прерывания, определяется значение текущего, активного фронта прерывания INT0.
По этому значению можно однозначно судить о событии "прохождения" фронта или спада, а значит и о значении уровня, который начал формироваться.
Соответственно, в бит №7 "накопительного" регистра Abcd (условное название) записывается признак этого уровня (нулевой или единичный).
Далее происходит "отмотка колец" внутреннего цикла (на каждом "витке", происходит один инкремент содержимого Abcd), что соответствует постепенному наращиванию "протяжённости" текущего уровня (в виде накопленной суммы).
Если уровень не слишком длинный (условно. Детализация ниже), то это накопление суммы продолжается до следующего ухода в ПП прерываний.
После быстрой её отработки и возврата, очередная инверсия активного фронта "засекается" детектором изменения уровня (работает по принципу обнаружения "разнобоя" между текущим значением и ранее оперзапомненным "эталоном"), что соответствует окончанию формирования числового значения текущего уровня и переходу на начало формирования следующей "связки" типа "признак уровня и числовое значение его продолжительности".
Это же является и "отмашкой", разрешающей быстрое копирование содержимого регистра Abcd (результат последнего замера протяжённости уровня, с признаком уровня) в соответствующую ячейку оперпамяти ПИКа.
Далее всё повторяется, но только в приложении к следующему уровню.
И т.д., до полного заполнения всей области оперпамяти ПИКа, выделенной под запоминание данных сессии 1-канального режима (1024 ячейки).
Таким образом, соответствующая область оперпамяти ПИКа, последовательно заполняется данными замеров.
После окончания этого заполнения, происходит выход из обработчика архивных данных.

Теперь о "слишком длинных" и "не слишком длинных" (пока условно) уровнях.

Выше, речь шла о "не слишком длинных" уровнях.
В этом случае, для запоминания одной "связки" типа "признак уровня и числовое значение его продолжительности" (а если короче, то "перепад/уровень"), достаточно одной ячейки оперпамяти ПИКа, и например, в 1-канальном режиме работы, в дисплее графического модуля можно отследить (с помощью "кадровой" прокрутки) 1024 перепада/уровня.
В случае же наличия "слишком длинных" уровней, имеются особенности/нюансы.
Для того чтобы в этом разобраться, представляю Вашему вниманию "конструкцию" (в общем виде) байта ячейки оперпамяти ПИКа, в которую, с помощью обработчика архивных данных (не важно, какого именно) произведена запись ("нижележащее" кратко отражает суть архивирования):

x0yy yyyy

x - признак уровня (нулевого или единичного),
yy yyyy - 6 битов накопителя суммы ("протяжённость" уровня. В виде числа),
0 - бит №6, который не задействуется (всегда установлен в 0).

6 битов потому, что в данном случае используется двухкристалльный графический модуль 128х64 (в любой из строк кристалла 64 столбца).
Конечно же, в данном случае, бит №6, под накопитель суммы, задействовать можно, но я считаю это излишним ("пропорции", на мой взгляд, нормальные).
Этот бит как бы "зарезервирован под перспективу", а именно, для работы с более "широкоэкранным" графическим модулем.
Во избежание никому не нужных поправок, значение накопленной суммы прямо пропорционально "привязано" к количеству отрабатываемых столбцов.
Например, накопленная сумма = .50
Значит, после вывода на индикацию перепада (и для фронта, и для спада, эта вертикальная "палка" одна и та же), на индикацию будет выведена линия нулевого или единичного уровня (зависит от значения бита №7) "протяжённостью" 50 - 1 (это поправка на ранее сформированный перепад) = 49 столбцов (в любом из этих столбцов, активна только одна точка), в том числе и тогда, когда линия уровня пересекает межкристалльную границу (это "епархия" разархиватора).
.50 это нормально. А если, в реале, значительно больше?
Будет не реал, а необъективный счёт по кольцу, чего допустить нельзя.
Из этого следует вывод: по причине того, что бит №7 может быть всяческим (0/1), его нужно "нейтрализовать" (в том смысле, что на момент осуществления считывания накопленной суммы, этот бит имеет нулевое значение) и ориентироваться на число .63 (0011 1111).
Если будет "перебор", то по причине осуществления последовательных инкрементов, это число не пропустишь.
Не пропустили. "Глаз на него положили". А дальше что?
Ответ: "лимитА" (это намёк на число .63) считывается в текущую ячейку оперпамяти ПИКа, и обработчик архивных данных переходит к работе с тем "куском" текущего уровня, который продолжает формироваться далее.
Если и он "лимитА", повторяется то же самое. И т.д.
До тех пор, пока, от затянутого уровня останется "хвостик" (это не "лимитА", а меньше).
Его "реквизиты" тоже будут запомнены в оперпамяти ПИКа.
Проще говоря, в этом случае, для оперзапоминания затянутого уровня, потребуется не одна ячейка оперпамяти, а несколько (их количество зависит от "степени затянутости").
Если же, в канале, перепадов вообще нет, то вся линия будет визуально представлять собой последовательность "прислоненной друг к другу ("стык в стык") лимитЫ" (длинный уровень).
Для того чтобы Вы получили визуальное представление о сказанном, посмотрите на это фото:


В данном случае, происходит работа в 2-канальном режиме, в 1-й позиции горизонтальной развёртки (в ней, эпюры разворачиваются максимально широко).
В 1-й канал выведена импульсная последовательность, в которой "автоприсутствуют" ("железяка позаботилась") лимитные маркеры.
В данном случае, единичный уровень формируется из одной "лимитЫ" и "хвостика", что соответствует запоминанию его "параметров" не в одной, а в двух ячейках оперпамяти ПИКа (затянутый уровень).
Если понижать частоту, то количество "лимитЫ" будет увеличиваться ("хвостик" всегда один).
Если достаточно небольшого количества уровней и нужно минимизировать величину относительных, фазовых погрешностей (широко развернуть), то можно и так (и даже нужно).
Если же нужно отследить "эпюрную портянку" с как можно бОльшим количеством перепадов, то лучше перейти в более "высокономерную" позицию горизонтальной развёртки (в ту, в которой "лимитЫ" не будет).
Что касается 2-го канала, то в данном случае, на его вход просто ничего не подаётся (длинный, нулевой уровень).

А теперь о программной реализации "вышележащего".
В "кольцо" внутреннего цикла обработчика архивных данных, сразу же после инкремента, "врезается" проверка на соответствие/несоответствие результата инкремента числу .63
Если меньше, то эта проверка "проскакивается транзитом".
Больше .63 быть не может (см. ниже).
Если равно .63, то перво-наперво необходимо осуществить программную имитацию последствий отработки ПП прерывания, ведь в "границах" затянутого/длинного уровня, перепадов нет.
"Имитацию" потому, что "на стыке лимитЫ" и того, что последует далее, по указанной выше причине, ухода в прерывание не будет, а значит и не будет смены активного фронта прерывания INTx. И это правильно.
Программная имитация последствий отработки ПП прерывания заключается не в смене активного фронта прерывания INTx (этого делать нельзя), а в инверсии значения бита №7 регистра Abcd.
Это необходимо для того, чтобы в дальнейшем (после разархивирования), на индикацию был выведен затянутый или длинный уровень, в "границах" которого (без учёта перепада, с которого он начинается) перепады отсутствуют и уровень один и тот же.
Ну а далее, отрабатывается "штатная" концовка внутреннего цикла: копирование содержимого регистра Abcd в соответствующую ячейку оперпамяти ПИКа, и либо переход на начало следующего внутреннего цикла (если соответствующий "сектор" оперпамяти ПИКа не заполнен), либо выход из обработчика архивных данных (если заполнен).
"Вышележащие" объяснения ориентированы на 1-канальный режим работы.
Его обработчик можно назвать "базисным", так как этот "базис" используется и в 2/3-канальных режимах работы.
Специфика только в "канальности" и в двух или трёхтактности.
Например, работа происходит в 3-канальном режиме.
В этом случае, результаты 3-канального архивирования оперзапоминаются в комплексном (если так можно выразиться) "секторе" оперпамяти ПИКа, который состоит из 3-х "подсекторов" ("привязки" к 1-му, 2-му и 3-му каналам).
После "влёта" в 3-канальный архиватор и отработки подготовительных операций, начинается отработка одного-разъединственного внутреннего цикла обработчика архивных данных 1-го канала (1-й такт).
После этого, осуществляется отработка одного-разъединственного внутреннего цикла обработчика архивных данных 2-го канала (2-й такт).
После этого, осуществляется отработка одного-разъединственного внутреннего цикла обработчика архивных данных 3-го канала (3-й такт).
После этого, происходит переход на начало отработки одного-разъединственного внутреннего цикла обработчика архивных данных 1-го канала (1-й такт).
Ну и так далее.
До тех пор, пока в одном из каналов (в любом из трёх) произойдёт полное заполнение данными, "привязанного" к этому каналу, "подсектора" оперпамяти ПИКа (например, сигнал, в этом канале, более высокочастотен, чем в остальных).
Это является "отмашкой" на выход из 3-канального обработчика архивных данных.
Проще говоря, "подсекторы" оперпамяти ПИКа остальных двух каналов окажутся не до конца заполненными, что чревато "бяками", которые, в последнем "кадре", визуально ощущаются, в виде "недобитых хвостиков" предыдущей "эпюрной портянки" (это вовсе не смертельно, но эстетически неприятно).
Соответственно, во избежание этого безобразия, я предпринял упреждающие меры.
В подменю основа, во все ячейки оперпамяти ПИКа, которые задействуются под все "канальности", "принудительно" записывается код утолщённой линии.
При таком "раскладе", если что-то "недозаполнено", то в части касающейся "недозаполненного", на индикацию будет выведена "бросающаяся в глаза", утолщённая линия, по которой можно чётко судить о "фазовом моменте" окончания эпюры.
Например:


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

Естественно, что при таком раскладе (в приложении к 1-й, высокоскоростной позиции горизонтальной развёртки), самый высокий, частотный "потолок" будет в 1-канальном режиме.
При прочих, равных условиях, в 2-канальном режиме, он будет приблизительно в 2 раза меньшим, а в 3-канальном режиме, приблизительно в 3 раза меньшим (по отношению к 1-канальному режиму).
И от этого никуда не денешься (с учётом техзадания, я сделал всё от себя зависящее для того, чтобы поднять эти "потолки" до максимально возможных значений).
"Механика" выбора позиции горизонтальной развёртки проста, как звук "му" (условно).
А именно, в 1, 2, 3 - тактный, внутренний цикл обработчиков архивных данных "врезана" простейшая, фиксированная, однобайтная задержка, значение времязадающей константы которой задаётся в зависимости от выбранной (в подменю основа) позиции горизонтальной развёртки.
В 1-й позиции горизонтальной развёртки - быстрый "проскок транзитом".
В других позициях - фиксированная задержка заданной (в подменю основа) величины.

Концовка архиваторов

Итак, предположим, что процедура набора архивных данных ("суперважняк"), с учётом техзадания, отработана так быстро, на сколько это технически возможно (я изо всех сил стремился к тому, чтобы это было именно так. В том смысле, что бескомпромиссно постарался избавиться от того избыточного, что "тормозит").
После этого, можно, образно выражаясь, "не гнать лошадей" (не спешить. Эквивалентно ощущениям, имеющими место быть после сдачи "жесточайшего" норматива по бегу на 100 метров).
Вопрос: "Что дальше"?
Ответ: это зависит от того, какой именно режим горизонтальной развёртки установлен, ручной или авто.
Под это дело, организована соответствующая проверка.
Вне зависимости от того, какой именно режим горизонтальной развёртки установлен, конечный результат один и тот же - переход в универсальный (так как он работает во всех "канальностях") разархиватор, только в том случае, если установлен ручной режим развёртки, переход в разархиватор происходит "транзитом" (то есть, по результату проверки), а в том случае, если установлена авторазвёртка, переход в разархиватор происходит после отработки 2-циклового сценария авторазвёртки.
Рассмотрим последний случай (авторазвёртка).
Начало этого сценария отрабатывается до "влёта" в обработчики архивных данных.
Суть: если идентифицирована авторазвёртка, то "принудительно" устанавливается 1-я, то есть, самая "быстрая/широкая" позиция горизонтальной развёртки.
Таким образом, сначала, в 1-й позиции развёртки, производится набор архивных данных (1-й цикл).
Это данные, которые нужны для анализа, ведь прежде чем что-то автовыставлять, сначала нужно заиметь критерий этого автовыставления, а только после этого, в соответствии с критерием, автовыставлять (и это логично).
Проще всего "привязаться" к накопленной сумме того, что считывается из соответствующего "подсектора" оперпамяти ПИКа, причём, не из всего (в этом случае, высочайшей точности не требуется. Зачем нужны лишние "телодвижения"?), а из его части.
На мой взгляд, достаточно просуммировать то, что "лежит" в полубанке.
Это и сделано.
Далее, результат накопления суммы "протаскивается" через программно организованный, 8-секторный, цифровой компаратор.
В зависимости от того, в какой именно числовой сектор компаратора попал результат накопления суммы, "железяка" предустанавливает соответствующую позицию авторазвёртки (она энергонезависимо запоминается и по окончании разархивирования, "высвечивается" в строке меню).
Для того чтобы "ввести эту предустановку в эксплуатацию", нужно отработать 2-й цикл архивирования, что и сделано.
В моём представлении, реализация сказанного похожа на "лёгкую прогулку по бульвару", но кабы не так.
Вернее так, но наполовину, до появления лимитных маркеров ("лимитЫ").
В 1-й позиции горизонтальной развёртки, лимитные маркеры "возникают" внутри частотного диапазона 4-й позиции авторазвёртки.
А именно, если частота входного сигнала ниже этой частотной "границы", то результат накопления суммы содержимого массива "фиксированной массы" будет необъективен, ведь под запоминание "реквизитов лимитоуровней" задействуется не одна ячейка оперпамяти ПИКа (как в "безлимитном" варианте), а как минимум, две.
Если же речь идёт не об одной "лимитЕ", а о нескольких, то и более 2-х (зависит от "степени низкочастотности").
В таких несимпатичных условиях, результат накопления суммы, в большинстве случаев, будет представлять собой "числовое бардальеро", приводящее к неправильному выставлению позиции авторазвёртки (это не пустые слова. Ощутил в реале).
Если мыслить закрепощённо (в смысле "тотальной привязки" к накоплению суммы), то для того чтобы от этого избавиться, нужно "заморачиваться" довольно-таки "крутой" математикой (с дробными поправками и т.д.).
Попробовал это. Не понравилось. Отказался.
Попробовал "сваять" систему автоподстройки.
Получилось, но достойно достигнуть вожделеемого не позволил принцип архивирования. Отказался.
Попробовал автоизменить "массу" контролируемого массива, в соответствии с количеством обнаруженной "лимиты", но получилось очень уж громоздко и несимпатично. Отказался (короче, намучился вдоволь).
В конечном итоге, я поступил так.
Сначала - небольшая выборка данных из соответствующего "подсектора" оперпамяти ПИКа, на предмет проверки на наличие/отсутствие хотя бы одной "лимитЫ".
Если "лимитЫ" нет, то далее будет осуществляться работа с накопленной суммой (это то, о чём говорилось выше), а если есть, то далее будет осуществляться работа с результатом подсчёта "лимитЫ", идущей подряд, что эквивалентно подсчёту количества лимитных маркеров, причём, в "границах" того уровня (нулевого или единичного), в котором их (лимитных маркеров) больше (это "вычисляет железяка").
При прочих, равных условиях, чем ниже частота, тем больше количество лимитных маркеров.
Вот Вам и критерий выбора позиции авторазвёртки, в приложении к тем случаям, когда, в 1-й позиции развёртки (1-й цикл), присутствуют лимитные маркеры.
Соответственно, 8-секторный, цифровой компаратор видоизменён под обе эти подфункциональности (разделён на 2 секции).
Что касается работы в 2/3-канальном режиме, то, по сути, происходит то же самое.
Отличие в том, что в этом случае, система авторазвёртки работает по приоритетному принципу.
А именно, изначально, во всех каналах, она "рыщет/ищет безлимитный" сигнал.
Если она находит его в одном канале, то ориентируется на него (работа с накопленной суммой).
Если "безлимитных" сигналов несколько, то система авторазвёртки "вычисляет" наиболее высокочастотный сигнал и ориентируется на него (работа с накопленной суммой).
Работа с "лимитОй" возможна только тогда, когда она предобнаружена во всех каналах.
В этом случае, система авторазвёртки ориентируется на те уровни ("сканируются" все каналы), в "границах" которых "дислоцируется" наибольшее количество лимитных маркеров.
В любом случае, по окончании авторазвёртки, на индикацию, в строку меню, выводится надпись
Развёртка: 1 2 3 4 5 6 7 8 , в которой промаркирована та позиция развёртки, которая автовыставлена, плюс, соответствующая "эпюрная портянка".
Настройка такой "комбинированной" системы авторазвёртки - очень деликатное и кропотливое дело, причём, "с примесью" субъективизма (сколько людей, столько и мнений).
Я сделал так, как сделал, но если потребуется, то можно и перенастроить под другие требования.

5. 1/2/3-канальный разархиватор, с выводом результатов разархивации в графический модуль.

Итак, по окончании отработки процедур N-канального архивирования, соответствующие "подсекторы" оперпамяти ПИКа заполнены N-количеством массивов архивных данных, и произошёл автопереход (после нажатия, в подменю основа, кнопки Пуск, дополнительно, ни на какие кнопки жать не нужно. "Железяка выдаст готовый к употреблению" результат) в процедуру разархиватора.
Теперь их нужно (в автомате):

- сначала разархивировать, то есть, привести данные к такому виду, который подлежит беспроблемному, визуальному отображению в дисплее используемого графического модуля,
- а потом визуально отобразить, причём, с "укомплектованием" оного несколькими сервисами.

Это отрабатывается последовательно (сначала первое, а затем второе), но с одной оговоркой: не в приложении ко всей "эпюрной портянке" (всю её невозможно "втиснуть" в дисплей), а в приложении к текущему "кадру".
Это предполагает наличие "кадровой" прокрутки (вправо/влево), что и имеет место быть.
"Кадр" - тот "кусок длинной, эпюрной портянки", который, с учётом параметров входного сигнала/сигналов и текущего значения развёртки, помещается (по горизонтали) в дисплее графического модуля (в дисплейной строке, 64х2=128 столбцов).
Для пояснения того, что сказано, "привяжусь", например, к "среднему" (условно), 2-канальному режиму (но можно и к другому).
Один из из множества вариантов разархивирования выглядит так:


Сразу же после разархивирования, результатом работы разархиватора, по умолчанию, является содержимое 1-го "кадра" (см. левое фото).
В этом случае, работает только кнопка + ("кадровая" прокрутка возможна только в сторону увеличения номера "кадра"), о чем свидетельствует поясняющая надпись Работает только кнопка +, и если долговременно удерживать пассивную (в данном случае) кнопку - в нажатом состоянии, то "железяка" (вернее, её пьезоизлучатель) будет непрерывно выдавать "пачки", каждая из которых состоит из 5-ти "писков" (паузы, между "писками", 50 мс.), с паузами между "пачками" примерно в 0,5 сек.
Это что-то типа звукового предупреждения о бесперспективности "жатия" на кнопку - .
Но стоит только осуществить "кадровую" прокрутку вправо (нажать/отжать рекомендованную "железякой" кнопку + ), активными будут обе кнопки ( + и - ), на что будет указывать пояснительная надпись Работают кнопки - и + (см. среднее фото).
Это означает то, что можно осуществить "кадровую" прокрутку как вправо (кнопка + ), так и влево (кнопка - ), на выбор пользователя.
И не только тогда, когда имеет место быть 2-й "кадр" (см. среднее фото), но и тогда, когда номер "кадра" имеет большее значение (за исключением последнего "кадра". См. ниже).
В счётчике "кадров" будет индицироваться номер текущего "кадра".
При этом следует учесть то, что по достижению 1-го "кадра", поясняющая надпись Работают кнопки - и + автосменится на Работает только кнопка + (см. выше).
Любая смена "кадра" сопровождается одним "писком".
Если не кратковременно нажимать/отжимать кнопку + или - ("перескок" на соседний "кадр", правый или левый), а долговременно удерживать любую из них в нажатом состоянии, то смена "кадров" будет происходить автоматически и достаточно быстро, что позволяет быстро достигнуть "кадра" с нужным номером.
Если осуществить прокрутку до последнего "кадра", то он и "высветится" (см. правое фото), что подтверждается одинарной "пачкой", состоящей из 10-ти "писков" (после этого, кнопка + перестаёт реагировать на её нажатие), "высвечивается" надпись Последний кадр и происходит смена надписи Работают кнопки - и + на надпись Работает только кнопка - (что вполне естественно. Зачем прокручивать вправо, если далее нет ничего полезного?).

Формирование "кадра".

Если, в подменю основа, нажать/отжать кнопку Пуск, то по факту её нажатия, в конечном итоге, на индикацию, по умолчанию, будет выведена картинка 1-го "кадра" соответствующей "эпюрной портянки" (она N-канальная).
Применённый графический модуль является 2-кристалльным.
Это означает то, что межкристальную "границу" нужно, образно выражаясь, "пройти достойно" (без "бяк").
В том смысле, что "полукадровый хвостик" эпюры, который не помещается в эпюрной строке 1-го (левого) кристалла, должен выводиться на индикацию в начало однономерной строки 2-го (правого) кристалла.
Далее, вплоть до конца "кадра", - продолжение эпюры.
Это программно и сделано, причём, абсолютно точно (с жесточайшим контролем в отладчике) и во всех возможных случаях.
Например, "пограничный" уровень занимает 10 столбцов, и слева, от межкристальной границы (это 1-й кристалл), задействовано 6 столбцов.
Значит, справа, от межкристальной "границы" (это 2-й кристалл), будет задействовано 10 – 6 = 4 столбца, причём, с сохранением значения (нулевого или единичного) ранее сформированного (в 1-м кристалле) уровня.
Проще говоря, "перехода межкристальной границы" пользователь никак не ощутит ("железяка об этом капитально позаботилась").
То же самое имеет место быть и по окончании формирования "кадра", только в этом случае, речь идёт не о "полукадровом хвостике", а о "кадровом хвостике".
Уровень и "протяжённость кадрового хвостика" оперзапоминается, и если перейти, с отображения 1-го "кадра", на отображение 2-го "кадра", то 2-й "кадр" начнётся именно с этого, "кадрового хвостика", к которому, справа, "автоприслонится" продолжение "эпюрной портянки" (естественно, не абы какое, а только до конца 2-го "кадра").
Ну и так далее. По такому же принципу. Вплоть до последнего "кадра".
То есть, "железяка", хотя она и "тупая" (в смысле неодушевлённости), но совсем не "дура" (в смысле "железобетонной" логики).

"Покадровая", горизонтальная прокрутка.

После вывода "эпюрной портянки" на индикацию, с помощью кнопок + и - , можно осуществить "покадровую" прокрутку "туда-сюда".
Если кратковременно нажимается/отжимается кнопка + , то осуществляется смена предыдущего "кадра" на последующий (прокрутка вправо).
Если кратковременно нажимается/отжимается кнопка - , то осуществляется смена последующего "кадра" на предыдущий (прокрутка влево).
Если долговременно удерживать кнопку + или - , в нажатом состоянии, то будет осуществляться последовательная, автоматическая смена "кадров", которая прекратится по факту отжатия.
Эти два способа управления кнопками, по желанию пользователя, можно комбинировать.
В случае осуществления прокрутки вправо, все интервалы времени смен "кадров" одинаковы, а в случае осуществления прокрутки влево, они разные.
А именно, чем больше номер "кадра", тем больше интервал времени смены "кадра" с номером N, на "кадр" с номером N – 1, а чем меньше номер "кадра", тем этот интервал времени меньше.
Сказанное объясняется различиями "механизмов покадровой" прокрутки вправо/влево.
В случае осуществления прокрутки вправо (нажатие/отжатие кнопки + ), происходит довольно-таки "бесхитростный перескок" на следующий "кадр".
В случае же осуществления прокрутки влево (нажатие/отжатие кнопки - ), посложнее.
Например, установлен "кадр" с номером N.
После осуществления нажатия/отжатия кнопки - , происходит переход на начало 1-го "кадра", после чего осуществляется ускоренная (предприняты программные, "спецпинковые меры"), автоматическая смена "кадров", вплоть до "кадра" с номером N -1, который выводится на индикацию не "в ускоренном темпе" (как предыдущие), а "штатно" ("полноценно"), что и соответствует прокрутке, на один "кадр", влево.
"Реактивносвистовая автосмена кадров" происходит так быстро, что при любом "раскладе", визуально не ощущается.

Об отображении данных в строке меню.

Так как, в приложении к отображениям всяческих "эпюрных портянок", пуск (ручной или авто) возможен из любого пункта подменю основа, то после осуществления пуска, в строке меню, на всё время осуществления дальнейшей прокрутки "добытого", этот пункт и зафиксируется.
Прокручивайте "туда-сюда" и анализируйте "добытое" сколько хотите.
При этом, кнопка Пуск пассивна (не работает. Зачем ей работать?).
А когда надоест "крутить/вертеть"/анализировать, то нужно нажать/отжать кнопку Меню, после чего произойдёт переход в 1-й пункт меню, и текущая "эпюрная портянка" (со всеми её "атрибутами") будет "визуально убита" записью, по её верху, "пояснялки/указивки", сопровождающей 1-й пункт меню.
Но ранее "накопленные" оперданные (всех нужных типов), предназначенные для Flash/EEPROM-запоминания, "убиты" не будут.
После этого, возможны 2 варианта:

О вариантах работы, которые возможны после нажатия/отжатия кнопки Меню.

1. Если, в дальнейшем, Flash-записи сессии не осуществляется, то оперданные текущей "эпюрной портянки (со всеми её "атрибутами") уходят в небытие".
Например, по причине их субъективной несимпатичности.
Мало ли? Может быть, развёртка не та или пользователю ещё что-то не нравится.
Если это так, то пользователь, в подменю основа, может соответствующим образом скорректировать настройку/настройки, а после этого осуществить ещё один пуск.
А если и его результат не понравится, то и ещё один.
Хоть миллион раз (условно). Не лимитировано.
Только, при работе в подрежиме автопуска, нужно учитывать изложенную выше специфику (это намёк на накопленную сумму задержки прямого счёта).

2. Если же пользователь считает текущую "эпюрную портянку" симпатичной и достойной Flash-записи в текущую сессию, то нужно просто перейти в подменю флэш и записать (см. пункт 2.2. В части касающейся Flash-записи).
В дальнейшем, зная номер сессии, эти данные можно Flash-считать любое количество раз, причём, со всеми "атрибутами", которыми эта "эпюрная портянка укомплектована" (это намёк на "пиконапругу" и частоту. Сие запоминается в EEPROM-памяти данных).
Плюс, прокрутка "туда-сюда" и другие, полномасштабные сервисы.

Об N-канальной "эпюрной портянке" и "атрибутах", которыми она "укомплектована".

Например, "привяжусь" к "усреднённому", то есть, к 2-канальному режиму работы.
Пусть пуск будет ручным.
Один из множества возможных итогов осуществления пуска выглядит так:


Номерами цвета хаки пронумерованы строки дисплея (каждая из них состоит из двух однономерных строк кристаллов).

1-я строка дисплея - Строка меню.
После осуществления, в подменю основа, пуска, в ней фиксируется тот пункт подменю основа, который имел место быть на момент осуществления пуска.
В данном случае, зафиксировался 1-й пункт, но это может быть и другой пункт.
2-я строка дисплея - "Пиконапруга", замеренная в 1-м канале.
Отображается "вольтаж" усреднённого, единичного уровня импульсного сигнала, присутствующего в 1-м канале (или "вольтаж" длинного уровня).
3-я строка дисплея - Частота, замеренная в 1-м канале.
Отображается значение частоты сигнала, присутствующего в 1-м канале.
4-я строка дисплея является комбинированной.
В 1-м кристалле, всегда отображается номер текущего "кадра", а во 2-м кристалле, по достижении последнего "кадра", всегда отображается надпись "Последний кадр", а в случае работы с автопуском и накапливания задержки прямого счёта, отображается надпись "ЗаписаноСГ хх" (где хх - количество ранее Flash-записанных сессийных групп).
В данном случае (ручной пуск), надписи "ЗаписаноСГ хх" просто не будет, а надпись "Последний кадр" появится тогда, когда он будет достигнут, и она пропадёт (автоочищение 4-й строки 2-го кристалла) после первого же нажатия/отжатия кнопки - .
5-я и 6-я строки дисплея - "базис", который "обслуживают" остальные строки, а проще говоря, это и есть та "эпюрная портянка", ради которой и "затеян весь сыр-бор".
7-я и 8-я строки дисплея - Подсказки.
Они указывают на то, что "текущеработает", а соответственно и способствуют осознанию того, что не работает.

В 1-канальном режиме, "эпюрная портянка" выводится в 5-ю строку дисплея.
В 6-ю строку дисплея, выводится надпись Одноканальный режим, а 7-я строка дисплея очищается.
В 3-канальном режиме, "каналоподсказки" нет, так как в этом случае, под 3-канальный режим, задействуются 5-я, 6-я и 7-я строки дисплея.
О порядке замеров "пиконапруги" и частоты.

После осуществления пуска, в любом случае, перво-наперво отрабатывается ПП соответствующего архиватора.
То есть, максимально быстро (на сколько это технически возможно) делается то, ради чего и "затеян весь сыр-бор".
Это "святое" (в сугубо техническом смысле).
Никакими способами вклиниваться", в это "святое", нельзя, а иначе, верхний "потолок" скорости опустится "ниже плинтуса" (условно).
А вот после этого, можно/нужно, и не "в пожарном порядке", а основательно, что, в приложении к замерам "пиконапруги"/частоты и сделано.
И в приложении ко многому другому, тоже.
В этом и заключается "сермяжная" суть оптимального разделения функций, а заодно и разделения "основы" и её "обслуги".
Это как раз тот случай, когда нельзя "смешивать мух с котлетами" (дружеский привет батьке Лукашенко, и в его лице, всем белорусам).

6. "Вопилки".

Понятие "вопилка" ввёл, в широкий, народный обиход, уважаемый (как минимум, мной) и рассудительный (с логикой всё в порядке) персонаж, которого знают многие: Винни-Пух.
В "вопилках", частично присутствуют "элементы предупреждалок", но по большому счёту, отдельно взятая "вопилка", это не относительно безобидная "предупреждалка" (в виде диалога и/или подсказки, и/или в комплексе), а именно "вопилка", так как "железяка", в категоричной форме, вопиёт по поводу выхода "того-сего" за пределы дозволенного.
Посредством этого, она недвусмысленно намекает пользователю на то, что произошло явное (то есть, вопиющее) безобразие, которое может плохо закончиться (для "железяки". Она имеет право на автовозмущение. Хотя бы по той причине, что в неё заложена душа конструктора и ей тоже жить охота).
Появление "вопилок" неприятно, но необходимо, а иначе возможен "Гитлер капут".
В этом и заключается их упреждающая, "жизнесберегающая", гуманная суть.

"Вопилка" №1.

Эта "вопилка" автопредупреждает пользователя о том, что в 1-м канале, значение "пиконапруги" превысило максимально дозволенное значение 15 вольт:


В этом случае, картинка сей "вопилки намертво фиксируется" ("железяка" перестаёт "реагировать" на какое-либо управление ей) и сопровождается непрерывными, противными, "писками".
Короче, СТОП-МАШИНА. С настойчивым намёком на то, что нужно быстренько отключить источник/источники сигнала, выключить питание и разобраться в причинах произошедшего конфуза.
Я бы и рад, по факту идентификации этого превышения, как можно более быстро "автообрубить" источники сигналов (для этого нужен коммутатор, работающий с "напругами" более 15 вольт или его "гибрид" с преобразователями уровней), но, к сожалению, нет ни одного свободного вывода порта, который можно было бы задействовать под это дело (все выводы портов задействованы).

"Вопилка" №2.

Эта "вопилка" автопредупреждает пользователя о том, что по каким-то причинам, Uпит. (от него запитывается ПИК, графический модуль и преобразователь уровней) понизилось до недопустимого значения.
В основном, это относится к тому случаю, когда устройство имеет батарейное питание, но этот же "прибамбас" может быть использован и для обнаружения "паразитных" помех, "проскакивающих" по цепи питания, которые понижают Uпит. до недопустимо низкого значения.
Эта "вопилка" выглядит так:


Под это дело, задействован модуль LVD (программируемый детектор пониженного напряжения), входящий в состав PIC18F252.
Фото слева - случай разряда батареек до недопустимо низкого уровня, о чём свидетельствует блёклое содержимое дисплея и надпись ПОНИЖЕННОЕ Uпит. или помеха по Uпит., сопровождаемая (в течение нескольких секунд) серией предупреждающих "писков" (для привлечения внимания).
После окончания этой серии "писков", происходит автопереход в 1-й пункт меню.
То есть, Uпит. понизилось не до такого значения, при котором нарушается работоспособность устройства, и работу можно продолжить.
Проще говоря, ничего не блокируется. Просто "железяка" выдала предупреждение, после которого работа может быть "штатно" продолжена.
Но ведь батарейка-то подразряжена (см. блёклую надпись).
Значит, следующий "заход", в 1-й пункт меню (и последующие "заходы" тоже), будет сопровождаться вышеупомянутой, нудной "предупреждалкой".
До тех пор, пока пользователю надоест это издевательство (серия из сотни "писков" это достаточно противно), и он сменит батарейки.
Ну а если не сменит, то по прошествии некоторого времени, просто ничего не будет видно (графический модуль очень критичен к понижению своего Uпит.).
Если же речь идёт о запитке от сетевого блока питания (см. правое фото), то этого не будет, за исключением случаев наличия помех, по Uпит., пусть даже кратковременно понижающих уровень Uпит. до значения, лежащего ниже установленного U-порога (это маловероятно, но теоретически возможно, так как в жизни всякое бывает).
Проще говоря, если эта "вопилка" появляется в случае запитки от сетевого блока питания (надпись не блёклая, а контрастная), то необходимо разбираться с источником помех по Uпит., а иначе "железяка доконает" (она очень упорная).

7. Порядок ввода устройства в эксплуатацию.

1. Собрать устройство и "прошить" ПИК. Короче, привести устройство в работоспособное состояние.

2. Включить питание устройства.
После окончания приветствия, в подменю основа, по умолчанию, будут выставлены следующие настройки (выставляются в процессе "прошивки"):
- 1-канальный режим,
- ручной пуск,
- ручная развёртка,
- 1-я позиция ручной развёртки.

В дальнейшем, пользователь (естественно, в пределах "железякодозволенного") может изменить эти настройки по своему усмотрению (изменённые настройки энергонезависимо автозапоминаются и автовосстанавливаются).

3. Не изменяя этих "умолчательных" настроек (кроме выбора "канальности"), нужно последовательно Flash-записать какие-нибудь данные хотя бы в одну сессию (проще всего, в 1-ю) всех "канальностей".
При этом, в простейшем случае, можно обойтись без подключения, к сигнальному входу (входам) устройства, источника (источников) сигнала (проще говоря, сигнальные входы ни к чему не подключены и "висят").
В этом случае, во Flash-память программ, будут записаны промаркированные, длинные, нулевые уровни.
Но можно и подать, на сигнальный вход (входы), сигнал (сигналы).
Это принципиально не важно.
Сие "приводит в чувство" всех "шаляй-валяйщиков", кроме показания счётчика сессийных групп.
Для того чтобы "привести в чувство" и этого "шаляй-валяйщика", нужно, при первом (после "прошивки") "автовозникновении" диалога Ранее запомненную задержку автопуска использовать? , выбрать (кнопка + или - ) позицию сбросить и нажать/отжать кнопку Меню.
После осуществления сказанного, устройство как бы "самоорганизуется" (по принципу адаптивной системы), причём, это нужно сделать только один раз (изначально), и не более того.
Если проводить образную аналогию, то изначально имеется анархический строй (не общественный строй, а гораздо проще) призывников, выстроенный абы как (вспомнил о Ноевом ковчеге).
Приходит командир, ужасается и выстраивает этот строй как положено: по ранжиру, с соблюдением равнения в шеренгах, интервалов между ними и т.д. (много всего).
А если серьёзно, то шутка-ли? В программе почти 16 килослов, 32 программно организованных флага, задействовано примерно 70 регистров общего назначения (кстати, многие из них универсальные) и т.д.
Можно было бы и "с 1-го тыка", но "расплата" за это - совершенно ненужное усложнение программы, которое, в условиях почти полного заполнения памяти программ (а также и по другим причинам), чревато серьёзными неприятностями.
Лучше уж "орготмучиться" один раз, а потом забыть про это "мучение" (кстати, не такое уж оно и трудное. Если в курсе, то не более 5-ти минут).
Если исполнить "вышележащие" рекомендации, то "железяка всё автосделает в лучшем виде", и далее никакого "шаляй-валяя" просто не будет.
Если уж изначально с ним бороться, как говорится, "по полной программе", то "за компанию", целесообразно произвести Flash-запись во все 14 сессий (хоть "оптом", хоть "в рассрочку". Кому как удобнее).
Это гарантирует "смерть конфузной" надписи Флэш-память пуста (в том смысле, что по причине отсутствия на то оснований, она не будет выводиться на индикацию), но если даже и не так, то ничего страшного, ведь когда-нибудь Flash-запись будет произведена во все сессии, а в том случае, если это не так, надпись Флэш-память пуста будет просто предупреждать о том, что в текущую сессию, ни разу не была произведена Flash-запись и что-то считывать из неё бессмысленно (Flash-чтение программно блокируется).

Успешной Вам работы.

С уважением: Корабельников Евгений Александрович.

г.Липецк. Декабрь 2010 г.   http://ikarab.narod.ru    E-mail: karabea@lipetsk.ru


Назад

Hosted by uCoz