![]() |
![]() |
|||||||||||||||
Экранная заставка... для осциллографа
Автор: Gudd-Head …или тем, кому не хватает белой гадости. Осень этой зимой выдалась на славу (по крайней мере, на европейской территории самой большой страны). Ну да ладно, ближе к делу. Итак, в процессе создания очередного гениального проекта у меня оказался собран R-2R [гуглить самостоятельно] цифро-аналоговый преобразователь (ЦАП) в паре с микроКОнТроллером (МК). А на дворе уже канун Нового Года, и потому я решил разродиться небольшой такой новогодней статейкой — снегопад на экране осциллографа. Схема устройства проста до безобразия:
Резистивная матрица R-2R, подключенная к порту D МК ATmega8 [1] и один вывод МК для управления синхронизацией. Кстати, интересно, о чём думали проектировщики «восьмёрки» (МК, а не Жигулей… хотя и к тем, и к другим есть вопросы), когда разводили специализированные ноги по портам. Например, если вам надо одновременно использовать кварц и внешнее прерывание и/или USART/I²C, то вы лишаетесь полноценных восьмибитных портов! Ну да ладно… это так, наболело. На осциллограф подаётся сигнал с R-2R матрицы, а первый вывод порта С подключается к его входу синхронизации. Развёртка осциллографа устанавливается 1 мс/дел по горизонтали, по вертикали — 0,5…1 В/дел. Синхронизация — внешняя. Ну а теперь о прошивке. МК (с заводскими фьюзами) по таймеру даёт импульс синхронизации, и немного погодя начинает прорисовывать снежинки на экране осциллографа. Снежинка представляет собой короткую линию, которая рисуется в одном из 256 столбцов и одной из 256 строк, на которые условно разбит экран осциллографа. Ширина столбца примерно 30 мкс, высота строки — один младший значащий разряд (МЗР, LSB по-буржуйски) ЦАПа (что при питании 5 В составляет примерно 20 мВ). Номер строки, в которой будет прорисована снежинка, содержится в ОЗУ МК, причём младший байт адреса ОЗУ является номером столбца. Основная программа состоит из цикла прорисовки снежинок, цикла опускания снежинок (при необходимости) и процедуры рождения новой снежинки (также при необходимости). В цикле прорисовки МК загружает из ОЗУ (с пост-инкрементом) вертикальную координату снежинки и выдаёт её на ЦАП. Координаты занимают в ОЗУ адреса с $100 по $1FF. Цикл опускания заключается в декременте координаты: загрузка из ОЗУ, тест на ноль (чтобы исключить переход $00 —> $FF), декремент и сохранение обратно в ОЗУ (с пост-инкрементом). Пожалуй, самое интересное здесь — процедура рождения новой снежинки. Генератор псевдослучайной последовательности (ПСП) на линейно-рекуррентном регистре (ЛРР) выдаёт номер условного столбца — младший байт адреса ОЗУ — в который сохраняется значение $FF, т.е. снежинка поднимается наверх. ЛРР представляет собой закольцованный регистр с обратными связями через «исключающее ИЛИ»: Для того чтобы получить ПСП максимальной длины (М-последовательность), полином обратных связей должен быть простым (т.е. не разлагаться на множители). В таком случае длина последовательности будет равна 2^N – 1 = 255 для восьмибитного ЛРР. Полином изображённого и используемого в программе ЛРР — Х^8 + Х^7 +Х^6 + Х + 1. Всего для восьмибитного регистра существует 12 схем с четырьмя отводами и 4 схемы с шестью отводами обратной связи, дающие последовательность максимальной длины [2]. Для того чтобы ЛРР работал, в него надо записать любое число, кроме нуля. Сами понимаете, как ноль с нулём ни складывай, всё равно получишь ноль. Так что снежинка в столбце с адресом ОЗУ $100 будет «лежать на земле», т.к. ЛРР никогда не выдаст $00 и фактически снежинок будет 255. Кстати, скорость падения и количество одновременно находящихся снежинок задаётся в программе значениями в двух регистрах, которые при желании можно менять. Но при этом не стоит задавать скорость рождения больше скорости падения, т.к. снежинки не будут долетать до «земли». Печатку я давать не буду, т.к. во-первых, схема элементарная, а во-вторых, как я уже говорил эта плата для другого проекта. Вместо этого покажу фотку платы (не обращайте внимание на кошачью шерсть, просто плата давно лежит без дела):
Как видите, помимо ЦАПа все 8 бит порта Д МК ещё идут на разъём. Вот как это выглядит на экране С1-68:
Ну и напоследок — небольшое видео работы: https://www.youtube.com/watch?v=IA1IYgN1L6s&feature=youtu.be (сорри за качество).
Ссылки: 1. Даташит на ATmega8 — https://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf 2. Страничка про ЛРР — https://www.newwaveinstruments.com/resources/articles/m_sequence_linear_feedback_shift_register_lfsr.htm
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |