Моє перше знайомство з осциллографом відбулося в шкільному радіокружці, тоді ж я дізнався про режим X-Y, при якому відключається розгортка і променем управляється безпосередньо напругами, що подаються на входи X і Y. Знову ця тема спливла через кілька років, в університеті, коли на лабораторних роботах за допомогою фігур Лісажу ми вчилися визначати кратність частот сигналів. Потім пішов працювати в програмісти, і наступну пару десятиліть до лучика, який бігав по екрану, я не повертався, поки в кінці минулого року мені не подзвонили сусіди. Наводячи порядок в підвалі, вони натрапили на стару коробку з електронікою, яку тут же і подарували мені, в обмін на зобов'язання самому все забрати. Так мені дістався старий аналоговий осциллограф, мінімум 25-річної давності. На подив, після заміни старого мережевого кабелю він відразу ж заробив, і я вирішив застосувати свої програмістські навички, щоб намалювати що-небудь на екрані.
В Інтернеті знайшлися приклади створених на комп'ютері звукових файлів, які треба програвати, підключивши входи осциллографу до правого і лівого каналів аудіокарточки. Деякі з них навіть не страшно слухати людського вуха. Мені ж захотілося керувати променем осциллографу прямо з програми, в реальному часі, так що я вибрав мікроконтролер. У Arduino DUE є прямо на борту два 12-бітних цифро-аналогових-перетворювача, а тактова частота 84 MHz і 96 KB пам'яті знижують вимоги до оптимізації програм. При написанні коду можна поставити читаність коду попереду швидкості, при цьому контролер все одно справляється зі створенням досить складних зображень. Ніяких шилдів або іншої зовнішньої електроніки не потрібно, осциллограф можна підключати прямо до виходів ардуїнки:
Була створена найпростіша графічна бібліотека з функціями для малювання точок і ліній, плюс можливістю задати швидкість малювання. Не думаю, що є сенс переказувати алгоритм Брезенхайма, я його практично без змін портував з Вікіпедії. Всі вихідні тексти лежать у вільному доступі на GitHub-е. Програма складається з десятка класів спадкоємців GraphBase, кожен з них малює на екрані простий сюжетик. Наприклад, текст, що рухається, ялинку, або святковий салют. Осциллограф був поставлений ялинку у вигляді електронної листівки, так що мотиви в основному новорічні.
Краще один раз побачити, ніж сто разів прочитати, так що відразу переходжу до відео:
Результати експериментів і висновки:
- Я пробував підключити до мікроконтролера і сучасний цифровий осциллограф, але картинка на аналоговому набагато приємніша. Плавно згасаюче післясвічення люмінофора створює «теплу лампову» атмосферу.
- Arduino DUE в долі секунди справляється з розрахунком тригонометричних функцій, швидкості вистачило для обчислення координат «квітки» в реальному часі. Для фігур Лісажу потрібен більший обсяг обчислень, так що мікроконтролеру доводиться спершу розраховувати таблицю синусів і використовувати цілочисельну арифметику.
- VisualStudio з безкоштовним плагіном Visualmicro набагато зручніше рідної IDE Arduino.
- Малювати на осциллографі досить просто. Зневаджування коду на Arduino може бути складним, але в даному випадку майже не знадобилося.
- ЦАП-и мають кінцеву швидкодію, тому коли при переході від однієї лінії до іншої перемикається спочатку напруга на виході Х, а потім на виході Y, на екрані з'являються артефакти. Помітні у вигляді окремих точок, наприклад на кадрах з плаваючим написом «2014».
Загалом, по-моєму, вийшло досить симпатично. Наступний логічний крок - замінити осциллограф парою дзеркал на гальванометрах, і малювати на стіні лазерним променем.