Например TDA7294

РадиоКот > Чердак

Смотрим ТВ по... осциллографу!

Автор: VladimirVladimirovitch, denmodjo@yandex.ru
Опубликовано 20.02.2017.
Создано при помощи КотоРед.

    В процессе изучения сигнала PAL у меня возникло желание его визуализировать буквальным образом - в виде чредующихся изображений.
Инструментарий под это вполне доступен - рынок предлагает большое количество недорогих цифровых осциллографов с достаточной скоростью АЦП, чтобы обработать сигнал PAL.
Это могут быть осциллографы Hantek и Instrustar. У меня был под рукой Instrustar, в виде его начальной модели 205A.
Но для визуализации сигнала под ключ в виде "картинки ТВ" одного осциллографа будет, как нетрудно догадаться, не достаточно.
Нам потребуется программа-"визуализатор", берущая данные от осциллографа и преобразующая их в "живые картинки" на мониторе.
Помимо наглядности, данный опыт нам пригодится также для решения задач при обработки данных с осциллографа собственноручно написанными программами.
Надеюсь, что эта статья поможет и облегчит разработку программ, "тащущих" данные напрямую с осциллографа, а также снизит порог вхождения в эту интересную область.
Итак, в качестве примера я взял язык программирования Object Pascal и среду Borland Delphi. API, идущее в комплекте с ПО под Instrustar 205A написано на C++, поэтому заголовочные файлы и объявления функций придется переписать на Pascal. Вот некоторые примеры:
function InitDll : integer; stdcall; external 'VDSO.dll' name '_InitDll@0';
function FinishDll : integer; stdcall; external 'VDSO.dll' name '_FinishDll@0';
function GetOscSupportSampleNum : integer; stdcall; external 'VDSO.dll' name '_GetOscSupportSampleNum@0';
Далее напишем корневой транспортный класс для работы с данными: TOSCReader
От него создадим наследников, для работы непосредственно с "железным" API в реальном времени - TOSCReaderDevice и с файлами - TOSCReaderFile (может пригодится для оффлайн обработок).

Рассмотрим TOSCReaderDevice. Как видно - класс получился достачно простой в использовании: создаем экземпляр Create, задаем ему SampleRate и aChannelNum , и получаем данные в виде PDoubleArray (=^array [0..0] of Double), задав обработчик OnReadData.

После этого уже возможно использовать полученные данные и сделать следующий шаг - отобразить их на экран.
Для это создадим класс-обработчик оцифрованных уровней напряжений PAL - TOSCTV.
Он имеет property OSCReader : TOSCReader read fOSCReader;
Данные от которого он и будет обрабатывать: DSO API->TOSCReader(TOSCReaderDevice)->TOSCTV
Задача класса TOSCTV - найти горизонтальные и вертикальные синхроипульсы и разделять по ним данные, выделять уровни яркости и преобразовывать это в массив пикселей картинки.

Вот пример использования данного класса:
// создаем экземпляр класса-транспорта данных
OSCReaderDevice := TOSCReaderDevice.Create(0);
// создаем экземпляр класса-"преобразователя" в картинки
OSCTV := TOSCTV.Create(OSCReaderDevice);
// задаем "получателей" изображений и инициируем Capture данных:
OSCTV.OnNewFrame:=OnNewFrame;
OSCTV.OnNewRow:=OnNewRow;
OSCTV.OSCReader.StartCapture;

Подключаем осцилограф:

Смотрим на осцилограмму:

Получаем итог:

У меня все. Спасибо за внимание! :-)
P.S. Все исходники и пример работы можно найти по адресу: https://github.com/vvkuzmin1973/DSO-TV



Все вопросы в Форум.


ID: 2491