Назад

Анализатор импульсных последовательностей. Техническое описание.

1. Первичное, техническое задание на разработку.

1. Работа в "чистом ассемблере". Однозначно и без вариантов.
2. 3-портовый ПИК типа PIC18F252.
Нужно обойтись только его оперресурсами и его возможностями.
Использование внешних оперресурсов, а также и использование внешнего АЦП исключено.
3. Для визуального отображения результатов работы устройства, используется графический модуль Российского производства MT-12864J-2YLG (МЭЛТ).
4. На этой основе, необходимо сконструировать малогабаритный, малоэнергозатратный (вплоть до батарейного питания) и относительно дешёвый 1/2/3-канальный (на выбор пользователя) анализатор импульсных последовательностей (графопостроитель), предназначенный для "взлома" (условно) неизвестных протоколов обмена, "разборок" с известными протоколами обменов, равно как и для оценки фазовых соотношений и величин скважностей (коэффициентов заполнения).
В любом из своих каналов, в пределах своих "опервозможностей", он должен обеспечивать отображение всех видов импульсных последовательностей: периодических, кратнопериодических, непериодических, "гибридных", вплоть до отображения уровней, которые не содержат перепадов.
По сигнальным входам, анализатор импульсных последовательностей должен обеспечивать как можно более высокий частотный (скоростной) "потолок" (близкий к тому частотному "потолку", который технически возможен).
"Эпюрные портянки", выводимые на индикацию, должны быть "укомплектованы" показаниями частоты и пикового значения напряжения, а также и содержать в себе как можно большее (в пределах возможного) количество уровней/перепадов, что предполагает наличие прокрутки (вправо/влево) и возможность осуществления выбора той или иной позиции горизонтальной развёртки.

2. Основные аспекты стратегии реализации техзадания.

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

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

Первые 2 пункта реализуются совершенно стандартно, но с оговоркой: замеры производятся в том канале, который задействуется в любой "канальности", и только после осуществления выборок опермассивов данных.
То есть, в 1-м канале.
Можно замерить и во всех текущих каналах (в программном смысле, нет проблем), но в приложении к техзаданию, под это дело, свободных выводов портов нет.
В этом смысле, на мой взгляд, усложнять устройство нецелесообразно, так как в подавляющем большинстве случаев, достаточно "сопутствующих" замеров только в 1-м канале.
Если с первыми двумя пунктами "всё ОК", то с учётом сказанного ниже, реализация 3-го пункта существенно упрощается.
В том смысле, что под вывод на индикацию одной эпюры, достаточно одной дисплейной строки.
Соответственно, по максимуму (в 3-канальном режиме работы), под визуальное отображение "эпюрной портянки", задействуются всего 3 дисплейные строки, и не более того.
В этом случае, а также с учётом того, что частотные (скоростные) "потолки" выборок опермассивов данных "задраны" не до десятков мегагерц, а гораздо скромнее, главная, техническая функция "эпюрной портянки" (текущей или запомненной во Flash-памяти) - создание комфортных условий для отслеживания/оценки скважностей и взаимных, фазовых соотношений, что, в свою очередь, является "базисом" соответствующей, аналитической работы.
В части касающейся обеспечения как можно более высоких скоростных "потолков", совершенно необходимо "отделить мух от котлет".
Непрерывный режим отображения сигналов ("мухи + котлеты") отпадает, так как в этом случае, скоростные "потолки" опустятся "ниже плинтуса" (условно).
Хотя бы по той причине, что графический модуль это не электронно-лучевая трубка, в которой луч "перебрасывается", из одной части экрана (или дисплея. Это кому как нравится), в другую, практически мгновенно.
Графический модуль гораздо более инерционен.
Например, усреднённое время полного поворота жидких кристаллов: порядка 150 мс. (может быть сейчас и лучше, например, 100 мс., но в любом случае, это очень много).
Хотя бы по этой простой причине (плюс, ещё и другие спецпричины, детализировать не буду), отображение сигнала, в непрерывном режиме, как не исхитряйся, будет происходить "провально".
Проще говоря, будут последовательно отображаться "вычленяемые куски" текущей функции, и между ними будут "провалы", которые просто не будут отображаться (безобразие).
Я это называю "провальной кусочно-рваностью", реализация которой, к тому же, требует ещё и фазовой синхронизации.
По причине своей крайней неэффективности, от этого способа реализации задуманного я отказался изначально.
Гораздо симпатичнее другой способ.
А именно, "вычленение" одного-разъединственного "куска", но не маленького, а большого (вспомнил о подзабытых раках Романа Карцева. Те, кто знаком с его творчеством, моментально поймут).
В этом случае, в упор нет никакой "провальной кусочно-рваности" и постоянная синхронизация не нужна, за исключением простенькой, "одинарной", фазовой коррекции, производимой в начале "эпюрной портянки".
Проще говоря, после осуществления пуска, начинает работать некий архиватор (это название - моя "самодеятельность"), функция которого - "перекачка" данных, присутствующих на входе канала (каналов), в область оперпамяти ПИКа (в данном случае, но можно "перекачать" и во внешнюю оперпамять).
Эта "перекачка" должна производиться по как можно более высокоскоростному алгоритму (естественно, в пределах технически возможного. Суть - "кровавая/бескомпромиссная борьба с избыточностью").
Короче, "с как можно более пронзительным, реактивным свистом" (условно. Задействую образы).
А вот после этого, можно и не спешить.
В том смысле, что результаты архивирования можно разархивировать не спеша (и т.д. Много всякого. См. далее).
По большому счёту, в приложении к графическим модулям, ничего нового, в этой стратегии, нет.
Новое (надеюсь на это. Сравнить не с чем) есть только в довольно-таки многочисленных деталях (в тактике) реализации текущего техзадания.
БОльшую часть этой конкретики я просто придумал "с нуля" (для меня, это проще, чем "рыскать" в поисках готовых решений).
Смысл произошедшего заложен в "железячном" приветствии, Made in … <догадайтесь> … (кстати, его сопровождает мелодия из фильма "Ворошиловский стрелок", в котором снимался великий артист и ЧЕЛОВЕК Михаил Ульянов. Вечная ему память. Хороший был человек. Душевный. В приложении к нашей ментальности, это наивысшая оценка. Подробности: http://www.ulianov.ru/bio/index.html ).
Пусть это к делу и не относится, но я всей душой люблю/боготворю богатейшую (прежде всего, на душу и мозги) землю своих предков, со всеми вытекающими (детализировать не буду). Отсюда и непоколебимая вера в лучшее.
Это огромная сила, а заодно и национальная идея, которую сейчас ищут все, кому не лень (зачем её искать, если она есть?).
Короче, душевный привет всем тем, кто не забыл, откуда он родом и на деле уважает то, что его взрастило.
А описываемая "железяка" - просто "мелкотравчатое" приложение (чем богат, тем и рад) к этому "суперважняку".
Можно и гораздо "круче". Лишь бы "базис" был (его и предоставляю Вашему вниманию).
Левшу никто не отменял!!! Дерзайте. И никакой Фурсенко (это о текущем горе-министре) этому помешать не в состоянии.

3. Принципиальная схема анализатора импульсных последовательностей и функции его элементов.

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


"Сердцем" устройства является 3-портовый ПИК 18-й серии типа PIC18F252, работающий с кварцем 10 Мгц.
Использован режим работы тактового генератора с названием HS+PLL, который позволяет получить наибольшую скорость работы PIC18F252 (учетверение, то есть, 10 х 4 = 40 Мгц. 1 машинный цикл отрабатывается за 0,1 мкс.).
Визуальное отображение результатов работы происходит в дисплее, сделанного в России (МЭЛТ), 5-вольтового, графического модуля MT-12864J-2YLG (128х64 точки. Параллельная шина данных), который можно заменить на аналогичный графический модуль другого производителя.
Включение/выключение подсветки дисплея графического модуля осуществляется с помощью переключателя Подсветка, а начальная установка контрастности, с помощью резистора R16.
Устройство запитывается от стабилизатора, собранного на широко распространённой и дешёвой м/схеме 78L05.
Если яркость подсветки недостаточна и её необходимо увеличить, то нужно уменьшить номинал R17, только при этом следует учесть, что светодиоды подсветки потребляют довольно-таки значительный ток.
Если, в этом случае, корпус 78L05 будет сильно греться (максимально допустимый ток 100 ма.), нужно заменить 78L05 на более мощную м/схему (на схеме, вариант замены указан в скобках).
По той причине, что под замеры пиковых значений отслеживаемых импульсных последовательностей, используется канал модуля АЦП, и программно выбран источник верхнего/нижнего опорного напряжения Vdd/Vss, на выходе 78L05 (на схеме, контрольная точка замера помечена красным крестиком), путём подбора номинала (порядка десятков ом) резистора R1, нужно выставить 5,12 вольт (можно и ниже, но это повлияет на точность замеров пиковых значений).

Входы каналов 1, 2, 3 подключены, к входам INT0, INT1, INT2 (выводы RB0, RB1, RB2), через буферы (буферы не инвертируют. "Протаскивание" сигнала, через инвертор/буфер, во многих случаях, увеличивает крутизну фронтов/спадов), каждый из которых представляет собой два последовательно соединённых инвертора К561ЛН2, их 6 штук. Все задействованы. В данном случае, Uпит. К561ЛН2 = 5,12 в.).
Диапазон обрабатываемых уровней: примерно 3 …15 в. (в 561-й серии, выше нельзя).
Если на вход канала (а значит и буфера) подан уровень единицы, который выше 5,12 в. (но не более 15 в.), то любой из буферов работает как преобразователь уровней, от КМДП, к ТТЛ/ТТЛШ, и на выходе буфера будет присутствовать уровень единицы 5-вольтовой логики.
То есть, происходит ограничение входных уровней до безопасных, для ПИКа, значений, обеспечивающих его нормальную работу.
Если на вход канала подан уровень единицы, который ниже 5,12 в., то К561ЛН2 перестаёт преобразовывать уровни и работает как "штатный набор инверторов".

Резисторы R8, R9, R10 - "токовая развязка", которая необходима для осуществления безошибочной "привязки" к значениям тех уровней (нулевых/единичных), которые присутствуют сразу же после осуществления ручного пуска или автопуска.
Наличие этой "развязки" обеспечивает безошибочность задания "начальных точек отсчётов", от которых происходит дальнейший, оперативный набор данных, а значит (в дальнейшем) и безошибочность формирования картинок эпюр.

С помощью простейшего пикового детектора (VD2, C4), нагрузкой которого является высокоомный вход канала АЦП (вывод RA0), замеряется пиковое (максимальное) значение уровня сигнала, присутствующего в 1-м канале (он задействуется во всех "канальностях").
Резистор R15 необходим для ограничения "броска" разрядного тока до гарантированно безопасного значения.
Резисторы R5, R14 - делитель напряжения, который обеспечивает отображение показаний "пиконапруги" в диапазоне 0 …14,99 в.
Точность измерений обеспечивается подбором номинала резистора R14.

Под измерение частоты (замер производится в 1-м канале), выделен TMR0 (счётный вход - вывод RA4).

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

Имеется 3 кнопки, которые управляют многопунктным/многопозиционным меню и диалогами: "+", "-", "Меню" (рабочее действие - по факту отжатия), а с помощью кнопки "Пуск", осуществляется ручной пуск (рабочее действие - по факту нажатия).
Способ их подключения одинаков (внешняя "подтяжка" к Uпит.).
В данном случае, использовать долговременную, внутреннюю "подтяжку" порта В нельзя, так как его кратковременная "подтяжка" используется для программно-аппаратного "провоцирования" уходов в прерывания по INTx (в остальных случаях, "подтяжка" порта В должна быть выключена).
Разница в номиналах резисторов "подтяжки" R3, R4 (20 Ком.) и R11, R12 (10 Ком.) объясняется тем, что в случае использования внутрисхемного программирования (см. рис. 2), желательно минимизировать влияние внешней нагрузки на аппаратную часть программатора (на оконечные каскады линий DAT и CLK).

На рис. 1, резистор R2 можно убрать (вместо него, "коротыш"), но на рис. 2, этого делать не следует.

Я использовал отечественный пъезоизлучатель (ЗП-25), но можно и другой.
Особенность его подключения такова, что по причине отсутствия свободных выводов портов, под него, выделять нечего.
Поэтому пъезоизлучатель подключен к линии RC0/DB0.
То есть, в данном случае, речь идёт о совмещении двух функций.

Конденсатор С3 "давит" ВЧ-помехи.

Ниже Вы видите то, о чём говорилось выше, но в приложении к внутрисхемному программированию (плюс VD1 и разъём Х2):


Это вариант под программатор-отладчик PicKit2.
В данном случае, можно "прошить" PIC18F252, который установлен в устройство, в том числе и тогда, когда он будет запаян.
В интервале времени внутрисхемного программирования, кнопки должны находиться в нормально разомкнутом состоянии.

4. Конструкция (в очень общем виде).

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

5. Простые вспомогательные устройства, которые использовались в процессе конструирования.

Это источник сигналов:


Это бездребезговый коммутатор (это устройство полезно во многих случаях):


С помощью этого устройства, можно проверить систему автопуска:


Все эти устройства можно разместить на стандартной макетке (58 х 72 мм.).
Я так и сделал.
Запитка второго и третьего устройства осуществляется с выхода стабилизатора первого устройства (5 вольт).
Источниками сигналов, для второго и третьего устройства, могут служить сигналы первого устройства, но можно использовать и сигналы (5-вольтовая логика) от внешних устройств.
Светодиод и его гасящий резистор не обязателен.

6. Технические характеристики.

Основные составные части устройства.

Микроконтроллер: PIC18F252 - I/SP (все выводы портов задействованы).

Элемент индикации: графический модуль компании МЭЛТ MT-12864J-2YLG.

Преобразователь уровней: К561ЛН2.

Кварц: 10 Мгц (работа в режиме HS + PLL. Такт, после учетверения, 40 Мгц., 1 м.ц. = 0,1 мкс.).

Стабилизатор Uпит.: 78L05.

"Пищалка": любой пъезоизлучатель, обеспечивающий приемлемую громкость.

Питание.

Uвых. стабилизатора (78L05) : 5,12 в.

Диапазон Uвх. стабилизатора, обеспечивающий нормальную работу (в том числе и с включенной подсветкой): 7,5 … 12 в. (рекомендуемое значение - примерно 9 в.)

Способы запитки: от сетевого блока питания, от батареек, комбинированный.

Предупреждение о снижении Uвых. стабилизатора ниже 4,77 в. : визуально – звуковое, с возможностью дальнейшего продолжения работы.

Потребляемый, по цепи 5,12 в., без подсветки, ток: не более 22 ма. С подсветкой: не более 50 ма.

Скоростные качества архиваторов.

Максимальная скорость выборки N-канального массива данных, для "меандра" (Кзаполнения = 50%) и 1-й позиции горизонтальной развёртки:
1-канальный режим работы: не более 80 Кгц.,
2-канальный режим работы: не более 40 Кгц.,
3-канальный режим работы: не более 28 Кгц.,
что иллюстрируется этими фото
(примеры работы почти с максимальной скоростью. См. F 1-го канала: ххх,хх Кгц):


В приложении к требованиям техзадания, это максимально технически возможные скоростные "потолки".

Входное сопротивление каналов:

Rвх. 1-го канала: примерно 110 Ком.
Rвх. 2-го канала: примерно 150 Ком.
Rвх. 3-го канала: примерно 150 Ком.

Количество запоминаемых, в одной N-канальной сессии, перепадов/уровней.

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

- в 1-канальном режиме: 1024 перепада/уровня (1024 ячейки оперпамяти/байта),
- в 2-канальном режиме: 512 перепадов/уровней 1-го канала и 512 перепадов/уровней 2-го канала (512 х 2 = 1024 ячейки оперпамяти/байта),
- в 3-канальном режиме: 256 перепадов/уровней 1-го канала, 256 перепадов/уровней 2-го канала и 256 перепадов/уровней 3-го канала (256 х 3 = 768 ячеек оперпамяти/байтов),

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

Количество сессий в N-канальных сессийных группах.

Во Flash-памяти программ, можно энергонезависимо запомнить, а затем и считать (в любое удобное, для пользователя, время) следующее количество сессий (это количество формирует N-канальную сессийную группу):

1-канальный режим: 2 сессии. Количество задействованных байтов: 1024 х 1 х 2 = 2048,
2-канальный режим: 4 сессии. Количество задействованных байтов: 512 х 2 х 4 = 4096,
3-канальный режим: 8 сессий. Количество задействованных байтов: 256 х 3 х 8 = 6144.

Итого: 12288 байтов или 12288/2 = 6144 слова памяти программ (без учёта программной "обслуги" Flash-записи/чтения).

Диапазоны замеров частоты, "пиконапруги" и количества "кадров".

Диапазон замеров частоты: от 0 Гц. до 999,99 Кгц., с "шагом" 10 Гц.
Форма замера F 1-го канала: ххх,хх Кгц.
В двух левых, десятичных разрядах показаний, незначащие ноли гасятся.
Замер осуществляется в 1-м канале.
Диапазон замеров "пиконапруги": от 0 в. до 14,99 в., (если выше, то "появляется вопилка") с "шагом" 0,01 в.
Форма замера Uмакс 1-го канала: хх,хх в.
В левом, десятичном разряде показаний, незначащий ноль гасится.
Замер осуществляется в 1-м канале.
Диапазон замеров количества "кадров": от 1 до 999, с "шагом" в 1 "кадр".
Форма замера кадр: ххх.
В этом случае, использован такой "спецспособ" вывода показаний на индикацию, при котором гашение незначащих нолей не нужно.
А именно, если в десятичном разряде единиц, осуществляется переход от 9 к 0, то этот разряд смещается на одно знакоместо вправо, а показание десятков выводятся в освободившееся (самое левое) знакоместо.
Если в десятичном разряде десятков осуществляется переход от 9 к 0, то вправо смещаются десятичные разряды единиц/десятков, а показание сотен выводятся в освободившееся (самое левое) знакоместо.

Органы управления:

- тумблер включения/выключения питания,
- тумблер включения/выключения подсветки графического модуля,
- кнопка "Меню",
- кнопка "+",
- кнопка "-",
- кнопка "Пуск",
Вариант компоновки (можно и иначе):

Функции кнопок.

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

Меню.

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

Основные режимы подменю основа (на выбор пользователя).

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

Подрежимы подменю основа (в любой "канальности" и на выбор пользователя).

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

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

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

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

1. Либо энергонезависимо сохранить (во Flash-памяти программ) опермассив/массивы данных "добытой", в подменю основа, "эпюрной портянки",
2. Либо не сохранять.

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

Оргудобства.

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

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

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

- "канальность" (1-канальный или 2-канальный, или 3-канальный режим работы),
- позиция горизонтальной развёртки,
- режим пуска (ручной или авто),
- режим развёртки (ручной или авто).

Если работа происходит в подменю флэш, то по факту осуществления Flash-записи, в любой из 14-ти сессий, энергонезависимо сохраняются:

- значение "пиконапруги",
- значение частоты.

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

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

Задержки прямого счёта и обратного отсчёта.

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

Погрешности отображения.

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


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

Основные характеристики программы.

"PC-масса": достаточно оптимально задействована почти вся память программ PIC18F252:
- непосредственно под текст программы, задействовано почти 10 килослов,
- под энергонезависимое Flash-запоминание данных 14-ти сессий, задействовано 6 килослов (12 Кбайт),
"Опермасса": задействована почти вся область оперпамяти PIC18F252.
Некоторые особенности:
- две ПП прерываний (высокоприоритетная и низкоприоритетная).
Высокоприоритетная ПП прерываний задействована под работу с прерываниями по входам INTx, (в том числе и работа с отложенными прерываниями).
Низкоприоритетная ПП прерываний задействована под работу с задержкой обратного отсчёта,
- задействуются все 3 канала косвенной адресации,
- где это только возможно, задействуется табличные чтение/запись, и используются операторы low и high,
- программное "провоцирование" ухода в высокоприоритетную ПП прерываний,
- модуль таймера TMR0 задействован под измерение частоты,
- модуль таймера TMR1 задействован под измерение задержки прямого счёта,
- модуль таймера TMR2 задействован под измерение задержки обратного отсчёта,
- 1-й канал модуля АЦП задействован под измерение "пиконапруги",
- модуль детектора пониженного напряжения LVD задействован под оповещение пользователя о понижении уровня Uпит. ниже 4,77 в.,
- пъезоизлучатель подключен не к свободному, а к задействованному выводу порта (совмещение функций),
- архивирование ("упаковка") опермассивов данных осуществляется по максимально простому и быстрому (в приложении к техзаданию и к техвозможностям используемого ПИКа) алгоритму,
- после осуществления автоматического разархивирования ("распаковки"), его результаты выводятся в дисплей графического модуля, с возможностью "покадровой" прокрутки вправо/влево и с возможностью осуществления энергонезависимого запоминания текущей сессии во Flash-памяти программ,
- энергонезависимое запоминание большого количества текущих настроек в EEPROM-памяти данных,
- энергонезависимое запоминание заархивированных опермассивов во Flash-памяти программ, с "тотальной" верификацией Flash-записанного и с возможностью дальнейшего Flash-чтения,
- двухсекторная система горизонтальной авторазвёртки,
- маркирование длины уровней,
- "древовидное" меню,
- наличие подсказок, пояснений, диалогов и "вопилок",
- и т.д. (см. инструкцию по эксплуатации).


7. Перспективы совершенствования устройства.

1. Все частотные (скоростные) "потолки" можно поднять посредством перехода на тот тип ПИКа, который работает с более высокой тактовой частотой.
Например, переход, с тактовой частоты 40 Мгц., на тактовую частоту 80 Мгц., соответствует примерно двукратному повышению частотных "потолков" всех "канальностей".
А именно (для "меандра", с Кзаполнения = 50% и 1-й позиции горизонтальной развёртки):
1-канальный режим работы: с 80 Кгц., до 160 Кгц.,
2-канальный режим работы: с 40 Кгц., до 80 Кгц.,
3-канальный режим работы: c 28 Кгц., до 56 Кгц.
Этому также может сильно способствовать система команд, составленная по максимально скоростному принципу, что, в комплексе, даст скоростной выигрыш более (в том числе и довольно-таки значительно) указанного выше.
Естественно, что в этом случае, необходимо скорректировать величины фиксированных задержек позиций горизонтальной развёртки, а также и многое другое.

2. Так как биты №6 всех "архивобайтов" не используются и "мудро" (условно) зарезервированы, то в случае наличия желания/возможностей, с минимальными трудозатратами, можно перейти на работу с более "широкоэкранным" графическим модулем (в дисплейной строке, не 128, а 256 точек), что, при прочих, равных условиях, соответствует двукратному уменьшению погрешностей визуального отображения "эпюрных портянок".

3. Объёмы выборок опермассивов данных можно значительно увеличить, если перейти, с 3-портового, на 4-портовый ПИК, плюс, перейти, с графического модуля, работающего по параллельной шине данных, на графический модуль, работающий по I2C-шине данных, и использовать внешнюю оперпамять.
В этом случае, двоичная разрядность внешней оперпамяти достигает 8 + 6 = 14 разрядов, что соответствует запоминанию 16384-х перепадов уровней.
Это во много раз превышает то, о чём заявлено в "материнской" разработке.
Соответственно, если это нужно обеспечить, то в части касающейся Flash-запоминания данных сессий таких сильно увеличившихся опермассивов данных, нужно использовать ПИК с бОльшим объёмом Flash-памяти программ (или PC. Это кому как нравится. Одно с другим связано), либо соответствующим образом уменьшить количество сессий, либо отказаться от Flash-записи/чтения (зависит от конкретики).
При этом, вовсе не исключён вполне симпатичный и очень оптимистический вариант (в том числе и компромиссный).

4. Если использован тот вариант принципиальной схемы, который позволяет осуществить внутрисхемное программирование, то можно, в любой момент, считать содержимое памяти программ (в виде HEX-файла).
Если знать адреса "Flash-секторов" (участники "Абонемента…" знают их совершенно точно), то имеется возможность, с помощью специальной виндопрограммы, "HEX-расшифровать" содержимое Flash-записанных массивов данных и вывести эти данные, в виде "состыкованных" друг с другом "кусков", в монитор компьютера, что будет "офигеннейшим", графическим сервисом.
Мало того, можно даже "виндосостыковать" сессийные группы, что вообще вызовет технический и прочий восторг (лично у меня. За других не говорю). Но это пока в мечтах.

5. Может быть и ещё что-то. Короче, "базис" я добросовестно (по-русски, то есть, от души) "сваял". Умещается на ладони. А заодно и поэтапно "расписал" весь процесс конструирования этой "железяки".
Дерзайте.


Назад

Hosted by uCoz