![Hello Habr](https://habrastorage.org/getpro/habr/post_images/0d1/b02/1d8/0d1b021d80e90b662d5465bbdae06cd5.jpg)
В Интернете нашлись примеры созданных на компьютере звуковых файлов, которые надо проигрывать, подключив входы осциллографа к правому и левому каналам аудиокарточки. Некоторые из них даже не страшно слушать человеческому уху. Мне же захотелось управлять лучом осциллографа прямо из программы, в реальном времени, так что я выбрал микроконтроллер. У Arduino DUE есть прямо на борту два 12-битных цифро-аналоговых-преобразователя, а тактовая частота 84 MHz и 96 KB памяти снижают требования к оптимизации программ. При написании кода можно поставить читаемость кода впереди скорости, при этом контроллер всё равно справляется с созданием довольно сложных изображений. Никаких шилдов или иной внешней электроники не требуется, осциллограф можно подключать прямо к выходам ардуинки:
![image](https://habrastorage.org/getpro/habr/post_images/047/81d/778/04781d778f41ea036b9bc6f0c59c1e53.jpg)
Была создана простейшая графическая библиотека с функциями для рисования точек и линий, плюс возможностью задать скорость рисования. Не думаю, что есть смысл пересказывать алгоритм Брезенхайма, я его практически без изменений портировал из Википедии. Все исходные тексты лежат в свободном доступе на GitHub-е. Программа состоит из десятка классов наследников GraphBase, каждый из них рисует на экране простой сюжетик. Например, движущийся текст, ёлочку, или праздничный салют. Осциллограф был поставлен ёлку в виде электронной открытки, так что мотивы в основном новогодние.
Лучше один раз увидеть, чем сто раз прочитать, так что сразу перехожу к видео:
Результаты экспериментов и выводы:
- Я пробовал подключить к микроконтроллеру и современный цифровой осциллограф, но картинка на аналоговом намного приятней. Плавно угасающее послесвечение люминофора создаёт «тёплую ламповую» атмосферу.
- Arduino DUE в доли секунды справляется с расчётом тригонометрических функций, скорости хватило для вычисления координат «цветка» в реальном времени. Для фигур Лиссажу нужен больший объём вычислений, так что микроконтроллеру приходится сперва рассчитывать таблицу синусов и использовать целочисленную арифметику.
- VisualStudio с бесплатным плагином Visualmicro намного удобней родной IDE Arduino.
- Рисовать на осциллографе довольно просто. Отладка кода на Arduino может быть сложной, но в данном случае почти не понадобилась.
- ЦАП-ы имеют конечное быстродействие, поэтому когда при переходе от одной линии к другой переключается сначала напряжение на выходе Х, а потом на выходе Y, на экране появляются артефакты. Заметны в виде отдельных точек, например на кадрах с плавающей надписью „2014“.
В общем, по-моему, получилось весьма симпатично. Следующий логический шаг – заменить осциллограф парой зеркал на гальванометрах, и рисовать на стене лазерным лучом.