РадиоКот >Схемы >Цифровые устройства >Игрушки >

Теги статьи:

Экранная заставка... для осциллографа

Автор: Gudd-Head
Опубликовано 21.12.2011
Создано при помощи КотоРед.

…или тем, кому не хватает белой гадости.

Осень этой зимой выдалась на славу (по крайней мере, на европейской территории самой большой страны). Ну да ладно, ближе к делу.

Итак, в процессе создания очередного гениального проекта у меня оказался собран 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


Файлы:
Архив с прошивкой и исходником


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