Что-то тихо тут. Попробую накропать небольшое сочинение. С картинками.

Что-то темновато. Зима близится, наверное.

Это был вид спереди, а теперь сзади.

Ну, вот. Часики. На ВЛИ. В качестве управляющего устройства CPLD CoolrunnerII xc2c64a. Индикация статическая - можно разглядеть толпу транзисторов. Собственно, как родилась идея этих часов? Очень просто. Попался мне в руки сетевой адаптер с несколько странным напряжением - 22 вольта. И тут подумалось, что это готовое анодное напряжение для ВЛИ. С накалом не мудрствовал лукаво - применил обычный mc34063 понижающий 22в до 1.45. Так как отрицательная шина прямо привязана к накалу о динамике речь не шла. Логику привязал к шине +22в через диод (по рекомендации O-LED), чтобы через ключевые транзисторы не шло потребление при питании от резервного источника. Ну питание логики идёт через линейный стабилизатор LM337, а затем из этого напряжения MCP1700 делает 1,8в для питания ядра CPLD.
Но изюминка этой конструкции не видна на схеме. Она лежит внутри CPLD. Собственно, мне удалось часики с семисегментыми индикаторами упихнуть в 64 макроячейки. Для тех, кто не знает нюансов, скажу просто: одна макроячейка - один триггер. Т.е., чтобы поделить частоту 32768Гц до 1Гц необходим 15-тиразрядный двоичный счетчик, следовательно, это отъест 15 макроячеек. Еще один нюанс состоит в том, что наружу сигнал может выходить также только с макроячейки. Таким образом сделать счетчик до 10 потребует 4 макроячейки, а преобразовать двоичный код в семисегментный и вывести наружу - еще 7. Конечно, макроячейки еще поедаются на промежуточные сигналы, если выражение подаваемое на макроячейку слишком сложное. Но в любом случае, чтобы сделать часы на семисегментниках нужно:
- поделить частоту 32768 до 1Гц - 15
- Счетчик секунд (до 60) - 6
- Счетчик единиц минут - 4
- Счетчик десятков минут - 3
- Счетчик единиц часов - 4
- Счетчик десятков часов - 2
- 4 дешифратора из двоичного в семисегментный - 7*4=28
- 2 Модуля подавления дребезга кнопок установки времени с автоповтором 2*5=10
Итого: 72. Конечно, можно немного сэкономить - для десятков минут и часов делать не полный дешифратор (для цифр от 0 до 5 сегменты A и D работают одинаково, а для отображения цифр 1, 2 и ничего - еще меньше). Но всё-равно этого недостаточно, чтобы упихнуть схему в 64 макроячейки.
Но тем не менее, несколько лет назад мне удалось сделать часы на ГРИ с использованием этой CPLD. Выход в тот раз нашёлся в том, что счетчики были построены таким образом, что "дешифрация" не была нужна. Т.е. счетчик представлял собой сдвиговый регистр, по которому бежала одна лог.1 одновременно зажигая нужную цифру в газоразрядном индикаторе. Но как это может мне помочь в решении этой проблемы? Но тут на глаза мне попалась конкурсная статья Миротворца "Синтез генератора числовой последовательности". И подумалось, а почему бы и, вправду, не сделать счетчик считающий сразу в семисегментном коде?
Конечно, не все "разряды" семисегментного кода совершенно необходимы. Когда-то была тема, там задавался вопрос как из семисегментного кода получить двоичный и прозвучала информация, что однозначно можно определить по 5 сегментам. Т.е. Из 7 сегментов два можно вычислить из состояния остальных пяти. Но не было написано - каких именно. Поэтому пришлось провести некоторую исследовательскую работу и выяснить, какие разряды войдут в счетчик, а какие в "дешифратор". Кстати, для цифр от 0 до 5 достаточно 3-х разрядов. Конечно, некоторое время пришлось повозиться уговаривая САПР сделать то, что мне нужно. САПР увидев таблицу переходов из состояния в состояние радостно заявлял, что узрел конечный автомат и применял соотвествующий шаблон, состоящий из счетчика необходимой разрядности (4) и регистров состояния (10) ну и выходных сигналов (7). Короче, даже бинарный счетчик с дешифратором получались компактнее. Поэтому, пришлось самому ручками нарисовать логику переходов и в таком виде скормить САПРу.
Таким образом получились часики с функционалом соответствующим моим первым часам на ГРИ с этой CPLD - счет времени в 24-х часовом формате без ведущего нуля в десятках часов и с триггером запуска (по включению питания часы стоят до тех пор пока не будет нажата и отпущена кнопка сброс секунд).
Плату поленился делать сам из тех соображений, что для того корпуса который я задумал для этих часов, получалось, что разъём питания придётся устанавливать со стороны печатных проводников. А это значит, что нужна металлизация. Поэтому заказал изготовление плат. А чтобы платы не пропадали зря - на этой же плате развёл посадочные места и для более вместительной CPLD xc2c128 или даже xc2c256. Во всяком случае, у меня уже готов код на VHDL для часов с будильником, который должен влезть в 128 макроячеек. Поэтому там еще разведено место для пьезопищалки. Ну и еще разведены два варианта тактовых генераторов - простой кварцевый и ds32khz. Так что следующие часы будут немного развесистее (хотя выглядеть будут точно так же).
p.s. Надо было сразу ноги у ламп обкусить как запаял. А то тут коротнуло и ИВ-1 пошла в мусорку вместе с одним транзистором. Еще оказалось, резервное потребление слишком большое - надо искать где просачивается. Подозрение на детектор основного питания - надо будет с ним разбираться.
Такое ощущение, что "многа букафф" написал и никто осилить не может...